Как добавить связанный документ в отчет "Связанные документы" через расширение в 1С?

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

Часто в процессе доработки конфигурации 1С возникает необходимость связать два документа, например, ЧекККМ и ЗаказКлиента. Мы создаем в расширении новый реквизит в одном из документов, который ссылается на другой. Однако, когда мы открываем стандартный отчет «Связанные документы» (или «Структура подчиненности»), нашей новой связи там нет. Давайте разберем по шагам, почему это происходит и как правильно решить эту задачу, оставаясь исключительно в рамках расширения конфигурации.

В чем заключается проблема?

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

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

Решение для платформы 1С:Предприятие 8.3.25 и выше

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

  1. Создайте нужный реквизит связи в расширении (например, реквизит ДокументОснование в чеке, ссылающийся на заказ).
  2. Найдите в основной конфигурации критерий отбора СвязанныеДокументы и добавьте его в ваше расширение.
  3. Откройте состав заимствованного критерия отбора в расширении.
  4. Просто отметьте галочкой ваш новый реквизит.

На этом всё! Платформа автоматически учтет новую связь при формировании отчета.

Решение для версий платформы до 8.3.25 (программный обход)

Если вы работаете на более старой версии платформы (но не ниже 8.3.16), напрямую доработать заимствованный типовой критерий не получится. В этом случае мы создадим собственный критерий и «вклинимся» в типовой код БСП.

Посмотрим на пошаговую реализацию:

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

Пример перехвата функции в модуле:


&ИзменениеИКонтроль("ИндексТиповСвязанныхОбъектов")
Функция Расш_ИндексТиповСвязанныхОбъектов()
    // Типовой код сбора метаданных...
    #Вставка
    // Добавляем наш критерий из расширения
    МассивКритериев.Добавить(Метаданные.КритерииОтбора.СвязанныеДокументыРасширение);
    #КонецВставки
    // Продолжение типового кода...
КонецФункции

Критически важный нюанс: Настройка прав доступа

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

Чтобы это исправить, выполните следующие действия:

  1. Найдите типовую роль, отвечающую за данный отчет (например, ПросмотрСвязанныеДокументы или ИспользованиеСтруктурыПодчиненности).
  2. Позаимствуйте эту роль в расширение.
  3. Дайте заимствованной роли права на использование вашего нового критерия отбора СвязанныеДокументыРасширение.

Вывод кнопки отчета в форму документа

Если в вашем документе ЧекККМ изначально не было кнопки перехода к структуре подчиненности, не нужно дорабатывать саму форму документа. Рассмотрим, как это сделать проще:

  1. Найдите в дереве метаданных основную общую команду вызова отчета (обычно СвязанныеДокументы или СтруктураПодчиненности).
  2. Добавьте эту общую команду в расширение.
  3. В свойствах команды перейдите в раздел Тип параметра команды.
  4. Добавьте ваш тип документа ДокументСсылка.ЧекККМ в список параметров.

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

← На главную