При разработке новых объектов в современных конфигурациях 1С (таких как «Комплексная автоматизация 2.4», «ERP Управление предприятием 2» или «Управление торговлей 11») разработчики часто сталкиваются с тем, что простого указания связи в метаданных (на закладке «Ввод на основании») недостаточно. Чтобы документ корректно отображался в отчете «Связанные документы» (структура подчиненности), необходимо выполнить ряд настроек в системе. Рассмотрим этот процесс детально и разберем по шагам, что именно нужно сделать.
В типовых решениях, построенных на базе Библиотеки стандартных подсистем (БСП), дерево связей не строится автоматически только по факту создания одного документа из другого. Этот механизм опирается на три «столпа»: наличие ссылки в данных, описание типа в метаданных и регистрацию в специальном критерии отбора. Проанализируем ситуацию: если мы создали документ ЗаказКлиента на основании Событие, то в ЗаказКлиента обязательно должна физически храниться ссылка на Событие в одном из реквизитов. Если реквизит пуст или не настроен критерий поиска, система не «увидит» связь.
Первым делом проанализируем структуру документа-приемника (в нашем примере это ЗаказКлиента). Чтобы связь отобразилась, в этом документе должен быть реквизит, который будет хранить ссылку на документ-основание (Событие).
ЗаказКлиента.ДокументОснование (в типовых конфигурациях он часто уже существует).Событие. Если вы работаете в расширении, вам нужно добавить тип вашего документа в этот реквизит через расширение.Просто создать документ недостаточно — нужно, чтобы при создании ссылка на основание была записана в базу данных. Для этого разберем работу программного модуля документа-приемника. Нам необходимо прописать логику в процедуре ОбработкаЗаполнения.
Рассмотрим пример кода, который должен располагаться в модуле объекта документа ЗаказКлиента:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
// Проверяем, что заполнение идет на основании нашего документа
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.Событие") Тогда
// Заполняем основной реквизит связи
ЭтотОбъект.ДокументОснование = ДанныеЗаполнения;
// Здесь также можно заполнить другие реквизиты: Контрагент, Организация и т.д.
ЭтотОбъект.Партнер = ДанныеЗаполнения.Партнер;
ЭтотОбъект.Организация = ДанныеЗаполнения.Организация;
КонецЕсли;
КонецПроцедуры
Важный момент: если вы не заполните реквизит ДокументОснование в коде, критерий отбора не найдет записи в таблице базы данных, и структура подчиненности останется пустой.
Выясним причину, по которой документ может не отображаться, даже если реквизиты заполнены. В 1С за вывод иерархии документов отвечает объект метаданных КритерийОтбора. В конфигурациях БСП он обычно называется СвязанныеДокументы.
ЗаказКлиента.ДокументОснование).Это действие говорит системе: «Чтобы найти все документы, связанные с Событием, ищи в таблице ЗаказКлиента значения в колонке ДокументОснование, равные ссылке на это Событие».
В современных архитектурах 1С механизмы БСП используют Определяемые типы для унификации работы с документами. Нам нужно проверить два основных типа:
ОснованиеСвязанныхДокументов — в этот тип должен быть включен ваш новый документ Событие. Это позволит системе понимать, что данный документ вообще может выступать «корнем» или узлом в дереве связей.ОбъектСвязанныхДокументов — сюда также следует добавить ссылку на ваш документ, чтобы для него была доступна сама команда открытия структуры подчиненности.Если проигнорировать этот шаг, подсистема «Связанные документы» может просто отсечь ваш документ на уровне программных фильтров БСП.
Теперь, когда данные связаны и настроены в метаданных, нам нужно дать пользователю возможность открыть отчет «Структура подчиненности» прямо из формы документа Событие. Рассмотрим, как это сделать.
Обычно в типовых конфигурациях для этого используется общая команда СтруктураПодчиненности (или СвязанныеДокументы в новых версиях). Вам нужно:
Событие.После внесения изменений в метаданные и расширения, система может не сразу подхватить новые настройки командного интерфейса. Проанализируем ситуацию: БСП кэширует настройки связей в специальных регистрах сведений. Чтобы принудительно обновить эти данные, рекомендуется запустить информационную базу с параметром:
/C ЗапуститьОбновлениеИнформационнойБазы
Это инициализирует процедуры обновления БСП, которые зарегистрируют новые команды и связи в системных таблицах.
Подводя итоги, кратко закрепим алгоритм действий:
Создаем реквизит для хранения ссылки -> Заполняем его в коде ОбработкаЗаполнения -> Включаем реквизит в состав критерия отбора СвязанныеДокументы -> Добавляем типы в определяемые типы БСП -> Выводим команду на форму.
Следуя этой инструкции, вы обеспечите полноценную интеграцию вашего нового документа в экосистему типовой конфигурации, и пользователи смогут легко отслеживать цепочки документов от «События» до «Заказа клиента» и далее.