Имя: Пароль:
1C
 
КД 2.1 обмен из ЗУП 2.5 КОРП в БП 3.0 КОРП
0 inkvizitr
 
21.01.19
09:11
Пишу правила обмена, обмен из ЗУП 2.5 КОРП в БП 3.0 КОРП, при загрузке в БП 3.0 КОРП возникает ошибка "Значение не является значением объектного типа (Отбор)" но при этом все выполняется как надо, привожу синтаксис модуля ПКО, событие "после загрузки", смысл его в том, что в независимом регистре добавляется новая запись, а старая удаляется. На форумах прочел, что якобы если делать отбор по измерениям регистра сведений которые не индексируются или не установлен флаг ведущие, то будет возникать такая же ошибка и отбор будет не работать, провел данный код в обработке, там все работает как часы, кто знает, в чем может быть причина?

Если ПараметрыОбъекта <> Неопределено Тогда
    ПереданныеПараметры = ЗначениеИзСтрокиВнутр(ПараметрыОбъекта["Уволен"]);
КонецЕсли;

Организация = Справочники.Организации.НайтиПоНаименованию(ПереданныеПараметры.ГоловнаяОрганизация);
ФизЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию(ПереданныеПараметры.ФизическоеЛицо);

Если НЕ ПереданныеПараметры.СотрудникУволен Тогда  
    //Отладка+
    //Сообщить("Сотрудник уволен: " + (НЕ ПереданныеПараметры.СотрудникУволен));
    //Отладка-
    Сообщить("Сотрудник Работает: " + (НЕ ПереданныеПараметры.СотрудникУволен));
    МенеджерЗаписи = РегистрыСведений.ОсновныеСотрудникиФизическихЛиц.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.ГоловнаяОрганизация = Организация;
    МенеджерЗаписи.ФизическоеЛицо = ФизЛицо;
    МенеджерЗаписи.ДатаНачала = Дата(1,1,1);
    МенеджерЗаписи.ДатаОкончания = ПереданныеПараметры.ДатаОкончания;
    МенеджерЗаписи.Сотрудник = ПереданныеПараметры.Сотрудник;
    МенеджерЗаписи.Записать();
КонецЕсли;

Если ПереданныеПараметры.СотрудникУволен Тогда
    //Отладка+
    //Сообщить("Сотрудник уволен: " + ПереданныеПараметры.СотрудникУволен);
    //Отладка-
        НаборЗаписи = РегистрыСведений.ОсновныеСотрудникиФизическихЛиц.СоздатьНаборЗаписей();
    Отбор = НаборЗаписи.Отбор;
    Отбор.ГоловнаяОрганизация.Установить(Организация);
    Отбор.ФизическоеЛицо.Установить(ФизЛицо);
    НаборЗаписи.Прочитать();
    Для Каждого Запись Из НаборЗаписи Цикл
        Если ЗначениеЗаполнено(Запись.ДатаОкончания) Тогда
            //Отладка+
            //Сообщить("Вход в условие");
            //Отладка-
            МенеджерЗаписи = РегистрыСведений.ОсновныеСотрудникиФизическихЛиц.СоздатьМенеджерЗаписи();
            МенеджерЗаписи.ГоловнаяОрганизация = Запись.ГоловнаяОрганизация;
            МенеджерЗаписи.ФизическоеЛицо = Запись.ФизическоеЛицо;
            МенеджерЗаписи.ДатаНачала = Запись.ДатаНачала;
            МенеджерЗаписи.ДатаОкончания= Запись.ДатаОкончания;
            МенеджерЗаписи.Удалить();
        КонецЕсли;    
    КонецЦикла;    
    
    //Отладка+
    //Сообщить("Сотрудник уволен и создана новая запись");
    //Отладка-
    МенеджерЗаписи = РегистрыСведений.ОсновныеСотрудникиФизическихЛиц.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.ГоловнаяОрганизация = Организация;
    МенеджерЗаписи.ФизическоеЛицо = ФизЛицо;
    МенеджерЗаписи.ДатаНачала = ПереданныеПараметры.ДатаНачала;
    МенеджерЗаписи.ДатаОкончания = Дата(1,1,1);
    МенеджерЗаписи.Сотрудник = ПереданныеПараметры.Сотрудник;
    МенеджерЗаписи.Записать();
КонецЕсли
1 Ёпрст
 
гуру
21.01.19
09:20
(0)
//Отбор = НаборЗаписи.Отбор;
ОтборВаси = НаборЗаписи.Отбор;
2 Ёпрст
 
гуру
21.01.19
09:21
ну и менеджерзаписи там не нужен, ни для добавления, ни для удаления
3 mistеr
 
21.01.19
09:23
(0) Проверь, в какой именно строке возникает ошибка. Может, и не в этом обработчике.
4 inkvizitr
 
21.01.19
09:25
(2) я согласен, но на мисте где то нашел, что если отбирать по измерениям которые не индексируются он работать не будет, поменял на отбор про васю, и немного характер ошибки променялся
Ошибка при загрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8823)}: Значение не является значением объектного типа (Отбор)
посмотрел в отладке НаборЗаписей.Отбор вообще не определенно

// Нужно отбор установить у регистра.
                        Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл
                            
                            ЭлементОтбора.Установить(Объект[ЭлементОтбора.Имя]);
                            Если НужноПроверитьДанныеДляВременногоНабора Тогда
                                ВременныйНаборЗаписей.Отбор[ЭлементОтбора.Имя].Установить(Объект[ЭлементОтбора.Имя]);
                            КонецЕсли;
                            
                        КонецЦикла;
5 inkvizitr
 
21.01.19
09:26
это в самой обработке Универсальный обмен данными XML
6 inkvizitr
 
21.01.19
09:35
(2) для примера отказался от менеджера записи при удалении, запись теперь с регистра не удаляется

Если ПараметрыОбъекта <> Неопределено Тогда
    ПереданныеПараметры = ЗначениеИзСтрокиВнутр(ПараметрыОбъекта["Уволен"]);
КонецЕсли;

Организация = Справочники.Организации.НайтиПоНаименованию(ПереданныеПараметры.ГоловнаяОрганизация);
ФизЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию(ПереданныеПараметры.ФизическоеЛицо);

Если НЕ ПереданныеПараметры.СотрудникУволен Тогда  
    //Отладка+
    //Сообщить("Сотрудник уволен: " + (НЕ ПереданныеПараметры.СотрудникУволен));
    //Отладка-
    Сообщить("Сотрудник Работает: " + (НЕ ПереданныеПараметры.СотрудникУволен));
    МенеджерЗаписи = РегистрыСведений.ОсновныеСотрудникиФизическихЛиц.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.ГоловнаяОрганизация = Организация;
    МенеджерЗаписи.ФизическоеЛицо = ФизЛицо;
    МенеджерЗаписи.ДатаНачала = Дата(1,1,1);
    МенеджерЗаписи.ДатаОкончания = ПереданныеПараметры.ДатаОкончания;
    МенеджерЗаписи.Сотрудник = ПереданныеПараметры.Сотрудник;
    МенеджерЗаписи.Записать();
КонецЕсли;

Если ПереданныеПараметры.СотрудникУволен Тогда
    //Отладка+
    //Сообщить("Сотрудник уволен: " + ПереданныеПараметры.СотрудникУволен);
    //Отладка-
    НаборЗаписи = РегистрыСведений.ОсновныеСотрудникиФизическихЛиц.СоздатьНаборЗаписей();
    Отбор1 = НаборЗаписи.Отбор;
    Отбор1.ГоловнаяОрганизация.Установить(Организация);
    Отбор1.ФизическоеЛицо.Установить(ФизЛицо);
    Отбор1.ДатаНачала.Установить(Дата(1,1,1));
    Отбор1.ДатаОкончания.Установить(3999,12,31);
    НаборЗаписи.Очистить();
    НаборЗаписи.Удалить();
    //НаборЗаписи.Прочитать();
    //Для Каждого Запись Из НаборЗаписи Цикл
    //    Если ЗначениеЗаполнено(Запись.ДатаОкончания) Тогда
    //        //Отладка+
    //        //Сообщить("Вход в условие");
    //        //Отладка-
    //        МенеджерЗаписи = РегистрыСведений.ОсновныеСотрудникиФизическихЛиц.СоздатьМенеджерЗаписи();
    //        МенеджерЗаписи.ГоловнаяОрганизация = Запись.ГоловнаяОрганизация;
    //        МенеджерЗаписи.ФизическоеЛицо = Запись.ФизическоеЛицо;
    //        МенеджерЗаписи.ДатаНачала = Запись.ДатаНачала;
    //        МенеджерЗаписи.ДатаОкончания= Запись.ДатаОкончания;
    //        МенеджерЗаписи.Удалить();
    //    КонецЕсли;    
    //КонецЦикла;    
    
    //Отладка+
    //Сообщить("Сотрудник уволен и создана новая запись");
    //Отладка-
    МенеджерЗаписи = РегистрыСведений.ОсновныеСотрудникиФизическихЛиц.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.ГоловнаяОрганизация = Организация;
    МенеджерЗаписи.ФизическоеЛицо = ФизЛицо;
    МенеджерЗаписи.ДатаНачала = ПереданныеПараметры.ДатаНачала;
    МенеджерЗаписи.ДатаОкончания = Дата(1,1,1);
    МенеджерЗаписи.Сотрудник = ПереданныеПараметры.Сотрудник;
    МенеджерЗаписи.Записать();
КонецЕсли

измерения ДатаОкончания  и ДатаНачала ни как не индексируются, регистр типовой
7 Ёпрст
 
гуру
21.01.19
09:39
выкини менеджер  записи и так сделай, для начала:

//    НаборЗаписи.Очистить();
//   НаборЗаписи.Удалить();
НаборЗаписи.Записать();
8 inkvizitr
 
21.01.19
09:50
чета как то странно я сейчас по этой теме, весь код закоментил в всех событиях, а ошибка осталась
9 inkvizitr
 
21.01.19
10:18
Короче! решил я данную проблему, все оказалось очень просто
10 inkvizitr
 
21.01.19
10:19
(7) теперь буду избавляться от менеджеров