Как настроить структуру подчиненности между документами Перемещение товаров и Отчет производства за смену в УПП

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

В конфигурации 1С:Управление производственным предприятием 1.3 (УПП) часто возникает необходимость отслеживать цепочки документов, которые не связаны между собой типовыми механизмами "из коробки". Одной из таких задач является отображение связи между документом ПеремещениеТоваров и ОтчетПроизводстваЗаСмену (ОПЗС) в стандартном отчете "Структура подчиненности". Разберем по шагам, как реализовать эту связь, какие настройки метаданных критичны и почему иногда изменения не видны сразу.

Анализ механизма построения связей в 1С

Прежде всего, давайте разберем, как платформа 1С строит дерево подчиненности. Этот процесс работает в двух направлениях: "вверх" (поиск родителей) и "вниз" (поиск подчиненных документов).

  1. Поиск родителей (вверх): Система анализирует реквизиты текущего документа. Если тип реквизита — ДокументСсылка (любого типа) и в нем записана ссылка на другой документ, то этот документ считается "родителем".
  2. Поиск подчиненных (вниз): Здесь система обращается к специальному объекту метаданных — Критерии отбора (обычно это СвязанныеДокументы). Именно в нем прописывается, какие документы и по каким реквизитам должны искать ссылку на текущий объект.

Рассмотрим подробнее ситуацию, когда в документе ОтчетПроизводстваЗаСмену ссылка на ПеремещениеТоваров хранится в реквизите ЗаказВыпуска. Нам нужно убедиться, что система видит эту связь в обе стороны.

Настройка критерия отбора СвязанныеДокументы

Выясним причину, по которой документ-потомок может не отображаться в дереве. Самая частая ошибка — отсутствие реквизита в составе критерия отбора. Выполним следующие действия:

  1. Перейдем в конфигуратор, откроем ветку Общие -> Критерии отбора -> СвязанныеДокументы.
  2. Перейдем на закладку "Данные". Здесь определяется тип значения, по которому будет строиться связь. Убедимся, что в типе значения включен тип ДокументСсылка.ПеремещениеТоваров.
  3. Перейдем на закладку "Состав". Проанализируем список и найдем наш документ ОтчетПроизводстваЗаСмену. Нам нужно поставить галочку напротив того реквизита, в который мы записываем ссылку на перемещение. В нашем примере это реквизит ЗаказВыпуска.

Важный нюанс: Если вы используете реквизит ЗаказВыпуска, проверьте его составной тип данных. В типовой УПП он может быть ограничен только заказами. Для реализации связи с перемещением вам потребуется расширить тип этого реквизита, добавив туда ДокументСсылка.ПеремещениеТоваров.

Программное заполнение реквизитов основания

Чтобы связь физически существовала, реквизит в документе-потомке должен быть заполнен в момент создания на основании. Разберем пример кода, который необходимо разместить в модуле объекта документа ОтчетПроизводстваЗаСмену в процедуре ОбработкаЗаполнения:


Процедура ОбработкаЗаполнения(Основание)
    Если ТипЗнч(Основание) = Тип("ДокументСсылка.ПеремещениеТоваров") Тогда
        // Заполняем реквизит, который мы указали в критерии отбора
        ЭтотОбъект.ЗаказВыпуска = Основание;
        
        // Дополнительная логика заполнения табличных частей из перемещения
        // ...
    КонецЕсли;
КонецПроцедуры

Посмотрим на ситуацию, когда ДокументОснование в перемещении остается пустым. Если в коде не прописано явное присвоение ссылки, то критерий отбора не найдет связь, так как поле в базе данных будет содержать Неопределено или пустую ссылку.

Особенности формы Структура подчиненности

В обычных формах УПП за вывод дерева отвечает обработка или общая форма СтруктураПодчиненности. Если после настройки критериев документ все равно не виден, проанализируем процедуру ВывестиРодительскиеДокументы. В ней может быть реализована рекурсия, которая обходит дерево связей.

Если вы программно пытаетесь получить родителя из реквизита ЗаказВыпуска, убедитесь, что тип ссылки совпадает с ожидаемым. Иногда в кастомизированных конфигурациях разработчики жестко ограничивают список типов документов, которые могут выводиться в структуру, с помощью фильтров в коде формы. В таком случае необходимо найти массив разрешенных типов и добавить туда ПеремещениеТоваров.

Проблема кэширования метаданных

Бывают ситуации, когда настройки в конфигураторе выполнены верно: критерий отбора настроен, состав обновлен, код заполнения работает, но в режиме "Предприятие" дерево остается пустым. Как показывает практика, основной виновник здесь — локальный кэш конфигурации.

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

  1. Перезапустить сеанс 1С.
  2. Очистить кэш пользователя (удалить базу из списка и добавить заново или очистить папки в %AppData%\1C\1Cv8).
  3. Запустить базу с параметром /ClearCache.

Альтернативный подход: выделенный реквизит

Если типовой реквизит ЗаказВыпуска используется по прямому назначению для других задач и "смешивать" в нем заказы и перемещения не хочется, рассмотрим более чистый с точки зрения архитектуры вариант:

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

Этот метод гарантирует, что типовые механизмы УПП, завязанные на ЗаказВыпуска (например, закрытие заказов или расчет себестоимости), не пострадают от появления там непредвиденного типа документа "Перемещение".

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

← На главную