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

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

Добрый день!

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

 

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

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

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

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

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

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

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

КонецПроцедуры 

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

27 Comments

  1. Dnki

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

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

    Но сейчас читаю, и слезы льются: «Куда катится 1С ?!». Неужели для такой простой операции в УФ надо кучу хитрых операторов, расплодившихся процедур?

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

    И я не могу понять: хочу легко писать программы, максимум усилий на алгоритмы, юзабилити, и минимум усилий на «передать можно только так», «а на сервере (клиенте) этот метод не сработает», «а тут модальность» и т.п.

    p.s. Мое ретроградское ворчание не в адрес автора. Простите за оффтоп. Наболело.

    Reply ↓
  2. cargobird

    (1) Dnki, поддерживаю. И еще оффтоп. При оценке доработки на управляемых формах, как-то автоматом уже получается накинуть процентов тридцать по стоимости и по времени, понимая, что при разработке где-нибудь да на что-нибудь такое напорешься…

    Reply ↓
  3. Dimon2005

    (1) Dnki, Согласен на все 1000%

    p.s. Простите за оффтоп.

    Reply ↓
  4. ya.Avoronov

    (1) Dnki, Интересно, а ярые программисты 1С 7.7 тоже в свое время не хотели переходить на 1С 8 с подобными оффтопами?

    Все проходит! Все приживается! УФ будут когда-то ушедшим и самым родным для большинства.

    И снова оффтопы появятся: В 1С 10.0 на облачных формах этот метод не сработает; Многопоточные вычисления не поддерживают такую передачу данных.

    И многое другое и так до бесконечности.

    Reply ↓
  5. blindcat2006

    (4) ya.Avoronov,

    Немного не в тему

    УФ — ура куча плюсов, пишу много и для тонкого и для 8.2, иногда ругаюсь на толстый что там нет чего-то к чему уже привык в УФ

    Поднята тема усложнения нашей работы на пустом месте.

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

    Reply ↓
  6. ya.Avoronov

    (5) blindcat2006,

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

    Могу предположить, что речь идет о большом количестве функций или процедур, которые востребованы единицами, т.е. меньшинством, мыслящей в своем — творческом направлении. Тогда согласен, платформа всячески будет мешать вам. Придется добавить 10-20 строк, чтобы вывести некую печатную форму на экран.

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

    А в целом вы правы! В 1С, как в жизни — постоянная борьба с несправедливостью платформой.

    Reply ↓
  7. wolfsoft

    (6) ya.Avoronov,

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

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

    Reply ↓
  8. йцукенг

    Нужно добавить в структуру

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

    чтобы имя файла формировалось при отправке по e-mail

    Reply ↓
  9. vasichib

    Большое спасибо.

    Reply ↓
  10. bsturtle

    Ну какой же ты красавчик!! больше двух лет я мог найти этого! Спасибо друг. все получилось

    Reply ↓
  11. Alchemist

    Спасибо за информацию!

    Reply ↓
  12. Bernstein_13

    Спасибо тебе, добрый человек!!!

    Reply ↓
  13. artik1994

    спасибо!

    Reply ↓
  14. Oleg-and-reevich

    Автор, благодарность Вам! Очень помогло. Тоже из обработки нужно вывести отчет по табличной части.

    Reply ↓
  15. Rain88

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

    структураКоллекции.СинонимМакета = «Желаемое имя»;
    

    иначе файл сохраняется, например как «.xlsx»

    Автору большое спасибо.

    Reply ↓
  16. semina-2016

    Спасибище человеческое) Красота получается)

    Reply ↓
  17. gkvgkv

    Спасибо! Пригодилось

    Reply ↓
  18. Ivanov_OM

    Спасибо. Пригодилось. Самое главное просто и без лишних параметров.

    Reply ↓
  19. user797130

    Спасибо!

    Reply ↓
  20. user869223

    То, что надо! Спасибо, очень выручили!

    Reply ↓
  21. Viking

    Спасибо! Респект дружище! Выручил!

    Reply ↓
  22. kubiky

    Спасибо! Очень пригодилось!

    Reply ↓
  23. nisan

    Спасибо!!! Очень полезная статья) Сэкономила много времени!!

    Reply ↓
  24. vmoscalik

    Спасибо тебе огромное, добрый человек! Два дня мучился всяческими извращениями неприятными :-), а оказалось вона как просто. Дай тебе Бог чего пожелаешь!

    Reply ↓
  25. mikl79

    спасибо пригодится

    Reply ↓
  26. YalanchidiO

    Большое спасибо автору!)

    Reply ↓
  27. gluglugluglu

    Спасибо, в копилку

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *