1с внешняя печатная форма с выбором параметров
При запуске печатной формы из 1С Предприятия может потребоваться интерактивный выбор каких либо настроек для продолжения печати. Для решения этой задачи необходимо в печатную форму внедрить механизм вывода формы настроек, на которой будут расположены определенные настройки. В типовых конфигурациях, в управляемом приложении печатные формы программируются и подключаются по другому, чем в обычном приложении.
Внешняя печатная форма в управляемом приложении - это обработка, которая содержит в модуле обработки или в основной форме экспортную функцию Печать() и в модуле обработки экспортную функцию СведенияОВнешнейОбработке(). Базовый пример того как сделать внешнюю печатную форму для управляемого приложения. В базовую печатную форму необходимо внести ряд изменений, для того чтобы перед формированием выводилась дополнительная форма настроек.
Обработка для внешней печатной формы
Обработка содержит две формы: ФормаТестов, ФормаНастроек.
В функции СведенияОВнешнейОбработке() для свойства "Использование" нужно установить значение "ВызовКлиентскогоМетода". Это означает, что при запуске печатной формы из 1С Предприятия, будет автоматически запускаться экспортная функция Печать() ИЗ ОСНОВНОЙ ФОРМЫ ОБРАБОТКИ, при этом форма не открывается.
Форма тестов
Так как в свойствах команды было указано "ВызовКлиентскогоМетода", то экспортная функция Печать(), должна быть расположена в модуле основной формы обработки (в данном случае ФормаТестов), сама форма открыта не будет. Но для отладки, печатная форма будет запускаться через главное меню Файл->Открыть. Поэтому предусмотрим на форме тестов команду для вызова экспортной функции Печать().
Форма настроек
На форме настроек расположим несколько полей ввода. Зададим обработчик действия для кнопки "ПродолжитьПечать".
Еще нужно добавить 2 параметра формы: ИдентификаторКоманды, МассивОбъектов, которые передаются при открытии формы. Эти параметры должны быть с признаком Ключевой параметр.
В модуле объекта обработки, разместим экспортную функцию печать, которая занимается формированием табличного документа.
Комментарии (2)
Как сделать на управляемой форме (УТ 11 и БП 3), чтобы можно было при выборе печати сначала вызвать форму, где пользователь что то выберет, а потом это будет использоваться при печати? На обычных просто все было - в процедуре печати вызываешь форму модально, выбираешь что нужно и вуаля используешь реквизиты формы.
На управляемой печать вроде как на сервере, модуль объекта же. Пробовал и так и сяк. Добился того что сначала появляется форма:
ДобавитьКоманду(ТаблицаКоманд,
"Счет-Фактура с выбором уполномоченных лиц",
"ВПФ_MXL_СчетФактура1137",
"ОткрытиеФормы",
Истина,
"ПечатьMXL");
Но дальше то при попытке печати с формы:
&НаКлиенте
Процедура ОК(Команда)
&НаКлиенте
Процедура ВыполнитьОткрытиеПечатнойФормы()
МассивОбъектов = новый Массив;
Для Каждого Строка из ОбъектыПечати Цикл
МассивОбъектов.Добавить(Строка.Значение);
КонецЦикла;
ДополнительныеОтчетыИОбработкиКлиентПереопределяемый.ПередВыполнениемКомандыПечатиВнешнейПечатнойФормы(
МассивОбъектов, СтандартнаяОбработка);
Отказ = Ложь;
Если СтандартнаяОбработка И Не УправлениеПечатьюКлиент.ПроверитьДокументыПроведены(МассивОбъектов) Тогда
Отказ = Истина;
КонецЕсли;
Если Не Отказ Тогда
ПараметрыОткрытия = Новый Структура("ИсточникДанных, ПараметрыИсточника");
ПараметрыОткрытия.ИсточникДанных = ДополнительнаяОбработкаСсылка;
ПараметрыОткрытия.ПараметрыИсточника = Новый Структура("ИдентификаторКоманды, ОбъектыНазначения");
ПараметрыОткрытия.ПараметрыИсточника.ИдентификаторКоманды = ИдентификаторКоманды;
ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = МассивОбъектов;
ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);
КонецЕсли;
выходило что при печати создается новый экземпляр обработки и там ему пофиг что выбрано в исходной форме.
Как правильно то сделать этот механизм в этих великих управляемых формах с их клиент-серверной невозможностью работать с нормальным логичным алгоритмом.
(0)
Я в доп. команде печати в заказе клиента (УТ 11.1.2.28) слелал так:
(0)Как это будет выглядеть при групповой печати документов на 100? ))
Эм, господа, смысл в том что это ВНЕШНЯЯ Печатная форма и менять модули нельзя. С заменой в конфе и я горазд
(6)У пользователя может быть другое мнение, т.к. он всегда прав.
(7)Уже как минимум 3 варианта подсказали. Можешь и так. А можешь для каждой подписи свою форму накидать ))
(8) Суть то печатной формы чтоб конфиг не менять, мне ж нужен был вариант как на управляемых. Но хоть и косвенно идею то вы подали. Вот так все получилось!
Пример создания внешней печатной форм.
После анализа статей представленных на данном сайте, я к сожалению не нашел информации, где подробно был представлен пример создания печатных форм. Поработав не много со своими отчетами, я выработал некоторую методику, которой и хочу поделиться.
Вступление.
Пример будет базироваться на типовом отчете из документа "СчетНаОплатуПокупателю". Файл шаблона можно взять во вложении.
Первый этап: Поиск типового шаблона и модулей
1. Скачиваем ИСХОДНЫЙ ШАБЛОН приложенный к данной статье "Шаблон печатной формы (УП).epf".
2. Создаем копию ИСХОДНОГО ШАБЛОНА даем ему название на пример "СчетНаОплату.epf", далее открываем его в конфигураторе. Это будет наш ШАБЛОН, с которым мы будем далее работать.
3. В дереве конфигуратора находим документ, печатную форму которого мы планируем переделать. В нашем случае - это документ "СчетНаОплатуПокупателю"
4. Копируем в буфер макет
5. Помещаем скопированный макет в наш ШАБЛОН "СчетНаОплату"
6. Открываем модуль менеджера документа "СчетНаОплатуПокупателю"
Находим процедуре "Печать". Обратите внимание, что в данной процедуре находятся все функции печати документа.
Для примера я возьму одну из них:
Если УправлениеПечатью . НужноПечататьМакет ( КоллекцияПечатныхФорм , "СчетЗаказСПечатью" ) Тогда
УправлениеПечатью . ВывестиТабличныйДокументВКоллекцию ( КоллекцияПечатныхФорм , "СчетЗаказСПечатью" , "Счет на оплату" ,
ПечатьДокумента ( МассивОбъектов , ОбъектыПечати , Истина),, "Документ.СчетНаОплатуПокупателю.ПФ_MXL_СчетЗаказ" );
КонецЕсли;
Итак, как вы можете видеть нам нужна Функция "ПечатьДокумента". Найдем ее в модуле менеджера и скопируем в наш Шаблон.
7. Нажимаем на кнопку "Проверка модуля" или сочетание клавиш (Ctl+F7)
Из текста предупреждения видно, что не хватает еще двух Функций/Процедур:
б. ВывестиЗаголовокПредупреждение(Шапка.Получатель, ТабличныйДокумент, Макет)
Перенесем их из модуля менеджера документа СчетНаОплатуПокупателя в наш ШАБЛОН и повторно нажмем на кнопку "Проверка модуля".
9. Остался последний нюанс.
а. В ШАБЛОНЕ находим функцию ПечатьДокумента(), в ней находим строку где определяется переменная "Макет Макет text-align: left; font-family: courier new,courier; color: blue;"> //Макет = УправлениеПечатью.ПолучитьМакет("Документ.СчетНаОплатуПокупателю.ПФ_MXL_СчетЗаказ");
Макет = ЭтотОбъект . ПолучитьМакет ( "ПФ_MXL_СчетЗаказ" );
10. Заполним сведения о Печатной форме, которая находятся под Функция СведенияОВнешнейОбработке()
а. Идентификатор = "СчетНаОплатуПокупателя" //Идентификатор внешней печатной формы
б. Представление = "Счет"; //Имя команды в интерфейсе
в. ПрефиксВПФ = "Внешний"; //Префикс добавляемый к имени команды интерфейса, для отделения от встроенных команд (ХХХХХХХ)
г. МассивНазначений = Новый Массив; //Массив объектов метаданных, для которых будут определены печатная форма
МассивНазначений.Добавить("Документ.СчетНаОплатуПокупателю"); // в нашем случае - это документ СчетНаОплатуПокупателю. Название копируем из конфигуратора см. п.3. Может быть массив документов, если печатная форма работает с несколькими типами документов.
Всего за 10 пунктов мы смогли сделать внешнюю печатную форму, на основе типового СчетаНаОплату.
Далее вы дорабатываете его в соответствии с потребностями вашего предприятия.
И теперь самое приятное.
Данная обработка позволяет производить отладку в клиент-серверном режиме (в тонком клиенте).
Это был мой первый опыт написания подобных статей, прошу не судить строго.
Рассмотрим настройку и создание новых печатных форм в системе 1С 8.3.
Создание внешних печатных форм для управляемого приложения рассмотрено в отдельной статье.
Создание и настройка печатной формы 1С 8.3
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Далее необходимо выбрать реквизиты, которые нужно указать в шапке печатной формы в том порядке, который нам необходим:
После выбора реквизитов шапки печатной формы 1С 8.2 следует сделать выбор данных для табличной части:
Когда и этот шаг сделан, нужно выбрать реквизиты подвала аналогично реквизитам в шапке.
На последней странице можно оставить всё по умолчанию и нажать ОК:
Что получаем в итоге?
Правильно оформленный макет печатной формы:
Процедура, полностью формирующая печатную форму документа:
Которые можно настроить в 1С 8.2, как нужно нам.
Вывод вызова созданной печатной формы 1С
Созданная и настроенная печатная форма выглядит так:
Другие статьи по 1С:
Читайте также: