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

11.12.15

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

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

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

Наименование Файл Версия Размер
Заказ клиента для УТ 11.2
.epf 18,15Kb
105
.epf 1 18,15Kb 105 Скачать

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 Готово!

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

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

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

См. также

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

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

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

28.12.2023    4832    mrXoxot    11    

99

Переоткрытие внешних обработок

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

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

30.11.2023    3961    ke.92@mail.ru    16    

61

Ключи аналитик учета в ЕРП, КА, УТ

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

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

08.11.2023    7047    ids79    25    

74

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    8822    YA_418728146    6    

141

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

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

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

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

Работа с контактной информацией. Часть 1

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

Уверен, все в курсе, что контактная информация опять во всех конфигурациях хранится по-новому. Связано это с появлением так называемых муниципальных адресов, где районы заменили городские округа. Сейчас происходит массовый отказ от УПП и других устаревших решений, а также массовый переход с зарубежных систем. Возникает потребность преобразовать старые адреса в новые. И тут нас всех ждёт масса неприятных сюрпризов от разработчиков БСП. О программном интерфейсе контактной информации и пойдёт речь в данной статье.

23.05.2023    11532    biimmap    43    

59

Как проводятся документы в типовых конфигурациях от 1С: дополнение

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

Вот и до меня дошел обновленный механизм проведения документов. С прошлой статьи механизм сильно изменился, и решено было кратко описать нововведения и изменения по сравнению с тем, что было раньше. А также разобрать создание и добавления в УМ (учетный механизм) регистра накопления и неподчиненного регистратору регистра сведений. Поэтому в этой статье могут быть опущены какие-то ключевые моменты.

13.02.2023    8903    skv_79    10    

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

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


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