Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Не переносятся некоторые справочники (НСИ) при типовом обмене через ED из ERP 2.4 в БП 3.0

Не переносятся некоторые справочники (НСИ) при типовом обмене через ED из ERP 2.4 в БП 3.0
Я
   happysan
 
08.04.19 - 10:07
Всем привет!
Настраиваем синхронизацию двух типовых БД 1С: ERP 2.4 и БП 3.0 посредством типового универсального формата обмена ED. При отправке данных из БП в ERP добились полного переноса всех справочников (НСИ). В обратном же направлении не переносятся некоторые справочники, например, банковские счета, договоры и т. д. Через отладчик выяснилось, что эти справочники имеют режим выгрузки "ВыгружптьПоУсловию", но пока не удалось разобраться какое условие должно выполняться. Вроде как проверка должна проходить по регистрации объектов на узле плана обмена, но регистрация этих справочников фиксируется. буду благодарен конструктивным мыслям на этот счёт.
 
 
   happysan
 
1 - 08.04.19 - 11:55
Нашёл причину в запросе и закомментировал строчку одну:
ВЫБРАТЬ РАЗЛИЧНЫЕ ПланОбменаОсновнаяТаблица.Ссылка КАК Ссылка,
ПланОбменаРазделыУчета.РазделУчета,
ПланОбменаРазделыУчета.Выгружать
ИЗ
ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат КАК ПланОбменаОсновнаяТаблица
ЛЕВОЕ СОЕДИНЕНИЕ ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.РазделыУчета КАК ПланОбменаРазделыУчета
ПО ПланОбменаОсновнаяТаблица.Ссылка = ПланОбменаРазделыУчета.Ссылка
    И (ПланОбменаРазделыУчета.РазделУчета = &СвойствоОбъекта_РазделУчета1
ИЛИ ПланОбменаРазделыУчета.РазделУчета = &СвойствоОбъекта_РазделУчета2
ИЛИ ПланОбменаРазделыУчета.РазделУчета = &СвойствоОбъекта_РазделУчета3)
    И ПланОбменаРазделыУчета.Выгружать

ЛЕВОЕ СОЕДИНЕНИЕ
ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.Организации КАК СинхронизацияДанныхЧерезУниверсальныйФорматОрганизации
ПО ПланОбменаОсновнаяТаблица.Ссылка = СинхронизацияДанныхЧерезУниверсальныйФорматОрганизации.Ссылка
ГДЕ
((СинхронизацияДанныхЧерезУниверсальныйФорматОрганизации.Организация = &СвойствоОбъекта_Организация
           ИЛИ (ПланОбменаОсновнаяТаблица.ИспользоватьОтборПоОрганизациям = Ложь
                    И (ПланОбменаОсновнаяТаблица.УправленческаяОрганизация <> &СвойствоОбъекта_Организация
                               ИЛИ ПланОбменаОсновнаяТаблица.ВыгружатьУправленческуюОрганизацию = Истина
                               )
                     )
           )
 И ПланОбменаОсновнаяТаблица.ВариантНастройки <> "ОбменУП2ЗУП3"
)
//    И ЕстьNULL(ПланОбменаРазделыУчета.Выгружать, ЛОЖЬ)

И    ПланОбменаОсновнаяТаблица.Ссылка <> &СинхронизацияДанныхЧерезУниверсальныйФорматЭтотУзе
И НЕ ПланОбменаОсновнаяТаблица.ПометкаУдаления
И  (ПланОбменаОсновнаяТаблица.РежимВыгрузкиСправочников = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПоУсловию)
ИЛИ ПланОбменаОсновнаяТаблица.РежимВыгрузкиСправочников = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьВручную)
ИЛИ ПланОбменаОсновнаяТаблица.РежимВыгрузкиСправочников = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ПустаяСсылка))
   happysan
 
2 - 08.04.19 - 11:58
В общем модуле "ОбменДаннымиСобытия":
Функция МассивУзловПоЗначениямСвойств(ЗначенияСвойств, Знач ТекстЗапроса, Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага, Знач Выгрузка = Ложь) Экспорт
   happysan
 
3 - 08.04.19 - 12:02
В этой функции формируется финальный текст запроса. Можно так же заполнить табличную часть "РазделыУчета" в плане обмена "СинхронизацияДанныхЧерезУниверсальныйФормат" для узла обмена. По умолчанию почему-то эта табличная часть пустая.
   happysan
 
4 - 08.04.19 - 12:05
Скорее эту табличную часть придётся заполнить программно или сделать доступной для редактирования при настройке узла плана обмена.
   happysan
 
5 - 08.04.19 - 12:06
Тихо сам с собою я веду беседу…
   happysan
 
6 - 08.04.19 - 12:34
Либо изменять правила регистрации объектов в макете "ПравилаРегистрации" плана обмена "СинхронизацияДанныхЧерезУниверсальныйФормат". Можно вручную, а можно через КД 2.1.
   Alexor
 
7 - 08.04.19 - 12:37
(6) Разве эти правила прочитаются в 2.1?

Вы не один, я наблюдаю :)
   happysan
 
8 - 08.04.19 - 13:41
(6) На сколько мне известно, правила регистрации пока можно только ваять в КД 2.1.
   happysan
 
9 - 08.04.19 - 13:42
(7) На сколько мне известно, правила регистрации пока можно только ваять в КД 2.1.
   happysan
 
10 - 08.04.19 - 14:21
Ещё информация: в модуле менеджера (попадаем туда из события "ПередЗаписью" объекта плана обмена "СинхронизацияДанныхЧерезУниверсальныйФормат") есть следующая функция, которая должна сама корректно заполнять разделы учёта, но она не всегда корректно отрабатывает, в отладчике увидите, например, если выбирать выгрузка только справочников, без документов и без отбора по разделам учёта:

Функция ПолучитьРазделыУчета(ВВидеСтруктуры, ИдентификаторНастройки = "") Экспорт
    
    РазделыУчета = Новый ТаблицаЗначений;
    РазделыУчета.Колонки.Добавить("РазделУчета");
    РазделыУчета.Колонки.Добавить("Выгружать");
    
    Если ИдентификаторНастройки = "ОбменУП2ЗУП3" Тогда
        Раздел = РазделыУчета.Добавить();
        Раздел.РазделУчета = НСтр("ru = 'Зарплата'");
        Раздел.Выгружать = Истина;
    Иначе
        
        Раздел = РазделыУчета.Добавить();
        Раздел.РазделУчета = НСтр("ru = 'Ввод остатков'");
        Раздел.Выгружать = Истина;
        
        Если НЕ Константы.УправлениеТорговлей.Получить() Тогда
            Раздел = РазделыУчета.Добавить();
            Раздел.РазделУчета = НСтр("ru = 'Внеоборотные активы'");
            Раздел.Выгружать = Истина;
        КонецЕсли;
        
        Раздел = РазделыУчета.Добавить();
        Раздел.РазделУчета = НСтр("ru = 'Закупки'");
        Раздел.Выгружать = Истина;
        
        Раздел = РазделыУчета.Добавить();
        Раздел.РазделУчета = НСтр("ru = 'Казначейство'");
        Раздел.Выгружать = Истина;
        
        Раздел = РазделыУчета.Добавить();
        Раздел.РазделУчета = НСтр("ru = 'Продажи'");
        Раздел.Выгружать = Истина;
        
        Если НЕ Константы.УправлениеТорговлей.Получить() Тогда
            Раздел = РазделыУчета.Добавить();
            Раздел.РазделУчета = НСтр("ru = 'Производство'");
            Раздел.Выгружать = Истина;
        КонецЕсли;
        
        Раздел = РазделыУчета.Добавить();
        Раздел.РазделУчета = НСтр("ru = 'Склад'");
        Раздел.Выгружать = Истина;
        
    КонецЕсли;
    
    Если ВВидеСтруктуры Тогда
        Возврат Новый Структура("РазделУчета, Выгружать", 
            РазделыУчета.ВыгрузитьКолонку("РазделУчета"), 
            РазделыУчета.ВыгрузитьКолонку("Выгружать"));
    Иначе
        Возврат РазделыУчета;
    КонецЕсли;
    
КонецФункции
   happysan
 
11 - 08.04.19 - 14:36
Исходя из (10), самым милым вариантом является, на мой взгляд, закомментировать условие в модуле менеджера данного плана обмена в конце процедуры и перезаписать узел плана обмена (можно интерактивно) после обновления БД:

Процедура АктуализацияРеквизитовУзлаПланаОбмена(УзелПланаОбмена) Экспорт
    
........................................................................
........................................................................
    
    Если Не УзелПланаОбмена.ИспользоватьОтборПоРазделамУчета Тогда
        
        УзелПланаОбмена.РазделыУчета.Очистить();
        
        //Если УзелПланаОбмена.РежимВыгрузкиДокументов <> Перечисления.РежимыВыгрузкиОбъектовОбмена.НеВыгружать Тогда // Условие закомментировано.

            РазделыУчета = ПолучитьРазделыУчета(Ложь, ВариантНастройки);
            УзелПланаОбмена.РазделыУчета.Загрузить(РазделыУчета);
        //КонецЕсли;

        
    КонецЕсли;
    
КонецПроцедуры
   happysan
 
12 - 08.04.19 - 15:02
Но если бы выгружали сразу и документы, то не заметили бы косячок)))

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.