Как в 1С:ERP 2.5 отобразить наименование этапа производства в списке связанных документов?

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

При работе с документом «Заказ на производство» в 1С:ERP часто возникает необходимость проанализировать всю цепочку связанных с ним документов. Стандартный отчет «Связанные документы» отлично справляется с этой задачей, однако у него есть существенный недостаток: для этапов производства он выводит только их тип, номер и дату, например, «Этап производства №123 от 10.10.2023». При этом в самом документе «Этап производства» есть содержательное наименование, которое задается пользователем и отражает суть выполняемых работ (например, «Сборка корпуса», «Покраска», «Контроль качества»).

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

Вариант 1: Анализ через стандартный отчет «Структура заказа» (без программирования)

Прежде чем прибегать к доработкам конфигурации, стоит рассмотреть стандартный функционал, который может частично решить нашу задачу. В 1С:ERP существует мощный отчет «Структура заказа». Он предоставляет иерархическое представление всех объектов, связанных с заказом, и часто содержит более подробную информацию, чем отчет «Связанные документы».

Как его использовать:

  1. Откройте интересующий вас документ «Заказ на производство».
  2. В панели навигации найдите команду для перехода к отчетам и выберите «Структура заказа».
  3. В сформированном отчете вы увидите дерево документов. В зависимости от настроек, представление этапов производства здесь может быть более информативным.

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

Вариант 2: Доработка конфигурации (с помощью программирования)

Для того чтобы изменить представление объекта в стандартных отчетах, таких как «Связанные документы», необходимо вмешательство в код конфигурации. Важно: все доработки настоятельно рекомендуется выполнять с помощью механизма расширений конфигурации. Это позволит сохранить основную конфигурацию на поддержке и значительно упростит процесс будущих обновлений системы.

Рассмотрим два основных подхода к реализации этой задачи.

Способ 1. Рекомендуемый: использование переопределяемого модуля

В «Библиотеке стандартных подсистем» (БСП), на которой построена 1С:ERP, существует специальный механизм для безопасной кастомизации подобных вещей. Для нашей задачи идеально подходит переопределяемый общий модуль СтруктураПодчиненностиПереопределяемый.

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

Разберем по шагам:

  1. Создайте расширение конфигурации. Если у вас его еще нет, добавьте новое расширение с префиксом вашей организации и снимите флаг «Безопасный режим».
  2. Заимствуйте общий модуль. Найдите в дереве конфигурации общий модуль СтруктураПодчиненностиПереопределяемый и добавьте его в ваше расширение.
  3. Создайте обработчик события. В модуле расширения создайте процедуру с аннотацией &После("ПриПолученииПредставления"). Это означает, что ваш код будет выполняться после стандартной процедуры.
  4. Напишите код. Внутри процедуры необходимо проверить, что обрабатываемый объект — это именно документ «Этап производства», получить его наименование и сформировать новое, более информативное представление.

Посмотрим на пример кода:

Допустим, наименование этапа хранится в реквизите Наименование документа «Этап производства».


&После("ПриПолученииПредставления")
Процедура Расш_ПриПолученииПредставления(ТипДанных, Данные, Представление, СтандартнаяОбработка)

    // Проверяем, что текущий документ - это "Этап производства"
    Если ТипЗнч(Данные.Ссылка) = Тип("ДокументСсылка.ЭтапПроизводства") Тогда
        
        // Получаем значение реквизита "Наименование" из документа.
        // Используем ОбщегоНазначения.ЗначениеРеквизитаОбъекта для оптимизации,
        // чтобы не получать весь объект из базы данных.
        НаименованиеЭтапа = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Данные.Ссылка, "Наименование");
        
        // Если наименование заполнено, добавляем его к стандартному представлению
        Если ЗначениеЗаполнено(НаименованиеЭтапа) Тогда
            Представление = СтрШаблон("%1 (%2)", Данные.Представление, НаименованиеЭтапа);
            
            // Важно! Устанавливаем СтандартнаяОбработка в Ложь,
            // чтобы система не перезаписала наше представление своим.
            СтандартнаяОбработка = Ложь;
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

После сохранения расширения и перезапуска сеанса, в отчете «Связанные документы» для этапов производства будет выводиться не только номер и дата, но и их наименование в скобках, например: «Этап производства №123 от 10.10.2023 (Сборка корпуса)». Этот способ является наиболее правильным и безопасным с точки зрения архитектуры 1С.

Способ 2. Альтернативный: изменение общей формы «СвязанныеДокументы»

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

Алгоритм действий:

  1. Заимствуйте общую форму. Добавьте в ваше расширение общую форму СвязанныеДокументы.
  2. Найдите функцию формирования представления. В модуле формы нужно найти процедуру или функцию, которая отвечает за формирование текстового представления объекта для вывода в отчет. Часто эта логика находится внутри циклов обхода результатов запроса. Например, в одном из вариантов это может быть функция, подобная ПредставлениеОбъектаДляВыводаВОтчет.
  3. Добавьте свой код. Внутри этой функции необходимо добавить условие для проверки типа документа и, если это «Этап производства», дополнить стандартное представление его наименованием.

Посмотрим на примерный фрагмент кода, который нужно было бы встроить в существующую логику:


// ... Начало кода функции, где уже получено стандартное ПредставлениеОбъекта ...

МетаданныеОбъекта = Выборка.Ссылка.Метаданные();

// Наша вставка
Если МетаданныеОбъекта.Имя = "ЭтапПроизводства" Тогда
    // Обращаемся напрямую к реквизиту. В контексте формы это может быть менее производительно.
    НаименованиеЭтапа = Выборка.Ссылка.Наименование;
    Если НЕ ПустаяСтрока(НаименованиеЭтапа) Тогда
        ПредставлениеОбъекта = СтрШаблон("%1 (%2)", ПредставлениеОбъекта, НаименованиеЭтапа);
    КонецЕсли;
КонецЕсли;
// Конец нашей вставки

// ... Дальнейший код функции ...

Возврат ПредставлениеОбъекта;

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

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

← На главную