Книга знаний

1С:Предприятие

КД 2.х Передача произвольного параметра с объектом выгрузки при переносе 7.7-8.х

Последнее время часто стали появляться ветки с вопросами как передать какую-то произвольную информацию с объектом выгрузки. Вот и я на днях столкнулся как раз с этим вопросом.
<br><br><br><br><br><br>  После небольшого мозгового штурма воплотил вот такую идею.
Автор статьи: Рэйв | Редакторы: Михей, andrewks,
Последняя редакция №9 от 05.10.10 | История
URL: http://kb.mista.ru/article.php?id=811

Ключевые слова: КД,Передача,Параметр,7.7


Метод довольно прост в реализации, хотя придется все таки немного поправить обработку обмена в 1С v.8

1. Для передачи параметра (или параметров, количество передаваемого может быть произвольным)



в обработчике Правила Конвертации Объекта(ПКО) ПриВыгрузке  пишем следующее

//передача одного параметра с именем "Клиент" и значением - строковым представлением реквизита объекта Клиент
        УзелПараметра = DOMDocument.createNode(1, "ЗначениеПараметра", "");
        УзелПараметра.setAttribute("ИмяПараметрПКО", "Клиент"); 
        УзелПараметра.setAttribute("ЗначениеПараметрПКО", Строка(Источник.Клиент));
        Приемник.appendChild(УзелПараметра);


Количество таких блоков может быть произвольным, в зависимости от количества передаваемого.

""ИмяПараметрПКО" и "ЗначениеПараметрПКО" - имена обязательные, потому что по ним потом будет поиск в при загрузке.

"Клиент" и Строка(Источник.Клиент) - величины произвольные.

Первое вы сами назначаете и сами же потом будите использовать в обработчиках загрузки.
А второе- это и есть передаваемое значение. Оно может быть любым, но при записи в файл все равно приведется к типу Строка.

2. Для получения переданных параметров в базе-приемнике надо немного изменить обработку загрузки.



Открываем в конфигурации модуль объекта обработки
и ищем
Функция ПрочитатьОбъект().


 Идем от начала в низ, пропускаем обработчики ПередЗагрузкой и находим вот такой кусок кода


    Пока ФайлОбмена.Прочитать() Цикл
        
        ИмяУзла = ФайлОбмена.ЛокальноеИмя;
                
        Если ИмяУзла = "Свойство"
            ИЛИ ИмяУзла = "ЗначениеПараметра" Тогда
            
            ЭтоПараметрДляОбъекта = (ИмяУзла = "ЗначениеПараметра");


Для начала перед циклом

     Пока ФайлОбмена.Прочитать() Цикл

поставим свою строчку :

     ПараметрыПКО=Новый Соответствие;


Дальше в цикле нас интересует именно переменная
ЭтоПараметрДляОбъекта
.
Поэтому быстренько проверив ее заполняем наше свежерожденное соответствие:


    Если ЭтоПараметрДляОбъекта Тогда
         ИмяПараметраПКО     = одАтрибут(ФайлОбмена, одТипСтрока, "ИмяПараметрПКО");
         ЗначениеПараметраПКО= одАтрибут(ФайлОбмена, одТипСтрока, "ЗначениеПараметрПКО");
         ПараметрыПКО.Вставить(ИмяПараметраПКО, ЗначениеПараметраПКО);
    КонецЕсли;



Вот собственно и все.
Соответствие ПараметрыПКО доступно в обработчиках ПриЗагрузке и ПослеЗагрузки. А там - вспоминайте уже сами какими именами вы называли ваши параметры и доставайте их из него. Например :

МойПараметр1=ПараметрыПКО.Получить("МоеИмяПараметра1");
МойПараметр2=ПараметрыПКО.Получить("МоеИмяПараметра2");
МойПараметр3=ПараметрыПКО.Получить("МоеИмяПараметра3");


----------------------------------------------------------------------------
*есть мнение, что изменений в универсальной обработке обмена при загрузке можно избежать.

Если у кого-то есть конструктивное дополнение этого мнения кодом - прошу не полениться и дополнить статью.

Значится так:

Открываем КД (например у меня Конвертация данных, редакция 2.1 (2.1.2.1)), заходим в Настройку правил обмена, позиционируемся на любой ПКО, далее открываем любое ПКС и смотрим что там есть радиобатон "Пердавать данные в параметр" а далее все по мануалу.

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика