При изучении разработки на платформе 1С и получении учебных или практических задач часто возникает вопрос: что именно понимается под регламентным документом? Должен ли он формироваться автоматически фоновым процессом, создаваться пользователем вручную по кнопке или работать в связке с регламентным заданием? Рассмотрим подробно концепцию регламентных документов в 1С, архитектурные варианты их реализации и практические нюансы программирования.
Под регламентным документом в платформе 1С обычно понимается документ, который формируется с заданной периодичностью (например, один раз в месяц или в конце учетного периода) и подготавливает учетные движения на основе данных, уже содержащихся в информационной базе.
В отличие от первичных документов (таких как «Поступление товаров» или «Реализация товаров и услуг»), которые заполняются на основании бумажных носителей или внешних файлов, регламентный документ не требует от пользователя ручного ввода основной информации. Все данные для заполнения табличных частей и формирования движений запрашиваются из регистров накопления, сведений или бухгалтерии за определенный период.
Примерами регламентных документов в типовых конфигурациях 1С («1С:Бухгалтерия», «1С:ERP») являются документы вида «Закрытие месяца», «Начисление амортизации ОС», «Списание расходов будущих периодов» или «Выбытие оборудования».
В зависимости от требований технического задания и бизнес-процессов компании, регламентный документ может быть реализован несколькими способами:
Критически важным требованием к регламентным документам является обеспечение наличия строго одного документа за определенный период (например, один документ выбытия оборудования за месяц). Разберем, как реализовать такую проверку.
Проверку можно выполнять в обработчике события ПередЗаписью объекта документа с помощью запроса к базе данных:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ВыбытиеОборудования.Ссылка КАК Ссылка
|ИЗ
| Документ.ВыбытиеОборудования КАК ВыбытиеОборудования
|ГДЕ
| ВыбытиеОборудования.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И ВыбытиеОборудования.Ссылка <> &ТекущийДокумент";
Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ЭтотОбъект.Дата));
Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ЭтотОбъект.Дата));
Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Отказ = Истина;
ВызватьИсключение "За текущий месяц регламентный документ выбытия оборудования уже создан!";
КонецЕсли;
При разработке регламентных документов и автоматических процедур списания необходимо учитывать следующие аспекты работы платформы 1С:
РежимПроведенияДокумента.Неоперативный).УстановитьПривилегированныйРежим(Истина), чтобы избежать ошибок недостатка прав.ПланыОбмена.ГлавныйУзел() = Неопределено.