При работе с документом «Заказ на производство» в 1С:ERP часто возникает необходимость проанализировать всю цепочку связанных с ним документов. Стандартный отчет «Связанные документы» отлично справляется с этой задачей, однако у него есть существенный недостаток: для этапов производства он выводит только их тип, номер и дату, например, «Этап производства №123 от 10.10.2023». При этом в самом документе «Этап производства» есть содержательное наименование, которое задается пользователем и отражает суть выполняемых работ (например, «Сборка корпуса», «Покраска», «Контроль качества»).
Отсутствие этого наименования в списке связанных документов делает навигацию неудобной. Чтобы понять, какой этап за что отвечает, приходится открывать каждый документ по отдельности. Рассмотрим, как можно решить эту проблему и сделать работу с производственными цепочками более наглядной и удобной.
Прежде чем прибегать к доработкам конфигурации, стоит рассмотреть стандартный функционал, который может частично решить нашу задачу. В 1С:ERP существует мощный отчет «Структура заказа». Он предоставляет иерархическое представление всех объектов, связанных с заказом, и часто содержит более подробную информацию, чем отчет «Связанные документы».
Как его использовать:
Этот способ является отличным обходным путем, если вам нужно быстро проанализировать состав заказа без внесения изменений в систему. Однако он не решает исходную проблему — неудобство работы именно с формой «Связанные документы». Если требуется улучшить именно этот интерфейс, без привлечения программиста не обойтись.
Для того чтобы изменить представление объекта в стандартных отчетах, таких как «Связанные документы», необходимо вмешательство в код конфигурации. Важно: все доработки настоятельно рекомендуется выполнять с помощью механизма расширений конфигурации. Это позволит сохранить основную конфигурацию на поддержке и значительно упростит процесс будущих обновлений системы.
Рассмотрим два основных подхода к реализации этой задачи.
В «Библиотеке стандартных подсистем» (БСП), на которой построена 1С:ERP, существует специальный механизм для безопасной кастомизации подобных вещей. Для нашей задачи идеально подходит переопределяемый общий модуль СтруктураПодчиненностиПереопределяемый.
Этот модуль содержит процедуру ПриПолученииПредставления, которая вызывается при формировании представления для каждого документа в отчете. Мы можем «подписаться» на это событие и изменить стандартное поведение для нужного нам типа документа.
Разберем по шагам:
СтруктураПодчиненностиПереопределяемый и добавьте его в ваше расширение.&После("ПриПолученииПредставления"). Это означает, что ваш код будет выполняться после стандартной процедуры.Посмотрим на пример кода:
Допустим, наименование этапа хранится в реквизите Наименование документа «Этап производства».
&После("ПриПолученииПредставления")
Процедура Расш_ПриПолученииПредставления(ТипДанных, Данные, Представление, СтандартнаяОбработка)
// Проверяем, что текущий документ - это "Этап производства"
Если ТипЗнч(Данные.Ссылка) = Тип("ДокументСсылка.ЭтапПроизводства") Тогда
// Получаем значение реквизита "Наименование" из документа.
// Используем ОбщегоНазначения.ЗначениеРеквизитаОбъекта для оптимизации,
// чтобы не получать весь объект из базы данных.
НаименованиеЭтапа = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Данные.Ссылка, "Наименование");
// Если наименование заполнено, добавляем его к стандартному представлению
Если ЗначениеЗаполнено(НаименованиеЭтапа) Тогда
Представление = СтрШаблон("%1 (%2)", Данные.Представление, НаименованиеЭтапа);
// Важно! Устанавливаем СтандартнаяОбработка в Ложь,
// чтобы система не перезаписала наше представление своим.
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
После сохранения расширения и перезапуска сеанса, в отчете «Связанные документы» для этапов производства будет выводиться не только номер и дата, но и их наименование в скобках, например: «Этап производства №123 от 10.10.2023 (Сборка корпуса)». Этот способ является наиболее правильным и безопасным с точки зрения архитектуры 1С.
Этот подход можно назвать решением «в лоб». Он заключается в прямой модификации кода общей формы, которая отвечает за построение отчета. Этот метод менее предпочтителен, так как он сильнее привязан к конкретной реализации формы, которая может измениться при обновлении конфигурации.
Алгоритм действий:
СвязанныеДокументы.ПредставлениеОбъектаДляВыводаВОтчет.Посмотрим на примерный фрагмент кода, который нужно было бы встроить в существующую логику:
// ... Начало кода функции, где уже получено стандартное ПредставлениеОбъекта ...
МетаданныеОбъекта = Выборка.Ссылка.Метаданные();
// Наша вставка
Если МетаданныеОбъекта.Имя = "ЭтапПроизводства" Тогда
// Обращаемся напрямую к реквизиту. В контексте формы это может быть менее производительно.
НаименованиеЭтапа = Выборка.Ссылка.Наименование;
Если НЕ ПустаяСтрока(НаименованиеЭтапа) Тогда
ПредставлениеОбъекта = СтрШаблон("%1 (%2)", ПредставлениеОбъекта, НаименованиеЭтапа);
КонецЕсли;
КонецЕсли;
// Конец нашей вставки
// ... Дальнейший код функции ...
Возврат ПредставлениеОбъекта;
Хотя этот метод и работает, он считается менее гибким. Если логика формирования отчета в будущих версиях ERP изменится, ваша доработка может перестать работать, и ее придется адаптировать. Поэтому первый способ через переопределяемый модуль является более надежным и рекомендуемым.
В итоге, для решения задачи по отображению наименования этапа производства в связанных документах, у вас есть два пути: быстрый аналитический — через отчет «Структура заказа», и полноценный интерфейсный — через доработку конфигурации с помощью расширения. Для доработки рекомендуется использовать переопределяемый модуль СтруктураПодчиненностиПереопределяемый, так как это наиболее корректный и поддерживаемый способ кастомизации системы.