Как проводятся документы в типовых конфигурациях от 1С: дополнение
Вот и до меня дошел обновленный механизм проведения документов. С прошлой статьи механизм сильно изменился, и решено было кратко описать нововведения и изменения по сравнению с тем, что было раньше. А также разобрать создание и добавления в УМ (учетный механизм) регистра накопления и неподчиненного регистратору регистра сведений. Поэтому в этой статье могут быть опущены какие-то ключевые моменты.
- Описание
- Подробнее
Описание
Вот и до меня дошел обновленный механизм проведения документов. С прошлой статьи механизм сильно изменился, и решено было кратко описать нововведения и изменения по сравнению с тем, что было раньше. А также разобрать создание и добавления в УМ (учетный механизм) регистра накопления и неподчиненного регистратору регистра сведений. Поэтому в этой статье могут быть опущены какие-то ключевые моменты. Механизм был разобран на версии ERP 2.5.9. Но думаю, что на других современных конфигурациях он такой же.
Ниже сначала будут описаны нудные моменты, которые были мной отмечены как новые отличия, и если хотите, можете сразу перейти к практике доработки в пункт 3.
1. Основные сведения о новом механизме проведения документов.
Был разобран новый механизм проведения. Выявлены следующие отличия:
Теперь основные алгоритмы механизма вынесены в общий модуль ПроведениеДокументов.
В событии ПередЗаписью() вызывается процедура: ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);
Которая инициализирует свойства, необходимые для проведения документа.
В событии ПриЗаписи() вызывается процедура: ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
Которая формирует в обработчике документа ПриЗаписи() движения по независимым регистрам, определенных в учетных документах.
В событии ОбработкаПроведения() вызывается процедура:
ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
Которая формирует движения по регистрам, определенных в учетных документах.
В механизме проведения участвуют учетные механизмы конфигурации, которые описаны в функции ПроведениеДокументов. УчетныеМеханизмыКонфигурации(). Каждому механизму соответствует свое имя модуля менеджера или общего модуля, затем в модуле механизма определяются параметры механизма:

В т.ч. подчиненные (движимые регистры), по которым документ делает движения.
Дополнительные параметры инициализации, тексты запроса и инициализация данных документа теперь вынесены в функцию ДанныеДокументаДляПроведения() менеджера документа, которая возвращает таблицы для движений, необходимые для проведения документа по регистрам учетных механизмов.
Перед записью движений если есть производные движения учетный механизм может вызывать процедуру ПередЗаписьюДвиженийДокумента() из модуля учетного механизма.
После записи движений если есть производные движения учетный механизм может вызывать процедуру ПослеЗаписиДвиженийДокумента() из модуля учетного механизма.
Теперь в процедуре ПроверитьДатуЗапретаПоТаблицеИзменений() общего модуля после записи движений в ПровестиДокумент() выполняется дополнительная проверка измененных движений по дате запрета. Структура текстов запросов контроля по регистрам формируется модуле учетного механизма в функции ТекстыЗапросовКонтрольДатыЗапретаПоТаблицеИзменений(), по каждому регистру в модуле менеджера регистра в функции ТекстЗапросаКонтрольДатыЗапрета() формируются исходные запросы.
Далее выполняется контроль результатов проведения в процедуре ВыполнитьКонтрольРезультатовПроведения(). В рамках контроля вызываются процедуры учетного механизма ИнициализироватьДанныеКонтроляИзменений(), которая формирует тексты запросов для контроля изменений записанных движений регистров. Далее вызывается процедура СообщитьОРезультатахКонтроляИзменений(), которая выводит сообщения пользователю при наличии ошибок контроля изменений записанных движений регистров.
2. Важные моменты, которые стоит учитывать в новом механизме.
Важные моменты, которые стоит учитывать в новом механизме:
- Регистры выносим в учетные механизмы по областям использования в документах (Закупки, Продажи, Взаиморасчеты и т.д.). Например пример_Закупки будет использоваться в документах закупки и содержать в себе регистры, используемые в этих документах. Определение движимых регистров не обязательно означает, что документ должен делать движения по этим регистрам.
- Если в движимых регистрах документа есть распределение движений по периоду (к примеру, списание ОС), то при доработке требуется учесть в механизме контроля дат изменений (сам метод ТекстыЗапросовКонтрольДатыЗапретаПоТаблицеИзменений() обязательно должен быть определен в модуле учетного механизма).
- Если необходимо выполнить отложенные движения по регистру, то добавляем через параметры учетного механизма в массив КонтрольныеРегистрыЗаданий.
3. Добавление нового документа пример_ТестовыйДокумент и регистра накопления пример_ТестовыйРегистр.
Добавим документ пример_ТестовыйДокумент, регистр накопления пример_ТестовыйРегистр. Сделаем у регистра регистратором новый документ.
3.1. Модуль объекта документа пример_ТестовыйДокумент
В модуле объекта в обработчиках ПередЗаписью, ПриЗаписи, ОбработкаПроведения, ОбработкаУдаленияПроведения добавим вызовы процедур из общего модуля ПроведениеДокументов:

