Как найти и проанализировать код механизма Создать на основании для документа Расходование ДС

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

В процессе разработки и поддержки конфигураций на базе 1С:Предприятие 8.3 часто возникает необходимость понять, какой именно программный код отвечает за заполнение нового документа при его создании на основании другого объекта. Ситуация осложняется тем, что в современных решениях (таких как ERP, КА, УТ) могут одновременно использоваться как стандартные механизмы платформы, так и надстройки Библиотеки стандартных подсистем (БСП). В данной статье мы подробно разберем, где искать логику формирования документа Заявка на расходование денежных средств или Списание безналичных ДС.

Разберем стандартный механизм платформы: ОбработкаЗаполнения

Начнем с основ, которые заложены в саму платформу 1С. В 95% случаев основной код переноса данных из одного объекта в другой сосредоточен в модуле создаваемого объекта. Давайте проанализируем, как это работает.

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

Рассмотрим структуру этой процедуры:


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

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

Обратим внимание на параметр ДанныеЗаполнения. В простейшем случае туда передается ссылка на документ-основание. Однако в сложных конфигурациях платформа или БСП могут передавать туда Структуру. Это делается для того, чтобы передать дополнительные параметры или когда создание происходит на основании сразу нескольких документов. Проанализируем этот момент при отладке, чтобы понять, какие данные приходят в процедуру.

Проанализируем влияние Библиотеки стандартных подсистем (БСП)

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

Выясним, как БСП управляет этими командами. Откроем Модуль менеджера документа, который мы создаем. В типовых решениях именно там регистрируются команды создания на основании. Нам нужно найти процедуру ДобавитьКомандыСозданияНаОсновании.

Посмотрим на пример регистрации такой команды:


Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании) Экспорт
    
    Команда = КомандыСозданияНаОсновании.Добавить();
    Команда.Менеджер = "Документ.ЗаявкаНаРасходованиеДенежныхСредств";
    Команда.ТипФормы = "ФормаДокумента";
    Команда.Обработчик = "УчетДенежныхСредствКлиент.СоздатьНаОснованииЗаявки";
    
КонецПроцедуры

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

Посмотрим на роль модуля управляемой формы

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

Проверим наличие следующего кода в модуле формы создаваемого документа:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если Параметры.ЗначениеЗаполнения.Свойство("Основание") Тогда
        // Дополнительная логика обработки основания
        ОбработатьДополнительныеПараметры(Параметры.ЗначениеЗаполнения.Основание);
    КонецЕсли;
    
КонецПроцедуры

Важно помнить: если СтандартнаяОбработка установлена в Ложь в модуле объекта, то стандартное заполнение может быть полностью подменено логикой в форме или в обработчике БСП.

Используем отладчик для точного определения кода

Если визуальный поиск не дает результатов, применим самый надежный метод — использование Стека вызовов. Это позволит нам увидеть всю цепочку процедур от момента клика по кнопке до момента появления формы на экране.

Выполним следующие шаги по порядку:

  1. Запустим 1С:Предприятие в режиме отладки.
  2. В конфигураторе откроем модуль объекта создаваемого документа (например, РасходованиеДС).
  3. Установим точку останова (F9) на первой строке процедуры ОбработкаЗаполнения.
  4. В режиме предприятия нажмем кнопку «Создать на основании» и выберем нужную команду.
  5. Когда программа «замрет» на точке останова, откроем окно Стек вызова (Call Stack).

Проанализировав стек вызова, мы увидим, из какого модуля была вызвана процедура заполнения. Если это общий модуль типа ПодключаемыеКомандыКлиент или УправлениеЗаполнениемОбъектов, мы сможем перейти по цепочке вверх и увидеть, как подготавливались ДанныеЗаполнения.

Особенности расширений конфигурации

В современных реалиях нельзя забывать о расширениях. Если вы работаете с типовой конфигурацией, которую нельзя менять, логика создания на основании может быть вынесена в расширение. Проанализируем список расширений в базе данных. Код может быть перехвачен с помощью аннотаций &Перед, &После или &Вместо для процедуры ОбработкаЗаполнения. В конфигураторе это можно проверить через поиск по всем текстам (Ctrl+Shift+F), указав имя процедуры и выбрав область поиска, включающую расширения.

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

← На главную