Запуск внешней обработки через внешнюю печатную форму 8.3

1. lex199517 21.05.18 09:29 Сейчас в теме
Всем привет. Есть 1с: УАТ Проф и нужно сделать каким либо образом чтобы при создании нового заказа или изменнении текущего можно было отправить инфу по нему руководителю (не обязательно автоматом). В общем проблема в следующем, есть печатная форма для управляемого приложения (сделал по примеру), теперь пытаюсь переделать так, чтобы при ее вызове выполнялась обработка, а точнее запуск Outlookа для отправки этой инфы. Получилось открыть Outlook и даже передать информацию по заказу в него, но при этом открывается печатная форма (макет), вот как его убрать?? Уже несколько дней бьюсь и все никак( Хотя бы примерно направьте куда копать
Прикрепленные файлы:
Печать.epf
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. mifka186 8 21.05.18 10:14 Сейчас в теме
(1)
но при этом открывается печатная форма (макет), вот как его убрать?? Уже несколько дней бьюсь и все никак( Хотя бы примерно направьте куда копать


У тебя в сведениях о внешней обработке указано печатная форма, вызов серверного метода. Если функция ПечатьФормы(МассивОбъектов) будет возвращать табличный документ, то в итоге всегда этот табличный документ будет открываться в 1С. Попробуй возвращать Неопределено.
9. lex199517 21.05.18 10:46 Сейчас в теме
(7) Выдает ошибку
{ОбщийМодуль.УправлениеПечатью.Модуль(1121)}: В обработчике печати не был сформирован табличный документ для: ВнешняяОбработка.ПечатнаяФормаУправляемоеПриложение
ВызватьИсключение(ТекстСообщенияОбОшибке);

При просмотре ошибки в конфигураторе отсылает в Общий модуль УправленияПечатью
Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
		Если ПечатнаяФорма.ТабличныйДокумент = Неопределено Тогда
			ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("en='Spreadsheet document for %1 was not generated in the print processor';ru='В обработчике печати не был сформирован табличный документ для: %1'"),
				ПечатнаяФорма.ИмяМакета);
			ВызватьИсключение(ТекстСообщенияОбОшибке);
		КонецЕсли;
		
		ПечатнаяФорма.ТабличныйДокумент.КоличествоЭкземпляров = ПечатнаяФорма.Экземпляров;
	КонецЦикла;
Показать

Где как раз прописано выдавать ошибку если возвращать неопределено
10. mifka186 8 21.05.18 10:50 Сейчас в теме
(9) Мда. Попробуй вместо
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            УказатьНаименованиеКомандыПечати(),
            УказатьНаименованиеВнешнейПечатнойФормы(),
            ПечатьФормы(МассивОбъектов));


Указать просто ПечатьФормы(МассивОбъектов);
11. lex199517 21.05.18 11:00 Сейчас в теме
(10) Пробовал, та же ошибка, что не сформирован табличный документ
12. mifka186 8 21.05.18 11:12 Сейчас в теме
(11) Шьёрт побери. Видимо если создаётся КоллекцияПечатныхФорм, то она должна быть напечатана.

Из вариантов еще в голову приходит только использование не серверного, а клиентского метода печати.
Создаётся форма, в форме указывается экспортный метод:

//   Для печатных форм (Вид = "ПечатнаяФорма"):
       &НаКлиенте
       Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
       	// Реализация логики команды.
       КонецПроцедуры
2. DJDUH 17 21.05.18 09:35 Сейчас в теме
Убрать метод
Показать()
3. lex199517 21.05.18 09:40 Сейчас в теме
(2) Может я конечно новичок в 1с, но вот не вижу у себя такого метода, может не туда смотрю?

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

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

Функция УказатьНаименованиеВнешнейПечатнойФормы()
	Наименование = ЭтотОбъект.Метаданные().Представление();
	Возврат Наименование;
КонецФункции

Функция УказатьНаименованиеКомандыПечати()
	Наименование = ЭтотОбъект.Метаданные().ПолноеИмя();
	Возврат Наименование;
КонецФункции

Функция ПолучитьМетаданныеДокументаПечати()
	ПолноеИмя = Документ.Метаданные().ПолноеИмя();
	Возврат ПолноеИмя;
КонецФункции

Функция ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
	
	НоваяКоманда = ТаблицаКоманд.Добавить();
	НоваяКоманда. Представление = Представление;
	НоваяКоманда. Идентификатор= Идентификатор;
	НоваяКоманда. Использование= Использование;
	НоваяКоманда. ПоказыватьОповещение= ПоказыватьОповещение;
	НоваяКоманда. Модификатор= Модификатор;
	
КонецФункции

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

Функция ПечатьФормы(МассивОбъектов) Экспорт
	ТабДок = новый ТабличныйДокумент;
		
	Запрос = новый запрос;
		Запрос.УстановитьПараметр("МассивОбъектов",МассивОбъектов);
		Запрос.Текст = "ВЫБРАТЬ
		               |	уатЗаказГрузоотправителя.Номер КАК Номер,
		               |	уатЗаказГрузоотправителя.Дата КАК Дата,
		               |	уатСтатусы_уэ.Наименование КАК Наименование,
		               |	уатЗаказГрузоотправителя.Ссылка КАК Ссылка,
		               |	уатСтатусы_уэ.Ссылка КАК Ссылка1
		               |ИЗ
		               |	Документ.уатЗаказГрузоотправителя КАК уатЗаказГрузоотправителя,
		               |	Справочник.уатСтатусы_уэ КАК уатСтатусы_уэ
		               |ГДЕ
		               |	уатЗаказГрузоотправителя.Ссылка В(&МассивОбъектов)";
					   
	ОбщаяВыборка = Запрос.Выполнить().Выгрузить();
					   
	Для Каждого СсылкаНаОбъект из МассивОбъектов Цикл
		
	Outlook = Новый COMОбъект("Outlook.Application");
	Письмо = Outlook.CreateItem(0);
	Письмо.Subject = "УАТ Заказ";
	Письмо.Body = "Номер заказа: " + СсылкаНаОбъект.Номер + " / Дата заказа: " + СсылкаНаОбъект.Дата + " / Статус заказа: ";// + СсылкаОбъект.Наименование;
	Письмо.Display();

	КонецЦикла;
				   
	возврат ТабДок;
КонецФункции
Показать
4. /Sergeant/ 21.05.18 10:05 Сейчас в теме
(3)
Письмо.Display();
же, не?
Попробуй Письмо.Send();
8. lex199517 21.05.18 10:15 Сейчас в теме
(4)Это само письмо в Outlookе, оно должно показываться, но при его показе показывается еще окно с печатью, вот его мне и надо убрать\скрыть (то, что справа)
Прикрепленные файлы:
5. harvester_sorrow 24 21.05.18 10:12 Сейчас в теме
(3)Была подобная задача, к сожалению не получилось не открывать форму печати.
Вышел из положения немного криво,указал что нужно открывать мою форму (созданную) после выполнения кода закрывал ее сразу, в при создании на сервере
6. harvester_sorrow 24 21.05.18 10:12 Сейчас в теме
(5)если кто то знает как это обойти, напишите пожалуйста, будет интересно узнать.
13. user633533_encantado 11 21.05.18 11:35 Сейчас в теме
Создать печатную форму с вызовом клиентского метода, в форме своей обработки при создании на сервере выполнять формирование печатной формы с отправкой ее по почте, но при этом саму форму обработки не открывать.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот