Как из внешнего отчета сделать внешнюю обработку в 1С:ЗУП 3.1?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

В практике разработчика 1С часто возникают ситуации, когда созданный ранее отчет необходимо превратить в обработку. Чаще всего это требуется в конфигурациях типа Зарплата и Управление Персоналом 3.1, когда стандартных возможностей отчета по выводу данных становится недостаточно и требуется добавить функционал изменения данных в базе (например, создание документов или корректировка регистров на основании сформированных показателей). Простое переименование расширения файла с .erf на .epf не сработает, так как заголовки форматов и внутренняя структура объектов различаются.

Рассмотрим подробнее несколько способов решения этой задачи: от самого быстрого «визуального» метода до глубокой программной адаптации.

Метод «Буфера» через дерево конфигурации

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

  1. Запустим базу 1С:ЗУП (или любую пустую базу) в режиме Конфигуратор.
  2. Через меню «Файл» — «Открыть» выберем наш внешний отчет .erf. Он откроется в отдельном окне как объект внешнего отчета.
  3. Откроем основное дерево конфигурации. Если конфигурация находится на поддержке, включать возможность изменения не обязательно.
  4. Найдем в дереве конфигурации ветку Обработки.
  5. Теперь самое важное: просто перетащим мышкой (Drag-and-Drop) наш отчет из окна внешнего отчета в ветку Обработки основной конфигурации.
  6. Платформа предложит создать новый объект. После завершения операции в списке обработок появится новый элемент с именем нашего отчета.
  7. Нажмем на созданной обработке правой кнопкой мыши и выберем пункт Сохранить как внешнюю обработку....
  8. Укажем имя файла с расширением .epf.

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

Корректировка основного реквизита формы

Выясним причину, по которой свежеконвертированная обработка может выдавать ошибку при открытии формы (здесь поможет отладка внешних обработок). В управляемом приложении у каждой формы есть Основной реквизит. Для отчета он имеет тип ОтчетОбъект.ИмяОбъекта, а для обработки должен иметь тип ВнешняяОбработкаОбъект.ИмяОбъекта.

Разберем по шагам, как это исправить:

  1. Откроем нашу новую внешнюю обработку в конфигураторе.
  2. Перейдем в раздел Формы и откроем основную форму обработки.
  3. На вкладке Реквизиты (обычно справа) найдем самый верхний реквизит, выделенный жирным шрифтом (обычно он называется Объект).
  4. Посмотрим на его тип. Если там до сих пор значится ОтчетОбъект..., нам нужно нажать на кнопку выбора типа и изменить его на ВнешняяОбработкаОбъект.ИмяВашейОбработки.
  5. Важно: При смене типа платформой могут быть потеряны связи элементов формы с данными. Внимательно проверьте, чтобы в колонке «Путь к данным» у элементов на форме (кнопки, поля ввода) остались привязки к реквизитам объекта.

Ручная адаптация системы компоновки данных (СКД)

Если ваш отчет был построен на базе Схемы компоновки данных, то в обработке он автоматически не заработает так, как раньше. В отчетах 1С существует встроенный механизм, который знает, как исполнять СКД и выводить результат в табличный документ. В обработке нам придется реализовать этот механизм программно.

Проанализируем ситуацию: в обработке макет СКД переносится в раздел «Макеты», но кнопка «Сформировать» больше не будет работать сама по себе. Нам необходимо создать команду формы и прописать код для программного вывода отчета.

Рассмотрим пример кода для модуля формы, который позволит инициализировать СКД внутри обработки:


&НаСервере
Процедура СформироватьОтчетНаСервере()
    
    // Получаем макет СКД из обработки
    СхемаКомпоновкиДанных = РеквизитФормыВЗначение("Объект").ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    
    // Инициализируем настройки
    Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    
    // Подготавливаем данные для вывода
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    // Создаем макет компоновки
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    
    // Процессор компоновки
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    // Очищаем результат на форме (табличный документ)
    Результат.Очистить();
    
    // Выводим результат
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Результат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
КонецПроцедуры

В данном примере Результат — это реквизит формы с типом ТабличныйДокумент, который вы должны добавить на форму обработки самостоятельно, чтобы пользователю было где увидеть данные.

Особенности работы с модулями

При переносе кода из модуля отчета в модуль обработки важно помнить о различиях в контексте ЭтотОбъект. В отчете ЭтотОбъект — это ОтчетОбъект, у которого есть свойства типа КомпоновщикНастроек. В обработке этих свойств по умолчанию нет, если вы не создали их вручную как реквизиты.

Если в коде отчета использовались процедуры типа ПриКомпоновкеРезультата, их содержимое придется перенести в созданную вами процедуру формирования, так как в обработке это событие не вызывается автоматически.

Зачем использовать XML-выгрузку?

Существует еще один продвинутый метод — выгрузка объекта в XML-файлы. Рассмотрим его для полноты картины, хотя он требует особой осторожности. Через пункт меню «Конфигурация» — «Выгрузить конфигурацию в файлы» можно получить XML-описание всех объектов.

В файле описания отчета можно вручную заменить теги <Report> на <Processing>. Однако мы не рекомендуем этот метод для новичков, так как структура свойств отчетов и обработок в последних версиях платформы 8.3.20+ имеет существенные различия в метаданных, что может привести к неработоспособности файла при обратной загрузке.

Подведем итог: Самый эффективный путь — использование дерева конфигурации как промежуточного звена с последующей обязательной корректировкой основного реквизита формы и ручным управлением выводом СКД. Это гарантирует корректную работу объекта в среде ЗУП 3.1 и сохранение всей бизнес-логики, которую вы заложили в исходный отчет.

← На главную