Обработка ПодключаемыеКоманды.ПараметрыРазмещения()

1. login1020 133 09.07.19 09:11 Сейчас в теме
Есть обработка, своего рода журнал, но все данные собираются в неё из регистров сведений и в ней же ведется учет.

Есть печатные формы, которые выводятся в стандартную форму печати. Печатная форма содержит в себе общую информацию, собираемую в закладках формы.

Проблема как вывести в командную панель печать, если она не привязана к документам?

Если смотреть типовой код, то печать берут с объектов

ПриСозданииНаСервере
	ОбъектыПечати = Новый Массив;
	ОбъектыПечати.Добавить(Метаданные.Документы.МаршрутныйЛистПроизводства);
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения();
	ПараметрыРазмещения.Источники = ОбъектыПечати;
	ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения);


Модуль Менеджера
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

	Документы.МаршрутныйЛистПроизводства.ДобавитьКомандыПечати(КомандыПечати);

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


Как добавить печать через подключаемые команды?

ИЛИ

Как добавить сюда ПараметрыВывода.ПараметрыОтправки? (Есть постоянный список получателей для этих форм печати).

Тогда можно будет отказаться от подключаемых команд, т.к. вывод на печать все равно идет через стандратную форму печати

	
                КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(ИмяМакета);    
		КоллекцияПечатныхФорм[0].ТабличныйДокумент =  ПечатьСервер(ИмяМакета,СинонимМакета,Организация,СписокСотрудниковНаПечать);
		КоллекцияПечатныхФорм[0].Экземпляров = 1;
		КоллекцияПечатныхФорм[0].СинонимМакета = СинонимМакета; 
		
		ЗаполнитьПолучателей(КоллекцияПечатныхФорм,СинонимМакета);
		УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм,Неопределено,ЭтаФорма);
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
15. login1020 133 10.07.19 10:06 Сейчас в теме
(12)Получилось выкрутится следующим образом
&НаКлиенте
Процедура ПечатьКлиент(ИмяМакета,СинонимМакета,СписокСотрудниковНаПечать = Неопределено)
	
	Если ЗначениеЗаполнено(Организация) Тогда
		КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(ИмяМакета); 
		КоллекцияПечатныхФорм[0].ТабличныйДокумент =  ПечатьСервер(ИмяМакета,СинонимМакета,Организация,СписокСотрудниковНаПечать);
		КоллекцияПечатныхФорм[0].Экземпляров = 1;
		КоллекцияПечатныхФорм[0].СинонимМакета = СинонимМакета; 	
		УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм,Неопределено,ЭтаФорма);
	Иначе
		Сообщение = Новый СообщениеПользователю();
		Сообщение.Поле = "Организация";
		Сообщение.Текст = "Поле не заполнено";
		Сообщение.Сообщить();
	КонецЕсли;  
	
КонецПроцедуры
Показать


А дальше пришлось добавлять в расширение Общую форму ПечатьДокументов в которой содержится необходимая процедура (ОбработкаВыбора), где и задал вручную ПараметрыВывода:
&НаКлиенте
Процедура Расш1_ОбработкаВыбораПеред(ВыбранноеЗначение, ИсточникВыбора)
	
	Если НастройкиПечатныхФорм.Количество() = 1 Тогда 
		Если НастройкиПечатныхФорм[0].Название = "Пример 1"  
			ИЛИ	НастройкиПечатныхФорм[0].Название = "Пример 2" 
			ИЛИ	НастройкиПечатныхФорм[0].Название = "Пример 3"  Тогда
			СписокАдресатов = Новый СписокЗначений;
			СписокАдресатов.Добавить("123@yandex.ru","Тест 123");
			СписокАдресатов.Добавить("231@yandex.ru","Тест 231");
			ПараметрыВывода.ПараметрыОтправки.Получатель = СписокАдресатов;
			ПараметрыВывода.ПараметрыОтправки.Тема  = НастройкиПечатныхФорм[0].Название;
			ПараметрыВывода.ПараметрыОтправки.Текст = НастройкиПечатныхФорм[0].Название;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры
Показать
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
23. retr0 02.12.21 14:50 Сейчас в теме
(1) Я пожалуй отвечу, столкнулся с таким же вопросом. Не знаю, тогда было можно или нет, но сейчас есть в БСП метод
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ВладелецФормы, ПараметрыПечати = Неопределено)
2. dhurricane 09.07.19 09:27 Сейчас в теме
Уточните, пожалуйста, из постановки задачи не совсем понятно. Какова цель использования механизма подключаемых команд, учитывая, что планируется использовать их они не совсем так, как задумывалось разработчиками конфигурации? Почему бы просто не добавить свое подменю "Печать", куда включить собственную команду формы, реализующую нужный Вам алгоритм печати?
3. login1020 133 09.07.19 09:35 Сейчас в теме
(2) Я бы и рад собственной выводить, что я и делал
(1)
КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(ИмяМакета);
КоллекцияПечатныхФорм[0].ТабличныйДокумент = ПечатьСервер(ИмяМакета,СинонимМакета,Организация,СписокСотрудниковНаПечать);
КоллекцияПечатныхФорм[0].Экземпляров = 1;
КоллекцияПечатныхФорм[0].СинонимМакета = СинонимМакета;

ЗаполнитьПолучателей(КоллекцияПечатныхФорм,СинонимМакета);
УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм,Неопределено,ЭтаФорма);


Но при таком варианте вывода я не могу указать ПараметрыВывода

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

Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
4. dhurricane 09.07.19 09:37 Сейчас в теме
(3) Какая у Вас версия БСП?
5. login1020 133 09.07.19 09:43 Сейчас в теме
6. dhurricane 09.07.19 09:50 Сейчас в теме
(5) Процедура "УправлениеПечатьюКлиент.ПечатьДокументов" содержит, вроде, незамысловатый код. Может Вам проще всего продублировать ее, где заполните ПараметрыПечати так, как Вам нужно?
7. login1020 133 09.07.19 09:53 Сейчас в теме
(6) вызвать Свою Печать Документов по аналогии с типовой и в ней в параметрах открытия дозаполнить ПараметрыВывода?
8. login1020 133 09.07.19 10:04 Сейчас в теме
(6) Только я не вижу там передачу параметров, отвечающих за ПараметрыВывода
9. dhurricane 09.07.19 10:47 Сейчас в теме
(8) Да, я перепутал с ПараметрыПечати. Прошу прощения.
10. dhurricane 09.07.19 10:53 Сейчас в теме
(8) А что, если зайти с другой стороны. В модуле "УправлениеПечатьюПереопределяемый" есть процедура "ПередОтправкойПоПочте". Быть может в ней Вам удастся определить, Ваша ли печатная форма выводится пользователю, и если так, заполнить получателей?
11. login1020 133 09.07.19 11:03 Сейчас в теме
(10) Читал уже про эту процедуру, только не совсем понятно как и в какой момент переопределить.
12. dhurricane 09.07.19 12:35 Сейчас в теме +0.5 $m
(11) Ну как я понимаю, оно срабатывает при нажатии на команду "Отправить по почте" и до открытия формы нового электронного письма. Можно проанализировать параметр "ПечатныеФормы" (таблица печатных форм и их наименований), и если он содержит нужную Вам печатную форму, заполнить получателей в параметре процедуры "ПараметрыОтправки".
15. login1020 133 10.07.19 10:06 Сейчас в теме
(12)Получилось выкрутится следующим образом
&НаКлиенте
Процедура ПечатьКлиент(ИмяМакета,СинонимМакета,СписокСотрудниковНаПечать = Неопределено)
	
	Если ЗначениеЗаполнено(Организация) Тогда
		КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(ИмяМакета); 
		КоллекцияПечатныхФорм[0].ТабличныйДокумент =  ПечатьСервер(ИмяМакета,СинонимМакета,Организация,СписокСотрудниковНаПечать);
		КоллекцияПечатныхФорм[0].Экземпляров = 1;
		КоллекцияПечатныхФорм[0].СинонимМакета = СинонимМакета; 	
		УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм,Неопределено,ЭтаФорма);
	Иначе
		Сообщение = Новый СообщениеПользователю();
		Сообщение.Поле = "Организация";
		Сообщение.Текст = "Поле не заполнено";
		Сообщение.Сообщить();
	КонецЕсли;  
	
КонецПроцедуры
Показать


А дальше пришлось добавлять в расширение Общую форму ПечатьДокументов в которой содержится необходимая процедура (ОбработкаВыбора), где и задал вручную ПараметрыВывода:
&НаКлиенте
Процедура Расш1_ОбработкаВыбораПеред(ВыбранноеЗначение, ИсточникВыбора)
	
	Если НастройкиПечатныхФорм.Количество() = 1 Тогда 
		Если НастройкиПечатныхФорм[0].Название = "Пример 1"  
			ИЛИ	НастройкиПечатныхФорм[0].Название = "Пример 2" 
			ИЛИ	НастройкиПечатныхФорм[0].Название = "Пример 3"  Тогда
			СписокАдресатов = Новый СписокЗначений;
			СписокАдресатов.Добавить("123@yandex.ru","Тест 123");
			СписокАдресатов.Добавить("231@yandex.ru","Тест 231");
			ПараметрыВывода.ПараметрыОтправки.Получатель = СписокАдресатов;
			ПараметрыВывода.ПараметрыОтправки.Тема  = НастройкиПечатныхФорм[0].Название;
			ПараметрыВывода.ПараметрыОтправки.Текст = НастройкиПечатныхФорм[0].Название;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры
Показать
16. login1020 133 10.07.19 10:08 Сейчас в теме
(12)Как по мне выглядит коряво...
Но ничего лучше я не нашёл. Спасибо за помощь.

P.S.Что сложного было для разработчиков разрешить помещать произвольные процедуры печати в обработки, по аналогии с Документами и Справочниками.
17. dhurricane 10.07.19 10:12 Сейчас в теме
(16) Не за что, я мало помог. :)

Что сложного было для разработчиков разрешить помещать произвольные процедуры печати в обработки
Эта возможность-то есть, Ваша главная трудность здесь - это отсутствие объектов назначения печатной формы.
18. login1020 133 10.07.19 10:22 Сейчас в теме
(17) Ну Вы поняли, что я имел ввиду подключаемые команды печати непривязанные к документам)
13. IvanBoychuk123 10 09.07.19 17:17 Сейчас в теме
В модуле "УправлениеПечатьюПереопределяемый"
Процедура ПередДобавлениемКомандПечати(ИмяФормы, КомандыПечати, СтандартнаяОбработка) Экспорт
	
	Если ИмяФормы = "Обработка.ПроизвольныйСписокДокументов.Форма.Форма" Тогда // ПроизвольныйСписокДокументов - Имя обработки.
		Обработки.ПроизвольныйСписокДокументов.ДобавитьКомандыПечати(КомандыПечати);
	КонецЕсли;
	
КонецПроцедуры
Показать


В модуле менеджера обработки

// Заполняет список команд печати.
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	// Перемещение товаров
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "_ДемоЗаказПокупателя";
	КомандаПечати.Представление = НСтр("ru = 'Заказ'");
	КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
	КомандаПечати.ТипыОбъектовПечати =  Новый Массив;
	КомандаПечати.ТипыОбъектовПечати.Добавить(Тип("ДокументСсылка._ДемоЗаказПокупателя"));
	
КонецПроцедуры
Показать


В Форме

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения();
	ПараметрыРазмещения.Источники = Новый ОписаниеТипов("ДокументСсылка._ДемоЗаказПокупателя, ДокументСсылка._ДемоСчетНаОплатуПокупателю"); // Описание типов ссылок, входящих в динамический список.
	ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект,ПараметрыРазмещения);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры
Показать
14. login1020 133 09.07.19 22:44 Сейчас в теме
(13) все это конечно классно, но
(1)
Проблема как вывести в командную панель печать, если она не привязана к документам?
19. IvanBoychuk123 10 10.07.19 11:02 Сейчас в теме
(14)
Процедура ПодключаемыеКоманды.ПриСозданииНаСервере создает в том числе и команды печати если они существуют для указаного типа документа.
Прикрепленные файлы:
20. login1020 133 10.07.19 11:10 Сейчас в теме
(19) В том то и дело, что нет у меня документа, Обработка автономная и к документам не привязана. А оперирует она данными регистров сведений, которые через эту же обработку вводятся и корректируются.
То что можно перенести команды печати из документов, при наличии ссылки на документ, это понятно, только в моём случае переносить нечего.
21. IvanBoychuk123 10 10.07.19 11:15 Сейчас в теме
(20)
Тогда это отчет, со всеми рассылками и возможностями печати :)
22. login1020 133 10.07.19 11:34 Сейчас в теме
(21) да нет по своему тех содержанию и возможностям это как раз обработка, печатные формы понадобились, когда уже полностью все было реализовано и запущено)
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)