gifts2017

Отладка внешних печатных форм на тонком клиенте

Опубликовал Илья Крапивин (rutadmeen) в раздел Программирование - Практика программирования

Отладка внешних печатных форм для тонкого клиента без дополнительных обработок.

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

А мысль была использовать механизмы привычные еще по работе в толстом клиенте.

Описываемый пример был сделан на конфигурации УТ 11 (печатная форма для документа Заказ клиента)

Все оказалось очень просто. Поискав в коде вызов метода печать, я просмотрел необходимые параметры к нему, добавил во внешнюю обработку форму (конечно, управляемую), реквизит формы со ссылкой на документ и кнопку печать.

Форму, которая получилась, можно увидеть на скрншоте.

А текст формы ниже:

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

&НаСервере
Процедура ПечатьНаСервере(СсылкаНаДок, ТабДок, ЗаголовокТабДок)
	Массив=Новый Массив;
	Массив.Добавить(СсылкаНаДок);
	
	КоллекцияПечатныхФорм=Новый ТаблицаЗначений;
	КоллекцияПечатныхФорм.Колонки.Добавить("ИмяВРЕГ");
	КоллекцияПечатныхФорм.Колонки.Добавить("ИмяМакета");
	КоллекцияПечатныхФорм.Колонки.Добавить("Картинка");
	КоллекцияПечатныхФорм.Колонки.Добавить("ПолныйПутьКМакету");
	КоллекцияПечатныхФорм.Колонки.Добавить("СинонимМакета");
	КоллекцияПечатныхФорм.Колонки.Добавить("ТабличныйДокумент");
	КоллекцияПечатныхФорм.Колонки.Добавить("Экземпляров");
	
	ПечФорма=КоллекцияПечатныхФорм.Добавить();
	ПечФорма.ИмяВРЕГ="СЧЕТ НА ОПЛАТУ_1";
	ПечФорма.Экземпляров=1;
	
	ПараметрыОтправки=Новый Структура;
	ПараметрыОтправки.Вставить("Получатель");
	ПараметрыОтправки.Вставить("Текст","");
	ПараметрыОтправки.Вставить("Тема","");
	
	ПараметрыВывода=Новый Структура;
	ПараметрыВывода.Вставить("ДоступнаПечатьПоКомплектно",Ложь);
	ПараметрыВывода.Вставить("ПараметрыОтправки",ПараметрыОтправки);
	
	ОбъектыПечати=Новый СписокЗначений;
	
	ОбъектДляСервера = РеквизитФормыВЗначение("Объект");
	ЗаполнитьЗначенияСвойств(ОбъектДляСервера, Объект);
	
	ОбъектДляСервера.Печать(
		Массив,
		КоллекцияПечатныхФорм,
		ОбъектыПечати,
		ПараметрыВывода
	);
	
	// Проверим, все ли макеты были сформированы
	Для Каждого Стр Из КоллекцияПечатныхФорм Цикл
		Если Стр.ТабличныйДокумент = Неопределено Тогда
			ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'В обработчике печати не был сформирован табличный документ для: %1'"),
				Стр.ИмяМакета
			);
			ВызватьИсключение(ТекстСообщенияОбОшибке);
		КонецЕсли;
		
		Стр.ТабличныйДокумент.КоличествоЭкземпляров = Стр.Экземпляров;
	КонецЦикла;

	ТабДок=КоллекцияПечатныхФорм[0].ТабличныйДокумент;
	ЗаголовокТабДок=КоллекцияПечатныхФорм[0].СинонимМакета;
КонецПроцедуры

Короче, все просто.

Пытливый ум может попробовать использовать все параметры, которые отправляются в процедуру Печать, но это надо далеко не всегда ))

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

 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Борис Котляр (bborisko) 10.12.13 12:06
2. Андрей Григорьев (Borisych) 11.12.13 04:09
есть более интересные обработки на эту тему
3. Александр (МимохожийОднако) 11.12.13 07:20
(2) Borisych, скинь ссылки на лучшее.
4. Сергей Ожерельев (Поручик) 11.12.13 08:10
(3) Гугл в помощь не предлагать?
5. Алексей (Alex) 11.12.13 09:44
Во всяком случае это заработало. Не то что у Порутчика :)
6. Илья Крапивин (rutadmeen) 11.12.13 09:50
(2) Тут соль не в интересности, а в простоте и доступности
7. Елена Пименова (Bukaska) 11.12.13 10:17
(6) rutadmeen, Просто форма она не всегда нужна, тем более для ВПФ.
Потом ссылка на объект надо в данных давать, а ведь можно и без неё обойтись, и будет все работать)))
А так да.. иногда приходится ставить ссылку на объект, если в процедуре формирования макета что-то не так выводится и не так читается.. а потом все равно как успешно отлажу, я делаю заново обработку, чтобы уже не было лишних форм(если они не нужны).
8. Александр (МимохожийОднако) 11.12.13 10:25
(4) Гугл мне всегда помогает)). В контексте (2) придерживаюсь правила подтверждать слова аргументами, то бишь ссылками. То что найду я зачастую не совпадает с поиском оппонента. А терять время на доказательства его слов непрактично.
Phoenix4565; rutadmeen; +2 Ответить 1
9. Илья Крапивин (rutadmeen) 11.12.13 10:29
(7) Bukaska, может я ошибаюсь, но форма никаким образом не мешает функциональности ВПФ
10. Елена Пименова (Bukaska) 11.12.13 10:32
(8) МимохожийОднако, Мне один раз тыкнули ссылкой по изготовлению ВПФ.. а потом я захотела избавиться от ссылки на объект - вотт тогда и начались танцы с бубном... но сейчас-то я уже в курсе этих мелочей))))
11. Александр (МимохожийОднако) 11.12.13 10:55
(10) Bukaska, вероятно отвечали не мне )). СсылкаНаОбъект - это обязательный реквизит ВПФ.
12. Елена Пименова (Bukaska) 11.12.13 11:00
(11) МимохожийОднако, Да.. реквизит нужен.. но для корректной работы форма не нужна.. Я имела в виду что в кодинге можно обойтись без данного реквизита..
То есть в данных обработки он есть, но в кодинге я его не трогаю))) приноровилась уже)))
13. Илья Крапивин (rutadmeen) 11.12.13 12:07
(11) МимохожийОднако, Это верно для толстого клиента. Для тонкого клиента все не так, ссылка на массив с доками передается в параметрах к методу Печать.
14. Елена Пименова (Bukaska) 11.12.13 13:37
(13) rutadmeen, Да.. То что реквизит ссылкаНаОбъект обязателен, так это для обычных форм как например бух 2.0.. там ВПФ без данного реквизита не воспользуешься)
15. Андрей Григорьев (Borisych) 12.12.13 05:31
16. Андрей Григорьев (Borisych) 12.12.13 05:33
(5) Alex, а у Поручика что не работает?
17. Александр (МимохожийОднако) 12.12.13 06:59
(15) Borisych, спасибо..А Поручик постеснялся ))
18. Андрей Григорьев (Borisych) 12.12.13 07:44
(17) МимохожийОднако, когда сообщение писал - под рукой не было обработки - чтобы ссылку выяснить
19. Сергей Ожерельев (Поручик) 12.12.13 12:04
(5) Кто там ещё гавкает? Что не заработало?
20. Игорь Иванов (paybaseme) 13.12.13 23:42
(10) Bukaska,
То есть в данных обработки он есть, но в кодинге я его не трогаю))) приноровилась уже)))

А всё от чего? В предыдущей ветке я уже говорил - нужно ДО ознакомиться со стандартом разработки печатных форм в БСП. И тогда не нужно будет приноравливаться к чему-то. Я вам алгоритм писал, как можно получить доступ к ИТС, для ознакомления с документацией. Вы получили его? Если нет - то обязательно получите. А то Ваш бубен скоро от танцев может порваться уже :)
21. Елена Пименова (Bukaska) 13.12.13 23:47
(20) paybaseme,
А то Ваш бубен скоро от танцев может порваться уже :)



С ВПФ - нет.. Другие потяжелее темы есть.. а ВПФ - это не тяжело)))
22. Виктория Коршанова (Chif13) 16.12.13 22:41
Черт, а мою форму для внешних печатных тонких даж не протестил никто... Ладно слишком видно тежеловата была или статья написана, или сама форма )))) Жаааль....
23. Илья Замятин (Zamik) 26.03.14 18:43
Спасибо помогло. Это наверное самое простое объяснение про отладку для УТ 11.И без всяких обработок.
24. Илья Крапивин (rutadmeen) 01.04.14 11:04
Всегда велкам )) Сам периодически обращаюсь обратно к этой статье. Рад, что выложил свободно – всегда можно подсмотреть!
25. mikhailovaew (mikhailovaew) 05.05.14 12:00
(24) кстати, большое спасибо, что именно в формате статьи. Просто, полезно, доступно, и скачивать ничего не нужно )
26. Олег Мэйер (meier8th) 05.05.14 13:49
27. Алексей Шарапов (Isperator) 13.05.14 13:44
Спасибо, статья помогла.
28. ilia lum (ilia3003) 02.10.14 14:16
Хорошая Публикация как раз для конфигураций стронних не от 1с
29. Яков Коган (Yashazz) 29.10.14 20:05
Наверно, я чего-то не понимаю, но по-моему, это очевидные вещи, которые можно элементарно за минуту найти отладкой механизма печати и за 3 минуты выдрать из типового модуля БСП. Зачем это делать отдельной публикацией - не осознал.
30. Леонид Никулин (Никулин Леонид) 10.11.14 14:03
Использовал Ваш метод. Получилось. Работает. Спасибо!
31. Иван Phoenix (Phoenix4565) 13.12.14 14:47
а для ЗУПА метод подходит?
32. Илья Крапивин (rutadmeen) 08.01.15 18:02
Метод подходит для любой конфы на управляемых формах
33. Константин Юрин (kostyaomsk) 27.04.15 19:22
Да, хорошая вещь, особенно для УТ 11.1 :)
34. Александр Савченко (invertercant) 24.06.15 15:20
Использую похожую конструкцию для печатных форм под БСП

&НаСервере
Функция ПечатьНаСервере()
	
	КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("ВПФ_ПечатьСчетФактуры");
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	ОбработкаОбъект.Печать(СписокОбъектов.ВыгрузитьЗначения(),
										КоллекцияПечатныхФорм,
										новый СписокЗначений,
										Неопределено);
	КоллекцияПечатныхФормМассив = ОбщегоНазначения.ТаблицаЗначенийВМассив(КоллекцияПечатныхФорм);	
	Возврат КоллекцияПечатныхФормМассив;
	
										
КонецФункции

&НаКлиенте
Процедура Печать(Команда)
	
	//Этим способом все формы в одном табличном документе как в стандартном механизме печати,
	//При необходимости можно сделать чтобы было в разных
	КоллекцияПечатныхФормМассив = ПечатьНаСервере();
	УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФормМассив);

КонецПроцедуры
...Показать Скрыть
GATTUSO; Nuuq; kostyaomsk; +3 Ответить
35. Василий (malinko.vasiliy) 22.08.15 12:27
В бух 3.0.38.55 пришлось добавить еще колонку
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяФайлаПечатнойФормы");
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа