Как вывести структуру подчиненности (связанные документы) для нового документа в 1С?

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

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

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

Выясним причину, почему при попытке решить эту задачу «в лоб» разработчики сталкиваются с трудностями. При анализе общей команды СвязанныеДокументы (синоним «Связанные документы» или «Структура подчиненности») в конфигураторе мы можем обнаружить странную вещь: в списке типов её параметров присутствуют только кадровые и зарплатные документы (например, БольничныйЛист, Отпуск), но там нет ни одного торгового документа (ни Заказа поставщику, ни Реализации товаров и услуг).

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

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

Способ 1. Быстрое решение через редактирование метаданных (статический метод)

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

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

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

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

Способ 2. Правильное подключение через механизмы БСП (динамический метод)

В современных конфигурациях 1С кнопка структуры подчиненности выводится на форму динамически с помощью подсистемы «Подключаемые команды». Чтобы сделать все по стандартам разработки 1С и избежать проблем при будущих обновлениях, выполним интеграцию программно.

Разберем этот процесс по шагам.

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

Этот шаг аналогичен первому способу. Нам обязательно нужно зарегистрировать связь документов в критерии отбора СвязанныеДокументы, иначе система не сможет построить дерево связей в отчете.

Шаг 2. Регистрация документа в подсистеме вариантов отчетов

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


Процедура ОпределитьОбъектыСКомандамиОтчетов(Объекты) Экспорт
    
    // Добавляем наш новый документ в список объектов, поддерживающих команды отчетов
    Объекты.Добавить(Метаданные.Документы.Акт);
    
КонецПроцедуры

Шаг 3. Реализация программного интерфейса в модуле менеджера

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


#Область ПрограммныйИнтерфейс

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

#КонецОбласти

Примечание: Имя вызываемого метода (например, ДобавитьКомуОтчетСвязанныеДокументы) может незначительно отличаться в зависимости от конкретной версии конфигурации (КА 2.4, ERP 2.5 или УТ 11). Чтобы не ошибиться, рекомендуется открыть модуль менеджера любого аналогичного типового документа (например, ЗаказПоставщику) и скопировать вызов оттуда.

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

Кнопка связанных документов выводится в подменю «Отчеты» на форме. Чтобы подсистема БСП могла динамически внедрить эту кнопку на форму при ее открытии, нам нужно доработать модуль формы документа Акт.

В процедуре ПриСозданииНаСервере добавим вызов инициализации подключаемых команд:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // СтандартныеПодсистемы.ПодключаемыеКоманды
    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
    
КонецПроцедуры

Также нам необходимо обработать нажатие на эту динамическую кнопку на клиенте. Для этого добавим стандартный обработчик команд БСП:


&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
    
    // Перенаправляем выполнение команды в модуль БСП
    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
    
КонецПроцедуры

Шаг 5. Обновление информационной базы

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

/C ЗапуститьОбновлениеИнформационнойБазы

После завершения процедуры обновления зайдите в документ Акт — в шапке формы или в меню «Отчеты» появится заветная кнопка «Связанные документы», которая будет корректно работать.

Способ 3. Реализация задачи с помощью расширения конфигурации

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

В этом случае профессиональные разработчики применяют следующий паттерн:

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

Такой подход гарантирует абсолютную чистоту типовой конфигурации и беспроблемное автоматическое обновление системы в будущем.

← На главную