8.х ОБМЕН Ошибка при обмене, что не так с конвертацией

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем AugustBlack, 27 сен 2011.

  1. TopicStarter Overlay
    AugustBlack
    Offline

    AugustBlack Опытный в 1С

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

    Так вот при загрузке данных в Документооборот выдает ошибку:
    Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.
    ТипОбъекта = Справочник объект: Корреспонденты
    Объект = СОТРУДНИКИ
    ОписаниеОшибки = Ошибка при вызове метода контекста (Очистить): Объект недоступен для изменения.
    ПозицияМодуля = Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(5805)
    Текст = Имя табличной части: КонтактнаяИнформация
    КСообщенияОбОшибках = 83


    отсюда СОТРУДНИКИ это группа а не элемент..Я так понимаю он пытается обратится к табличной части группы но т.к ее попросту нету и заканивает ошибкой или почему так?
    дописываю в алгоритм переноса контакт. информации уже это:
    Если НЕ Источник.Ссылка.ЭтоГруппа Тогда
    КоллекцияОбъектов = Новый ТаблицаЗначений;
    КоллекцияОбъектов.Колонки.Добавить("Тип");
    КоллекцияОбъектов.Колонки.Добавить("Вид");
    ....такое ощущение как будьто условие не срабатывает. Помогите пожалуйста решить эту задачу, замучался с ними ужасно:(
    вот код процедуры где на ошибку натыкается,мб я чего недопонимаю?
    Код:
    Процедура ЗагрузитьТабличнуюЧасть(Объект, ИмяТабличнойЧасти, ОбщаяИнформацияОТипеДокумента, НужноЗаписатьОбъект, ПараметрыОбъекта, ПКО)
    
    Перем КлючевыеПоляПоиска;
    Перем МассивКлючевыхПолейПоиска;
    
    Результат = ПолучитьКлючевыеПоляПоискаПоТабличнойЧасти(ПКО, ИмяТабличнойЧасти, МассивКлючевыхПолейПоиска, КлючевыеПоляПоиска);
    
    Если Не Результат Тогда
    одПропустить(ФайлОбмена);
    Возврат;
    КонецЕсли;
    
    ТабличнаяЧастьОбъекта = Объект[ИмяТабличнойЧасти];
    
    ИмяКолонкиИтератора = "КлючевоеПолеИтератораЗначений";
    
    КоллекцияОбъекта     = ТабличнаяЧастьОбъекта.Выгрузить();
    КоллекцияФайлаОбмена = КоллекцияОбъекта.СкопироватьКолонки();
    
    ЗаполнитьКоллекциюФайлаОбмена(КоллекцияФайлаОбмена, ИмяТабличнойЧасти, ОбщаяИнформацияОТипеДокумента, ПараметрыОбъекта, МассивКлючевыхПолейПоиска);
    
    ДобавитьИтераторТаблице(КоллекцияФайлаОбмена, +1, ИмяКолонкиИтератора);
    ДобавитьИтераторТаблице(КоллекцияОбъекта,     -1, ИмяКолонкиИтератора);
    
    КоллекцияГруппировки = ИнициализацияТаблицыПоКлючевымПолям(МассивКлючевыхПолейПоиска);
    КоллекцияГруппировки.Колонки.Добавить(ИмяКолонкиИтератора);
    
    ЗаполнитьЗначенияСвойствТаблицы(КоллекцияФайлаОбмена, КоллекцияГруппировки);
    ЗаполнитьЗначенияСвойствТаблицы(КоллекцияОбъекта,     КоллекцияГруппировки);
    
    КоллекцияГруппировки.Свернуть(КлючевыеПоляПоиска, ИмяКолонкиИтератора);
    
    // очищаем табличную часть объекта
    
    //здесь ругается
    
    Попытка
    ТабличнаяЧастьОбъекта.Очистить();
    Исключение
    
    Текст = НСтр("ru = 'Имя табличной части: %1'");
    
    ЗП = ПолучитьСтруктуруЗаписиПротокола(83, ОписаниеОшибки());
    ЗП.Объект     = Объект;
    ЗП.ТипОбъекта = ТипЗнч(Объект);
    ЗП.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ИмяТабличнойЧасти);
    ЗаписатьВПротоколВыполнения(83, ЗП);
    
    одПропустить(ФайлОбмена);
    Возврат;
    КонецПопытки;
    
    Для Каждого СтрокаКоллекции ИЗ КоллекцияГруппировки Цикл
    
    // получаем структуру отбора
    
    Отбор = Новый Структура();
    
    Для Каждого ИмяПоля ИЗ МассивКлючевыхПолейПоиска Цикл
    
    Отбор.Вставить(ИмяПоля, СтрокаКоллекции[ИмяПоля]);
    
    КонецЦикла;
    
    Если СтрокаКоллекции[ИмяКолонкиИтератора] = 0 Тогда
    
    //заполняем строки табличной части из старой версии объекта
    
    СтрокиКоллекцииОбъекта = КоллекцияОбъекта.НайтиСтроки(Отбор);
    
    Иначе
    
    // заполняем строки табличной части из коллекции файла обмена
    
    СтрокиКоллекцииОбъекта = КоллекцияФайлаОбмена.НайтиСтроки(Отбор);
    
    КонецЕсли;
    
    // добавляем строки табличной части объекта
    
    Для Каждого СтрокаКоллекции ИЗ СтрокиКоллекцииОбъекта Цикл
    
    ЗаполнитьЗначенияСвойств(ТабличнаяЧастьОбъекта.Добавить(), СтрокаКоллекции);
    
    КонецЦикла;
    
    НужноЗаписатьОбъект = Истина;
    
    КонецЦикла;
    
    КонецПроцедуры
    
  2. TopicStarter Overlay
    AugustBlack
    Offline

    AugustBlack Опытный в 1С

    Регистрация:
    9 янв 2011
    Сообщения:
    89
    Симпатии:
    0
    Баллы:
    26
    как сделать так чтобы можно было отказаться от выгрузки таб. части если объект ЭтоГруппа? где это сделать? не дописывать же мне код в обработку КонвертацияОбъектовИнформационныхБаз
  3. TopicStarter Overlay
    AugustBlack
    Offline

    AugustBlack Опытный в 1С

    Регистрация:
    9 янв 2011
    Сообщения:
    89
    Симпатии:
    0
    Баллы:
    26
    разобрался,тема неактуальна.

Поделиться этой страницей