[Практика программирования] 1С 8 внешняя печатная форма с открытием промежуточной формы
Как кодом реализовать в 1С 8 для внешней печатной формы диалоговую промежуточную форму для указания настроек или параметров выбора последующей печати. Так же в статье найдете ссылку на пример обработки внешней печатной формы с окном указания параметров печати.
Механизм внешних печатных форм в решениях 1С 8, работающих в режиме управляемого интерфейса, усложнился по сравнению с предыдущими редакциями. Теперь нужно знать более сложную методику организации кода таких внешних обработок. Особую сложность имеют печатные формы, в которых перед непосредственной печатью, кодом формирования печатной формы (табличного документа), разработчику нужно вывести пользователю диалоговое окно отдельной формой, чтобы указать параметры печати или настройки печати. И, если методика для внешней печатной формы в1С 8 без диалогового окна известна и более-менее проста для разработчиков, то для случая открытия промежуточной печатной формы в силу нечастого возникновения подобной задачи вызывает методические трудности и проблему поиска методологии написания кода в таком случае. Когда делается печатная форма без открытия промежуточного окна, формы, то в модуле печатной формы помещается экспортная процедура "Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода=Неопределено)", в экспортной функции "СведенияОВнешнейОбработке()" модуля обработки печатной формы объявляется, что вызов процедуры печати происходит на стороне сервера, указав вариант использования команды в значении "ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода()". ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.2"); ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма(); ПараметрыРегистрации.Версия = ЭтотОбъект.Метаданные().Комментарий; //ПараметрыРегистрации.БезопасныйРежим = Ложь; ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг"); КомандаПечати = ПараметрыРегистрации.Команды.Добавить(); КомандаПечати.Идентификатор = "ДокументыЗаявка"; КомандаПечати.Представление = НСтр("ru = 'Счет на оплату (из реализации)'"); КомандаПечати.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода(); КомандаПечати.ПоказыватьОповещение = Ложь; КомандаПечати.Модификатор = "ПечатьMXL"; Возврат ПараметрыРегистрации; Для случая, когда перед выводом печатной формы нужно открыть окно, то в функции "СведенияОВнешнейОбработке()" будет изменение. Вариант использования команды должен быть изменен на значение "ТипКомандыВызовКлиентскогоМетода()". Это будет обозначать, что необходимо при начале обращения к печатной форме открыть форму обработки, которая установлена в качестве основной. КомандаПечати.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
Нажатие на изображении увеличит его Так же для формы нужно определить параметры по списку: Нажатие на изображении увеличит его При этом открытие формы после подключения в базу и обращении к ней через механизмы БСП само собой не произойдет. Нужно определить в модуле формы клиентскую экспортную функцию "Печать(ПереданныйИдентификаторКоманды, МассивОбъектов)": &НаКлиенте Процедура Печать(ПереданныйИдентификаторКоманды, МассивОбъектов) Экспорт ЭтаФорма.Открыть(); КонецПроцедуры Далее Сам код печати может быть организован в модуле формы "на стороне сервера" (с директивой &НаСервере перед процедурой печати). Но в этом примере будут обращение к процедуре печати модуля обработки печати. Чтобы в случае чего, форме можно было вернуть функционал печати без диалогового окна, изменив значение свойства "КомандаПечати.Использование". Далее необходимо продолжить процесс формирования печатной формы, для чего необходимо создать команда кнопки для продолжения печати. А кнопку разместить на форме. Главное, чтобы процедура обработчика команды кнопки содержала указанный ниже код: &НаКлиенте Процедура ПродолжитьПечать() Если ТипЗнч(Параметры.ОбъектыНазначения) = Тип("СписокЗначений") Тогда МассивОбъектов = Параметры.ОбъектыНазначения.ВыгрузитьЗначения(); Иначе МассивОбъектов = Параметры.ОбъектыНазначения; КонецЕсли; РезультатПечати = ПечатьТД("ДокументыЗаявка", МассивОбъектов); УправлениеПечатьюКлиент.ПечатьДокументов( РезультатПечати.КоллекцияПечатныхФорм, РезультатПечати.ОбъектыПечати, ЭтотОбъект.ВладелецФормы); ЭтаФорма.Закрыть(); КонецПроцедуры где в функцию "ПечатьТД" передается по названию идентификатор команды печати, которая должна быть выполнена и которая определяется в функции "СведенияОВнешнейОбработке()" модуля обработки печатной формы. Процедурой общего модуля "УправлениеПечатьюКлиент.ПечатьДокументов" происходит вывод коллекции полученных печатных форм в типовую обработку печати конфигурации базы. И далее остается определить код функции "ПечатьТД", где определяется коллекция печатных форм и происходит ее заполнение за счет экспортной процедуры "Печать()" переменной "ОбработкаОбъект" модуля обработки, про которую упоминается в начале статье для случая печати без вывода диалогового окна для указания параметров печати. Функция ПечатьТД(ИменаМакетов, МассивОбъектов) КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(ИменаМакетов); ОбъектыПечати = Новый СписокЗначений; ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, ИменаМакетов); Если ПечатнаяФорма <> Неопределено Тогда ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); ОбработкаОбъект.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати); КонецЕсли; Результат = Новый Структура("КоллекцияПечатныхФорм,ОбъектыПечати"); Результат.КоллекцияПечатныхФорм = ОбщегоНазначения.ТаблицаЗначенийВМассив(КоллекцияПечатныхФорм); Результат.ОбъектыПечати = ОбъектыПечати; Возврат Результат; КонецФункции При такой организации кода значения параметров печати, выбранных в промежуточном диалоговом окне можно хранить в реквизитах внешней обработки. Они будут доступны, их значения, указанные пользователем и в модуле обработки.
Я не навязываю Вам свой вариант. Если Вы хотите сделать без подобных особенностей, то можно обратиться к описанию базовых примеров реализации подобной печатной формы, например в описании в статье на сайте 1clenta.ru "Открытие формы настроек при запуске печатной формы в управляемом приложении" или на 3w.myblog-1c.ru "Внешняя печатная форма с диалогом перед печатью (УФ)" Вы можете скачать рабочий пример шаблона обработки, на примере которой сделаны скриншоты в статье. Этот файл так же содержит код механизма отладки, который можно включить, убрав комментарий в коде. А после тестирования вернуть комментарий обратно:
Скачать пример шаблона обработки внешней печатной формы с диалоговым окном выбора параметров дальнейшей печати в управляемом интерфейсе. Оцените, оказалась ли эта публикация полезна для Вас?
© www.azhur-c.ru 2013-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу. 06-11-2023 Журавлев А.С. (Сайт azhur-c.ru) |
|
|||||||||||||
Copyright 2013-2020. Azhur-c.ru
ИП Журавлев Александр Сергеевич ИНН 667000271590 ОГРНИП 312667014300041 |