v8.2 УП: Практические нюансы подключения внешних обработок и печатных форм
Статья создана с целью помощь начинающим авторам внешних обработок, отчётов и печатных форм, подключаемых к типовым конфигурациям на базе БСП.
- Описание
- Подробнее
Описание
В своё время задался вопросом создания внешней обработки для УНФ и проштудировал несколько статей на эту тему, среди которых встретил и данную публикацию.
Однако, в статье нет примеров для каждого случая. На практике пришлось столкнуться с нюансами, один из которых присущ конкретному релизу УНФ, а второй, подозреваю универсален для всех конфигураций на БСП.
Нюанс конфигурации «Управление небольшой фирмой, редакция 1.4 (1.4.6.19)»
Замечена эта особенность мной была и на предыдущих релизах и до которого просуществует — неизвестно. Выглядит она так…
В процессе подключения внешней обработки необходимо указать разделы командного интерфейса, в которых она будет размещаться. За это отвечает пункт «Размещение«. Нажимаем гиперссылку «Не определено» и в открывшемся окне наблюдаем пустой список. Исследование показало, что в релизе 1.4.5.25 всё было хорошо. Что же случилось? Ответ кроется в общем модуле «ДополнительныеОтчетыИОбработкиПереопределяемый«: процедуры «ОпределитьРазделыСДополнительнымиОбработками» и «ОпределитьРазделыСДополнительнымиОтчетами» пусты. Необходимо добавить в них нужные разделы, как это было раньше. Исходя из принципа внесения минимальных изменений в типовую конфигурацию, снимаем с поддержки только корневой элемент конфигурации для возможности создания новых объектов. Без этого никак.
Процедура ОпределитьРазделыСДополнительнымиОбработками(Разделы) Экспорт
Разделы.Добавить(Метаданные.Подсистемы.НастройкаИАдминистрирование);
КонецПроцедуры
Процедура ОпределитьРазделыСДополнительнымиОтчетами(Разделы) Экспорт
Разделы.Добавить(Метаданные.Подсистемы.НастройкаИАдминистрирование);
КонецПроцедурыЕсли указать стандартный раздел «НастройкаИАдминистрирование«, то всё заработает без дополнительных модификаций. Если же нужен иной раздел, надо проверить существование общей команды «ДополнительныеОбработки[НазваниеРаздела]«. В типовой УНФ на данный момент присутствует команда «ДополнительныеОбработкиАдминистрирование» для одноимённого раздела. Допустим, нам нужно добавить обработку в свой раздел «Доработки«. Копированием существующей команды «ДополнительныеОбработкиАдминистрирование» создаём свою команду «ДополнительныеОбработкиДоработки«, включаем её в нужную подсистему, а в обработчике меняем только название подсистемы. Получается вроде этого:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ДополнительныеОтчетыИОбработкиКлиент.ОткрытьФормуКомандДополнительныхОтчетовИОбработок(
ПараметрКоманды,
ПараметрыВыполненияКоманды,
ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка(),
"Доработки"
);
КонецПроцедурыТеперь в нужной нам подсистеме появляется пункт «Дополнительные обработки» и если мы включали эту подсистему в список выбора разделов в процедуре «ОпределитьРазделыСДополнительнымиОбработками«, то для обработок отныне доступно указание этой подсистемы.
Теперь добрались и до второго нюанса. Это создание и подключение внешней обработки, аналогичной внешней обработке заполнения ТЧ для конфигураций с обычным интерфейсом. Такая обработка вызывается, например, из документа и каким-либо образом обрабатывает табличную часть. В упоминавшейся ранее статье указывается лишь перечень значений для параметра «Использование«. Для обычных обработок это «ОткрытиеФормы«. Нам же, допустим, надо каким-нибудь образом обработать табличную часть без открытия окон. Подозрение падает на значение «ВызовСерверногоМетода«. Описание гласит, что «ВызовСерверногоМетода – вызов экспортного метода из модуля обработки«. Если попробовать сделать экспортную процедуру в модуле обработки, то возникнет ошибка, ссылающаяся на процедуру «ВыполнитьНазначаемуюКомандуДополнительногоОтчетаИлиОбработки» модуля «ДополнительныеОтчетыИОбработки«:
Процедура ВыполнитьНазначаемуюКомандуДополнительногоОтчетаИлиОбработки(ВнешнийОбъект, Знач ИдентификаторКоманды, ПараметрыКоманды, ОбъектыНазначения, Знач СценарийВБезопасномРежиме = Ложь)
Если СценарийВБезопасномРежиме Тогда
ВыполнитьСценарийВБезопасномРежиме(ВнешнийОбъект, ПараметрыКоманды, ОбъектыНазначения);
Иначе
Если ПараметрыКоманды = Неопределено Тогда
ВнешнийОбъект.ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения);
Иначе
ВнешнийОбъект.ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыКоманды);
КонецЕсли;
КонецЕсли;
КонецПроцедурыДопускаю, что этот механизм, ранее мог вызывать экспортную процедуру, но сейчас он работает иначе. Вызывается экспортная процедура «ВыполнитьКоманду» с двумя (или тремя) параметрами: ИдентификаторКоманды и ОбъектыНазначения. В первом указывается название команды, которой воспользовался пользователь, а во втором — массив ссылок на объекты, к которым применяется данная команда. Соответственно, в модуле обработки необходимо добавить процедуру, куда можно вставить обработчик команды:
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
ЗаписьЖурналаРегистрации("Вызов команды " + ИдентификаторКоманды);
КонецПроцедуры


