8.х ОБМЕН Работа с конф "Конвертация данных"

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

  1. TopicStarter Overlay
    Smikka
    Offline

    Smikka

    Регистрация:
    8 дек 2008
    Сообщения:
    47
    Симпатии:
    0
    Баллы:
    1
    Подскажите, как можно обработать объект на глобальном уровне?

    Мне нужно во всех документах изменить ТЧ "Товары". Я меняю данные, а потом нужно записать туда уже новую ТЗ.
    Я прописываю необходимы действия в правилах обмена на вкладке "перед выгрузкой объекта".
    [​IMG]

    Код:
    Если Лев(ТипЗнч(Объект), 8) = "Документ" Тогда
    
    // выбираем ТЧ "Товары"
    ...
    // меняем в ней значения
    ...
    // после чего пытаюсь записать в туже ТЧ уже измененные данные
    
    Объект.Товары.Загрузить(Таблица);
    
    КонецЕсли
    
    
    

    При этом выдается ошибка "Объект недоступен для изменения."

    Если изменять данные в самом документе в обработчике "При выгрузке", то все нормально. Но это не реально во всех документах прописать этот код. Поэтому хотелось это сделать на глобальном уровне.
    Как устранить ошибку?
  2. Andy13
    Offline

    Andy13 Опытный в 1С

    Регистрация:
    1 мар 2010
    Сообщения:
    244
    Симпатии:
    2
    Баллы:
    29
    И не удивительно.
    В одном случае "Объект"-ссылка, в другом "Объект" - объект. Надеюсь хоть не записываете измененый объект-источник...
    В вашем случае есть 2 варианта.
    1. Прописать алгоритм, вставить его вызов в обработку "Перед обработкой" в ПКГС в нужных ПКО документов.
    2. В ПКО документов для ТабЧастей поставить "получить из входящих...". В "Перед выгрузкой..." на глобальном уровне прописываешь свою ТЗ с именем ТабЧасти в "ИсходящиеДанные".

    И прочитай внимательнее описание обработчиков...
  3. TopicStarter Overlay
    Smikka
    Offline

    Smikka

    Регистрация:
    8 дек 2008
    Сообщения:
    47
    Симпатии:
    0
    Баллы:
    1
    Делаю так:
    Алгоритм Товар_10
    Код:
    Таблица = Новый ТаблицаЗначений;
    //Предупреждение("********** "+Источник+" *********");
    
    ТЧДокумента = Источник.Метаданные().ТабличныеЧасти;
    
    
    // Для каждой таблицы документа делаем....   
    
    Для Каждого ТЧасть из ТЧДокумента Цикл 
    
    Строка = "Таблица = Источник."+ ТЧасть.имя + ".Выгрузить();";	   
    Выполнить(Строка);   		
    //Предупреждение("********** *********");
    
    Если   Таблица.Колонки.Найти("СтавкаНДС")<> Неопределено Тогда
    //Предупреждение("********** НДС найден *********");
    
    СписокРеквизитовТЧ = Новый СписокЗначений;
    Для Каждого Реквизит Из ТЧасть.Реквизиты	Цикл 
    Если Строка(Реквизит.Тип) = "Число" Тогда 
    СписокРеквизитовТЧ.Добавить(Реквизит.Имя);
    КонецЕсли;
    КонецЦикла;
    
    Строка = ""+СписокРеквизитовТЧ[0];
    Для ж=1 По СписокРеквизитовТЧ.Количество()-1 Цикл 
    Строка = Строка + "," + СписокРеквизитовТЧ[ж];
    КонецЦикла;
    
    КоллекцияОбъектов = Таблица.Скопировать();
    КоллекцияОбъектов.Свернуть("СтавкаНДС",Строка);
    
    КонецЕсли;   
    КонецЦикла;  	
    
    
    В документе, в ТЧ, в ПередОбработкой пишу
    Код:
    Выполнить(Алгоритмы.Товар_10);
    
    
    В итоге вообще таблица пустая. Не записываются данные?
  4. TopicStarter Overlay
    Smikka
    Offline

    Smikka

    Регистрация:
    8 дек 2008
    Сообщения:
    47
    Симпатии:
    0
    Баллы:
    1
    Что может означать ошибка:
    Ошибка получения коллекции подчиненных объектов из входящих данных?
    Полы не правильно названы, их мало или наоборот много?
  5. TopicStarter Overlay
    Smikka
    Offline

    Smikka

    Регистрация:
    8 дек 2008
    Сообщения:
    47
    Симпатии:
    0
    Баллы:
    1
    Все получилось!
    Надо было прописать
    КоллекцияОбъектов = ИсходящиеДанные.Товары;
    в таблице

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