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