Управляемое приложение. Внешняя печатная форма. Вызов формы обработки для последующей печати
Управляемое приложение. Внешняя печатная форма. Вызов формы обработки для последующей печати с выводом в типовую форму печати конфигурации. По большей части пишу для себя, как напоминание. Так же надеюсь, что кому-нибудь поможет мой опыт.
Кому подойдет информация: Программист 1С. Стояла несложная на первый взгляд задача в рамках перехода с обычного приложения на управляемый интерфейс для внешней печатной формы "переписать" ее код. Задача решалась в управляемом интерфейсе конфигурации 1С: Бухгалтерия 8 редакция 3.0. Но у формы была одна особенность. При обращении к экспортной функции модуля "Печать()" внешней обработки, вызывалась "промежуточная форма" для заполнения некоторых параметров, которые должны были так же выводится в печатную форму. Если для обычного приложения проблемы с такой реализацией не было вообще, то в управляемом приложении столкнулся с кучей сложностей, которые с трудом, но были преодолены. Скачать готовое решение можно на странице публикации на Infostart.ru. Первое: вызов "промежуточной формы". Сначала столкнулся с этой проблемой, но потом было найдено стандартное в таком случае решение. В модуле обработки: // Вспомогательная процедура.
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование = "ВызовКлиентскогоМетода", ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры В модуля основной формы обработки, которая будет открываться при использовании внешней печатной формы добавляем процедуру: &НаКлиенте
Процедура Печать(ИдентификаторВыполняемойКоманды, МассивОбъектовНазначения) Экспорт Открыть(); КонецПроцедуры На форме размещается кнопка, в процедуру которой возвращается Табличный документ - результат выполнения кода для получения самой печатной формы: &НаКлиенте
Процедура Печатать(Команда) ТабДокумент = ПечататьНаСервере(); Закрыть(); КонецПроцедуры Функция ПечататьНаСервере() ОбъектФормы = РеквизитФормыВЗначение("Объект"); ТабДокумент = ОбъектФормы.СформироватьПечатнуюФормуАктНаСписаниеМЦ(); Возврат ТабДокумент; КонецФункции При желании можно далее просто открыть ТабДокумент с помощью метода Показать(). Но &НаКлиенте
Процедура Печатать(Команда) ТабДокумент = ПечататьНаСервере(); // Попытка напечатать типовой формой КлючУникальности = Строка(Новый УникальныйИдентификатор); ИмяМакета = "АктНаСписаниеМЦ"; МассивОбъектовПечати = Новый Массив; МассивОбъектовПечати.Добавить(Объект.СсылкаНаОбъект); ПараметрыФормы = Новый Структура("ИсточникДанных, ПараметрыИсточника, ПараметрКоманды, ИменаМакетов, ТабличныйДокумент"); ПараметрыФормы.ТабличныйДокумент = ТабДокумент; ПараметрыФормы.ИсточникДанных = Неопределено; ПараметрыФормы.ПараметрКоманды = МассивОбъектовПечати; ПараметрыФормы.ИменаМакетов = ИмяМакета; ПараметрыИсточника = Новый Структура("ИдентификаторКоманды"); ПараметрыИсточника.ИдентификаторКоманды = ИмяМакета; ПараметрыФормы.ПараметрыИсточника = ПараметрыИсточника; ОткрытьФорму("ВнешняяОбработка.АктНаСписаниеМЦ.Форма.ПечатьДокументов", ПараметрыФормы, ЭтаФорма, КлючУникальности); ТабДокумент.Показать(); Закрыть(); КонецПроцедуры Далее комментирую участки кода и неменого подменяю типовой код для того, чтобы выводить табличный документ в типовую форму печати конфигурации. &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) // //Перем КоллекцияПечатныхФорм; КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(Параметры.ИменаМакетов); КоллекцияПечатныхФорм[0].СинонимМакета = Параметры.ИменаМакетов; КоллекцияПечатныхФорм[0].ТабличныйДокумент = Параметры.ТабличныйДокумент; //\\ УстановитьУсловноеОформление(); ... Процедура СформироватьПечатныеФормы(КоллекцияПечатныхФорм, ИменаМакетов, Отказ) В модуль формы копируется типовая процедура СформироватьПечатныеФормы, переименовывается в моем примере УправлениеПечатьюСформироватьПечатныеФормы, в ней комментируются или изменяются участки кода: Процедура УправлениеПечатьюСформироватьПечатныеФормы(ИмяМенеджераПечати, Знач ИменаМакетов, МассивОбъектов, ПараметрыПечати,
КоллекцияПечатныхФорм, ОбъектыПечати = Неопределено, ПараметрыВывода, ДопустимыеТипыОбъектовПечати = Неопределено) Экспорт // //ПараметрыВывода = ПодготовитьСтруктуруПараметровВывода(); ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода(); //\\ ... // //КоллекцияПечатныхФорм = ПодготовитьКоллекциюПечатныхФорм(Новый Массив); //\\ ... // //ВнешниеПечатныеФормы = СписокПечатныхФормИзВнешнихИсточников(ИсточникВнешнихПечатныхФорм); //\\
... Для Каждого ИмяМакета Из ИменаМакетов Цикл ... ... // ... // ... // ... КонецПроцедуры Минус, который вижу в данной реализации, что если разработчик изменит вид общей формы ""ПечатьДокументов" типовой конфигурации, то возможно, действия потребуется повторять, если будет необходимо, чтобы форма обработки ничем не отличалась от типовой. Оцените, оказалась ли эта публикация полезна для Вас?
© www.azhur-c.ru 2013-2025. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу. 07-10-2014 Журавлев А.С. (www.azhur-c.ru) |
|
|||||||||||||
Copyright 2013-. Azhur-c.ru
ИП Журавлев Александр Сергеевич ИНН 667000271590 ОГРНИП 312667014300041 |