Внешняя печатная форма

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

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

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

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

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

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


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


Дальше все это сохраняю иииии... Вылутает в ошибку.
{ОбщийМодуль.УправлениеПечатью.Модуль(1658)}: В обработчике печати не был сформирован табличный документ для: СчетНаОплату

Что я сделал не так???
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. VmvLer 14.10.19 11:09 Сейчас в теме
забудьте все что вычитали до этого, достаточно понять, что кратко и понятно пишут тут

https://infostart.ru/public/558559/

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

Надеюсь, что в течение 3 ближайших часов от автора этой темы не будет воплей
"а че делать - не выходит". Ведь на освоение знаний необходимо время.
3. SlavaKron 14.10.19 11:12 Сейчас в теме
Структура процедуры Печать для ВПФ несколько иная. Там 4 параметра, а не 5, как у вас.
Должно быть:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
4. furman2000 16 14.10.19 11:25 Сейчас в теме
(3) Это я уже понял и поправил.
Поправил еще несколько вещей. Но пока не выходит.
5. user633533_encantado 11 14.10.19 12:14 Сейчас в теме
"В обработчике печати не был сформирован табличный документ" просто говорит о точ, что при печати была какая-то ошибка. В журнал регистрации глянь, на чем там спотыкается, если не умеешь делать форму отладки для таких обработок.

И да: "ПолучитьТаблицуКоманд" и "ДобавитьКоманду" - устаревший код, так уже никто внешние обработки не объявляет. Такой код выдает новичка, который подсмотрел его в интернете.
6. furman2000 16 14.10.19 12:37 Сейчас в теме
(5) В журнале регистрации та же ошибка и ни какой конкретики.
7. furman2000 16 14.10.19 12:45 Сейчас в теме
(5) отладку сделал, печатная форма сформировалась.
Вся проблема кроется в этих строчках похоже.
	ПараметрыПечати = Неопределено;
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетНаОплату") Тогда
		СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
			КоллекцияПечатныхФорм,
			"ПФ_MXL_СчетНаОплату",
			НСтр("ru='Счет на оплату'"),
			СформироватьПечатнуюФормуСчетНаОплату(СтруктураТипов, ОбъектыПечати, ПараметрыПечати));
	КонецЕсли;
Показать
8. furman2000 16 14.10.19 14:09 Сейчас в теме
(5)
И да: "ПолучитьТаблицуКоманд" и "ДобавитьКоманду" - устаревший код, так уже никто внешние обработки не объявляет. Такой код выдает новичка, который подсмотрел его в интернете.


А как должно быть?
13. svs_atm 15.10.19 10:08 Сейчас в теме
(5)А как делают профессионалы?
14. dhurricane 15.10.19 10:14 Сейчас в теме
15. svs_atm 15.10.19 10:22 Сейчас в теме
9. SlavaKron 14.10.19 14:42 Сейчас в теме
Процедура СформироватьПечатнуюФормуСчетНаОплату в модуле обработки присутствует?
10. furman2000 16 14.10.19 15:01 Сейчас в теме
(9) Да.
Разобрался в общем.
ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);

Вот эта строка нафиг не нужна.
Я же ее не отправляю.
11. furman2000 16 14.10.19 15:03 Сейчас в теме
(9) Остался только один невыясненный вопрос:
ПолучитьТаблицуКоманд и ДобавитьКоманду
Как сейчас должно быть.
12. SlavaKron 14.10.19 15:15 Сейчас в теме
(11) Думаю, этого будет достаточно:
Функция СведенияОВнешнейОбработке() Экспорт
	
	ТекущаяВерсияБСП = СтандартныеПодсистемыСервер.ВерсияБиблиотеки();
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(ТекущаяВерсияБСП);
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот