Часто в процессе доработки конфигурации 1С возникает необходимость связать два документа, например, ЧекККМ и ЗаказКлиента. Мы создаем в расширении новый реквизит в одном из документов, который ссылается на другой. Однако, когда мы открываем стандартный отчет «Связанные документы» (или «Структура подчиненности»), нашей новой связи там нет. Давайте разберем по шагам, почему это происходит и как правильно решить эту задачу, оставаясь исключительно в рамках расширения конфигурации.
Механизм построения дерева связанных документов в типовых конфигурациях (на базе БСП) опирается на объект метаданных КритерииОтбора, в частности, на критерий СвязанныеДокументы. Долгое время в платформе 1С существовало ограничение: нельзя было добавить реквизит, созданный в расширении, в состав заимствованного типового критерия отбора. Из-за этого разработчикам приходилось переносить добавление реквизита в основную конфигурацию, снимая ее с поддержки.
Проанализируем ситуацию детально: как обойти это ограничение в старых версиях платформы и как элегантно решить задачу в новых.
Разработчики платформы учли эту частую потребность, и начиная с версии 8.3.25 появилась нативная поддержка добавления реквизитов расширения в заимствованные критерии отбора. Разберем алгоритм действий для свежих релизов:
ДокументОснование в чеке, ссылающийся на заказ).СвязанныеДокументы и добавьте его в ваше расширение.На этом всё! Платформа автоматически учтет новую связь при формировании отчета.
Если вы работаете на более старой версии платформы (но не ниже 8.3.16), напрямую доработать заимствованный типовой критерий не получится. В этом случае мы создадим собственный критерий и «вклинимся» в типовой код БСП.
Посмотрим на пошаговую реализацию:
СвязанныеДокументыРасширение. В его состав включите ваш новый реквизит, который связывает чек и заказ.СтруктураПодчиненностиСлужебный или код модуля формы отчета).&ИзменениеИКонтроль переопределите функцию, собирающую типы связанных объектов (например, ИндексТиповСвязанныхОбъектов()), чтобы она учитывала и ваш новый критерий.Пример перехвата функции в модуле:
&ИзменениеИКонтроль("ИндексТиповСвязанныхОбъектов")
Функция Расш_ИндексТиповСвязанныхОбъектов()
// Типовой код сбора метаданных...
#Вставка
// Добавляем наш критерий из расширения
МассивКритериев.Добавить(Метаданные.КритерииОтбора.СвязанныеДокументыРасширение);
#КонецВставки
// Продолжение типового кода...
КонецФункции
Выясним причину, по которой даже после написания кода связанные документы могут не отображаться. Это происходит из-за отсутствия прав доступа к новому критерию отбора. Платформа просто игнорирует данные, если у пользователя нет на них прав.
Чтобы это исправить, выполните следующие действия:
ПросмотрСвязанныеДокументы или ИспользованиеСтруктурыПодчиненности).СвязанныеДокументыРасширение.Если в вашем документе ЧекККМ изначально не было кнопки перехода к структуре подчиненности, не нужно дорабатывать саму форму документа. Рассмотрим, как это сделать проще:
СвязанныеДокументы или СтруктураПодчиненности).ДокументСсылка.ЧекККМ в список параметров.После этого платформа автоматически разместит кнопку отчета на панели навигации документа или в меню «Перейти», обеспечивая пользователю бесшовный и удобный доступ к просмотру всех связанных цепочек.