КД3 синхранизация регистров сведеней

1. NatalkaBal 29 26.09.18 10:34 Сейчас в теме
Добрый день! Подскажите как загружать через КД3 версия формата 1.6 регистры сведений.
Отправка отрабатывает без ошибок

Настрое ПКО

При конвертации данных XDTO
ПолученныеДанные.ДополнительныеСвойства.Вставить("Записи", Неопределено);
Если ДанныеXDTO.Свойство("Записи")
    И ЗначениеЗаполнено(ДанныеXDTO.Записи) Тогда
    ПолученныеДанные.ДополнительныеСвойства.Вставить("Записи", ДанныеXDTO.Записи);
КонецЕсли;


Перед записью полученных данных
// Определение правил конвертации, с помощью которых будет преобразование ОбъектXDTO - ДанныеИБ.
ПравилоКонвертацииФизическиеЛица = ОбменДаннымиXDTOСервер.ПКОПоИмени(КомпонентыОбмена, "Справочник_ФизическиеЛица_Получение");
ПравилоКонвертацииДолжности      = ОбменДаннымиXDTOСервер.ПКОПоИмени(КомпонентыОбмена, "Справочник_Должности_Получение");
ПравилоКонвертацииОрганизации    = ОбменДаннымиXDTOСервер.ПКОПоИмени(КомпонентыОбмена, "Справочник_Организации_Получение");

// Добавление записей в набор записей.        
Если ПолученныеДанные.ДополнительныеСвойства.Записи <> Неопределено Тогда
    Для Каждого СтрокаЗаписи Из ПолученныеДанные.ДополнительныеСвойства.Записи Цикл
        ЗаписьКадровыеДанныеФЛ = ПолученныеДанные.Добавить();
        ЗаписьКадровыеДанныеФЛ.Период        = СтрокаЗаписи.ДатаНачала; 
        ЗаписьКадровыеДанныеФЛ.Организация   = ОбменДаннымиXDTOСервер.СтруктураОбъектаXDTOВДанныеИБ(
                КомпонентыОбмена, СтрокаЗаписи.Организация, ПравилоКонвертацииОрганизации, "ПолучитьСсылку").Ссылка;
        ЗаписьКадровыеДанныеФЛ.ФизЛицо       = ОбменДаннымиXDTOСервер.СтруктураОбъектаXDTOВДанныеИБ(
                КомпонентыОбмена, СтрокаЗаписи.ФизическоеЛицо, ПравилоКонвертацииФизическиеЛица, "ПолучитьСсылку").Ссылка;
        ЗаписьКадровыеДанныеФЛ.Должность     = ОбменДаннымиXDTOСервер.СтруктураОбъектаXDTOВДанныеИБ(
                КомпонентыОбмена, СтрокаЗаписи.Должность, ПравилоКонвертацииДолжности, "ПолучитьСсылку").Ссылка;
        ЗаписьКадровыеДанныеФЛ.Подразделение = ОбменДаннымиXDTOСервер.СсылкаОбъектаПоУИДОбъектаXDTO (СтрокаЗаписи.ПредставлениеДокументаПраваПодписи, 
                Тип("СправочникСсылка.ПодразделенияОрганизаций"), КомпонентыОбмена);
        ЗаписьКадровыеДанныеФЛ.Работает      = СтрокаЗаписи.УполномоченноеЛицо;
        ЗаписьКадровыеДанныеФЛ.Активность    = ИСТИНА;        
    КонецЦикла;
КонецЕсли;

Показать


При попытке получения выдает ошибку

Событие: Получение.
Объект XDTO: Справочник.ОтветственныеЛица, .

{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(1685)}: Поле объекта не обнаружено (Ссылка)
МассивЗагруженныхОбъектов.Добавить(ДанныеДляЗаписиВИБ.Ссылка);


Подскажите пожалуйста что не так делаю. И как правильно переносить регистры сведений?
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Healer 1 26.09.18 11:25 Сейчас в теме
Всё правильно: регистры же не являются объектами ссылочного типа. То есть надо в "ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(1685)" добавить проверку на тип перед добавлением ссылки.
3. Healer 1 26.09.18 11:26 Сейчас в теме
Точнее не проверку на тип, а проверку наличия свойства "Ссылка". Ну, в общем идея понятна, я думаю :-)
4. NatalkaBal 29 26.09.18 11:36 Сейчас в теме
(3)не думаю что строит Общий модуль редактировать. В типовом обмене ЗУП с Бухгалтерий присутствует регистр сведений, ошибок при этом нет. Думаю что то с обработчиками не так
5. NatalkaBal 29 27.09.18 11:23 Сейчас в теме +1 $m
Вроде нашла решение. Удалила ПКО, и в ПОД При обработке добавила
ПравилоКонвертацииФизическиеЛица = ОбменДаннымиXDTOСервер.ПКОПоИмени(КомпонентыОбмена, "Справочник_ФизическиеЛица_Получение");
ПравилоКонвертацииДолжности      = ОбменДаннымиXDTOСервер.ПКОПоИмени(КомпонентыОбмена, "Справочник_Должности_Получение");
ПравилоКонвертацииОрганизации    = ОбменДаннымиXDTOСервер.ПКОПоИмени(КомпонентыОбмена, "Справочник_Организации_Получение");

Если ДанныеXDTO.Свойство("Записи")
    И ЗначениеЗаполнено(ДанныеXDTO.Записи) Тогда

    Для Каждого СтрокаЗаписи Из ДанныеXDTO.Записи Цикл
        
        КадровыеДанныеФЛ = РегистрыСведений._УГН_КадровыеДанныеФизлиц.СоздатьНаборЗаписей();
        
        КадровыеДанныеФЛ.Отбор.Период.Установить(СтрокаЗаписи.ДатаНачала);
        КадровыеДанныеФЛ.Отбор.Физлицо.Установить(ОбменДаннымиXDTOСервер.СтруктураОбъектаXDTOВДанныеИБ(
            КомпонентыОбмена, СтрокаЗаписи.ФизическоеЛицо, ПравилоКонвертацииФизическиеЛица, "ПолучитьСсылку").Ссылка);
        КадровыеДанныеФЛ.Отбор.Организация.Установить(ОбменДаннымиXDTOСервер.СтруктураОбъектаXDTOВДанныеИБ(
            КомпонентыОбмена, СтрокаЗаписи.Организация, ПравилоКонвертацииОрганизации, "ПолучитьСсылку").Ссылка);

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

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

Показать
user811769; +1 Ответить
6. NatalkaBal 29 28.09.18 10:58 Сейчас в теме
Не буду создавать новую тему, так как очередной вопрос связан также с переносом регистров сведений.
Переношу из ЗУП 3.1.7 регистр сведений РегистрСведенийЗапись.КадроваяИсторияСотрудниковИнтервальный через объект формата 1.6 Справочник.ОтветственныеЛица, для приемнике БУХ 3.0 в нетиповом регистре Отбор Организация, ФизЛицо, Период. Вопрос как выгрузить значения этих трех реквизитов, два реквизита Отбора выгружаются в ПКО РС_КадроваяИсторияСотрудников_Отправка
    ДанныеXDTO.Вставить("ОрганизацияОтбор", ДанныеИБ.Отбор.ГоловнаяОрганизация.Значение);
    ДанныеXDTO.Вставить("AdditionalInfo",   ДанныеИБ.Отбор.ПериодЗаписи.Значение);
    
    ТаблицаЗаписи = ДанныеИБ.Выгрузить();
    ТаблицаЗаписи.Колонки.Добавить("УполномоченноеЛицо");
    ТаблицаЗаписи.Колонки.Добавить("ВидОтветственногоЛица");
    ТаблицаЗаписи.Колонки.Добавить("ВидДокументаПравоПодписи");
    ТаблицаЗаписи.Колонки.Добавить("ПредставлениеДокументаПраваПодписи");

    Для Каждого СтрокаЗаписи Из ТаблицаЗаписи Цикл
    
        СтрокаЗаписи.ДатаНачала = СтрокаЗаписи.ПериодЗаписи; 
        Если ЗначениеЗаполнено(СтрокаЗаписи.Подразделение) Тогда
            СтрокаЗаписи.ПредставлениеДокументаПраваПодписи = Строка(СтрокаЗаписи.Подразделение.УникальныйИдентификатор());
        КонецЕсли;
        
         СтрокаЗаписи.УполномоченноеЛицо       = ?(СтрокаЗаписи.ВидСобытия <> ПредопределенноеЗначение("Перечисление.ВидыКадровыхСобытий.Увольнение"), ИСТИНА, ЛОЖЬ);
        СтрокаЗаписи.ВидОтветственногоЛица    = "Прочее";
        СтрокаЗаписи.ВидДокументаПравоПодписи = "Приказ";
    КонецЦикла;

    ДанныеXDTO.Вставить("Записи", ТаблицаЗаписи);

Показать


Подскажите пожалуйста как выгрузить ФизЛицо, если в объекте формата его нет, а AdditionalInfo уже занят.
7. MaxS 2990 28.09.18 15:03 Сейчас в теме
(6)
AdditionalInfo уже занят
Это как? Что мешает в него структуру загрузить? ;)
8. NatalkaBal 29 28.09.18 17:54 Сейчас в теме
(7)
ДанныеXDTO.Вставить("AdditionalInfo",   ДанныеИБ.Отбор.ПериодЗаписи.Значение);

Что мешает в него структуру загрузить?
Это как?
9. MaxS 2990 28.09.18 18:09 Сейчас в теме +1 $m
(8)
ДопДанные = Новый Структура;
ДопДанные.Вставить("ПериодЗаписи",  ДанныеИБ.Отбор.ПериодЗаписи.Значение);
ДопДанные.Вставить("ФизЛицо",  Строка(ДанныеИБ.ФизЛицо.УникальныйИдентификатор()));
ДанныеXDTO.Вставить("AdditionalInfo",   ДопДанные);

потом при получении проверяем заполненность AdditionalInfo, тип данных, и если структура, проверяем наличие соответствующих свойств.
NatalkaBal; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот