Имя: Пароль:
1C
 
КД2 Выгрузка 1 справочника в разные справочники
0 breezee
 
10.06.20
09:32
Добрый день. Не нашел описания в интернете. Решил поделиться. Если изобретаю велосипед - ну и черт с ним)
По заданию из табличной части документа выгружается справочник в разные справочники в другой базе. При чем в одном документе может быть один и тот же контрагент, который является разными контрагентами в другой базе. Зависит от счета и договора контрагента.
Я сделали ПВД документа в котором получаю запросом нужные данные и в обходе результата формирую стрруктуру. Типо вот этого:
    ИначеЕсли СокрЛП(ВыборкаДетальныеЗаписи.КоррСчет.Код) = "79.1.2" Тогда    
            
            Значение_Код_контр_в_1С77_ПУ_выгрузка_з_п = ОбщегоНазначения.ПолучитьЗначениеСвойствоОбъекта(ВыборкаДетальныеЗаписи.Подразделение, Код_контр_в_1С77_ПУ_выгрузка_з_п);
                        
            Значение_СправочникДляВыгрузкиКонтрагентаВ1С77ПУ = "Контрагенты2";
            
            Сообщить("По счету 79.1.2 для контрагента = " + ВыборкаДетальныеЗаписи.Субконто1 + "; СправочникДляВыгрузкиКонтрагентаВ1С77ПУ = " + Значение_СправочникДляВыгрузкиКонтрагентаВ1С77ПУ + "; Код Контрагента в 1С 7 ПУ = " + Значение_Код_контр_в_1С77_ПУ_выгрузка_з_п);
            
            НСтрокаТабличнойЧасти.Субконто1 = Новый Структура("Справочник, ПолеПоиска, ЗначениеПоиска", Значение_СправочникДляВыгрузкиКонтрагентаВ1С77ПУ, "КОД", Значение_Код_контр_в_1С77_ПУ_выгрузка_з_п);     
            
        ИначеЕсли СокрЛП(ВыборкаДетальныеЗаписи.КоррСчет.Код) = "57.1.1" Тогда

Потом сделали ПКО, назвал "Контрагенты_ОБЩИЕ" и указал у реквизита табличной части "контрагент" указал это ПОК. В самом ПКО ничего нет, кроме кода перед выгрузкой данных. Код такой:

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

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

Как-то так.
1 Ёпрст
 
10.06.20
09:35
(0) если выгрузка будет по плану обмена..всё это полетит в топку.. ну да ладно
2 breezee
 
10.06.20
09:42
(1) Почему? Я запросом буду выбирать просто изменения из плана обмена. Сейчас выбираются запросом документы, которые выбирают юзеры
3 fisher
 
10.06.20
11:20
Выносить часть конвертации в ПВД - не очень универсально. Гибнет конвертация по ссылкам.
Все можно сделать на уровне ПКО, где ключевые данные из документов, влияющие на алгоритм конвертации, будут прилетать через ВходящиеДанные
4 fisher
 
10.06.20
11:22
А ПВД при этом будет самое банальное.
Программист всегда исправляет последнюю ошибку.