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

26.11.25

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Внешняя печатная форма с вводом параметров (с версии БСП 3.1.9...)
.epf 17,06Kb
158 2 500 руб. Купить
Внешняя печатная форма с вводом параметров (Версия БСП ниже 3.1.9...)
.epf 11,23Kb
204 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Похожий вариант обработки с пакетной печатью --- > Печатная форма с вводом параметров и пакетная печать

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

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

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

  ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

  Возврат ПараметрыРегистрации;

КонецФункции

Функция ПолучитьТаблицуКоманд()

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

КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "",ЗаменяемыеКоманды = "")

  НоваяКоманда = ТаблицаКоманд.Добавить();
  НоваяКоманда.Представление = Представление;
  НоваяКоманда.Идентификатор = Идентификатор;
  НоваяКоманда.Использование = Использование;
  НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
  НоваяКоманда.Модификатор = Модификатор;
  НоваяКоманда.ЗаменяемыеКоманды = ЗаменяемыеКоманды;

КонецПроцедуры

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

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

Функция СформироватьПримерПечатнойФормы(МассивОбъектов, ОбъектыПечати)	 
	
	ДокументРезультат = Новый ТабличныйДокумент;
	ДокументРезультат.КлючПараметровПечати = "ПараметрыПечати_ПримерВПФ";
	ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
	ДокументРезультат.ПолеСправа = 20;
	ДокументРезультат.АвтоМасштаб = Истина;
	
	Макет = ПолучитьМакет("Макет");
	ОбластьМакета = Макет.ПолучитьОбласть("ОбластьМакета");	
	
	
	Сотрудники 		= МассивОбъектов[0].Сотрудники;
	ТекстИзФормы 	= МассивОбъектов[0].ТекстДляПечати;
	
	ВставлятьРазделительСтраниц = Ложь;
	
	Для каждого стр Из Сотрудники Цикл

		Если ВставлятьРазделительСтраниц Тогда
		
			ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();	
				
		КонецЕсли;
		
		ОбластьМакета.Параметры.ТекстИзФормы = ТекстИзФормы;
		
		ДокументРезультат.Вывести(ОбластьМакета); 
		
	    ВставлятьРазделительСтраниц = Истина;

	КонецЦикла;	
	
	Возврат ДокументРезультат;
	
КонецФункции

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

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

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

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

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

			//Вывод сформированного табличного документа
			ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры     

Процедура СформироватьПечатныеФормы(ПараметрыОткрытия)
	//добавляем с версии БСП 3.1.9...
	Результат = Неопределено; 
	ОбъектыПечати = Новый СписокЗначений;    
	ПараметрыВывода = Неопределено;

	УправлениеПечатью.ПечатьПоВнешнемуИсточнику(
			ПараметрыОткрытия.ИсточникДанных,
			ПараметрыОткрытия.ПараметрыИсточника,
			Результат,
			ОбъектыПечати,
			ПараметрыВывода); 

	ПараметрыОткрытия.КоллекцияПечатныхФорм = Общегоназначения.ТаблицаЗначенийВМассив(Результат);	
		
КонецПроцедуры
  • Создаем еще одну форму, и назовем ее "ФормаВвода", разместим на ней реквизит "ТекстДляПечати":

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

КонецПроцедуры

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


В обработке "Внешняя печатная форма с вводом параметров (с версии БСП 3.1.9...)" есть возможность отладки печатной формы. Для этого необходимо указать основную форму "ФормаДляТестирования" и запускать в режиме 1С Предприятие через Файл-Открыть. Перед добавлением обработки в базу необходимо переназначить основную форму на "Форма".
 

Внешняя печатная форма с вводом параметров (с версии БСП 3.1.9...) тестировалась в конфигурации Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.27.90) 

Внешняя печатная форма с вводом параметров (Версия БСП ниже 3.1.9...) тестировалась в конфигурации Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.25.136) 

INFOSTART PrintWizard: Конструктор печатных форм в 1С 8.3

INFOSTART PrintWizard помогает быстро создавать и унифицировать печатные формы в 1С. Снижает трудозатраты разработчиков, повышает качество и прозрачность отчётов, наводит порядок в корпоративных шаблонах документов.


Проверено на следующих конфигурациях и релизах:

  • Зарплата и управление персоналом КОРП, редакция 3.1, релизы 3.1.35.73

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

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

10000 руб.

02.09.2020    269073    1497    422    

1180

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.

24900 руб.

20.08.2024    75492    381    170    

326

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26

22570 руб.

06.10.2023    40321    115    54    

128

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

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    64258    130    36    

139

Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Программист Бизнес-аналитик Руководитель проекта 1С 8.3 Платные (руб)

Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.

14000 руб.

17.04.2026    9128    39    52    

54

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

17000 руб.

10.11.2023    26524    98    46    

104

Информационная безопасность Инструменты администратора БД Инструментарий разработчика Учет документов Системный администратор Программист Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С 8.5 Розничная и сетевая торговля (FMCG) Платные (руб)

Контроль ввода данных в 1С: проверка заполнения реквизитов, обязательные поля, контроль перед записью и проведением, запрет проведения документа. Позволяет настраивать любые проверки данных в 1С 8.3/8.5 от обязательных полей до сложных условий – без открытия конфигуратора и написания кода. Готовое расширение, которое подключается и работает сразу.

6000 руб.

15.04.2026    2707    6    0    

21

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки. 1.3.11 Доработан механизм контекстной подсказки по метаданным

9500 руб.

17.05.2024    54905    188    63    

220
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. and_r 01.11.19 08:54 Сейчас в теме
Спасибо за ликбез )
3. evakuzmina 11.11.19 16:09 Сейчас в теме
Хочу поменять название обработки на "Тест" и... печ. форма перестаёт работать.
4. Margo462 537 12.11.19 12:52 Сейчас в теме
(3) где название меняете? Скрин прикрепите
21. VAAngelov 565 12.11.21 10:28 Сейчас в теме
(4)Скажите пжл, как ее отлаживаете?
5. evakuzmina 12.11.19 21:51 Сейчас в теме
А теперь получилось. В заблуждение ввело то, что название формы совпало с названием параметра:
РегистрационныеДанные.Вставить("Вид", "ПечатнаяФорма");
Обратите на это внимание.
6. klarazai 25.12.19 10:13 Сейчас в теме
Очень помогло. Спасибо БОЛЬШОЕ!!!!!!
7. alex_zemlyansky 11 24.06.20 22:26 Сейчас в теме
У меня из-за этой строки
ОбъектыНазначения.Добавить(Результат);
вылезла ошибка
"Метод объекта не обнаружен (Метаданные)".
Это лишняя строка, её можно просто убрать.
За примеры кода огромное спасибо.
vvbelakin; Рамзес; BrainWashed; +3 Ответить
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. Lime_ 26.01.21 14:06 Сейчас в теме
(11) Как вы это сделали, никак не получается получить параметры в модуле объекта, тем более без отладки
12. malets 2 28.09.20 11:19 Сейчас в теме
Спасибо, сэкономили драгоценное время мне!
14. Lime_ 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; Lime_; +3 Ответить
17. Lime_ 27.01.21 06:53 Сейчас в теме
(16) Спасибо огромное мил человку, наконецто получилось! Без отладки не понимал как формировались параметры
lenokv_07; KEV8383; +2 Ответить
26. Belayaya 2 07.12.22 10:46 Сейчас в теме
(16)
полнительныеПараметры.Вставить("МойПараметр1", ЗначениеМоегоПараметра1);
ДополнительныеПараметры.Вставить("МойПараметр2", ЗначениеМоегоПараметра2);

(17)
(16) А где взять ЗначениеМоегоПараметра? Оно же задается в другой форме
27. Belayaya 2 07.12.22 12:07 Сейчас в теме
18. volkov-mv 04.03.21 05:32 Сейчас в теме
Здравствуйте, не понимаю в какой момент происходит формирование печатной формы в модуле объекта обработки, в какой момент алгоритм туда заходит, объясните кто-нибудь пожалуйста, ?
19. volkov-mv 04.03.21 06:24 Сейчас в теме
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 Сейчас в теме
Ничего не происходит. Нажимаю на печать, открывается форма ввода, заполняю параметр, форма ввода закрывается и все, ничего больше не печатается и ошибок нет тоже.
GlobalCom; Costa; +2 Ответить
31. GPetr 22 24.09.23 22:14 Сейчас в теме
(30) После перевода конфигурации в режим совместимости 8.3.21 поменялся алгоритм вызова событий.
Возможно это ошибка платформы.

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

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

поэтому не печатает
32. Costa 27.09.23 10:35 Сейчас в теме
После обновления ЗУП.
Перестали формироваться печатные формы с передачей параметра. Вводишь параметр, нажимаешь на кнопку печать, форма закрывается и все. И отладка не срабатывает. Раньше можно было отладить используя код который приводили на инфостарте.
Попытался проверить выполнение кода, в результате выяснилось что после закрытия формы с параметром, процедура "Печать" в модуле объекта не выполняется.
Кто-то смог решить этот вопрос? Поделитесь пожалуйста.
33. alextop 27.09.23 13:41 Сейчас в теме
(32)
Раньше в общей форме "ПечатьДокументов" в ПриСозданииНаСервере формировалась коллекция печатных форм
	Если Параметры.КоллекцияПечатныхФорм = Неопределено Тогда
		КоллекцияПечатныхФорм = СформироватьПечатныеФормы(Параметры.ИменаМакетов, Отказ);
		Если Отказ Тогда
			Возврат;
		КонецЕсли;
	Иначе


А сейчас нет:

	Если Параметры.КоллекцияПечатныхФорм = Неопределено Тогда
		Отказ = Истина;
		Возврат;
	Иначе


Пока не понял где теперь сформировать коллекцию
aleksey2; user2016725; chastliviy; Costa; +4 Ответить
34. Costa 27.09.23 13:47 Сейчас в теме
(33) Да, именно тут Параметры.КоллекцияПечатныхФорм = Неопределено и вылетает.

Если найдете решение, пожалуйста, напишите.
36. alextop 27.09.23 14:36 Сейчас в теме
(34) Пока в общей форме вернул как было расширением

&НаСервере
Процедура Расш1_ПриСозданииНаСервереПеред(Отказ, СтандартнаяОбработка)
	Если Параметры.КоллекцияПечатныхФорм = Неопределено Тогда
		КоллекцияПечатныхФорм = СформироватьПечатныеФормы(Параметры.ИменаМакетов, Отказ);
		Если Отказ Тогда
			Возврат;
		КонецЕсли;
		Параметры.КоллекцияПечатныхФорм = КоллекцияПечатныхФорм ;
	КонецЕсли;	
КонецПроцедуры
Показать
user2016725; Costa; +2 Ответить
35. Margo462 537 27.09.23 14:12 Сейчас в теме
(32) Добрый день, проверим, спасибо за информацию
38. Margo462 537 01.10.23 15:25 Сейчас в теме
(32) вопрос решен) добавила в код еще параметр с коллекцией печатных форм
37. Margo462 537 01.10.23 15:16 Сейчас в теме
(34) добавила в публикацию изменения, на новой версии бсп работает
StAsya_1C; +1 Ответить
39. lhfrjy 12.10.23 14:19 Сейчас в теме
(37)На какой версии БСП работает? 3.1...?
40. Margo462 537 12.10.23 14:59 Сейчас в теме
(39) 3.1.9..., но на ранней версии тоже работает такой вариант
41. cdiamond 237 21.10.23 10:53 Сейчас в теме
В примере статьи при множественном выборе списка сотрудников у всех напечатается одинаковый текст, отчего смысл доработки такого рода немного теряется. Как сделать чтоб у каждого объекта печати был свой текст в зависимости от объекта печати?
42. 1Pawel 4 17.06.24 23:25 Сейчас в теме
Спасибо за статью, очень помогла!

1. В модуле формы ФормаВвода этот код не понадобился, работает и без него.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Сотрудники.ЗагрузитьЗначения(Параметры.Сотрудники);
	ТекстДляПечати = "Пример печати";   
КонецПроцедуры


2. К вопросу (10). Стоило бы упомянуть, что из формы в модуль объекта нужный нам реквизит попадает в массив МассивОбъектов c индексом 0, а ссылка на объект там же с индексом 1.

3. Нужно передать реквизит формы из массива в какую-нибудь переменную, а потом удалить из массива. Спасибо за подсказку (16).
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода = Неопределено) Экспорт
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПримерПечатнойФормы") Тогда
		ОбъектСсылка = МассивОбъектов[1];
		Организация = МассивОбъектов[0].Организация;
		МассивОбъектов.Удалить(0);

Если не удалить, то функция отправки документа по электронной почте, которая как правило в этой же процедуре выдаст ошибку, что в массиве не только ссылки.
ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектовНазначения, КоллекцияПечатныхФорм);

4. В модуле формы Форма эта процедура ломает отправку документа по почте (не заполняются адрес получателя, тема и текст письма). Убрал, и стало работать корректно.
Процедура ПечатьЗавершение(Результат, ДополнительныеПараметры) Экспорт
…
	СформироватьПечатныеФормы(ПараметрыОткрытия); //<--начиная с версии БСП 3.1.9...

Делал в конфигурации Управление торговлей 11.5.12.270, БСП 3.1.9.302.
43. 1Pawel 4 26.06.24 13:41 Сейчас в теме
(29) Мне тоже понадобилось выводить форму в зависимости от условий. Сделал так.
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт

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

		Результат = Новый Структура; 
		Результат.Вставить("Сотрудники", СвойАлгоритм()); //Заполняем алгоритмом, не требующим заполнения формы
		Результат.Вставить("Печать", Истина); 

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

	КонецЕсли;
Показать
44. user2108481 08.10.24 09:33 Сейчас в теме
Добрый день! В ведомостях на счета нужно выбрать несколько ведомостей и вывести их в одну печатную форму в одну таблицу. Проблема в том, что я выделяю 2 объекта, но в печатной форме выводится только первый выделенный объект. Подскажите, как доработать печатную форму, какой код добавить?
45. alexvbard 21 02.10.25 08:26 Сейчас в теме
Спасибо! Очень помогло.
46. Margo462 537 26.11.25 16:52 Сейчас в теме
50. Korolnova 17.01.26 15:39 Сейчас в теме
(46) А почему просто не использовать тип команды "ОткрытиеФормы"? Тогда форма "ФормаВвода" будет не нужна.
Настройки команд, поставляемых внешней обработкой


В коде ниже, зачем "ОбъектыНазначенияМассив" два раза передавать, тем более в "ПечатьЗавершение" "ДополнительныеПараметры" (ОбъектыНазначенияМассив) НЕ используются!
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("Сотрудники", ОбъектыНазначенияМассив);
	ОткрытьФорму("ВнешняяОбработка.ПримерПечатнойФормы.Форма.ФормаВвода",ПараметрыФормы,,,,,Новый ОписаниеОповещения("ПечатьЗавершение", ЭтаФорма, ОбъектыНазначенияМассив), РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);	
КонецПроцедуры
47. Now 21 19.12.25 12:25 Сейчас в теме
Ничего не увидел про Команда.Обработчик. Мне кажется можно задействовать свойства команды Обработчик, ПараметрыФормы и ДополнительныеПараметры и через них гораздо проще реализовать этот механизм на современных версиях БСП.
Напомню:
Cвойство "Обработчик" — ваш переопределяемый клиентский обработчик для этой команды. В него пробросятся ПараметрыПечати.
В нем делаете любые действия, например, проверку на заполнение реквизита (через вызов сервера).
Если условие выполнено — вызываете УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(), если нет — исключение.
К примеру фрагмент кода из типовой УТ:
		НоваяКоманда = Команды.Добавить();
		НоваяКоманда.Вид = "ПечатьКомплектаДокументовСНастройкой";
		НоваяКоманда.Обработчик = "УправлениеПечатьюУТКлиент.ОткрытьФормуПечатиКомплектаДокументовСНастройкой";
		НоваяКоманда.Идентификатор = "КомплектДокументовСНастройкой";
		НоваяКоманда.Представление = НСтр("ru = 'Комплект документов с настройкой...'");
		НоваяКоманда.ТипПараметра = ТипОбъекта;
		НоваяКоманда.РежимЗаписи = "Проводить";
		НоваяКоманда.Порядок = 2;
Показать
48. Now 21 19.12.25 12:39 Сейчас в теме
В частности в обработчике можно вставить в ПараметрыПечати свойство "ФорматСохранения" со значением "XLSX", тогда вместо табличного документа (и общей формы ПечатьДокументов) сразу откроется Excel
49. Korolnova 17.01.26 15:23 Сейчас в теме
(47) А разве для внешней обработки есть свойство "Обработчик"?
Функция СведенияОВнешнейОбработке(ВерсияБСП = "") Экспорт
	ПараметрыРегистрации = Новый Структура;
	
	ПараметрыРегистрации.Вставить("Вид", "");
	ПараметрыРегистрации.Вставить("Версия", "0.0");
	ПараметрыРегистрации.Вставить("Назначение", Новый Массив);
	ПараметрыРегистрации.Вставить("Наименование", Неопределено);
	ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
	ПараметрыРегистрации.Вставить("Информация", Неопределено);
	ПараметрыРегистрации.Вставить("ВерсияБСП", ВерсияБСП);
	ПараметрыРегистрации.Вставить("ОпределитьНастройкиФормы", Ложь);
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда
		МодульВариантыОтчетовСлужебный = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетовСлужебный");
		ПараметрыРегистрации.Вставить("НазначениеВариантаОтчета",
			МодульВариантыОтчетовСлужебный.ПустоеНазначениеВариантаОтчета());
	КонецЕсли;
	
	РеквизитыТабличнойЧасти = Метаданные.Справочники.ДополнительныеОтчетыИОбработки.ТабличныеЧасти.Команды.Реквизиты;
	
	ТаблицаКоманд = Новый ТаблицаЗначений;
	ТаблицаКоманд.Колонки.Добавить("Представление", РеквизитыТабличнойЧасти.Представление.Тип);
	ТаблицаКоманд.Колонки.Добавить("Идентификатор", РеквизитыТабличнойЧасти.Идентификатор.Тип);
	ТаблицаКоманд.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
	ТаблицаКоманд.Колонки.Добавить("ПоказыватьОповещение", РеквизитыТабличнойЧасти.ПоказыватьОповещение.Тип);
	ТаблицаКоманд.Колонки.Добавить("Модификатор", РеквизитыТабличнойЧасти.Модификатор.Тип);
	ТаблицаКоманд.Колонки.Добавить("Скрыть",      РеквизитыТабличнойЧасти.Скрыть.Тип);
	ТаблицаКоманд.Колонки.Добавить("ЗаменяемыеКоманды", РеквизитыТабличнойЧасти.ЗаменяемыеКоманды.Тип);
	
	ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
	ПараметрыРегистрации.Вставить("Разрешения", Новый Массив);
	
	Возврат ПараметрыРегистрации;
КонецФункции
Показать
51. user631290_makerplus 18 30.07.26 17:22 Сейчас в теме
Добрый день
изменил в обработке только
МассивНазначений.Добавить("Документ.СчетНаОплатуПокупателю");

Вывожу на печать
Нажимаю кнопку конвертика Отправить по почте
файл pdf прикрепляется
А как сделать чтобы заполнялось поле Контрагент, Основание, электронная почта получателя?
Прикрепленные файлы:
Для отправки сообщения требуется регистрация/авторизация