gifts2017

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

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

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

Добрый день!

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

 

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

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

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

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

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

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

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

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

См. также

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

Комментарии

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

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

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

p.s. Мое ретроградское ворчание не в адрес автора. Простите за оффтоп. Наболело.
Новичок1с; корум; raystlin; Стил; vasichib; rasswet; A7_Sash; grfsd; shalimski; kgn2011; bulpi; vitaspsp; ya.Avoronov; kit; Dimon2005; cargobird; Danila-Master; rusmil; t278; El_Loco; +20 Ответить 3
2. Даниил Матвеев (cargobird) 03.09.15 08:04
(1) Dnki, поддерживаю. И еще оффтоп. При оценке доработки на управляемых формах, как-то автоматом уже получается накинуть процентов тридцать по стоимости и по времени, понимая, что при разработке где-нибудь да на что-нибудь такое напорешься...
3. Дмитрий Агеев (Dimon2005) 03.09.15 08:07
(1) Dnki, Согласен на все 1000%
p.s. Простите за оффтоп.
4. Александр Воронов (ya.Avoronov) 03.09.15 11:18
(1) Dnki, Интересно, а ярые программисты 1С 7.7 тоже в свое время не хотели переходить на 1С 8 с подобными оффтопами?
Все проходит! Все приживается! УФ будут когда-то ушедшим и самым родным для большинства.
И снова оффтопы появятся: В 1С 10.0 на облачных формах этот метод не сработает; Многопоточные вычисления не поддерживают такую передачу данных.
И многое другое и так до бесконечности.
корум; Ukubaeva; cleaner_it; help1Ckr; h00k; vitaspsp; Патриот; +7 Ответить 1
5. blindcat2006 (blindcat2006) 03.09.15 19:46
(4) ya.Avoronov,
Немного не в тему
УФ - ура куча плюсов, пишу много и для тонкого и для 8.2, иногда ругаюсь на толстый что там нет чего-то к чему уже привык в УФ
Поднята тема усложнения нашей работы на пустом месте.
Взять этот же сайт - куча публикаций с подсказками из двух -двадцати строчек, запихнув которые в функцию, и вызывая можно значительно облегчить себе работу. Внимание вопрос ! - почему эти 2-3-5-20 строк нельзя было реализовать на уровне платформы вызовом одной процедуры???
6. Александр Воронов (ya.Avoronov) 04.09.15 10:12
(5) blindcat2006,

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


Могу предположить, что речь идет о большом количестве функций или процедур, которые востребованы единицами, т.е. меньшинством, мыслящей в своем - творческом направлении. Тогда согласен, платформа всячески будет мешать вам. Придется добавить 10-20 строк, чтобы вывести некую печатную форму на экран.
Поправьте меня, но не для того ли существует сертификация в 1С, чтобы программисты не пытались изобретать велосипеды, а пользовались всеми возможностями платформы и быстро решали поставленные задачи. Не думаю, что вашему работодателю нужен некий хай-тек художник на должность штатного программиста.
А в целом вы правы! В 1С, как в жизни - постоянная борьба с несправедливостью платформой.
7. Антон Рощин (wolfsoft) 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. Дмитрий Неважнов (bsturtle) 05.07.16 12:15
Ну какой же ты красавчик!! больше двух лет я мог найти этого! Спасибо друг. все получилось
11. Артем Григоров (Alchemist) 15.10.16 08:46
12. Андрей Береговой (Bernstein_13) 03.11.16 11:15
Спасибо тебе, добрый человек!!!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа