Как добавить процедуру ОбработкаПроведения в документ 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке конфигураций в платформе 1С:Предприятие часто возникает задача проведения документа с формированием движений по регистрам сведений, накопления или бухгалтерии. Если документ изначально создавался без возможности проведения, попытка вызвать процедуру ОбработкаПроведения может вызвать затруднения. Разберем по шагам, какие настройки конфигурации необходимо выполнить и как правильно сформировать код проведения.

Базовая настройка документа и регистра сведений

Прежде чем добавлять сам программный код в модуль объекта, проанализируем настройки метаданных. Чтобы документ мог формировать движения и вызывать обработчик проведения, необходимо выполнить три обязательных шага:

  1. Укажем документ в качестве регистратора: откроем дерево конфигурации, найдем нужный регистр сведений и перейдем на вкладку Регистраторы. Установим флажок напротив нашего документа.
  2. Разрешим проведение документа: откроем окно редактирования документа и на вкладке Основные или Движения проверим свойство Проведение. В нем должно быть установлено значение Разрешить.
  3. Перейдем в модуль объекта: в окне редактирования документа на вкладке Прочее нажмем кнопку Модуль объекта или откроем его через контекстное меню.

Способ 1. Использование Конструктора движений

Рассмотрим наиболее простой способ формирования движений для начинающих разработчиков — визуальный конструктор. Он позволяет автоматически сгенерировать процедуру ОбработкаПроведения и базовый код для заполнения регистра.

Для запуска конструктора выполним следующие действия:

  1. В окне редактирования документа перейдем на вкладку Движения.
  2. Нажмем кнопку Конструктор движений.
  3. В левом списке выберем нужный регистр сведений.
  4. Заполним таблицу соответствия реквизитов документа и измерений/ресурсов/реквизитов регистра сведений.
  5. Нажмем ОК, после чего платформа автоматически создаст процедуру в модуле объекта и заполнит ее стандартным кодом.

Способ 2. Ручное написание процедуры ОбработкаПроведения

Если требуется нестандартная логика с проверками и сложными условиями, проанализируем ручной способ создания обработчика. В модуле объекта документа добавим событие с регламентированной сигнатурой:


Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	// Очищаем или формируем новые движения
	Движение = Движения.ИмяРегистраСведений.Добавить();
	Движение.Период = Дата;
	Движение.Номенклатура = Товар;
	Движение.Цена = Цена;
	
	// Взводим флаг для обязательного сохранения движений
	Движения.ИмяРегистраСведений.Записывать = Истина;

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

Выясним ключевые особенности работы данного кода:

1. Параметр Отказ: если в ходе проверок обнаружены ошибки (например, не заполнена аналитика или недостаточно остатков), необходимо взвести флаг Отказ = Истина;. В таком случае платформа отменит транзакцию и движения не будут сохранены в базе данных.

2. Флаг записи движений: свойство Движения.ИмяРегистраСведений.Записывать = Истина; указывает платформе, что коллекцию сформированных записей необходимо физически записать в базу данных при завершении процедуры проведения.

Ограничения и важные нюансы работы с регистрами

Посмотрим на технические ограничения платформы, которые необходимо учитывать при работе с регистрами сведений:

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

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

Доработка конфигурации через расширение

Если работа ведется с типовой конфигурацией, находящейся на поддержке, менять основной документ не рекомендуется. В этом случае процедуру перехватывают в расширении конфигурации с помощью аннотаций вызова:


&После("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведения(Отказ, РежимПроведения)
	
	// Дополнительная логика формирования движений
	Движение = Движения.ИмяРегистраСведений.Добавить();
	Движение.Период = Дата;
	
	Движения.ИмяРегистраСведений.Записывать = Истина;

КонецПроцедуры
← На главную