1С Режим Конфигуратор

       

Проведение документа


Оператор Провести() в приведенном выше примере выполнит проведение документа. При проведении будет вызвана предопределенная процедура ОбработкаПроведения(). Вторым реквизитом передается в обработку проведения значение ("Программно"), по которому процедура ОбработкаПроведения() узнает о программном выполнении проведения. Это может быть простая строка или число, её задача - только обозначить факт программного проведения.

Если вы работаете с уже существующим документом, то метод Провести() перепроведет документ. А с помощью метода Проведен() можно узнать, проведен ли какой-либо документ:

Если Док.Проведен() > 0 Тогда

Сообщить( "Документ № " + Док.НомерДок + " проведен");

…………… // Какие-то действия, которые нужно сделать с проведенным документом

КонецЕсли;

О создании операций и проводок при проведении документов читай раздел Операции и проводки главы Бухгалтерия.

Транзакции

При создании множества документов или для ускорения работы можно заключить цикл в транзакцию. При этом реальная запись документов произойдет только по команде ЗафиксироватьТранзакцию(). На время транзакции блокируется для других пользователей запись и проведение документов.

СписаниеМатериалов = СоздатьОбъект("Документ.ТребованиеНакладаная");

НачатьТранзакцию();

Для Ном = 1 По 100 Цикл

СписаниеМатериалов.Новый();

…………………

// Заполнение реквизитов

СписаниеМатериалов.Записать();

СписаниеМатериалов.Провести();

КонецЦикла;

ЗафиксироватьТранзакцию();

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

Установка периодического реквизита справочника при проведении документа

Простым примером такого действия является установка нового оклада сотруднику в справочнике Сотрудники при проведении, например, штатного расписания.

Процедура ОбработкаПроведения()

УстановитьРеквизитСправочника (Сотрудник, "Оклад", НовыйОклад, ДатаДок);

КонецПроцедуры

Здесь Сотрудник - значение реквизита документа типа "Справочник", через него в справочнике позиционируется нужный элемент, а "Оклад" - периодический реквизит соответствующего элемента. Этот оператор можно использовать только в предопределенной процедуре ОбработкаПроведения(). Теперь при просмотре истории периодического реквизита вы увидите кроме самого значения, ещё и дату установки (соответствует дате документа), и документ, который установил данное значение.



Содержание раздела