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

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

При разработке новых объектов в современных конфигурациях 1С (таких как ERP 2.4/2.5, КА 2, УТ 11) часто возникает задача включить созданный документ в общую цепочку связей. Это необходимо для того, чтобы пользователь мог нажать кнопку «Связанные документы» (или «Структура подчиненности») и увидеть всю иерархию: от какого документа был создан текущий и какие документы созданы на его основании. Рассмотрим подробнее, как реализовать этот механизм правильно.

Шаг 1. Настройка критерия отбора

Основным механизмом, который «собирает» дерево связей в 1С, является объект метаданных Критерий отбора. В типовых решениях на базе БСП он чаще всего называется СвязанныеДокументы. Проанализируем процесс его настройки:

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

Важный момент: Чтобы поиск по критерию отбора работал быстро, реквизит документа, который вы включаете в состав, обязательно должен быть индексирован. В свойствах реквизита вашего документа установите значение «Индексировать» или «Индексировать с дополнительным упорядочиванием».

Шаг 2. Вывод кнопки на форму документа

Даже если мы настроили критерий отбора, кнопка структуры подчиненности может не появиться на форме документа автоматически. В управляемом интерфейсе за это отвечает Общая команда. Разберем, что нужно проверить:

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

Шаг 3. Программная поддержка в модуле формы

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


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

И на стороне клиента:


&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
    МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
    МодульПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

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

Шаг 4. Проверка логики заполнения по основанию

Выясним причину, по которой связь может не отображаться, даже если все настройки выполнены. Для работы критерия отбора физически необходимо, чтобы в реквизите документа-потомка была записана ссылка на документ-предок. Рассмотрим пример реализации логики в модуле объекта нового документа:


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

Если вы забыли указать заполнение реквизита ДокументОснование в конструкторе или в коде ОбработкаЗаполнения, то база данных не будет знать о связи, и отчет останется пустым.

Шаг 5. Методически правильный способ (через Расширение)

Чтобы при обновлении конфигурации вам не пришлось заново вручную добавлять свои документы в состав типового критерия отбора СвязанныеДокументы, рекомендуется использовать расширения конфигурации. Рассмотрим алгоритм:

  1. Создадим новое расширение или откроем существующее.
  2. Добавим в расширение ваш новый документ.
  3. Добавим в расширение типовой критерий отбора СвязанныеДокументы.
  4. В расширении отредактируем состав критерия отбора, добавив в него реквизит вашего документа.
  5. Добавим в расширение общую команду СвязанныеДокументы и расширим тип её параметра.

При таком подходе основная конфигурация остается на поддержке, а ваши изменения в структуре подчиненности сохраняются автоматически при установке обновлений от поставщика (1С).

Резюме и типичные ошибки

Проанализировав ситуацию, можно выделить основные моменты, на которых часто ошибаются разработчики:

Используя этот комплексный подход, вы обеспечите корректную и производительную работу структуры подчиненности для любых кастомных объектов в вашей системе.

← На главную