Как вы догадались по названию темы, стандартный отчет "Связанные документы" (Структура подчиненности) требует доработки, поскольку он не видит документы из расширения.
Это и логично, ведь формирование отчета построено на анализе типового объекта конфигурации "КритерииОтбора.СвязанныеДокументы".
Если попытаться решить задачу в лоб - пробросить в расширение типовой критерий отбора "СвязанныеДокументы", то в расширение за ним подтянутся почти все объекты конфигурации и их реквизиты, указанные в критерии отбора. А это почти все документы из типовой конфигурации. Такой подход превратит ваше компактное и изящное расширение конфигурации в нагромождение копий объектов из типовой конфигурации.
Сразу понятно, такое решение не по фэншую. Будем решать задачу по-другому.
Задача:
Есть документ в расширении конфигурации "ИТ_ЗаданиеНаТранспортировку" и в нем есть поле "ДокументОснование", ссылающееся на типовой документ "ЗаказПокупателя". Нужно отразить документ из расширения конфигурации в типовом отчете "Связанные документы".
Условие:
И в новом документе "ИТ_ЗаданиеНаТранспортировку", и в типовом документе "ЗаказПокупателя" должен использоваться типовой отчет "Связанные документы", вызываемый через "СтандартныеПодсистемы.ПодключаемыеКоманды".
Решение:
В расширение ранее уже проброшен документ "ЗаказПокупателя", так как нам нужно было указать тип ссылки в поле "ДокументОснование".
Мы не будем добавлять в расширение типовой критерий отбора "СвязанныеДокументы", вместо этого создаём новый критерий отбора в расширении с названием "ИТ_СвязанныеДокументы" (1).
В разделе "Данные" заполняем тип данных нового критерия отбора теми объектами, которые должны добавляться к стандартному отчету "Связанные документы"
В разделе "Состав" проставляем флажок у реквизита "ДокументОснование" .
Не забываем пробросить в расширение конфигурации типовую роль "ПросмотрСвязанныеДокументы" и в нашем критерии отбора проставляем право на использование для этой роли.
С критерием отбора покончено.
Но стандартный отчет "Связанные документы" пока нас не замечает. Углубляемся в конфигурацию и понимаем, что все действия по выводу отчета производятся в общей форме "СвязанныеДокументы".
Для того, чтобы "научить" общую форму видеть наш критерий отбора из расширения конфигурации, мы пробрасываем в расширение одну процедуру и одну функцию в режиме "ИзменениеИКонтроль" из модуля формы "ОбщаяФорма.СвязанныеДокументы".
Вносим исправления в код.
Процедура "ВывестиРодительскиеОбъекты" большая, всю ее в статью добавлять не буду. В ней нужно изменить в двух местах условия, которые заставляют отчет пропускать документы, не входящие в критерии отбора:
&НаСервере
&ИзменениеИКонтроль("ВывестиРодительскиеОбъекты")
Процедура ИТ_ВывестиРодительскиеОбъекты(ТекущийОбъект, ДеревоРодитель, ВыведенныеОбъекты, СлужебныеОбъекты, ИндексСвязейОбъектов)
//...
// в двух местах, где найдете "Метаданные.КритерииОтбора.СвязанныеДокументы.Состав.Содержит(Реквизит)"
// делаете следующие одинаковые изменения:
#Удаление
Если Не Метаданные.КритерииОтбора.СвязанныеДокументы.Состав.Содержит(Реквизит) Тогда
Продолжить;
КонецЕсли;
#КонецУдаления
#Вставка
Если Не Метаданные.КритерииОтбора.СвязанныеДокументы.Состав.Содержит(Реквизит)
И Не Метаданные.КритерииОтбора.ИТ_СвязанныеДокументы.Состав.Содержит(Реквизит) Тогда
Продолжить;
КонецЕсли;
#КонецВставки
//...
КонецПроцедуры
Функция "ОбъектыПоКритериюОтбора" наоборот - маленькая. Дорабатываем ее, как указано ниже. Код сделан более читаемым в ущерб компактности.
&НаСервере
&ИзменениеИКонтроль("ОбъектыПоКритериюОтбора")
Функция ИТ_ОбъектыПоКритериюОтбора(ЗначениеКритерияОтбора)
#Удаление
Если Не Метаданные.КритерииОтбора.СвязанныеДокументы.Тип.СодержитТип(ТипЗнч(ЗначениеКритерияОтбора)) Тогда
Возврат Неопределено;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СвязанныеДокументы.Ссылка
|ИЗ
| КритерийОтбора.СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК СвязанныеДокументы";
#КонецУдаления
#Вставка
Если Не Метаданные.КритерииОтбора.СвязанныеДокументы.Тип.СодержитТип(ТипЗнч(ЗначениеКритерияОтбора))
И Не Метаданные.КритерииОтбора.ИТ_СвязанныеДокументы.Тип.СодержитТип(ТипЗнч(ЗначениеКритерияОтбора)) Тогда
Возврат Неопределено;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
ТекстДляЗапроса="";
Если Метаданные.КритерииОтбора.СвязанныеДокументы.Тип.СодержитТип(ТипЗнч(ЗначениеКритерияОтбора)) Тогда
ТекстДляЗапроса = ТекстДляЗапроса+"ВЫБРАТЬ
| СвязанныеДокументы.Ссылка КАК Ссылка
|ИЗ
| КритерийОтбора.СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК СвязанныеДокументы";
КонецЕсли;
Если Метаданные.КритерииОтбора.ИТ_СвязанныеДокументы.Тип.СодержитТип(ТипЗнч(ЗначениеКритерияОтбора)) Тогда
Если НЕ ПустаяСтрока(ТекстДляЗапроса) Тогда
ТекстДляЗапроса=ТекстДляЗапроса+"
|
|ОБЪЕДИНИТЬ ВСЕ
|";
КонецЕсли;
ТекстДляЗапроса = ТекстДляЗапроса+"ВЫБРАТЬ
| ИТ_СвязанныеДокументы.Ссылка
|ИЗ
| КритерийОтбора.ИТ_СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК ИТ_СвязанныеДокументы";
КонецЕсли;
Запрос.Текст = ТекстДляЗапроса;
#КонецВставки
Запрос.УстановитьПараметр("ЗначениеКритерияОтбора", ЗначениеКритерияОтбора);
#Вставка
//Это простой костыль от бага в команде "Запрос.Выполнить().Выгрузить()"
//Команда ".Выгрузить()" из результата запроса работает с БАГОМ для смешанных ссылок
//на объекты из основной конфигурации и на объекты из расширения.
НовыйТЗ = Новый ТаблицаЗначений;
НовыйТЗ.Колонки.Добавить("Ссылка");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = НовыйТЗ.Добавить();
НоваяСтрока.Ссылка = Выборка.Ссылка;
КонецЦикла;
Возврат НовыйТЗ;
#КонецВставки
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
И в принципе, отчет "Связанные документы" уже будет работать с вашими документами из расширения конфигурации.
Однако, нужно провести еще одну доработку.
Если вы используете подключаемые команды из стандартных подсистем(2) в формах документов/списков документов из расширения, вы заметите, что вожделенный отчет "Связанные документы" не появляется в ваших интерфейсах. Типовая кнопка "Структура подчиненности", которая формирует отчет "Связанные документы", просто принудительно скрывается от нас, если документ отсутствует в индексах связанных объектов.
Давайте просто поправим действия с кнопкой "СтруктураПодчиненности".
Находим типовой общий модуль "СтруктураПодчиненностиСлужебный"(3) и пробрасываем из него в расширение конфигурации функцию "ИндексТиповСвязанныхОбъектов".
Вносим в функцию изменения:
&ИзменениеИКонтроль("ИндексТиповСвязанныхОбъектов")
Функция ИТ_ИндексТиповСвязанныхОбъектов()
Индекс = Новый Соответствие;
МетаданныеСвязанныхОбъектов = Метаданные.КритерииОтбора.СвязанныеДокументы;
ТипыСвязанныхОбъектов = МетаданныеСвязанныхОбъектов.Тип.Типы();
ТипПараметраКоманды = Метаданные.ОбщиеКоманды.СвязанныеДокументы.ТипПараметраКоманды;
Для Каждого ТипСвязанногоОбъекта Из ТипыСвязанныхОбъектов Цикл
Если Не ТипПараметраКоманды.СодержитТип(ТипСвязанногоОбъекта) Тогда
Индекс.Вставить(ТипСвязанногоОбъекта, Истина);
КонецЕсли;
КонецЦикла;
#Вставка
МетаданныеСвязанныхОбъектов = Метаданные.КритерииОтбора.ИТ_СвязанныеДокументы;
ТипыСвязанныхОбъектов = МетаданныеСвязанныхОбъектов.Тип.Типы();
ТипПараметраКоманды = Метаданные.ОбщиеКоманды.СвязанныеДокументы.ТипПараметраКоманды;
Для Каждого ТипСвязанногоОбъекта Из ТипыСвязанныхОбъектов Цикл
Если Не ТипПараметраКоманды.СодержитТип(ТипСвязанногоОбъекта) Тогда
Индекс.Вставить(ТипСвязанногоОбъекта, Истина);
КонецЕсли;
КонецЦикла;
#КонецВставки
Возврат Индекс;
КонецФункции
И все.
Теперь два оба критерия отбора, из основной конфигурации и из расширения, попадают в типовой отчет "Связанные документы".
(1) Префикс "ИТ_" в идентификаторах и префикс "(ИТ) " в синонимах является обязательным для новых объектов в соответствии с политикой внедрений 1С, принятой в нашей компании.
(2) Добавление подключаемых команд из стандартных подсистем на ваши формы документов - это отдельная большая тема, и в данной статье умышленно опущена.
(3) Мне не понятно, почему компания 1С не реализовала функционал добавления новых объектов в специальном модуле "СтруктураПодчиненностиПереопределяемый". Вместо добавления новых, они реализовали функционал по переименованию объектов.
PS: Благодаря комментарию (50), для сохранения режима совместимости с версией 8.3.16, можно воспользоваться опытом из статьи: Николая Ходырева "Критерии отбора в расширении. 16+".
PS: По просьбе комментария (67).
Данное решение не заработает на новых конфигурациях УТ11.5, КА2,5 ЕРП 2,5 и др.
Нужно в основной форме "Связанные документы" - дополнительно в состав реквизитов формы (ДеревоПодчиненныеОбъекты.Ссылка, ДеревоРодительскиеОбъекты.Ссылка, ИсходныйОбъект, ОсновнойОбъект) добавить ссылку на свой добавленный объект. Реализовать можно двумя способами: Тут кто как хочет так пусть и делает: Либо добавить их в расширение на форме и поставить галочки на свои объекты. Либо прописать их кодом ПриСозданииНаСервере.