Создаем печатную форму "Заказ клиента" для УТ 11.2

11.12.15

Разработка - Универсальные функции

Статья для начинающих о том, как сделать внешнюю печатную форму для управляемого приложения на примере 1С: Управление торговлей 11.2.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Заказ клиента для УТ 11.2
.epf 18,15Kb ver:1
107
107 Скачать (1 SM) Купить за 1 850 руб.

Недавно возникла необходимость написать внешнюю печатную форму (далее - ВПФ) для УТ 11.2, а опыта их создания у меня не было. Я полез искать образцы, статьи и т.д. Что-то нашел, но целостной статьи для новичков не было, поэтому захотелось написать инструкцию по созданию ВПФ для конфигурации на основе БСП - и УТ 11.2 одна из них.

УТ 11 позволяет в режиме предприятия редактировать макет печатной формы. Поэтому, если нам нужно только визуально изменить макет, то разумнее это сделать штатными средствами в пользовательском режиме. Когда же мы хотим программно вычислить и подставить определенные данные, которых нет у нас в макете, тогда уже нам не обойтись без создания ВПФ.

Приступим. Мы определились, что будем делать ВПФ для документа ЗаказКлиента. Находим его в дереве метаданных, жмем по нему правой кнопкой мыши, выбираем модуль менеджера и находим в нем такой код:

#Область Печать

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	Если ПраваПользователяПовтИсп.СамооблуживаниеПросмотрДокументовУсловийПродаж() Тогда
		
		// Заказ клиента
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.МенеджерПечати = "Обработка.ПечатьЗаказовНаТоварыУслуги"; // <---------
		КомандаПечати.Идентификатор = "ЗаказКлиента";
		КомандаПечати.Представление = НСтр("ru = 'Заказ клиента'");
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		
		// Счет на оплату
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.МенеджерПечати = "Обработка.ПечатьСчетовНаОплату"; // <----------		
		КомандаПечати.Идентификатор = "СчетНаОплату";
		КомандаПечати.Представление = НСтр("ru = 'Счет на оплату'");
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;

Несложно понять, что в зависимости от того, какой макет нам нужен (Счет на оплату, Заказ клиента и т.д.), мы должны найти соответствующую обработку в дереве метаданных.
Разворачиваем раздел Обработки в дереве метаданных и находим обработку "ПечатьЗаказовНаТоварыУслуги".

Из этой обработки мы должны скопировать модуль менеджера в свою печатную форму. Только этот код мы себе вставим в модуль объекта нашей ВПФ. И перетаскиваем себе нужный макет из этой обработки в свою.

Чтобы иметь возможность подключить эту обработку как ВПФ, мы должны вставить в модуль объекта служебные процедуры по добавлению сведений о внешней обработке:

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

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

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

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

Теперь, если мы подключим нашу ВПФ и попробуем вывести ее на печать, 1С выдаст нам ошибку, что ей недостаточно физических параметров в процедуре Печать.

Сравним два фрагмента кода. Первый наш исходный

Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

а это тот, который нам нужен

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

То есть нам надо указать четыре, а не пять параметров в функции Печать(). Параметр с именем "ПараметрыПечати" убран, но он упоминается в процедуре, поэтому в начале текста процедуры мы создадим эту переменную сами.

ПараметрыПечати = Новый Структура();

И уберем или закомменируем лишний код:

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

После этого наша ВПФ станет выводиться на печать, но макет она будет использовать из конфигурации, а не наш позаимствованный. 

В процедуре СформироватьПечатнуюФормуЗаказаКлиента() вызывается в свою очередь другая процедура:

		// Сформированный тбаличный документ
		ЗаполнитьТабличныйДокументЗаказаНаТоварыУслуги(
			ТабличныйДокумент,
			ДанныеДляПечати,
			ОбъектыПечати,
			КомплектыПечати,
			"Обработка.ПечатьЗаказовНаТоварыУслуги.ПФ_MXL_ЗаказКлиента");

Последний параметр - это имя макета печатной формы. Т.е. вместо "Обработка.ПечатьЗаказовНаТоварыУслуги.ПФ_MXL_ЗаказКлиента" мы пишем "ПФ_MXL_ЗаказКлиента" (т.е. мы указываем имя макета, который мы перетащили себе в свою обработку).

Далее идем в процедуру ЗаполнитьТабличныйДокументЗаказаНаТоварыУслуги().

Находим нижеуказанную строчку кода, закомментируем ее и вставим свою:

// это строка из конфигурации не нужна нам
//Макет = УправлениеПечатью.МакетПечатнойФормы(ИмяМакета);

// а это наш код
Макет = ПолучитьМакет(ИмяМакета);

 Готово!

Подытожим. Логика была такая. Мы полезли в модуль менеджера нужного нам документа, чтобы позаимствовать код процедуры печати объекта. Нашли код и макет.  Получили ошибки при формировании печатной формы. Откорректировали код процедуры печати. Нашли код, который отвечает за получение макета и подставили туда свой, чтобы использовался наш макет.

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

Заказ клиента УТ 11 Счет на оплату УТ 11 как создать печатную форму для управляемого приложения

См. также

Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Статистическая выборка сценариев и точек изменения отчетов на общей форме ФормаОтчета в типовых конфигурациях. Примеры кода.

03.06.2024    4894    Serg2000mr    32    

108

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    20129    dimanich70    81    

144

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    4091    3    John_d    11    

57

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Программист Стажер Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    6427    mrXoxot    11    

112

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    5502    ke.92@mail.ru    16    

65

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

Разбираемся, зачем в системе ЕРП созданы справочники: ключи аналитик учета, зачем созданы аналогичные по набору измерений регистры сведений. Какие проблемы они решают, какие создают новые и что с этим делать.

08.11.2023    12731    ids79    25    

81

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14733    YA_418728146    7    

166
Отзывы
7. yakl2015 10.01.17 09:47 Сейчас в теме
Спасибо за статью, очень помогла, самое нужное! От себя добавлю, что нужно внимательно во всех нужных местах указать наименование самой формы. Привожу пример процедуры Печать, с которой подключала Торг12 с некоторыми изменениями в УТ 11.3. Модуль и макет использовала из обработки ПечатьОбщихФорм

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	ПараметрыПечати = Новый Структура();   //yakl
	ПараметрыПечати.Вставить("ВыводитьУслуги",Ложь);
	СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);
	
			
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
			КоллекцияПечатныхФорм,
			"ПФ_MXL_ТОРГ12_АвтоМ",
			"ТОРГ-12 (адрес склада)",
			СформироватьПечатнуюФормуТОРГ12(СтруктураТипов, ОбъектыПечати, ПараметрыПечати));
	
	
	
КонецПроцедуры
Показать
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. PRO100_NigGaZ 121 20.12.15 00:39 Сейчас в теме
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    ПараметрыПечати = Новый Структура(); // это мы добавили сами для процедуры СформироватьПечатнуюФормуЗаказаКлиента()
    СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "ЗаказКлиента",
            НСтр("ru = 'Заказ клиента'"),
            СформироватьПечатнуюФормуЗаказаКлиента(СтруктураТипов, ОбъектыПечати, ПараметрыПечати));
Показать


От куда появилась переменная ПараметрыПечати?
2. AlexeyPapanov 466 20.12.15 11:46 Сейчас в теме
(1) PRO100_NigGaZ, внимательно почитайте свою же цитату и найдете ответ)
3. 2849421 16.02.16 00:43 Сейчас в теме
если не жалко, скиньте форму на 2849421@gmail.com
я проделал всё по вашим стопам, а 1с ругается "в обработчике печати не был сформирован табличный документ"
user1518319; DeD MustDie; Tip-top; +3 Ответить
4. sbshop 24.03.16 12:45 Сейчас в теме
Добрый день!
По аналогии данного описания, делал внешнюю печатную форму для документа Заказ Поставщику
При подключении и попытке сформировать документ на печать выдает ошибку. Скрин в прикрепленном файле вместе с ВПФ

8.3.7.1970
УТ 11.2.3.108

Из-за чего это может быть?
Прикрепленные файлы:
ЗаказПоставщикуАблой.epf
5. AlexeyPapanov 466 24.03.16 15:04 Сейчас в теме
(4) sbshop, здравствуйте.
если вылетает ошибка, то надо понять на какой строке она происходит. на этом сайте была обработка для отладки печатных форм. вам надо ее найти.
у меня нет времени смотреть ваш код.
6. support.plus 20.07.16 16:07 Сейчас в теме
7. yakl2015 10.01.17 09:47 Сейчас в теме
Спасибо за статью, очень помогла, самое нужное! От себя добавлю, что нужно внимательно во всех нужных местах указать наименование самой формы. Привожу пример процедуры Печать, с которой подключала Торг12 с некоторыми изменениями в УТ 11.3. Модуль и макет использовала из обработки ПечатьОбщихФорм

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	ПараметрыПечати = Новый Структура();   //yakl
	ПараметрыПечати.Вставить("ВыводитьУслуги",Ложь);
	СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);
	
			
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
			КоллекцияПечатныхФорм,
			"ПФ_MXL_ТОРГ12_АвтоМ",
			"ТОРГ-12 (адрес склада)",
			СформироватьПечатнуюФормуТОРГ12(СтруктураТипов, ОбъектыПечати, ПараметрыПечати));
	
	
	
КонецПроцедуры
Показать
8. zemskov 67 23.04.17 19:48 Сейчас в теме
Обработку скачал, в УТ 11.3 не работает. Пробовал всё по тексту сделать, результат лучше, но всё равно отрицательный.
9. laf 31.07.17 08:12 Сейчас в теме
А как теперь включить готовую печатную форму в комплект документовдля печати? Что-то настройка не запоминается.
10. user817585 29.08.17 15:57 Сейчас в теме
11. AlexeyPapanov 466 29.08.17 16:13 Сейчас в теме
(10) а при чем тут Ваша счет-фактура да еще и для семерочной 1с?
12. mp40 13 10.12.17 13:28 Сейчас в теме
Еще нужно в ПараметрыПечати добавить "тип" "заказ....". Потому что в модуле менеджера документа, есть проверка параметрапечати.
13. kirk_ufa 23.11.18 08:26 Сейчас в теме
Просто чётко, быстро. Спасибо!
14. COMPER 341 28.12.18 11:41 Сейчас в теме
В ут11 не используется параметр "КомандаПечати.ПроверкаПроведенияПередПечатью".
Оставьте свое сообщение