Вывод табличных документов в общую форму "Печать документов" (УФ)

25.09.15

Разработка - Работа с интерфейсом

Механизм вывода произвольных табличных документов в общую форму "Печать документов". Работает для конфигураций на БСП.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Вывод табличных документов в общую форму "Печать документов"
.erf 7,63Kb
31
31 Скачать (1 SM) Купить за 1 850 руб.

Зачастую, создавая какой-нибудь отчет на управляемых формах, необходимо выводить получившийся табличный документ в приглядную для пользователя форму. Тут возникает вопрос: выводить в форму отчета или в какую то общую форму. Хочу поделиться своим решением.

Создал внешний отчет, в нем создал макет, вывожу этот макет в табличный документ, обращаюсь к процедуре ТабДокумент.Показать()

 

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

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


Оставалось только правильно параметры передать. В итоге в моем внешнем отчете в модуле формы две функции:
1) Формирует табличный документ
2) Выводит табличный документ в общую форму.

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

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

См. также

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    63357    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    19177    26    6    

41

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

1500 руб.

06.10.2020    10492    7    7    

11

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

20.08.2024    18777    mrXoxot    44    

126

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    8693    smielka    37    

102

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    16211    1078    elcoan    50    

118

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    12212    165    acces969    31    

124
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Gizmo_Magvai 22.04.16 10:32 Сейчас в теме
Спасибо!!!! Очень помогло.
2. s_vidyakin 68 04.07.16 16:28 Сейчас в теме
А как в ней обработать свою расшифровку?
4. lopatin 690 04.07.16 17:13 Сейчас в теме
(2) badboychik, Вы про создание своих расшифровок программным путем?

Не думаю, что это стоит делать с общей формой ПечатьДокумента
3. lopatin 690 04.07.16 16:49 Сейчас в теме
А я описывал, как вывести в эту форму результат печати, перед этим показав пользователю форму с запросом дополнительных данных: http://infostart.ru/public/502742/
5. Torin57 27 09.09.16 16:01 Сейчас в теме
Занудствую, конечно. В процедуре на клиенте после "УправлениеПечатьюКлиент.ПечатьДокументов" строка "ТабДокумент.показать()" лишняя.
cleaner_it; KoC_one; romankoav; Drapezhnik; elga2012; +5 Ответить
6. kotlovD 88 27.12.16 09:18 Сейчас в теме
7. unichkin 1581 21.03.17 17:50 Сейчас в теме
А чтобы задать заголовок для печ. формы надо еще и УправлениеПечатьюКлиент.ПечатьДокументов добавить в лапшу:

КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("Макет");
    ПечатнаяФорма = УправлениеПечатьюКлиент.ОписаниеПечатнойФормы(КоллекцияПечатныхФорм, "Макет");
    ПечатнаяФорма.СинонимМакета = "Макет";
    ПечатнаяФорма.ТабличныйДокумент = ТабДокСправка;
    ПечатнаяФорма.ИмяФайлаПечатнойФормы = "Макет";
    
	КлючУникальности = Строка(Новый УникальныйИдентификатор);
	
	ПараметрыОткрытия = Новый Структура("ИмяМенеджераПечати,ИменаМакетов,ПараметрКоманды,ПараметрыПечати");
	ПараметрыОткрытия.ПараметрКоманды = Новый Массив;
	ПараметрыОткрытия.ПараметрыПечати = Новый Структура("ЗаголовокФормы", "Справка: " + ПараметрКоманды);
	ПараметрыОткрытия.Вставить("КоллекцияПечатныхФорм", КоллекцияПечатныхФорм);
	ПараметрыОткрытия.Вставить("ОбъектыПечати", Новый СписокЗначений);
	
	ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия, , КлючУникальности);
Показать
AnddnA; Serge_ASB; Makyrka; paxanb; +4 Ответить
8. imispb 5 28.08.17 00:32 Сейчас в теме
Отлично! Спасибо! Не пришлось разбираться долго в коде.
9. aairt 18.10.17 12:24 Сейчас в теме
Строка ТабДокумент.показать(); лишняя!
cleaner_it; popro; olololeg; AntonKulmetev; elga2012; +5 Ответить
10. AntonKulmetev 29.11.17 18:39 Сейчас в теме
Супер! Спасибо большое! Не пришлось разбираться в коде!
11. vlhown 28.02.18 15:27 Сейчас в теме
Если в дальнейшем вам потребуется из формы "Печать документов" сохранить печатную форму на диск, как документ Word, например, то вы с изумлением обнаружите, что имя файла, в который происходит сохранение (форма сохранения не позволяет задать имя файла, только папку), задается не параметром печатной формы ИмяФайлаПечатнойФормы, а параметром СинонимМакета.
cleaner_it; salikoff; berserjk; DivS; +4 Ответить
12. greencactus2013 08.08.18 06:47 Сейчас в теме
Очень круто и просто! =)

В ответ на (11)
Если вызывать процедуры из ФормаСпискаДокументов Заказов клиента, то можно изменить код например так:
		КраткоеИмяПечатнойФормы = "УПД";
	    КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(КраткоеИмяПечатнойФормы);
	    ПечатнаяФорма = УправлениеПечатьюКлиент.ОписаниеПечатнойФормы(КоллекцияПечатныхФорм, КраткоеИмяПечатнойФормы);
	    ПечатнаяФорма.СинонимМакета = КраткоеИмяПечатнойФормы + " - " + ЭтаФорма.Элементы.Список.ТекущаяСтрока;
	    ПечатнаяФорма.ИмяФайлаПечатнойФормы = ПечатнаяФорма.СинонимМакета;
		ПечатнаяФорма.ТабличныйДокумент = ТабДокумент;


Тогда при сохранении и/или отправке клиенту по электронной почте файл вложения будет называться очень красиво:
"УПД - Заказ клиента АБ11111 от 17.08.2018 11 01 56.pdf"
13. ceber 12.09.18 17:04 Сейчас в теме
1с 8.3.10 УТ 3.1

Что за "НоваяКоллекцияПечатныхФорм" не магу найти.


Метод об`єкту не виявлено (НоваяКоллекцияПечатныхФорм)
КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("МаршрутныйЛист");
19. join2us 18 21.02.19 11:20 Сейчас в теме
(13) Зависит от версии БСП...
14. user887351 19.09.18 14:13 Сейчас в теме
Спасибо огромное за статью
15. ceber 20.09.18 16:12 Сейчас в теме
помогите зделал как описано выше но постояно ошибка
{ОбщийМодуль.ОбщегоНазначенияКлиентСервер.Модуль(684)}: Итератор для значения не определен
	Для Каждого Элемент Из МассивИсточник Цикл
user658699_heinrich2906; +1 Ответить
17. olololeg 29.11.18 11:28 Сейчас в теме
(15)МассивИсточник пустой
18. user658699_heinrich2906 01.12.18 23:25 Сейчас в теме
(15) У меня та же ситуация. Как вы её побороли?
16. olololeg 23.11.18 17:17 Сейчас в теме
Спасибо, как долго я искал эту статью !
20. m1_1976 13 18.07.20 10:36 Сейчас в теме
21. nollff 18 05.04.21 17:06 Сейчас в теме
Отличная статья, как раз то, что было необходимо.
22. silverr 13 12.10.21 23:06 Сейчас в теме
Отлично! Само решение задачи и дополнения участников.
А как еще на этот макет добавить Подпись (и печать опционально), да еще и галочку в шапку формы.
23. silverr 13 13.10.21 19:33 Сейчас в теме
Для всех кто еще в теме!
К сожалению (может быть) не нашел информации по теме отправки в почтовых сообщениях произвольных печатных форм, типа как тут. С формализованными (привязанными к документу с полем "Контрагент") все намного проще. Так вот, как отправить сию форму Контрагенту.
Определяем любым способом Контрагента, может даже список, пока не пробовал. Пишем вот такой код:
	&НаКлиенте
КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("Макет");
    ПечатнаяФорма = УправлениеПечатьюКлиент.ОписаниеПечатнойФормы(КоллекцияПечатныхФорм, "Макет");
    ПечатнаяФорма.СинонимМакета = "Макет";
    ПечатнаяФорма.ТабличныйДокумент = ТабДокумент;
    ПечатнаяФорма.ИмяФайлаПечатнойФормы = "Макет";
    
    КлючУникальности = Строка(Новый УникальныйИдентификатор);
    
    ПараметрыОткрытия = Новый Структура("ИмяМенеджераПечати,ИменаМакетов,ПараметрКоманды,ПараметрыПечати");
    ПараметрыОткрытия.ПараметрКоманды = Новый Массив;
    ПараметрыОткрытия.ПараметрыПечати = Новый Структура("ЗаголовокФормы", "Предложение: ");
    ПараметрыОткрытия.Вставить("КоллекцияПечатныхФорм", КоллекцияПечатныхФорм);
    ПараметрыОткрытия.Вставить("ОбъектыПечати", Новый СписокЗначений);
	
	Получатели = ПолучитьАдресаПолучателей(ОтборКонтрагент);
   
    ФормаПечати = ПолучитьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия, , КлючУникальности);
	ФормаПечати.Открыть();
	
	ФормаПечати.ПараметрыВывода.ПараметрыОтправки.Получатель = Получатели;
и т.д.

&НаСервере
Функция ПолучитьАдресаПолучателей(СписокПолучателей)
	
	Получатели = ОтправкаПочтовыхСообщенийПереопределяемый.АдресаЭлектроннойПочты(СписокПолучателей);
	
	Возврат Получатели;
КонецФункции
Показать


И вуаля, в форме нового сообщения, в поле "Получатель" наш Контрагент и его @mail, если он есть конечно.
cleaner_it; +1 Ответить
Оставьте свое сообщение