2 мар. 2020 г.

Запуск метода внешней обработки по имени

В общий модуль помещаем процедуры и функции

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

Делаем вызов вот так

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

И в внешней обработке "ис_ФоновыйЗапсук_МодульИнтеграцииEDIN_0001" должна быть Экспортная процедура
"исОбработкаЗаполненияРеализацияТоваровУслуг" и один параметр "СтруктураПараметров"
из которого уже идет получение по имени значений структуры.

Обращаю внимание, что экспортная процедура должна иметь название параметра
точно такое как и передается т.е.

исОбработкаЗаполненияРеализацияТоваровУслуг(СтруктураПараметров) Экспорт

Реализация СохранитьЗначение() и ХранилищеОбщихНастроек.Сохранить() своими силами

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

Процедура УстановитьЗначениеПараметраСеанса(ИмяПараметра, УстановленныеПараметры) Если ИмяПараметра = "исДопПараметры" Тогда ДопПараметр = Новый ХранилищеЗначения(Новый Структура); ПараметрыСеанса.исДопПараметры = ДопПараметр; КонецЕсли; КонецПроцедуры

  • Добавляем общий модуль с именем "ИС", в который размещаем следующие процедуры
исБезПроверкиНаЗапретРедактирования - это именованный произвольно параметр по которому далее
идет логика поиска

Функция БезПроверкиНаЗапретРедактирования(Источник) Экспорт исБезПроверкиНаЗапретРедактирования = ПолучитьДопПараметр("исБезПроверкиНаЗапретРедактирования"); Возврат исБезПроверкиНаЗапретРедактирования = Истина; КонецФункции Функция ПолучитьДопПараметр(ИмяПараметра) Экспорт ЗначПараметра = Неопределено; ДопПараметры = ПараметрыСеанса.исДопПараметры.Получить(); Если ТипЗнч(ДопПараметры) = Тип("Структура") Тогда ДопПараметры.Свойство(ИмяПараметра, ЗначПараметра); КонецЕсли; Возврат ЗначПараметра КонецФункции Процедура УстановитьДопПараметры(ИмяПараметра, ЗначениеПараметра) Экспорт ТекПараметр = ПараметрыСеанса.исДопПараметры.Получить(); Если ТипЗнч(ТекПараметр) <> Тип("Структура") Тогда ТекПараметр = Новый Структура КонецЕсли; ТекПараметр.Вставить(ИмяПараметра, ЗначениеПараметра); ПараметрыСеанса.исДопПараметры = Новый ХранилищеЗначения(ТекПараметр) КонецПроцедуры

  • Пример вызова процедур и функций вот такими способами
  1. ис.УстановитьДопПараметры("исБезПроверкиНаЗапретРедактирования",Неопределено)
  2. Если ис.ПолучитьДопПараметр("исБезПроверкиНаЗапретРедактирования") = Истина Тогда
  3. Если ИС.БезПроверкиНаЗапретРедактирования(Источник) Тогда Возврат КонецЕсли;

24 сент. 2019 г.

Не затирать ПКС при выгрузке регистра сведений

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

Решение:
В ПКО регистра сведений в обработчике После выгрузки пишем
ИсходныеДанные = НаборЗаписей.Выгрузить();
Свойства = "ИмяПоля1,ИмяПоля2";//список ресурсов, которые не нужно замещать
Для Каждого Запись из НаборЗаписей Цикл
    СтруктураРезультат = РегистрыСведений.НеПериодичныйНеПодчиненныйРегистратору.Получить(Новый Структура("Номенклатура", Запись.Номенклатура));
    ЗаполнитьЗначенияСвойств(Запись, СтруктураРезультат, Свойства, );
КонецЦикла;
 

CopyPaste Copyright © 2017 - |- Шаблон создан O Pregador - |- Отредактирован myr4ik07