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

11.12.15

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

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

Файлы

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

Наименование Скачано Купить файл
Заказ клиента для УТ 11.2
.epf 18,15Kb ver:1
109 1 850 руб. Купить

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 Готово!

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

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

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

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

См. также

Механизмы типовых конфигураций Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Расчет себестоимости в типовых конфигурациях 1С – для многих «черный ящик», работающий по жестко зашитым в него алгоритмам. Реализация этого «черного ящика» может меняться в зависимости от конкретной конфигурации – УПП, БП 3.0, ERP. Но принцип работы везде одинаковый. Расскажем о том, как устроен расчет себестоимости, как его дорабатывать, и какие методы могут быть эффективны и без доработок.

27.12.2024    22905    Begemoth80    33    

91

Механизмы типовых конфигураций Программист 1С:Предприятие 8 1C:ERP Бесплатно (free)

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

03.06.2024    14389    SergDobrodelov    40    

130

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    46313    dimanich70    83    

164

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

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

1 стартмани

18.03.2024    6845    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    57357    atdonya    31    

68

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

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

28.12.2023    10378    mrXoxot    11    

117

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

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

30.11.2023    8609    ke.92@mail.ru    17    

68

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

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

08.11.2023    22428    ids79    30    

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

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


От куда появилась переменная ПараметрыПечати?
2. AlexeyPapanov 475 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 475 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 70 23.04.17 19:48 Сейчас в теме
Обработку скачал, в УТ 11.3 не работает. Пробовал всё по тексту сделать, результат лучше, но всё равно отрицательный.
9. laf 31.07.17 08:12 Сейчас в теме
А как теперь включить готовую печатную форму в комплект документовдля печати? Что-то настройка не запоминается.
10. user817585 29.08.17 15:57 Сейчас в теме
11. AlexeyPapanov 475 29.08.17 16:13 Сейчас в теме
(10) а при чем тут Ваша счет-фактура да еще и для семерочной 1с?
12. mp40 14 10.12.17 13:28 Сейчас в теме
Еще нужно в ПараметрыПечати добавить "тип" "заказ....". Потому что в модуле менеджера документа, есть проверка параметрапечати.
13. kirk_ufa 23.11.18 08:26 Сейчас в теме
Просто чётко, быстро. Спасибо!
14. COMPER 147 28.12.18 11:41 Сейчас в теме
В ут11 не используется параметр "КомандаПечати.ПроверкаПроведенияПередПечатью".
Для отправки сообщения требуется регистрация/авторизация