Как подключить внешнюю обработку к документу в 1С:УПП 1.3 без изменения конфигурации?

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

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

Способ 1. Подключение через механизм внешних печатных форм (ВПФ)

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

Рассмотрим подробнее требования к структуре такой внешней обработки:

  1. Создание реквизита контекста: Добавим в обработку реквизит с именем СсылкаНаОбъект (тип данных: ДокументСсылка.РеализацияТоваровУслуг или Произвольный). При вызове обработки типовая подсистема автоматически передаст в этот реквизит ссылку на текущий документ.
  2. Экспортная функция печати: В модуле объекта внешней обработки объявим экспортную функцию Печать().
  3. Интерактивное открытие формы: Внутри функции Печать() обратимся к вызову формы обработки через метод ПолучитьФорму() и откроем её. Чтобы избежать открытия пустого стандартного окна предварительного просмотра печати после завершения работы нашей формы, функция Печать() должна возвращать Неопределено или пустой табличный документ.

Посмотрим на пример программного кода модуля объекта внешней обработки:


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

Способ 2. Использование обработки заполнения табличных частей

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

Разберем по шагам реализацию модуля объекта:

  1. В модуле объекта создадим экспортную процедуру со строгой сигнатурой: Инициализировать(Объект, ИмяТабличнойЧасти = Неопределено, ТабличноеПоле = Неопределено) Экспорт.
  2. Параметр Объект содержит ссылку на объект в памяти (тип ДокументОбъект), что дает возможность напрямую редактировать данные и управлять свойством Модифицированность без необходимости перезаписи документа в базу данных.
  3. При необходимости внутри процедуры Инициализировать() также можно открыть диалоговое окно для ввода параметров пользователем.

Посмотрим на пример реализации процедуры инициализации:


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

Регистрация обработки в информационной базе

Проанализируем шаги регистрации готового файла .epf в пользовательском режиме УПП 1.3:

  1. Перейдем в интерфейсе: Сервис → Дополнительные отчеты и обработки → Дополнительные внешние печатные формы (или Внешние обработки заполнения табличных частей).
  2. Нажмем кнопку Добавить и загрузим файл внешней обработки с диска.
  3. В табличной части Принадлежность печатной формы (или Состав) добавим строку и укажем целевой документ — РеализацияТоваровУслуг.
  4. Зададим понятное наименование кнопки (например, «Специальная обработка с макетом»), сохраним элемент справочника и закроем форму.

Важные технические нюансы и ограничения

  1. Безопасный режим: При регистрации внешней обработки проверьте состояние флага безопасного режима. Если обработка взаимодействует с файловой системой через низкоуровневые механизмы, запускает внешние COM-соединения или требует привилегированного режима, безопасный режим должен быть отключен.
  2. Права доступа: Пользователям информационной базы должна быть назначена роль с правом интерактивного открытия внешних обработок (ИнтерактивноеОткрытиеВнешнихОбработок).
  3. Групповая обработка: Если внешняя форма открывается модально внутри функции Печать(), при попытке пользователя распечатать несколько выделенных документов из списка диалоговые окна будут последовательно блокировать интерфейс для каждого документа в очереди.
  4. Блокировки данных: Если внешняя печатная форма изменяет документ непосредственно в базе данных (вызывая метод Записать() у нового ДокументОбъект), а сам документ в этот момент открыт пользователем на клиенте, может возникнуть конфликт блокировок или перезапись несохраненных изменений.
← На главную