Внешние обработки программно 8.3

1. morrex 3 19.11.19 15:33 Сейчас в теме
Помогите пожалуйста
Внешняя обработка выполняется программно. Но необходимо не открыть форму, а выполнить процедуру в модуле объекта внешней обработки
Есть код который запускает на выполнение открытие формы

&НаСервере
Функция ПодключитьВнешнююОбработку(АдресХранилища)
Возврат ВнешниеОбработки.Подключить(АдресХранилища);
КонецФункции


&НаСервере
Функция ПодключитьВнешнийОтчет(АдресХранилища)
Возврат ВнешниеОтчеты.Подключить(АдресХранилища);
КонецФункции


&НаКлиенте
Процедура дзФайловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; ВыбСтрока=Элемент.ТекущиеДанные;
Если НЕ ВыбСтрока.ЭтоГруппа Тогда
АдресХранилища = "";
Если ВыбСтрока.Расширение = ".epf" Тогда
Рез=ПоместитьФайл(АдресХранилища,ВыбСтрока.ПолноеИмя, ,Ложь);
ИмяОбработки = ПодключитьВнешнююОбработку(АдресХранилища);
ОткрытьФорму("ВнешняяОбработка."+ИмяОбработки+".Форма");
ИначеЕсли ВыбраннаяСтрока.Расширение = ".erf" Тогда
Рез=ПоместитьФайл(АдресХранилища,ВыбСтрока.ПолноеИмя, ,Ложь);
ИмяОбработки = ПодключитьВнешнийОтчет(АдресХранилища);
ОткрытьФорму("ВнешнийОтчет."+ИмяОбработки+".Форма");
КонецЕсли;
КонецЕсли;
КонецПроцедуры

А как вместо ОткрытьФорму обратиться к реквизитам и выполнить процедуру

Если НЕ ВнешнийОтчетОбработка.Метаданные().Реквизиты.Найти("ДополнительныеПараметры") = Неопределено Тогда
ВнешнийОтчетОбработка.ДополнительныеПараметры = ДополнительныеПараметры;
КонецЕсли;

ТабличныйДокументРезультат = ВнешнийОтчетОбработка.Инициализировать();
adhocprog; +1 Ответить
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
15. morrex 3 21.11.19 09:14 Сейчас в теме
Работает с такой реализацией

СтрокаСпискаОтчетов содержит полный путь к файлу внешнего отчета и расширение

&НаКлиенте
                .......
		АдресХранилища = "";
		Если СтрокаСпискаОтчетов.Расширение = ".epf" Тогда
			Рез=ПоместитьФайл(АдресХранилища,СтрокаСпискаОтчетов.ПолноеИмяФайлаВнешнейОбработки, ,Ложь);
			ИмяОбработки = ПодключитьВнешнююОбработку(АдресХранилища);
						
		ИначеЕсли СтрокаСпискаОтчетов.Расширение = ".erf" Тогда
			Рез=ПоместитьФайл(АдресХранилища,СтрокаСпискаОтчетов.ПолноеИмяФайлаВнешнейОбработки, ,Ложь);
			ИмяОбработки = ПодключитьВнешнийОтчет(АдресХранилища);
						
		КонецЕсли;
                ТабДок = ВнешняяОбработкаНаСервере(СтрокаСпискаОтчетов.Расширение,ИмяОбработки) ;

                .........

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

			КонецЕсли;
                      ТабличныйДокументРезультат = ВнешнийОтчетОбработка.Инициализировать();
                .........
Показать
adhocprog; Aspire1C; ybatiaev; KPAMOP; +4 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Xershi 1484 19.11.19 15:40 Сейчас в теме
(1) вызови моддуль менеджера внешних обработок. И посмотри что там по имени обработки есть.
Если обработка будет, то и далее экспортный метод можно использовать. Иначе переписывать.
А вообще зачем такое извращение делать? Напишите внешнюю обработку, которая сама этот код выполнит!
5. dandykry 10 19.11.19 16:08 Сейчас в теме
(1) МояВнешкаОбъект = ВнешниеОбработки.Создать(ИмяОбработки);

МояВнешкаОбъект.Реквизит1 = 1;
МояВнешкаОбъект.Реквизит2 = "абвгд";
МояВнешкаОбъект.ИмяЭкспортнойПроцедурыИлиФункцииВМодулеОбъекта();
mifka186; +1 Ответить
6. morrex 3 19.11.19 16:20 Сейчас в теме
(5) Здесь мешает безопасный режим
13. dandykry 10 20.11.19 07:09 Сейчас в теме
(6) Если из внешки вы пытаетесь вызвать другую внешку, то вполне себе будет мешать. Настраивайте профили безопасности или уберите галку у пользователя "Защита от опасных действий".

Либо через БСП

Синтаксис

Функция ТипКомандыСценарийВБезопасномРежиме() Экспорт
Возвращаемое значение

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

Результат = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыСценарийВБезопасномРежиме()
Показать


Либо

Синтаксис:
УстановитьБезопасныйРежим(<БезопасныйРежим>)
Параметры:
<БезопасныйРежим> (обязательный)
Тип: Булево, Строка.
Определяет, будет ли включен безопасный режим:
Строка - имя профиля безопасности. Включить режим и назначить профиль безопасности. Может быть использовано имя только того профиля, у которого свойство SafeModeProfile установлено в значение Истина. Если безопасный режим уже включен, то повторный вызов метода с именем другого профиля не изменит текущий профиль безопасности;
Истина - включить режим без указания конкретного профиля безопасности;
Ложь - выключить режим.
Строка - имя профиля безопасности. Включить режим и назначить профиль безопасности. Может быть использовано имя только того профиля, у которого свойство SafeModeProfile установлено в значение Истина. Если безопасный режим уже включен, то повторный вызов метода с именем другого профиля не изменит текущий профиль безопасности;
Истина - включить режим без указания конкретного профиля безопасности;
Ложь - выключить режим.
adhocprog; +1 Ответить
7. YannikAlx 43 19.11.19 16:32 Сейчас в теме
(1) покажите вашу процедуру -
СведенияОВнешнейОбработке
8. morrex 3 19.11.19 17:41 Сейчас в теме
(7)
Функция СведенияОВнешнейОбработке() Экспорт

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

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

строкаКоманды = тзКоманд.Добавить();
строкаКоманды.Идентификатор = "1";
строкаКоманды.Представление = "ПакетнаяВыгрузкаОтчетов";
строкаКоманды.ПоказыватьОповещение = Истина;
строкаКоманды.Использование = "ОткрытиеФормы";

РегистрационныеДанные.Вставить("Команды", тзКоманд);

Возврат РегистрационныеДанные;

КонецФункции
9. YannikAlx 43 19.11.19 17:45 Сейчас в теме
(8) Вот у вас только ОткрытиеФормы
Добавьте еще команду ВызовСерверногоМетода и используйте ее для скрытого запуска
Вот пример

ДобавитьКоманду(ТаблицаКоманд,"Универсальная обработка документов (с авторегистрацией)","Открыть Обработку","ОткрытиеФормы",Истина,"Выполнить");
ДобавитьКоманду(ТаблицаКоманд,"КоммандаВыполнитьОбработку","КоммандаВыполнитьОбработку", "ВызовСерверногоМетода", Ложь,"Выполнить"); 
10. morrex 3 19.11.19 17:50 Сейчас в теме
(9) но регистрация этой обработки никак не связана с вызовом из нее других внешних обработок - эта обработка как раз открывается и работает, а вот запуск из нее другой внешней обработки для подготовки табличного документа вызывает затруднения
11. YannikAlx 43 19.11.19 17:58 Сейчас в теме
(10)
т запуск из нее другой внешней обработки для подготовки табличного документа вызывает зат

Вы сами проанализируйте всю полученную информацию...
Ну я же не сказал вам вставлять доп строки в первую обработку....
Добавьте туда , где не надо форму открывать , а вызываете серверные методы
12. morrex 3 19.11.19 18:40 Сейчас в теме
(11) да, понятно, спасибо, просто уже глаза замылились...
2. leosoft 165 19.11.19 15:39 Сейчас в теме
Вместо ОткрытьФорму попробуйте ПолучитьФорму
4. user633533_encantado 11 19.11.19 15:43 Сейчас в теме
	Обр = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Имя твоей обработки");
	

	ИмяФайла = ПолучитьИмяВременногоФайла("epf"); 
	ДвоичныеДанные = Обр.ХранилищеОбработки.Получить(); 
	ДвоичныеДанные.Записать(ИмяФайла); 
	ОписаниеЗащитыОтОпасныхДействий = Новый ОписаниеЗащитыОтОпасныхДействий;
        ОписаниеЗащитыОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь;	
	Об = ВнешниеОбработки.Создать(ИмяФайла, Ложь, Новый ОписаниеЗащитыОтОпасныхДействий); 
	

	Об.ВыполнитьКоманду(ПараметрыОбработки); //экспортная процедура в модуле твоей обработки
Показать
adhocprog; vislavok; +2 Ответить
14. KVIKS 400 20.11.19 12:03 Сейчас в теме
А нельзя вместо 2-х обработок сделать одну? Процедуру из 2-ой скопировать в первую (можно в модуль формы серверную процедуру) и работайте нормально
15. morrex 3 21.11.19 09:14 Сейчас в теме
Работает с такой реализацией

СтрокаСпискаОтчетов содержит полный путь к файлу внешнего отчета и расширение

&НаКлиенте
                .......
		АдресХранилища = "";
		Если СтрокаСпискаОтчетов.Расширение = ".epf" Тогда
			Рез=ПоместитьФайл(АдресХранилища,СтрокаСпискаОтчетов.ПолноеИмяФайлаВнешнейОбработки, ,Ложь);
			ИмяОбработки = ПодключитьВнешнююОбработку(АдресХранилища);
						
		ИначеЕсли СтрокаСпискаОтчетов.Расширение = ".erf" Тогда
			Рез=ПоместитьФайл(АдресХранилища,СтрокаСпискаОтчетов.ПолноеИмяФайлаВнешнейОбработки, ,Ложь);
			ИмяОбработки = ПодключитьВнешнийОтчет(АдресХранилища);
						
		КонецЕсли;
                ТабДок = ВнешняяОбработкаНаСервере(СтрокаСпискаОтчетов.Расширение,ИмяОбработки) ;

                .........

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

			КонецЕсли;
                      ТабличныйДокументРезультат = ВнешнийОтчетОбработка.Инициализировать();
                .........
Показать
adhocprog; Aspire1C; ybatiaev; KPAMOP; +4 Ответить
17. Pira 144 04.05.22 16:46 Сейчас в теме
(15) С БСП еще проще:

ИмяМенеджераПечати = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Имя вашей обработки");
ОбработкаПечати = ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(ИмяМенеджераПечати);
ОбработкаПечати.МетодИзМодуляОбъектаСЭкспортом();
madbone; adhocprog; +2 Ответить
16. Vix 28 21.11.19 21:51 Сейчас в теме
Пример, процедура в документе при открытии, которая вызывает процедуру модуля для продажи, это внешняя обработка.

&НаКлиенте
Процедура ПриОткрытии(Отказ)
        ПутьКВнешнейОбработке = Каталог1С+"ОбработкаМодуляПродажаТовара.epf";
        Адрес = ""; Имя = "ПродажаТовара";	
        ВнешнийФайл = Новый Файл(ПутьКВнешнейОбработке);
        Если НЕ ВнешнийФайл.Существует() Тогда
                // ......что-то сообщаем
        Иначе
               ПоместитьФайл(Адрес,ПутьКВнешнейОбработке,,ЛОЖЬ);
	       ВнешняяОбработкаФормы = ПодключитьВнешнююОбработку(Адрес,Имя);
	       Форма = ВнешниеОбработки.Создать(ВнешняяОбработкаФормы);
               Форма.ПодключитьДрайверММ(); //подключаю драйвер например, вызов процедуры ВО
        КонецЕсли;
КонецПроцедуры
Показать

&НаСервере
Функция  ПодключитьВнешнююОбработку(Адрес,Имя);
	Возврат ВнешниеОбработки.Подключить(Адрес,Имя,ЛОЖЬ);
КонецФункции	
Оставьте свое сообщение

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