2 мар. 2020 г.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

24 сент. 2019 г.

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

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

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

3 сент. 2019 г.

DirectActive, атрибут nameInSecondConfiguration, значение ключа - "Клиент"

После восстановления ранее сохраненных настроек изменения объединения конфигураций с разными релизами бывает такая ситуация
DirectActive, атрибут nameInSecondConfiguration, значение ключа - "Клиент"

Решение:

из файла сохраненных настроек удаляем все строки целиком, что связаны с текстом
<DirectiveArea name="Клиент " nameInSecondConfiguration="Клиент ">"
начинать удаление из конца файла.

После каждого удаления строки, сохраняем файл и проверяем результат.

В схеме базы данных нет таблицы с именем ConstChngR15098

Ошибка
В процессе обновления информационной базы произошла критическая ошибка
по причине:
Ошибка SDBL:
В схеме базы данных нет таблицы с именем ConstChngR15098
показалась во время применения обновления конфигурации до следующего релиза.

Решение оказалось изменить Режим совместимости, на тот, который был до обновления релиза


9 июл. 2019 г.

Получить контактную информацию

Автор не я.
/// Вх Параметры: Например Объект - Документ,Контрагент,КонтактноеЛицоКонтрагнета,КонтактноеЛицо
/// Тип - тип контактной информации , Вид - вид контактной информации , 
/// Вых Параметры: Массив Структур , возращает массив с структурой Объект,Вид_КИ,Значение_КИ
Функция Получить_Все_ВозможныеВиды_КИ_Объекта(СсылкаЗнч,Тип_КИ,Вид_КИ = Неопределено) Экспорт
           
            //// В документе ищет свойства и если в свойстах есть имеил тогда п
            ЭтоДокумент = Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(СсылкаЗнч));
            МассивВозврата          = Новый Массив;
            СоотвествияЗнч          = Новый Соответствие;
           
            ТекКонтрагент = Неопределено;
            ТекКонтактноеЛицоКонтрагнета = Неопределено;
            ТекКонтактноеЛицо    = Неопределено;
           
            Если ЭтоДокумент Тогда
                       
                        ///// Пока только для документа ЗаказПокупателя
                        Если ТипЗнч(СсылкаЗнч) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
                                   
                                    ТаблицаПустая = Ложь;
                                   
                                    Запрос = Новый Запрос("ВЫБРАТЬ
                                    |           ЗначенияСвойствОбъектов.Свойство,
                                    |           ЗначенияСвойствОбъектов.Значение,
                                    |           ЗначенияСвойствОбъектов.Свойство.Наименование КАК Наименование_Свойства,
                                    |           ЗначенияСвойствОбъектов.Свойство.ТипЗначения КАК ТипЗначения
                                    |ИЗ
                                    |           РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                                    |ГДЕ
                                    |           ЗначенияСвойствОбъектов.Объект = &amp;Объект");
                                   
                                    Запрос.УстановитьПараметр("Объект",СсылкаЗнч);
                                    Выборка = Запрос.Выполнить().Выбрать();
                                    Если Выборка.Количество() = 0 Тогда
                                               ТаблицаПустая = Истина;
                                    КонецЕсли;
                                   
                                    СоотвествиеСвойств = Новый Соответствие;
                                    Пока Выборка.Следующий() Цикл
                                               СоотвествиеСвойств.Вставить(Выборка.Свойство,Выборка.Значение);
                                    КонецЦикла;
                                   
                                   
                                    ТаблицаСоотвествий = Константы.Простир_СоотвествиеСвойствЗаказу_РеквизитамКонтрагента.Получить();
                                   
                                   
                                    Если Не ЗначениеЗаполнено(ТаблицаСоотвествий) Тогда
                                               ТаблицаПустая = Истина;
                                    КонецЕсли;
                                   
                                    ТаблицаСоотвествий = ЗначениеИзСтрокиВнутр(ТаблицаСоотвествий);
                                    Если ТаблицаСоотвествий.Количество() = 0 Тогда
                                               ТаблицаПустая = Истина;      
                                    КонецЕсли;
                                   
                                    Если НЕ ТаблицаПустая Тогда
                                              
                                               Для Каждого Стр Из ТаблицаСоотвествий Цикл
                                                           Если ЗначениеЗаполнено(Вид_КИ) Тогда
                                                                       Если Стр.РеквизитКонтрагента = Вид_КИ Тогда
                                                                                   ЗначениеСвойства = СоотвествиеСвойств.Получить(Стр.РеквизитКонтрагента);
                                                                                   Если ЗначениеЗаполнено(ЗначениеСвойства) Тогда                                                                                   
                                                                                               МассивВозврата.Добавить(Новый Структура("Объект,Вид_КИ,Значение_КИ",СсылкаЗнч,Стр.РеквизитКонтрагента,ЗначениеСвойства));
                                                                                   КонецЕсли;
                                                                       КонецЕсли;
                                                                      
                                                           ИначеЕсли ТипЗнч(Стр.РеквизитКонтрагента) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") И
                                                                       Стр.РеквизитКонтрагента.Тип = Тип_КИ Тогда         
                                                                      
                                                                       ЗначениеСвойства = СоотвествиеСвойств.Получить(Стр.ИмяСовойстваЗаказа);
                                                                       Если ЗначениеЗаполнено(ЗначениеСвойства) Тогда
                                                                                   МассивВозврата.Добавить(Новый Структура("Объект,Вид_КИ,Значение_КИ",СсылкаЗнч,Стр.РеквизитКонтрагента,ЗначениеСвойства));
                                                                       КонецЕсли;
                                                                      
                                                           КонецЕсли;
                                               КонецЦикла;
                                    КонецЕсли;
                                   
                        КонецЕсли;                                                     
                       
                        Если СсылкаЗнч.Метаданные().Реквизиты.Найти("Контрагент") <> Неопределено Тогда                          
                                    ТекКонтрагент = СсылкаЗнч.Контрагент;
                        КонецЕсли;
                       
            КонецЕсли;
           
            Если ТипЗнч(СсылкаЗнч) = Тип("СправочникСсылка.Контрагенты") Тогда
                        ТекКонтрагент = СсылкаЗнч;
            КонецЕсли;
           
            Если ЗначениеЗаполнено(ТекКонтрагент) Тогда
                       
                        МассивОбъектов_КИ = Новый Массив;
                        МассивОбъектов_КИ.Добавить(ТекКонтрагент);
                       
                        Выборка_КонтактныеЛица_Контрагентов = Справочники.КонтактныеЛицаКонтрагентов.Выбрать(,ТекКонтрагент);
                        Пока Выборка_КонтактныеЛица_Контрагентов.Следующий() Цикл
                                   
                                    Если Выборка_КонтактныеЛица_Контрагентов.ПометкаУдаления Тогда
                                               Продолжить;
                                    КонецЕсли;
                                   
                                    МассивОбъектов_КИ.Добавить(Выборка_КонтактныеЛица_Контрагентов.Ссылка);
                                    Если НЕ Выборка_КонтактныеЛица_Контрагентов.КонтактноеЛицо.Пустая() Тогда
                                                МассивОбъектов_КИ.Добавить(Выборка_КонтактныеЛица_Контрагентов.КонтактноеЛицо);
                                    КонецЕсли;
                                   
                        КонецЦикла;
                       
                        Запрос = Новый Запрос("ВЫБРАТЬ
                                              |           КонтактнаяИнформация.Представление,
                                              |           КонтактнаяИнформация.Объект,
                                              |           КонтактнаяИнформация.Вид
                                              |ИЗ
                                              |           РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
                                              |ГДЕ
                                              |           КонтактнаяИнформация.Объект В(&amp;Объект)
                                              |           И КонтактнаяИнформация.Тип = &amp;Тип");
                        Запрос.УстановитьПараметр("Объект",МассивОбъектов_КИ);
                        Запрос.УстановитьПараметр("Тип",Тип_КИ);
                       
                        Выборка = Запрос.Выполнить().Выбрать();
                       
                        Пока Выборка.Следующий() Цикл
                                    МассивВозврата.Добавить(Новый Структура("Объект,Вид_КИ,Значение_КИ",Выборка.Объект,Выборка.Вид,Выборка.Представление));                 
                        КонецЦикла;
                       
                       
            КонецЕсли;
           
            Возврат МассивВозврата;
           
КонецФункции
 
 
МассивКонтактнойИнформации = Получить_Все_ВозможныеВиды_КИ_Объекта(пДокументСсылка, Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты, );

Отобразить тип \ спрятать типы по кнопке выбрать

Задача: “реквизит имеет неоднозначный тип т.е. (СправочникСсылка, ДокументСсылка), при нажатии кнопки выбора нужно спрятать \ отобразить нужные типы”.
    МассивТипов = Новый Массив;
    МассивТипов.Добавить(Тип("СправочникСсылка.Контрагенты"));
    МассивТипов.Добавить(Тип("СправочникСсылка.Организации"));
    ГрузоотправительТипы = Новый ОписаниеТипов(МассивТипов);
    
    Элементы.Грузоотправитель.ОграничениеТипа = ГрузоотправительТипы;
    Элементы.Грузоотправитель.ВыбиратьТип = Истина;
    
    Если ВидОперации = Перечисления.Инт_ВидыОперацийЗаявкаНаПеревозку.Поставка Тогда  
        Элементы.Грузоотправитель.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Контрагенты");    
        Элементы.Грузоотправитель.ВыбиратьТип = Ложь;
    КонецЕсли;    
 

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