Где находится процедура создания документа на основании в 1С?

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

При доработке типовых конфигураций (например, 1С:Управление торговлей 11) разработчики часто сталкиваются с задачей изменить или отладить логику формирования одного документа из другого. Типичный пример — создание документа ПеремещениеТоваров на основании документа ЗаказКлиента. Начинающие специалисты нередко ищут код обработчика в документе-источнике, однако в архитектуре платформы 1С этот механизм устроен иначе.

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

Определяем местоположение процедуры заполнения

Рассмотрим базовый принцип платформы: за инициализацию и заполнение реквизитов нового объекта всегда отвечает сам создаваемый документ (приемник), а не документ, послуживший для него основанием (источник).

Выясним точное расположение обработчика по шагам:

  1. Откроем дерево метаданных конфигуратора.
  2. Найдем документ-приемник — в нашем случае это ПеремещениеТоваров.
  3. Откроем Модуль объекта этого документа (через контекстное меню или свойства объекта).
  4. Найдем предопределенную процедуру-событие ОбработкаЗаполнения.

Именно в процедуре ОбработкаЗаполнения модуль создаваемого объекта перехватывает ссылку на документ-основание и выполняет заполнение реквизитов шапки и строк табличной части.

Как устроен обработчик ОбработкаЗаполнения

Проанализируем сигнатуру стандартного обработчика события платформы:


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

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

Обратим внимание на два важных параметра процедуры:

  1. ДанныеЗаполнения — в этот параметр платформа передает объект или ссылку, послужившую источником. При нажатии кнопки «Создать на основании» туда передается ссылка (ДокументСсылка.ЗаказКлиента). Однако при программном создании или вызове из других подсистем в параметр может быть передана структура или массив. По этой причине всегда необходимо выполнять проверку типа через ТипЗнч(ДанныеЗаполнения).
  2. СтандартнаяОбработка — булевый флаг. По умолчанию он равен Истина, что заставляет платформу автоматически копировать значения реквизитов с одинаковыми именами и совместимыми типами из источника в приемник. Если требуется полностью переопределить алгоритм заполнения вручную, устанавливаем СтандартнаяОбработка = Ложь.

Особенности архитектуры БСП в 1С:Управление торговлей 11

Если мы откроем модуль объекта ПеремещениеТоваров в типовой конфигурации УТ 11, то можем увидеть, что процедура ОбработкаЗаполнения содержит всего несколько строк. Разберем, почему так сделано:

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

Учет специфики бизнес-логики при отладке

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

В конфигурации 1С:Управление торговлей логика заполнения перемещения по заказу клиента тесно связана с механизмом обеспечения потребностей. Процедура анализирует не просто строки документа-основания, а их текущее состояние: варианты обеспечения (например, «Отгрузить», «К обеспечению»), остатки товаров на складе-отправителе и резервы по регистру накопления «Заказы клиентов». Если строки заказа еще не готовы к отгрузке или по ним отсутствует свободный остаток, алгоритм отфильтрует их, и документ останется незаполненным. При отладке всегда проверяйте не только ветвление кода, но и движения заказа по регистрам.

← На главную