Имя: Пароль:
1C
1С v8
Как применить ВыгрузитьРегистр() для переноса контактной информации м/у идентичн кофигами?
0 altaykniga
 
08.01.20
19:51
Доброго времени суток, уважаемые! Прошу поделиться знаниями.
Настраиваю обмен между идентичными конфигурациями с помощью плана обмена и правил выгрузки. Контрагенты переносятся по ссылкам из документов. Необходимо добиться, чтобы вместе с контрагентом выгружались все его контактные данные. Как этого добиться? Написал в ПКО "Контрагенты" в ПослеВыгрузкиВФайл следующий код:

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

          СтрокаОтбора = Отбор.Добавить ();
          СтрокаОтбора.Имя = "Объект";
          СтрокаОтбора.Значение = Выборка.Объект;
          СтрокаОтбора.Использование = Истина;

          Строки = Новый ТаблицаЗначений;
          Строки.Колонки.Добавить("Представление");
          Строки.Колонки.Добавить("Вид");
          Строки.Колонки.Добавить("Тип");
          Строки.Колонки.Добавить("Объект");
          
          Строки.Колонки.Добавить("Поле1");
          Строки.Колонки.Добавить("Поле2");
          Строки.Колонки.Добавить("Поле3");
          Строки.Колонки.Добавить("Поле4");
          Строки.Колонки.Добавить("Поле5");
          Строки.Колонки.Добавить("Поле6");
          Строки.Колонки.Добавить("Поле7");
          Строки.Колонки.Добавить("Поле8");
          Строки.Колонки.Добавить("Поле9");
          Строки.Колонки.Добавить("Поле10");
          Строки.Колонки.Добавить("Комментарий");
          Строки.Колонки.Добавить("ЗначениеПоУмолчанию");
          Строки.Колонки.Добавить("ТипДома");
          Строки.Колонки.Добавить("ТипКорпуса");
          Строки.Колонки.Добавить("ТипКвартиры");

          Строка = Строки.Добавить();
          ЗаполнитьЗначенияСвойств(Строка, Выборка);

          НаборЗаписей = Новый Структура("Отбор, Строки");
          НаборЗаписей.Отбор = Отбор;
          НаборЗаписей.Строки = Строки;

          ВыгрузитьРегистр(НаборЗаписей,,,,"КонтактнаяИнформация");



Прошу ткнуть носом, что не так написал в коде, выгрузка завершается ошибкой

Заранее благодарю за помощь
1 RomanYS
 
08.01.20
19:53
Надо угадать ошибку?
Может ВыгрузитьПоПравилу()?
2 altaykniga
 
08.01.20
19:55
ниже приведен текст ошибки при выгрузке:

"Доброго времени суток, уважаемые! Прошу поделиться знаниями.
Настраиваю обмен между идентичными конфигурациями с помощью плана обмена и правил выгрузки. Контрагенты переносятся по ссылкам из документов. Необходимо добиться, чтобы вместе с контрагентом выгружались все его контактные данные. Как этого добиться? Написал в ПКО "Контрагенты" в ПослеВыгрузкиВФайл следующий код:

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

          СтрокаОтбора = Отбор.Добавить ();
          СтрокаОтбора.Имя = "Объект";
          СтрокаОтбора.Значение = Выборка.Объект;
          СтрокаОтбора.Использование = Истина;

          Строки = Новый ТаблицаЗначений;
          Строки.Колонки.Добавить("Представление");
          Строки.Колонки.Добавить("Вид");
          Строки.Колонки.Добавить("Тип");
          Строки.Колонки.Добавить("Объект");
          
          Строки.Колонки.Добавить("Поле1");
          Строки.Колонки.Добавить("Поле2");
          Строки.Колонки.Добавить("Поле3");
          Строки.Колонки.Добавить("Поле4");
          Строки.Колонки.Добавить("Поле5");
          Строки.Колонки.Добавить("Поле6");
          Строки.Колонки.Добавить("Поле7");
          Строки.Колонки.Добавить("Поле8");
          Строки.Колонки.Добавить("Поле9");
          Строки.Колонки.Добавить("Поле10");
          Строки.Колонки.Добавить("Комментарий");
          Строки.Колонки.Добавить("ЗначениеПоУмолчанию");
          Строки.Колонки.Добавить("ТипДома");
          Строки.Колонки.Добавить("ТипКорпуса");
          Строки.Колонки.Добавить("ТипКвартиры");

          Строка = Строки.Добавить();
          ЗаполнитьЗначенияСвойств(Строка, Выборка);

          НаборЗаписей = Новый Структура("Отбор, Строки");
          НаборЗаписей.Отбор = Отбор;
          НаборЗаписей.Строки = Строки;

          ВыгрузитьРегистр(НаборЗаписей,,,,"КонтактнаяИнформация");



Прошу ткнуть носом, что не так написал в коде, выгрузка завершается ошибкой

Заранее благодарю за помощь"
3 altaykniga
 
08.01.20
19:56
сорян, вот текст ошибки:

"Ошибка при выгрузке данных для узла плана обмена
    ТипОбъекта             =  Справочник объект: Контрагенты
    Объект                 =  Аветян ИП
    ОписаниеОшибки         =  Ошибка в обработчике события ПослеВыгрузкиОбъектаВФайл
    ПКО                    =  Контрагенты  (Справочник: Контрагенты)
    Объект                 =  Аветян ИП  (Справочник объект: Контрагенты)
    Обработчик             =  ЕстьОбработчикПослеВыгрузкиВФайл
    ОписаниеОшибки         =  Ошибка получения значения свойства объекта (по имени свойства источника)
    ПКО                    =  КонтактнаяИнформация  (Регистр сведений: Контактная информация)
    ПКС                    =  1  (Активность --> Активность)
    Объект                 =  КлючИЗначение  (Ключ и значение)
    СвойствоПриемника      =  Активность  (Булево)
    ОписаниеОшибки         =  Поле объекта не обнаружено (Активность)
    ПозицияМодуля          =  Обработка.ОбменДаннымиXML.МодульОбъекта(8340)
    КодСообщения           =  13
    ПозицияМодуля          =  Обработка.ОбменДаннымиXML.МодульОбъекта(1648)
    КодСообщения           =  79
    ПозицияМодуля          =  Обработка.ОбменДаннымиXML.МодульОбъекта(1617)
    КодСообщения           =  72
    УзелПланаОбмена        =  ЛЛИ ваниль
Произошла ошибка при выгрузке объектов. Было выгружено: 5"
4 ДенисЧ
 
08.01.20
19:59
Есть подозрение, что ВыгрузитьРегистр - некая функция, которая выгружает регистры накопления. (ибо это не штатная функция КД).
А ей подпихивается регистр сведений.

ЗЫ. Точнее, даже не так. Ей подпихивается некая выборка из некой таблицы, в которой (выборке) нет тех полей, что ожидает фукнция (в данном случае нет поля Активность).
5 altaykniga
 
08.01.20
20:19
или здесь нужно пользоваться ВыгрузитьПоПравилу?
6 altaykniga
 
08.01.20
20:36
всем спасибо, в итоге написал такой код в ПослеВыгрузки:

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
    |КонтактнаяИнформация.Объект,
    |КонтактнаяИнформация.Тип,
    |КонтактнаяИнформация.Вид,
    |КонтактнаяИнформация.Представление
|ИЗ
    |РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
        |  КонтактнаяИнформация.Объект = &Объект";
Запрос.УстановитьПараметр("Объект", Источник.Ссылка);
Выборка = Запрос.Выполнить ().Выбрать ();
Пока Выборка.Следующий () Цикл
    Набор = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
       Набор.Отбор.Объект.Установить(Источник.Ссылка);
       Набор.Отбор.Тип.Установить(Выборка.Тип);
       Набор.Отбор.Вид.Установить(Выборка.Вид);
        Набор.Прочитать();
        ВыгрузитьРегистр(Набор, , , ,"КонтактнаяИнформация");
КонецЦикла;


тема закрыта
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший