Back to top

Работа с документами

Опубликовано e-1c@mail.ru - вс, 08/21/2016 - 16:41

Документ — одно из основных понятий системы 1С:Предприятие. При по­мощи документов организуется ввод в систему информации о совершаемых хозяйственных операциях, а также ее просмотр и, если необходимо, корректи­ровка. В большинстве своем документы, которые создаются в процессе настройки конфигурации задачи, являются электронными аналогами стандартных бумаж­ных документов, являющихся основаниями для тех или иных учетных дейст­вий или расчетов. Структура каждого конкретного вида документа определяется при его соз­дании в конфигураторе. У любого вида документа существует два обязательных реквизита, которые создаются автоматически — дата и номер документа. Дру­гие реквизиты документа определяются в конфигураторе конкретно для каждо­го создаваемого вида документа. В документах выделяются две основные структурные части: шапка доку­мента и многострочная табличная часть, поэтому реквизиты документа можно подразделить на «Реквизиты шапки» и «Реквизиты табличной части». Как правило, в шапке содержатся реквизиты, которые являются общими для всего документа. Реквизиты шапки принадлежат всему документу в целом и принимают только одно значение. Многострочная (табличная) часть документа представляет собой список од­нотипных строк. Реквизиты табличной части принадлежат строке документа, т. е. каждая строка содержит свои собственные значения этих реквизитов.

Создание и удаление документа

Создание нового документа представлено в двух вариантах - непосредственное удаление и пометка на удаление:

&НаКлиенте
Процедура СоздатьНовыйДокумент(Команда)
 
        // Вставить содержимое обработчика.
        Если СоздатьНовыйДокументНаСервере() = 0 Тогда
                Сообщить("Не удалось создать новый документ");
        КонецЕсли;
 
КонецПроцедуры
 
&НаСервере
Функция СоздатьНовыйДокументНаСервере()
 
        Перем НоваяРасходнаяНакладная;
        Перем СтрокаТЧ;
 
        НоваяРасходнаяНакладная=ДокРасходнаяНакладная.СоздатьДокумент();
 
        //Заполняем реквизиты шапки
        НоваяРасходнаяНакладная.Дата=  ТекущаяДата();
        НоваяРасходнаяНакладная.Фирма =Справочники.Фирмы.ОсновнаяФирма;
        НоваяРасходнаяНакладная.Контрагент=Справочники.Контрагенты.НайтиПоКоду("000000001");
        НоваяРасходнаяНакладная.Склад=Справочники.Склады.ОсновнойСклад;
 
        //Заполняем табличную часть
        СтрокаТЧ=НоваяРасходнаяНакладная.ТЧТовары.Добавить();
        СтрокаТЧ.Товар=Справочники.Номенклатура.НайтиПоКоду("000000002");
        СтрокаТЧ.Цена=СтрокаТЧ.Товар.РозничнаяЦена;
        СтрокаТЧ.Количество= 2;
        СтрокаТЧ.Сумма=СтрокаТЧ.Цена*СтрокаТЧ.Количество;
 
        Попытка
                НоваяРасходнаяНакладная.Записать();
                Возврат 1;
        Исключение
                Возврат 0;
        КонецПопытки;
 
КонецФункции

Удаление документа:
 
&НаКлиенте
Процедура УдалитьДокумент(Команда)
 
        // Вставить содержимое обработчика.
        УдалитьДокументНаСервере(0);
 
КонецПроцедуры
 
&НаСервере
Процедура УдалитьДокументНаСервере(ПометкаУдаления)
 
        // Вставить содержимое обработчика.
        Перем УдаляемыйДокумент;
 
        УдаляемыйДокумент =Документы.РасходнаяНакладная.НайтиПоНомеру("000000004");
        Если ПометкаУдаления = 1 Тогда
                УдаляемыйДокумент.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
        Иначе
                УдаляемыйДокумент.ПолучитьОбъект().Удалить();
        КонецЕсли;
 
КонецПроцедуры

Перебор табличной части документа

&НаКлиенте
Процедура ПеребратьТабличнуюЧасть()
 
        Для Каждого СтрокаТЧ ИЗ Объект.ТЧТовары Цикл
                Сообщить(СтрокаТЧ.Номенклатура);
        КонецЦикла;
 
КонецПроцедуры

Поиск в табличной части документ

Для поиска необходимого значения воспользуемся функцией НайтиСтроки(). Ее можно использовать не только в табличной части документа, но и в таблице значений:

&НаСервере
ПроцедураНайтиТовар(СправочникНоменклатураСсылка)
 
        ПеремОтбор,НайденноеЗначение,Сч;
 
        Отбор=НовыйСтруктура();
        Отбор.Вставить("Номенклатура", СправочникНоменклатураСсылка);
        НайденноеЗначение=Объект["ТЧНоменклатура"].НайтиСтроки(Отбор);
 
 
        ЕслиНайденноеЗначение.Количество() > 0 Тогда
 
                Сч= 1;
                Пока НайденноеЗначение.Количество() >=СчЦикл 
                        Сообщить(НайденноеЗначение[0].Наименование);
                        Сч=Сч+ 1;
                КонецЦикла;
 
        КонецЕсли;
 
КонецПроцедуры