Имя: Пароль:
1C
1С v8
Нет доступа к Объекту при загрузке (обмен данными)
0 PaulMuller
 
28.12.18
15:31
Правила обмена данными. ПКО Контрагенты. При загрузке вызываю алгоритм ПереносКИ передавая в него параметр Объект.

Код алгоритма:



Если не объект = неопределено тогда
    НетуСоответствия = ложь;
    
    
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    УдалитьКонтактнаяИнформация.Вид,
    |    УдалитьКонтактнаяИнформация.Вид.Наименование
    |ИЗ
    |    РегистрСведений.УдалитьКонтактнаяИнформация КАК УдалитьКонтактнаяИнформация
    |ГДЕ
    |    НЕ УдалитьКонтактнаяИнформация.Вид.Предопределенный
    |    И УдалитьКонтактнаяИнформация.Вид.ВидОбъектаКонтактнойИнформации = ЗНАЧЕНИЕ(Перечисление.УдалитьВидыОбъектовКонтактнойИнформации.Контрагенты)
    |    И УдалитьКонтактнаяИнформация.Объект.Ссылка = &Объект";
    Запрос.Параметры.Вставить("Объект", Объект.Ссылка);
    ТаблицаУдалитьВидыКонтактнойИнформации = Запрос.Выполнить().Выгрузить();
    
    СоответствиеВидовКИ = Новый Соответствие;
    
    // Справочник "КонтактныеЛица"
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ИнформАдресКонтактногоЛица     , Справочники.ВидыКонтактнойИнформации.АдресДляИнформированияКонтактныеЛица);
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ТелефонКонтактногоЛица         , Справочники.ВидыКонтактнойИнформации.ТелефонРабочийКонтактныеЛица);
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ТелефонМобильный               , Справочники.ВидыКонтактнойИнформации.ТелефонМобильныйКонтактныеЛица);    
    
    // Справочник "Контрагенты"
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ЮрАдресКонтрагента         , Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента);
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ФактАдресКонтрагента       , Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента);
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ТелефонКонтрагента         , Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента);
    
    НайденнаяСтрока = ТаблицаУдалитьВидыКонтактнойИнформации.Найти("Почтовый адрес", "ВидНаименование");
    Если НайденнаяСтрока <> Неопределено Тогда
        СоответствиеВидовКИ.Вставить(НайденнаяСтрока.Вид, Справочники.ВидыКонтактнойИнформации.ПочтовыйАдресКонтрагента);
    КонецЕсли;
    
    НайденнаяСтрока = ТаблицаУдалитьВидыКонтактнойИнформации.Найти("Факс", "ВидНаименование");
    Если НайденнаяСтрока <> Неопределено Тогда
        СоответствиеВидовКИ.Вставить(НайденнаяСтрока.Вид, Справочники.ВидыКонтактнойИнформации.ФаксКонтрагенты);
    КонецЕсли;
    
    // Справочник "Организации"
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ТелефонОрганизации          , Справочники.ВидыКонтактнойИнформации.ТелефонОрганизации);
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ТелефонПоЮрАдресуОрганизации, Справочники.ВидыКонтактнойИнформации.ТелефонПоЮридическомуАдресуОрганизации);
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ФаксОрганизации             , Справочники.ВидыКонтактнойИнформации.ФаксОрганизации);
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ФактАдресОрганизации        , Справочники.ВидыКонтактнойИнформации.ФактАдресОрганизации);
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ЮрАдресОрганизации          , Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации);
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.АдресОрганизацииПочтовый    , Справочники.ВидыКонтактнойИнформации.ПочтовыйАдресОрганизации);
    
    
    // Справочник "ФизическиеЛица"
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ИнформАдресФизЛица     , Справочники.ВидыКонтактнойИнформации.АдресДляИнформированияФизическиеЛица);
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ФактАдресФизЛица       , Справочники.ВидыКонтактнойИнформации.АдресМестаПроживанияФизическиеЛица);
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ЮрАдресФизЛица         , Справочники.ВидыКонтактнойИнформации.АдресПоПропискеФизическиеЛица);
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ТелефонФизЛица         , Справочники.ВидыКонтактнойИнформации.ТелефонДомашнийФизическиеЛица);
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.ТелефонСлужебный        , Справочники.ВидыКонтактнойИнформации.ТелефонРабочийФизическиеЛица);
    
    // Справочник "Пользователи"
    СоответствиеВидовКИ.Вставить(Справочники.УдалитьВидыКонтактнойИнформации.СлужебныйАдресЭлектроннойПочтыПользователя, Справочники.ВидыКонтактнойИнформации.EmailПользователя);
    
    СоответствиеГруппВидовКИ = Новый Соответствие;
    СоответствиеГруппВидовКИ.Вставить(Тип("СправочникСсылка.КонтактныеЛица")          , Справочники.ВидыКонтактнойИнформации.СправочникКонтактныеЛица);
    СоответствиеГруппВидовКИ.Вставить(Тип("СправочникСсылка.Контрагенты")             , Справочники.ВидыКонтактнойИнформации.СправочникКонтрагенты);
    СоответствиеГруппВидовКИ.Вставить(Тип("СправочникСсылка.Организации")             , Справочники.ВидыКонтактнойИнформации.СправочникОрганизации);
    СоответствиеГруппВидовКИ.Вставить(Тип("СправочникСсылка.Пользователи")            , Справочники.ВидыКонтактнойИнформации.СправочникПользователи);
    СоответствиеГруппВидовКИ.Вставить(Тип("СправочникСсылка.ФизическиеЛица")          , Справочники.ВидыКонтактнойИнформации.СправочникФизическиеЛица);
    
    // Перенос контактной информации из РС в табличные части справочников
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ОрганизацииКонтактнаяИнформация.Ссылка КАК Ссылка
    |ПОМЕСТИТЬ ОбъектыСКИ
    |ИЗ
    |    Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииКонтактнаяИнформация
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ПользователиКонтактнаяИнформация.Ссылка
    |ИЗ
    |    Справочник.Пользователи.КонтактнаяИнформация КАК ПользователиКонтактнаяИнформация
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ФизическиеЛицаКонтактнаяИнформация.Ссылка
    |ИЗ
    |    Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    КонтрагентыКонтактнаяИнформация.Ссылка
    |ИЗ
    |    Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    КонтактныеЛицаКонтактнаяИнформация.Ссылка
    |ИЗ
    |    Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КонтактныеЛицаКонтактнаяИнформация
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    УдалитьКонтактнаяИнформация.Объект КАК Объект,
    |    УдалитьКонтактнаяИнформация.Тип,
    |    УдалитьКонтактнаяИнформация.Вид,
    |    УдалитьКонтактнаяИнформация.Вид.Наименование КАК ВидНаименование,
    |    УдалитьКонтактнаяИнформация.Вид.Тип КАК ВидТип,
    |    УдалитьКонтактнаяИнформация.Представление,
    |    УдалитьКонтактнаяИнформация.Поле1,
    |    УдалитьКонтактнаяИнформация.Поле2,
    |    УдалитьКонтактнаяИнформация.Поле3,
    |    УдалитьКонтактнаяИнформация.Поле4,
    |    УдалитьКонтактнаяИнформация.Поле5,
    |    УдалитьКонтактнаяИнформация.Поле6,
    |    УдалитьКонтактнаяИнформация.Поле7,
    |    УдалитьКонтактнаяИнформация.Поле8,
    |    УдалитьКонтактнаяИнформация.Поле9,
    |    УдалитьКонтактнаяИнформация.Поле10
    |ИЗ
    |    РегистрСведений.УдалитьКонтактнаяИнформация КАК УдалитьКонтактнаяИнформация
    |        ЛЕВОЕ СОЕДИНЕНИЕ ОбъектыСКИ КАК ОбъектыСКИ
    |        ПО УдалитьКонтактнаяИнформация.Объект = ОбъектыСКИ.Ссылка
    |ГДЕ
    |    НЕ УдалитьКонтактнаяИнформация.Объект.Ссылка ЕСТЬ NULL
    |    И ОбъектыСКИ.Ссылка ЕСТЬ NULL
    |    И УдалитьКонтактнаяИнформация.Объект.Ссылка = Объект
    |ИТОГИ ПО
    |    Объект";
    
    Запрос.Параметры.Вставить("Объект", Объект);
    ВыборкаОбъект = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Пока ВыборкаОбъект.Следующий() Цикл
        Выборка = ВыборкаОбъект.Выбрать();
        Пока Выборка.Следующий() Цикл
            Если СоответствиеВидовКИ[Выборка.Вид] = Неопределено Тогда
                НайденныйВидКИ = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию(Выборка.Вид, Истина, СоответствиеГруппВидовКИ[ТипЗнч(Выборка.Объект)]);
                Если Не ЗначениеЗаполнено(НайденныйВидКИ) Тогда

                    ВидКИДругое    = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Другое (любая другая контактная информация)", Истина, СоответствиеГруппВидовКИ[ТипЗнч(Выборка.Объект)]);
    
                    Если ЗначениеЗаполнено(ВидКИДругое) тогда
                        СоответствиеВидовКИ.Вставить(Выборка.Вид, ВидКИДругое);
                    Иначе
                        НетуСоответствия = Истина;
                    КонецЕсли;
                Иначе
                    СоответствиеВидовКИ.Вставить(Выборка.Вид, НайденныйВидКИ);
                КонецЕсли;
            КонецЕсли;
            
            Если НетуСоответствия тогда
                НетуСоответствия = ложь;
                продолжить;
            КонецЕсли;
            
            НоваяСтрока = Объект.КонтактнаяИнформация.Добавить();
            ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
            НоваяСтрока.Вид = СоответствиеВидовКИ[Выборка.Вид];
            НоваяСтрока.Тип = Выборка.Тип;
            
            Если Выборка.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
                НоваяСтрока.ЗначенияПолей = "Индекс=" + Выборка.Поле1 + Символы.ПС
                + "Регион="           + Выборка.Поле2 + Символы.ПС
                + "Район="            + Выборка.Поле3 + Символы.ПС
                + "Город="            + Выборка.Поле4 + Символы.ПС
                + "НаселенныйПункт="  + Выборка.Поле5 + Символы.ПС
                + "Улица="            + Выборка.Поле6 + Символы.ПС
                + "Дом="              + Выборка.Поле7 + Символы.ПС
                + "Корпус="           + Выборка.Поле8 + Символы.ПС
                + "Квартира="         + Выборка.Поле9 + Символы.ПС
                + "ТипДома=дом"       + Символы.ПС
                + "ТипКорпуса=корпус" + Символы.ПС
                + "ТипКвартиры=кв.";
            ИначеЕсли Выборка.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
                НоваяСтрока.ЗначенияПолей = "КодСтраны=" + Выборка.Поле1 + Символы.ПС
                + "КодГорода="     + Выборка.Поле2 + Символы.ПС
                + "НомерТелефона=" + Выборка.Поле3 + Символы.ПС
                + "Добавочный="    + Выборка.Поле4;
                
                НоваяСтрока.НомерТелефонаБезКодов = Выборка.Поле3;
                НоваяСтрока.НомерТелефона         = Выборка.Поле1 + Выборка.Поле2 + Выборка.Поле3;
            ИначеЕсли Выборка.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
                НоваяСтрока.АдресЭП = Выборка.Представление;
            КонецЕсли;
            
            // Удаление символов переноса строк.
            НоваяСтрока.Представление = СтрЗаменить(НоваяСтрока.Представление, Символы.ПС," ");
            
        КонецЦикла;
        НетуСоответствия = ложь;
    КонецЦикла;
КонецЕсли;



Ошибка:

ЗАГРУЗКА В ПРИЕМНИКЕ: Помилка при завантаженні даних: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1498)}: Помилка в обробнику події ПриЗагрузкеОбъекта
    ИмяПКО                 =  Контрагенты
    ТипОбъекта             =  Контрагент
    Объект                 =  ПОСТАЧАЛЬНИКИ ФОП (послуги)
    Обработчик             =  ПриЗагрузкеОбъекта
    ОписаниеОшибки         =  Ошибка при вызове метода контекста (Добавить): Объект недоступен для изменения.
    ПозицияМодуля          =  (164)
    КодСообщения           =  20

Ошибка при выгрузке данных для узла плана обмена
    ТипОбъекта             =  Справочник объект: Контрагенты
    Объект                 =  Ягельська Ірина Вітольдівна ФО
    ОписаниеОшибки         =  Помилка при завантаженні даних: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1498)}: Помилка в обробнику події ПриЗагрузкеОбъекта
    ИмяПКО                 =  Контрагенты
    ТипОбъекта             =  Контрагент
    Объект                 =  ПОСТАЧАЛЬНИКИ ФОП (послуги)
    Обработчик             =  ПриЗагрузкеОбъекта
    ОписаниеОшибки         =  Ошибка при вызове метода контекста (Добавить): Объект недоступен для изменения.
    ПозицияМодуля          =  (164)
    КодСообщения           =  20
    ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1304)
    КодСообщения           =  72
    УзелПланаОбмена        =  Бух20

Окончание выгрузки: 28.12.2018 14:14:05

Выгружено объектов: 11


В чем может быть причина? Или же если я не могу так обращаться к Объекту, то как мне по другому добавить значения в ТЧ КонтактнаяИнформация?
1 PaulMuller
 
28.12.18
15:33
НоваяСтрока = Объект.КонтактнаяИнформация.Добавить();

Метод Добавить вызывается только тут.
2 PaulMuller
 
28.12.18
15:35
и да, пройтись отладкой не смог, как не старался. Выполняя этот код во внешней обработке все отрабатовало на ура (обьект получал ранее, тут получения объекта не прописывал так как он, насколько я понял, длолжен уже получаться из параметра алгоритма)
3 ДенисЧ
 
28.12.18
15:35
Судя по названию "ПОСТАЧАЛЬНИКИ ФОП (послуги)" - это группа...
4 PaulMuller
 
28.12.18
15:46
(3) Да, это действительно момент который я упустил, что при выгрузке контрагента, он за собой также тянет группу, и не обработал ее. Теперь вызываю алгоритм с условием что объект не группа. Спасибо.
5 MaxS
 
28.12.18
15:47
> Запрос.Параметры.Вставить("Объект", Объект);
А Объект это Объект?
6 PaulMuller
 
28.12.18
15:50
Объкут который я передаю, по идее (отладку никак не запущу) в параметр алгоритма, это тот объект что Объект в обработчике загрузки в ПКО Контрагенты.
7 PaulMuller
 
28.12.18
15:51
Я там еще буду играться где объект передавать, где ссылки. Тыкаю пальцем в небо
8 PaulMuller
 
28.12.18
16:33
Еще в догоночку по теме. При занрузке у меня есть объект, но соответственно ссылки на него еще нету? При загрузке ведь объект еще не записан?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший