Как узнать, где делаются движения документа в 1С:ERP?

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

При переходе на современные конфигурации 1С, такие как 1С:ERP Управление предприятием 2, 1С:Комплексная автоматизация 2 или 1С:Управление торговлей 11, многие разработчики сталкиваются с тем, что код проведения документов выглядит непривычно. Открыв процедуру ОбработкаПроведения в модуле объекта, вы больше не найдете там прямых запросов и циклов, формирующих записи в регистры. Весь код разбит на общие модули, и найти, где именно формируется движение по конкретному регистру, бывает непросто.

Давайте разберем по шагам, как устроена новая архитектура проведения документов, и рассмотрим самые эффективные способы поиска нужного участка кода.

Архитектура проведения документов в 1С:ERP

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

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

Эффективные способы поиска конкретного движения в коде

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

Способ 1: Поиск в модуле менеджера

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

Способ 2: Отладка с условной точкой останова

Обычная отладка или замер производительности могут выдать слишком много информации (код будет "растекаться" по общим модулям). Сделаем хитрее:

  1. Найдите в общем модуле ПроведениеСервер процедуру ЗагрузитьТаблицыДвижений().
  2. Поставьте точку останова внутри цикла, который перебирает таблицы движений.
  3. Задайте условие для точки останова. Например: ИмяРегистра = "РегистрНакопления.ИмяНужногоРегистра".
  4. Проведите документ. Когда отладчик остановится, посмотрите на Стек вызовов. Он точно покажет, откуда пришла сформированная таблица движений.

Способ 3: Использование Замера производительности

Как советуют опытные разработчики, можно использовать классический инструмент платформы:

  1. Включите замер производительности в конфигураторе.
  2. Проведите нужный документ в режиме Предприятия.
  3. Выключите замер производительности.
  4. Отсортируйте полученный результат по колонке времени или количеству вызовов и проанализируйте выполненный код совместно со стеком вызовов.

Способ 4: Проверка подписок на события

Если в модуле менеджера движений нет, выясним причину дальше. Логика может быть вынесена в подписки на события. Проверьте подписки на ОбработкаПроведения самого документа или подписки на события ПередЗаписью / ПриЗаписи набора записей интересующего вас регистра.

Особый случай: Проводки регламентированного учета

Проанализируем частую ошибку: попытку найти формирование бухгалтерских проводок (по регистру Хозрасчетный) в коде проведения самого документа. В 1С:ERP вы их там не найдете.

В ERP применяется механизм отложенного проведения по регламентированному учету. При проведении документ формирует только оперативные движения по регистрам накопления. Затем специальный механизм Отражение документов в регламентированном учете (который работает по регламентному заданию или запускается вручную) анализирует оперативные регистры и создает бухгалтерские проводки по настроенным правилам в отдельной транзакции. Если вам нужно изменить логику формирования проводок, искать соответствующий код нужно в общих модулях подсистемы регламентированного учета, таких как РегламентированныйУчетХозяйственныхОпераций.

← На главную