Внешняя печатная форма с вводом параметров через дополнительную форму

01.04.18

Разработка - Инструментарий разработчика

Удобный ввод параметров в печатную форму с помощью дополнительной формы

Скачать файлы

Наименование Файл Версия Размер
Пример печатной формы
.epf 11,23Kb
184
.epf 11,23Kb 184 Скачать

Иногда пользователям необходимо печатать отчет с определенными данными и такие данные могут меняться, поэтому было бы логичнее создать форму ввода параметров для печатной формы, чтобы не тревожить программиста по пустякам)) Вот хочу показать небольшой пример как я вывела на печатную форму свой параметр "Название печатной формы", вообще в параметры можно добавлять что угодно, но проще для меня вывести обычную строку для примера:).

Итак, что мы делаем:

1. Создаем новую внешнюю обработку и указываем сведения в модуле объекта:

Функция СведенияОВнешнейОбработке() Экспорт
	
	РегистрационныеДанные = Новый Структура;
	МассивНазначений = Новый Массив;
	
	РегистрационныеДанные.Вставить("Назначение", МассивНазначений);
	РегистрационныеДанные.Вставить("Наименование", "Печатная форма");
	РегистрационныеДанные.Вставить("БезопасныйРежим", Ложь);
	РегистрационныеДанные.Вставить("Версия", "1.0");
	
	РегистрационныеДанные.Вставить("Вид", "ПечатнаяФорма");
	
	РегистрационныеДанные.Вставить("Информация", "Обработка сделано по новому стандарту подключения внешних обработок 8.2. ");
	
	тзКоманд = Новый ТаблицаЗначений;
	тзКоманд.Колонки.Добавить("Идентификатор");
	тзКоманд.Колонки.Добавить("Представление");
	тзКоманд.Колонки.Добавить("Модификатор");
	тзКоманд.Колонки.Добавить("ПоказыватьОповещение");
	тзКоманд.Колонки.Добавить("Использование");
	
	строкаКоманды = тзКоманд.Добавить();
	строкаКоманды.Идентификатор = "ПечатнаяФорма";
	строкаКоманды.Представление = "Печатная форма";
	строкаКоманды.ПоказыватьОповещение = Истина;
	строкаКоманды.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
	строкаКоманды.Модификатор = "ПечатьMXL";
		
	РегистрационныеДанные.Вставить("Команды", тзКоманд);

	Возврат РегистрационныеДанные;
КонецФункции

Также в модуле объекта пишем две процедуры:

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


Функция ПечатьМакета(МассивОбъектов, ОбъектыПечати)
	ДокументРезультат = Новый ТабличныйДокумент;	
	Макет     = ЭтотОбъект.ПолучитьМакет("НовыйМакет");		
	ОбластьМакета	= Макет.ПолучитьОбласть("ОбластьМакета");
	ОбластьМакета.Параметры.НазваниеПечатнойФормы = МассивОбъектов[0].НазваниеПечатнойФормы;
	ДокументРезультат.Вывести(ОбластьМакета);		
	
	Возврат ДокументРезультат;	
	
КонецФункции

2. Переходим к созданию основной формы обработки, она нам понадобится только для исполнения процедур:

  • Добавим параметры к форме, обязательно в свойствах параметров указать "Ключевой параметр", после этого параметры выделятся жирным шрифтом 

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

&НаКлиенте
Процедура ПечатьЗавершение(Результат, ДополнительныеПараметры) Экспорт

	Если Результат <> Неопределено Тогда 
		Если Результат.Печать Тогда 
			ВыполняемаяКоманда = Параметры;
			
			ПараметрыОткрытия                                         = Новый Структура("ИсточникДанных, ПараметрыИсточника");
			ПараметрыОткрытия.ИсточникДанных                          = Параметры.ДополнительнаяОбработкаСсылка;
			ПараметрыОткрытия.ПараметрыИсточника                      = Новый Структура("ИдентификаторКоманды, ОбъектыНазначения");
			ПараметрыОткрытия.ПараметрыИсточника.ИдентификаторКоманды = ВыполняемаяКоманда.ИдентификаторКоманды;
			
			ДополнительныеПараметры = Новый Структура();
			ДополнительныеПараметры.Вставить("СтруктураПараметров", Результат);
			
			ОбъектыНазначения = Новый Массив;
			ОбъектыНазначения.Добавить(Результат);
			
			//Ссылки на вызвавшие форму объекты
			Для каждого ОбъектНазначения Из ВыполняемаяКоманда.ОбъектыНазначения Цикл
				ОбъектыНазначения.Добавить(ОбъектНазначения);
			КонецЦикла; 
			ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = ОбъектыНазначения;
			
			//Вывод сформированного табличного документа в штатную форму.
			ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры
  • Создаем еще одну форму, и назовем ее "ФормаВвода", разместим на ней реквизит "НазваниеПечатнойФормы":

  • И на команду "Печать" добавим следующий код:
&НаКлиенте
Процедура Печать(Команда)
	Структура = Новый Структура; 
	Структура.Вставить("НазваниеПечатнойФормы", НазваниеПечатнойФормы);
	Структура.Вставить("Печать" , Истина); 
	ЭтаФорма.Закрыть(Структура);
КонецПроцедуры

 

Данная печатная форма тестировалась в конфигурации 1с Бухгалтерия предприятия 3.0 (8.3.10.2561).

параметры в печатную форму печатная форма настройки печатной формы

См. также

INFOSTART TECH EVENT 2023, 11-13 октября, Санкт-Петербург

Инструментарий разработчика Мобильная разработка DevOps и автоматизация разработки Администрирование СУБД Мероприятия Россия Платные (руб)

XIII конференция по управлению и технологиям автоматизации учета на платформе 1С:Предприятие, которая пройдет в Санкт-Петербурге и соберет 1500 участников из разных регионов России и мира.

5100 руб.

09.12.2022    30068    5    0    

421

Онлайн-интенсив "DevOps для 1С". с 4 сентября по 17 октября 2023 г.

Инструментарий разработчика DevOps и автоматизация разработки DevOps для 1С Платные (руб)

Данный онлайн-курс (интенсив) предусматривает изучение процессов, инструментов и методик DevOps, их применение при разработке на платформе 1С. 

20.06.2023    9715    0    Infostart    2    

120

SALE! %

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 10000 руб.

02.09.2020    93214    474    380    

530

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 руб.

14.01.2013    170075    1050    0    

791

Автоматизация труда программиста. Библиотека прикладных функций

Инструментарий разработчика Платформа 1С v8.3 Платформа 1C v8.2 Платформа 1С v8.1 Конфигурации 1cv8 Платные (руб)

Программист - это человек, непрерывно принимающий решения. Написание кода не является процессом принятия решения - это всего лишь трансляция ваших желаний. Если вас периодически тяготит написание сотен строк кода ради решения задач, то прошу обратить внимание. Данный продукт позволит существенно сократить время на рутинные операции при разработке. За счет библиотечной реализации сокращается объём кода, а его читаемость повышается. К библиотеке прилагается документация API и шаблоны кода для наиболее популярных методов.

4200 руб.

16.04.2021    12439    3    9    

9

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    96420    234    97    

285

Печать любых непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать любые печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

3480 руб.

22.08.2023    795    1    0    

1

Менеджер конфигураций 1С

Инструментарий разработчика Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1439 руб.

21.02.2023    5213    2    33    

14
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. and_r 01.11.19 08:54 Сейчас в теме
Спасибо за ликбез )
3. evakuzmina 11.11.19 16:09 Сейчас в теме
Хочу поменять название обработки на "Тест" и... печ. форма перестаёт работать.
4. Margo462 441 12.11.19 12:52 Сейчас в теме
(3) где название меняете? Скрин прикрепите
21. VAAngelov 350 12.11.21 10:28 Сейчас в теме
(4)Скажите пжл, как ее отлаживаете?
5. evakuzmina 12.11.19 21:51 Сейчас в теме
А теперь получилось. В заблуждение ввело то, что название формы совпало с названием параметра:
РегистрационныеДанные.Вставить("Вид", "ПечатнаяФорма");
Обратите на это внимание.
6. klarazai 25.12.19 10:13 Сейчас в теме
Очень помогло. Спасибо БОЛЬШОЕ!!!!!!
7. user717534 11 24.06.20 22:26 Сейчас в теме
У меня из-за этой строки
ОбъектыНазначения.Добавить(Результат);
вылезла ошибка
"Метод объекта не обнаружен (Метаданные)".
Это лишняя строка, её можно просто убрать.
За примеры кода огромное спасибо.
BrainWashed; +1 Ответить
8. Daynestro07 26.06.20 15:09 Сейчас в теме
Спасибо, очень помогло.
9. kusd 25.07.20 12:28 Сейчас в теме
Спасибо, помогло решить задачу!
10. KEV8383 20 02.09.20 18:10 Сейчас в теме
"МассивОбъектов" внешней печатной формы хранит ссылки на объекты печати.
Теперь он хранит дополнительные параметры формы ввода.

Как теперь получить в модуле объекта "Массив объектов" т.е. и новые параметры формы ввода и массив объектов печсати ))) ?!
11. KEV8383 20 11.09.20 15:40 Сейчас в теме
(10)
Разобрался:

В основной форме добавляем в параметры формы "ОбъектыНазначенияМассив":

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

КонецПроцедуры
Показать


В форме ввода добавляем процедуру "ПриСозданииНаСервере" в которой принимаем "ОбъектыНазначенияМассив" :

&НаСервере
 Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	 
	Если Параметры.Свойство("ОбъектыНазначенияМассив") Тогда
		МассивСсылокНаОбъекты = Параметры.ОбъектыНазначенияМассив;
	КонецЕсли;
		 
 КонецПроцедуры  


Далее передаем все параметры формы ввода и наш массив ссылок в процедуру печати модуля объекта.


Прошу поправить если что-то не учел или если можно проще.
13. phill75 04.12.20 01:18 Сейчас в теме
(11) Не совсем понял как можно в параметры засунуть массив: мне выдает: Тип "Массив" не может использоваться в данных формы
15. user1042850 26.01.21 14:06 Сейчас в теме
(11) Как вы это сделали, никак не получается получить параметры в модуле объекта, тем более без отладки
12. malets 2 28.09.20 11:19 Сейчас в теме
Спасибо, сэкономили драгоценное время мне!
14. user1042850 26.01.21 14:04 Сейчас в теме
Далее передаем все параметры формы ввода и наш массив ссылок в процедуру печати модуля объекта.


Можете пояснить как это сделать? Тоже не понял как
16. nmifn 26.01.21 19:39 Сейчас в теме
(14) Например, так:
В процедуру ПечатьЗавершение после строки

ОбъектыНазначения = Новый Массив;

добавить свои передаваемые параметры:

ДополнительныеПараметры = Новый Структура;
//Значения для передачи
ДополнительныеПараметры.Вставить("МойПараметр1", ЗначениеМоегоПараметра1);
ДополнительныеПараметры.Вставить("МойПараметр2", ЗначениеМоегоПараметра2);

ОбъектыНазначения.Добавить(ДополнительныеПараметры);

А в модуле обработки в процедуре ПечатьМакета это будет первый элемент массива МассивОбъектов

В этой статье ( МассивОбъектов[0].НазваниеПечатнойФормы;) это в строке:
ОбластьМакета.Параметры.НазваниеПечатнойФормы = МассивОбъектов[0].НазваниеПечатнойФормы;

У меня уже была процедура заполнения макета с использованием «изначального» первого элемента этого массива, чтобы сделать "быстро и тупо", сделала так:

МойПарам1 = МассивОбъектов[0]. МойПараметр1;
МассивОбъектов.Удалить(0);
ms33; KEV8383; user1042850; +3 Ответить
17. user1042850 27.01.21 06:53 Сейчас в теме
(16) Спасибо огромное мил человку, наконецто получилось! Без отладки не понимал как формировались параметры
lenokv_07; KEV8383; +2 Ответить
26. Belayaya 1 07.12.22 10:46 Сейчас в теме
(16)
полнительныеПараметры.Вставить("МойПараметр1", ЗначениеМоегоПараметра1);
ДополнительныеПараметры.Вставить("МойПараметр2", ЗначениеМоегоПараметра2);

(17)
(16) А где взять ЗначениеМоегоПараметра? Оно же задается в другой форме
27. Belayaya 1 07.12.22 12:07 Сейчас в теме
(26) Разобралась)
18. volkov-mv 04.03.21 05:32 Сейчас в теме
Здравствуйте, не понимаю в какой момент происходит формирование печатной формы в модуле объекта обработки, в какой момент алгоритм туда заходит, объясните кто-нибудь пожалуйста, ?
19. volkov-mv 04.03.21 06:24 Сейчас в теме
(18) Сам понял
20. Airlord 15.10.21 11:27 Сейчас в теме
Добрый день! Отличная тема! Создал по описанию тестовую - заработала. Теперь есть поле деятельности для написания форм с параметрами для предприятия) Все не мог понять как передать параметры в форму и потом отправить на печать то что нужно - особенно пригодится для ПФ с подписантами - например Комиссия по списанию ОС. Автору респект!
22. lenokv_07 27.01.22 14:40 Сейчас в теме
Благодарю. Очень помогла статья.
23. user930087 23.02.22 00:16 Сейчас в теме
Что мог сделать не так, что не выходит форма с параметрами, а сразу выходит печатная форма. Все сделал точно по статье.
24. user930087 23.02.22 00:34 Сейчас в теме
вообще не заходит в процедуру печать в основной форме и соответственно не открывает форму ввода
25. Anosov_EP 19.09.22 13:46 Сейчас в теме
Спасибо. Помогло.
28. Djavdet1978 07.02.23 10:35 Сейчас в теме
Большое спасибо. Помогло.

//на форме

&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
	ПараметрыФормы = Новый Структура;
	ИмяОбработки=НайтиИмяОбработки();
	ИмяФормыВвода=ИмяОбработки+".Форма.ФормаВвода";
	ОткрытьФорму(ИмяФормыВвода,ПараметрыФормы,,,,,Новый ОписаниеОповещения("ПечатьЗавершение", ЭтаФорма, ОбъектыНазначенияМассив), РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);	
КонецПроцедуры

&НаСервере
Функция НайтиИмяОбработки();
ПолноеИмяМетаданных = РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя();
Возврат ПолноеИмяМетаданных; 
КонецФункции

&НаКлиенте
Процедура ПечатьЗавершение(Результат, ДополнительныеПараметры) Экспорт
	Если Результат <> Неопределено Тогда 
		Если Результат.Печать Тогда 
			//данные Результат, Результат.СоздаватьТН и Результат.ПеремещениеСклад приходит из другой формы 
			Создавать =  Результат.СоздаватьТН;
			ПеремещениеСклад=Результат.ПеремещениеСклад;
			Адрес = ПечатьЗавершениеСервер(Создавать, ПеремещениеСклад);
			ТабДок = ПолучитьИзВременногоХранилища(Адрес);
			ТабДок.Показать();
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры  

&НаСервере
Функция ПечатьЗавершениеСервер(Создавать,ПеремещениеСклад)
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	ТабДок = ОбработкаОбъект.Тест( Параметры.ОбъектыНазначения,Создавать, ПеремещениеСклад);
	Адрес = ПоместитьВоВременноеХранилище(ТабДок, Новый УникальныйИдентификатор());
	Возврат(Адрес);
КонецФункции

//+прибавил на модуле
Перем СоздаватьДокумент;
Перем ВыбраныйСклад;

Функция Тест(ОбъектыНазначения,Создавать,ПеремещениеСклад) Экспорт
	СоздаватьДокумент = Создавать;
	ВыбраныйСклад=ПеремещениеСклад;
       ТабДок = ПечатьГруппыДокументов(ОбъектыНазначения, Неопределено);
	Возврат(ТабДок);
КонецФункции
Показать
29. user1141482 24.05.23 16:16 Сейчас в теме
Добрый день! Спасибо за статью!
Подскажите пожалуйста а как можно сделать, чтобы форма открывалась при определенных условиях? В модуле формы как я понял задать условие.

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


А как дальше быть? Нужно возвращаться в модуль объекта? И если возвращаться в модуль объекта, то у меня там экспортная функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати), МассивОбъектов я передам, а где взять ОбъектыПечати?
30. user705393_den 24.08.23 16:12 Сейчас в теме
Ничего не происходит. Нажимаю на печать, открывается форма ввода, заполняю параметр, форма ввода закрывается и все, ничего больше не печатается и ошибок нет тоже.
31. GPetr 19 24.09.23 22:14 Сейчас в теме
(30) После перевода конфигурации в режим совместимости 8.3.21 поменялся алгоритм вызова событий.
Возможно это ошибка платформы.

Если раньше на клиенте запускалось событие ПриОткрытии()

То сейчас запускается ПриСозданииНаСервере()

поэтому не печатает
Оставьте свое сообщение