Как вывести табличный документ на печать в управляемой форме внешней обработки

02.09.15

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

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

Добрый день!

Столкнулся с таким вопросом - у меня есть внешняя обработка по загрузке сотрудников из Excel-файла. (кстати, пользовался новым методом 8.3.6, который стал доступен с 8.3.6.1977 - ТабличныйДокумент.Прочитать, за что спасибо публикации //infostart.ru/public/341855/) и весь код был в основном расположен в модуле управляемой формы. А мне нужно было из нее вывести табличный документ с ошибками загрузки на печать, причем метод ТабличныйДокумент.Показать мне не подходил, так как в нем не было никаких кнопок (печать, сохранить, отправить), которые добавляют удобства работы.

 

Во-первых, что делать с макетом? В обычных формах было все просто: Макет = ПолучитьМакет(«ИмяМакета»), в управляемом интерфейсе такого не получится. Подобная конструкция в модуле управляемой формы неизменно вызывает ошибку, в каком бы контексте она не использовалась. Поэтому мне пришлось добавить к обработке реквизит, с типом произвольный и в модуле объекта обработки,  после всех стандартных процедур типа СведенияОВнешнейОбработке() добавить строчку:

//выполняется до открытия формы
РеквизитМакет = ЭтотОбъект.ПолучитьМакет("Макет");

Далее в модуле формы уже обращался к нему стандартно:

//возвращает табличный документ с ошибками
функция ПечатьОшибокСервер(резПроверки) экспорт
ТД=Новый ТабличныйДокумент;	
макет = Объект.РеквизитМакет;
областьМ = макет.ПолучитьОбласть("Область");
областьМ.Параметры.текстошибки =  СокрЛП(резПроверки);
тд.Вывести(областьМ);
конецфункции

А вот затем встал вопрос, как же красиво вывести получившийся ТабличныйДокумент на печать. Стандартные функции для внешних обработок типа УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,    "Макет", "Макет",    ТабДок);  не подходят, но после изучения методом тыка была найдена подходящая в модуле УправлениеПечатьюКлиент (этот модуль есть в ЗУП 3.0, на котором я проверял обработку):

&НаКлиенте
Процедура печатьОшибок(Команда) 
резПроверки = ПроверкаНаСервере();

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

Весь секрет оказался в том, что в полученную коллекцию надо добавить наш табличный документ в строке структураКоллекции .ТабличныйДокумент =ТабДокОшибок ;  и после этого у пользователя появляется красивая печатная форма:

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

управляемые формы внешняя обработка табличный документ печать табличного документа

См. также

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

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    2895    Abysswalker    7    

43

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

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

14.05.2025    5769    DeerCven    15    

57

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

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

21.05.2024    47218    dimanich70    83    

167

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

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

1 стартмани

18.03.2024    7058    6    John_d    13    

59

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

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

12.02.2024    58641    atdonya    31    

69

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

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

30.11.2023    8794    ke.92@mail.ru    17    

68
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Dnki 4 02.09.15 20:26 Сейчас в теме
Ключевая фраза публикации: "В обычных формах было все просто: Макет = ПолучитьМакет(«ИмяМакета»), в управляемом интерфейсе такого не получится".

Пишу на обычных формах. И у меня отчеты выводятся не через ТабличныйДокумент.Показать(), и множества других программ.
Но сейчас читаю, и слезы льются: "Куда катится 1С ?!". Неужели для такой простой операции в УФ надо кучу хитрых операторов, расплодившихся процедур?

Я пишу для конечных пользователей. Они понимают, когда работа тяжела сложностью обработки данных, ценят интерфейсные удобства. А потуги в стиле: как через ж...у вырезать гланды не поймут.
И я не могу понять: хочу легко писать программы, максимум усилий на алгоритмы, юзабилити, и минимум усилий на "передать можно только так", "а на сервере (клиенте) этот метод не сработает", "а тут модальность" и т.п.

p.s. Мое ретроградское ворчание не в адрес автора. Простите за оффтоп. Наболело.
san4o; vakham; Evgeniy_V; olsy; VickWood; stsasha87; eViLL; Meistersinger; powar; orexov; Alex-krk; Filkkore; NazarovV; vechiy; Perfolenta; mikl79; Wonder; Charity; Rain88; alex-l19041; Kanae; Новичок1с; корум; raystlin; Andrew_Glorious; vasichib; rasswet; A7_Sash; grfsd; shalimski; kgn2011; bulpi; vitaspsp; ya.Avoronov; kit; Dimon2005; cargobird; Danila-Master; rusmil; t278; AlexeyPapanov; +41 Ответить
2. cargobird 321 03.09.15 08:04 Сейчас в теме
(1) Dnki, поддерживаю. И еще оффтоп. При оценке доработки на управляемых формах, как-то автоматом уже получается накинуть процентов тридцать по стоимости и по времени, понимая, что при разработке где-нибудь да на что-нибудь такое напорешься...
san4o; vakham; VickWood; Perfolenta; mikl79; alex-l19041; bulpi; +7 Ответить
3. Dimon2005 6 03.09.15 08:07 Сейчас в теме
(1) Dnki, Согласен на все 1000%
p.s. Простите за оффтоп.
san4o; vakham; +2 Ответить
4. ya.Avoronov 115 03.09.15 11:18 Сейчас в теме
(1) Dnki, Интересно, а ярые программисты 1С 7.7 тоже в свое время не хотели переходить на 1С 8 с подобными оффтопами?
Все проходит! Все приживается! УФ будут когда-то ушедшим и самым родным для большинства.
И снова оффтопы появятся: В 1С 10.0 на облачных формах этот метод не сработает; Многопоточные вычисления не поддерживают такую передачу данных.
И многое другое и так до бесконечности.
Mantis; collider; корум; Ukubaeva; cleaner_it; help1Ckr; h00k; vitaspsp; Патриот; +9 Ответить
5. blindcat2006 95 03.09.15 19:46 Сейчас в теме
(4) ya.Avoronov,
Немного не в тему
УФ - ура куча плюсов, пишу много и для тонкого и для 8.2, иногда ругаюсь на толстый что там нет чего-то к чему уже привык в УФ
Поднята тема усложнения нашей работы на пустом месте.
Взять этот же сайт - куча публикаций с подсказками из двух -двадцати строчек, запихнув которые в функцию, и вызывая можно значительно облегчить себе работу. Внимание вопрос ! - почему эти 2-3-5-20 строк нельзя было реализовать на уровне платформы вызовом одной процедуры???
6. ya.Avoronov 115 04.09.15 10:12 Сейчас в теме
(5) blindcat2006,

Взять этот же сайт - куча публикаций с подсказками из двух -двадцати строчек, запихнув которые в функцию, и вызывая можно значительно облегчить себе работу. Внимание вопрос ! - почему эти 2-3-5-20 строк нельзя было реализовать на уровне платформы вызовом одной процедуры???


Могу предположить, что речь идет о большом количестве функций или процедур, которые востребованы единицами, т.е. меньшинством, мыслящей в своем - творческом направлении. Тогда согласен, платформа всячески будет мешать вам. Придется добавить 10-20 строк, чтобы вывести некую печатную форму на экран.
Поправьте меня, но не для того ли существует сертификация в 1С, чтобы программисты не пытались изобретать велосипеды, а пользовались всеми возможностями платформы и быстро решали поставленные задачи. Не думаю, что вашему работодателю нужен некий хай-тек художник на должность штатного программиста.
А в целом вы правы! В 1С, как в жизни - постоянная борьба с несправедливостью платформой.
7. wolfsoft 2421 09.09.15 13:42 Сейчас в теме
(6) ya.Avoronov,
Могу предположить, что речь идет о большом количестве функций или процедур, которые востребованы единицами

Ага, видимо поэтому программисты от 1С потом ваяют в типовых конфигурациях функции типа перевода таблицы значений в массив структур и т.п. При том, что всю эту хрень можно было спокойно реализовать на уровне платформы.
8. йцукенг 09.09.15 16:10 Сейчас в теме
Нужно добавить в структуру

структураКоллекции.СинонимМакета="ИМЯ ФАЙЛА "

чтобы имя файла формировалось при отправке по e-mail
9. vasichib 09.10.15 09:06 Сейчас в теме
10. dnikolaev 168 05.07.16 12:15 Сейчас в теме
Ну какой же ты красавчик!! больше двух лет я мог найти этого! Спасибо друг. все получилось
11. Alchemist 15.10.16 08:46 Сейчас в теме
Спасибо за информацию!
12. Bernstein_13 03.11.16 11:15 Сейчас в теме
Спасибо тебе, добрый человек!!!
13. artik1994 02.11.17 18:03 Сейчас в теме
14. Oleg-and-reevich 6 11.12.17 15:17 Сейчас в теме
Автор, благодарность Вам! Очень помогло. Тоже из обработки нужно вывести отчет по табличной части.
15. Rain88 382 29.01.18 16:13 Сейчас в теме
Может кому пригодится: чтобы при сохранении в файл или отправке письма формировалось имя файла, необходимо добавить строку
структураКоллекции.СинонимМакета = "Желаемое имя";
иначе файл сохраняется, например как ".xlsx"

Автору большое спасибо.
16. semina-2016 07.02.18 22:07 Сейчас в теме
Спасибище человеческое) Красота получается)
17. gkvgkv 5 20.04.18 19:13 Сейчас в теме
Спасибо! Пригодилось
18. Ivanov_OM 38 08.05.18 11:05 Сейчас в теме
Спасибо. Пригодилось. Самое главное просто и без лишних параметров.
19. user797130 30.07.18 15:47 Сейчас в теме
20. user869223 31.07.18 14:39 Сейчас в теме
То, что надо! Спасибо, очень выручили!
21. Viking 01.08.18 13:15 Сейчас в теме
Спасибо! Респект дружище! Выручил!
22. kubiky 138 17.10.18 14:48 Сейчас в теме
Спасибо! Очень пригодилось!
23. nisan 31.10.18 20:17 Сейчас в теме
Спасибо!!! Очень полезная статья) Сэкономила много времени!!
24. v_moskalyk 34 14.11.18 13:27 Сейчас в теме
Спасибо тебе огромное, добрый человек! Два дня мучился всяческими извращениями неприятными :-), а оказалось вона как просто. Дай тебе Бог чего пожелаешь!
25. mikl79 120 04.12.18 07:32 Сейчас в теме
спасибо пригодится
26. YalanchidiO 20 17.07.19 23:48 Сейчас в теме
Большое спасибо автору!)
27. gluglugluglu 10.12.19 10:38 Сейчас в теме
Спасибо, в копилку
28. zlw51 16.03.20 16:13 Сейчас в теме
Полезная статья. Спасибо!!!
29. gsanton@mail.ru 10.02.21 02:31 Сейчас в теме
Спасибо !!
помогло в 2.30 ночи )
30. aakholmogorov 07.04.21 12:38 Сейчас в теме
Спасибо добрый человек))
31. APalkin 08.07.21 11:31 Сейчас в теме
Вместо реквизита формы, можно так:

ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
Макет = ОбработкаОбъект.ПолучитьМакет("ИмяМакета");
yuraskas; +1 Ответить
32. annasalnikova 22 04.12.21 15:25 Сейчас в теме
Спасибо, очень пригодилось!
33. VickWood 05.05.22 17:26 Сейчас в теме
можно еще так, тоже работает:
&НаСервере
Функция ПолучитьМакетНаСервере()
	
	ОбъектВнешнейОбработки = РеквизитФормыВЗначение("Объект");
	Макет = ОбъектВнешнейОбработки.ПолучитьМакет("Макет");
	Возврат Макет;
	
КонецФункции

&НаКлиенте
Процедура ВывестиИнструкцию(Команда)
	
	ТабДокумент = Новый ТабличныйДокумент;	
	ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Макет";
	ТабДокумент.АвтоМасштаб = Истина;
	ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
	
	Макет = ПолучитьМакетНаСервере();
	Область = Макет.ПолучитьОбласть("Область");
	
	ТабДокумент.Вывести(Область);

	ТабДокумент.Показать("Инструкция");
	
КонецПроцедуры
Показать
34. aleksey2 91 28.11.23 13:05 Сейчас в теме
(33) это не через бсп, будет некрасиво
35. HaIIpuKoJIe 14.12.23 15:23 Сейчас в теме
Если автор не против
Прикрепленные файлы:
Обработка.epf
36. Djo82 12 15.07.24 13:31 Сейчас в теме
тоже сразу не понял, пришлось юзать интернет для быстроты дела
Для отправки сообщения требуется регистрация/авторизация