Внешние обработки программно 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 1473 19.11.19 15:40 Сейчас в теме
(1) вызови моддуль менеджера внешних обработок. И посмотри что там по имени обработки есть.
Если обработка будет, то и далее экспортный метод можно использовать. Иначе переписывать.
А вообще зачем такое извращение делать? Напишите внешнюю обработку, которая сама этот код выполнит!
5. dandykry 9 19.11.19 16:08 Сейчас в теме
(1) МояВнешкаОбъект = ВнешниеОбработки.Создать(ИмяОбработки);

МояВнешкаОбъект.Реквизит1 = 1;
МояВнешкаОбъект.Реквизит2 = "абвгд";
МояВнешкаОбъект.ИмяЭкспортнойПроцедурыИлиФункцииВМодулеОбъекта();
mifka186; +1 Ответить
6. morrex 3 19.11.19 16:20 Сейчас в теме
(5) Здесь мешает безопасный режим
13. dandykry 9 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 395 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 143 04.05.22 16:46 Сейчас в теме
(15) С БСП еще проще:

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

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

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

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

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

Программист 1С (удаленно)
Самара
зарплата от 230 000 руб. до 230 000 руб.
Полный день

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