Занятие № 06. Курс «1С:Конвертация данных 2.1 – Профессиональная настройка правил обмена и типовые сценарии переноса данных»

Сложные преобразования при переносе данных

Изучите теорию модуля № 1:

  • Глава 7. Конвертация “Один в несколько”

Выполните практические задания:

Отчеты по домашним заданиям размещайте по ссылкам, указанным выше. Отчеты, опубликованные на этой странице, удаляются без предупреждения.

Ваши вопросы по материалам данного занятия задавайте в комментарии ниже.
Общие вопросы по курсу, не связанные с конкретным занятием, задавайте на странице: http://kursy-po-1c.ru/data-conv/all-hw/convdata-common-qa/

К сожалению, у Вас недостаточно прав для дальнейшего просмотра.

Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.

Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.

Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.

Комментарии / обсуждение (113):

  1. Дмитрий Леонидович Мазунин

    Добрый день!
    Использую Конвертация данных, редакция 2.1 (2.1.8.2)
    При выполнении настройки по видео 1.6.8 для загрузки документов с последующим проведением по команде формы из “ДопОбработки” столкнулся затруднениями в устранении двух ошибок.
    В настройках конвертации за вкладке “Подключаемые обработки” добавил новую обработку из файла в соответствии с описанием из Видео. Внешняя обработка была создана ранее в конфигураторе базы приемника.

    В ПКО документа для с обытия ПослеЗагрузки написал код для добавления в табличную часть ДопОбработки код

    СтрТЧ = ДопОбработки.ДокументыДляПроведения.СписокДокументов.Добавить();

    При загрузке в базе приемника появляется сообщение об ошибке
    ИмяПКО = ВыбытиеТоваровСоСклада
    ТипОбъекта = Выбытие товаров со склада
    Объект = Выбытие товаров со склада 1 от 14.02.2007 13:05:19
    Обработчик = ПослеЗагрузкиОбъекта
    ОписаниеОшибки = Поле объекта не обнаружено (ДокументыДляПроведения)

    “ДокументыДляПроведения” – название внешней обработки. Так она называется в конфигураторе и так она называется в списке подключаемых обработок в настройках конвертации..

    При выводе отладочных сообщений, о “ДопОбработки” в результатах вижу, что это Тип Структура, количество элементов = 0.
    КОД:
    Сообщить(ТипЗнч(ДопОбработки));
    Сообщить(“Элементы: ” + Строка(ДопОбработки.Количество()));

    Начало загрузки: 21.06.2020 15:44:12
    Структура
    Элементы: 0

    Подскажите что может служить препятствием для обращения к ДопОбработке в коде обработчиков правил?

    В файле правил .xml обработка присутствует в двоичном виде.

    В обработчике события ПослеЗагрузкиДанных конвертации уведомление об ошибке говорит об ошибке в имени формы. Код вставил из модуля обработки приемника
    ОткрытьФорму(“ВнешняяОбработка.ДокументыДляПроведения.Форма.Форма”);

    базу приемника открываю в толстом клиенте

    • AlexeyDubrovin

      При добравлении обработки на закладке “Подключаемые обработки” галку “Обработка используется при загрузке данных” поставили ?

      • Дмитрий Леонидович Мазунин

        Да. Использование обработки при загрузке установил. Обмен выполнял с использованием обработки универсального обмена V8Exchan83.epf

        • AlexeyDubrovin

          Приложите правила и обработку. Не забудьте заархивировать

  2. sergshell

    При решении преподавателя примера 1.6.2, мы в передаваемых данных, передаем ссылку, которую “цепляет” документ ” Требование накладная” ; то есть,получается, эта ссылка равна UID ссылки документа источника?

    • Ольга Кузнецова

      Добрый день
      Да, получается, что Уникальный идентификатор будет совпадать у исходного документа Выпуск и у итоговых документов Отчет производства за смену и Требование-Накладная

  3. Наталья

    Здравствуйте. Помогите,пожалуйста, найти ошибку.
    Задание 1.6.2
    1. Добавляем ПКО ТребованиеНакладная с пустым источником(Снимаем поиск по идентификатору) к нему ПКС Дата Номер и ПКГС Материалы и в нем Номенклатура и Количество Отмечаем Галочки Получать из Входящих Данных
    2. Добавляем ПКО ОтчетПроизводстваЗаСмену с пустым источником К нему ПКС Дата Номер ТребованиеНакладная (указываем в событии перед выгрузкой ИсходящиеДанные = Источник.ТребованиеНакладная;) и ПКГС Выпуск в нем Номенклатура и Количество
    3. Добавляем ПВД Произвольным запросом, указываем ПКО ОтчетПроизводстваЗаСмену в событии перед обработкой

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

    Если не переносить ПКГС Материалы тогда перенос работает кроме переноса таб части.
    Если переносить выдает ошибки Ошибка получения свойства подчиненного объекта из входящих данных
    ПКО = ТребованиеНакладная (:)
    ПКС = 4 (–> Количество)
    Объект = Структура (Структура)
    СвойствоПриемника = Количество (Число)
    ОписаниеОшибки = Поле объекта не обнаружено (Количество)
    ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8282)
    КодСообщения = 67

    Ошибка при выгрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1693)}: Ошибка получения свойства подчиненного объекта из входящих данных
    ПКО = ТребованиеНакладная (:)
    ПКС = 4 (–> Количество)
    Объект = Структура (Структура)
    СвойствоПриемника = Количество (Число)
    ОписаниеОшибки = Поле объекта не обнаружено (Количество)
    ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8282)
    КодСообщения = 67

    • AlexeyDubrovin

      Откройте конфигуратор исходной базы, создайте обработку, перенесите код вашего обработчика из ПВД в обработчик нажатия кнопки, сохраните. Поставьте точку останова на конце процедуры обработчика, запустите обработку в отладчике. Посмотрите что у Вас в ВыборкаДанных. Структура строки таблицы значений ВыборкаДанных должна совпадать со структурой документа ТребованиеНакладная. У Вас там явно не та структура. Должно быть примерно так

      ВыборкаДанных = Новый ТаблицаЗначений;
      ВыборкаДанных.Колонки.Добавить("Дата");
      ВыборкаДанных.Колонки.Добавить("Номер");
      ВыборкаДанных.Колонки.Добавить("Материалы");

      Потом при добавлении строки в эту таблицу значений, нужно в колонку Материалы присваивать таблицу значений с колонками Номенклатура и Количество, в которую добавлять материалы из ТЧ Выпуск

      • Наталья

        Здравствуйте.
        Во внешней обработки отлаживала структуру.
        Можно ли это сделать таким образом?
        Структура ВыборкаДанных у меня соответствует документу ОтчетПроизводстваЗаСмену со следующими полями Дата, Номер, ТребованиеНакладная(Тип структура с полями Дата, номер, Материалы(Это таблица значений)) , Выпуск(Таблица значений).
        Все переносится кроме табличной части Материалы.
        А если переносить сначала ТребованиеНакладная то как передавать ссылку на него в документ ОтчетПроизводстваЗаСмену?

        • Наталья

          Решила помогло добавление в ПКО ТребованияНакладная проверки на структура из 7 занятия. В событии перед выгрузкой

          если ТипЗнч(ВходящиеДанные) <> тип("Структура") тогда  
              отказ=истина;
          КонецЕсли ;
        • Ольга Кузнецова

          Наталья, добрый день

          Попробуйте галочки “Получить из входящих данных” в этих ПКО везде снять и повторить.

          Вы передаете эти структуры в качестве Источников, а программа пытается их получить из входящих данных, и поэтому возникает ошибка

          В остальном Ваш алгоритм выглядит правильно

          • Наталья

            Здравствуйте, Ольга. Спасибо большое за ответ, данный вариант тоже заработал. Убрала галочки получать из входящих во всех ПКС к ПКО ТребованиеНакладная и В ПКС ТребованиеНакладная убрала ИсходящиеДанные = Источник.ТребованиеНакладная; и проверка ну на структуру.
            Правильно ли я поняла, если мы в ПВД формируем набор данных для передачи в вызываемые ПКО объявляем как структура и более настроек никаких не делаем? Главное что бы совпадали имена везде.

            • Ольга Кузнецова

              Добрый день, Наталья

              Да, в ПВД с произвольным алгоритмом можно собрать таблицу значений ВыборкаДанных так, чтобы совпадали поля и типы данных с тем, как настроены ПКО и ПКС. Дальше все само выгружается, передаваясь рекурсивно в ПКО, затем в ПКС и дальше в ПКО, указанные в ПКС. Если в ВыборкеДанных везде, где должны быть ссылочные данные, создать структуры с нужными именами и типами элементов, то они попадут “на вход” в ПКО и выгрузятся автоматически.

              Исходящие-Входящие данные нужны, когда Вы выгружаете ссылку на объект, а нужно передать еще какие-то данные. А когда создаете произвольную ВыборкуДанных, то проще все сразу создать так, чтобы выгрузилось автоматически, и входящие данные не нужны

              • Наталья

                Здравствуйте, Ольга.
                Спасибо большое, за подробный ответ.

                • Алексей Катеринич


                  (текст комментария доступен только участникам Мастер-группы)

  4. Дмитрий Богданов

    Добрый день.

    По задаче 1.6.2 предложено использовать два разных ПКО для переноса отчета производства за смену и требования-накладной из документа Выпуск продукции. Но в документе выпуск продукции поле Номенклатура составного типа, в этом поле могут быть как элементы справочника Продукция, так и элементы справочника Материалы.
    Для ПКС Номенклатура в созданных ПКО явно не указали, по какому правилу выгружать эти поля. Как система подберет нужное правило, если для выгрузки в справочник Номенклатура были ранее созданы три разных ПКО?

    • Ольга Кузнецова

      Добрый день

      Правило может быть подобрано автоматически из тех, что настроены, по реальному типу выгружаемого объекта.

      Но можно и явно задать правила для обоих случаев, это будет более правильно. Для этого в ПКС Номенклатура При выгрузке нужно написать что-то вроде такого:

      Если ТипЗнч(Значение) = Тип("СправочникСсылка.Продукция") Тогда
         ИмяПКО = "ПродукцияНоменклатура";
      ИначеЕсли ТипЗнч(Значение) = Тип("СправочникСсылка.Материалы") Тогда
         ИмяПКО = "МатериалыНоменклатура";
      КонецЕсли
  5. leobrn

    Здравствуйте! В решение преподавателя в задании 1.6.1 и в ранних было создано поле Синхронизация в конечной базе и настроены правила для этого поля. НО если речь идет о типовых конфигурациях и вносить изменения не желательно то такой перенос надо делать использую доп. реквизиты? и будут ли в уроках настройки правил для доп. реквизитов?

    • Ольга Кузнецова

      Добрый день

      В типовых конфигурациях везде есть регистры сведений, в которых хранится соответствие объектов в разных информационных базах. Те обмены, которые встроены в типовые конфигурации, сами используют эти регистры для поиска, ничего специального делать для этого не нужно, просто оставить в правилах поиск по уникальному идентификатору.

      Если же создавать правила для использования в типовой конфигурации, но не со встроенным обменом, а через обработку Универсального обмена, то можно тоже использовать эти регистры соответствия, просто написать алгоритм для поиска там объекта и добавления туда записи соответствия, если ее еще нет.

      • leobrn

        В следующих модулях будет что-нибудь подобное рассмотрено с использованием этого регистра ?

        • Ольга Кузнецова

          В разделе Синхронизация есть видео Синхронизация по внешним данным. Там аналогичная задача рассматривается. Только регистр по-другому устроен.

  6. Inna_Kikot

    Здравствуйте! Подскажите, пожалуйста, как при переносе документа организовать поиск по Дате без времени? Т.е. если не подходит поиск по УИН, а осуществляется поиск по Номеру и дате?

    • Ольга Кузнецова

      Добрый день.
      Можно в ПКО в обработчике “Поля поиска” написать поиск запросом. Там в условиях указать, что Дата должна быть больше начала суток и меньше конца суток.

    • Inna_Kikot

      Если можно немного подробнее, как написать поиск запросом?

      • Ольга Кузнецова

        Об этом рассказано в видео 1.4.8 Синхронизация по внешним данным

  7. Sofrino

    Здравствуйте!
    В ПВД использую Произвольный алгоритм для выгрузки контрагентов. В БД_Источник, у контрагента реквизит ЮрФизЛицо, в БД_Приёмник – это реквизит ВидКонтрагента.
    В запросе указал псевдоним Контрагенты.ЮрФизЛицо КАК ВидКонтрагента. В общем это всё работало!
    Дело дошло до договоров, подчинённых контрагентам.
    В ПКО спр. Договоры, ПКС Владелец использует правила конвертации Контрагентов по произвольному алгоритму.
    Тут и возникала ошибка в ПКО Контрагенты, поле ВидКонтрагента не обнаружено. Подскажите как правильно поступить? Не хотелось бы делать ещё одно ПКО для Контрагента.

    • Ольга Кузнецова

      Здравствуйте!
      Тогда нужно в ПКС ВидКонтрагента в событии Перед выгрузкой написать ручное получение значения свойства. Скорее всего, Вам нужно ориентироваться на тип значения Источника. Если это ссылка на элемент справочника, то не выгружать это свойство. А если это выборка из результата запроса (или строка таблицы значений, в зависимости от того, как Вы формируете коллекцию ВыборкаДанных), то получить значение этого свойства вручную. То есть примерно так:

      Если ТипЗнч(Источник) = Тип("СправочникСсылка.Контрагенты") Тогда
         Отказ = Истина;
      ИначеЕсли ТипЗнч(Источник) = ... Тогда
         Значение = Источник.ВидКонтрагента;
      КонецЕсли;
  8. Александр

    Относительно функции ВыгрузитьПоПравилу.
    Я не понял, откуда мы в принципе о ней узнали, все ли экспортные функции обработки обмена можно использовать при написании кода и в каких обработчиках?
    Если перед выгрузкой мы вызовем эту функцию, нужно ли в коде прописывать Отказ = Истина; ?

    • Ольга Кузнецова

      Код обработчиков выполняется в определенные моменты выгрузки и загрузки с помощью метода Выполнить(). Поэтому в этом выполняемом коде доступен весь контекст модуля обработки. Все функции можно использовать, а также все глобальные переменные, и все локальные, которые доступны в этом месте модуля обработки.

      Можно посмотреть в модуле обработки, если там есть нужная функция, можно использовать ее в обработчике.

      Если настроить ПВД, указать объект выборки и ПКО, а в событии Перед выгрузкой вызвать функцию ВыгрузитьПоПравилу() для выгрузки еще каких-то объектов, то выгружены будут и те, для которых вызывалась эта функция, и те, которые указаны в ПВД. Поэтому если нужно выгрузить объекты только с помощью этой функции, то да, нужно написать в этом обработчике Отказ = Истина;

  9. Александр

    Вроде, простой момент, но не понял принципа с приоритетами.
    У добавленных правил по переносу сотрудников вместе с авто приоритеты 750 и 850, у старого – 150. Для родителя явно ПКО указано не было, и использовалось с максимальным приоритетом, т.е. 850.
    В уроке сказано, что при выгрузке сначала обработка идет у правил с меньшим порядком.
    Не понятна логика. В первом случае будто чем больше порядок, тем больше приоритет, во втором – обратная ситуация.

    • Ольга Кузнецова

      Здравствуйте!

      Да, когда выполняются ПВД, то первым выполняется правило с наименьшим порядком, и далее по возрастанию. Потому что это именно порядок выполнения. А у ПКО это именно приоритет – то есть какое из правил используется “по умолчанию”. Поэтому, если ПКО не указано, используется то ПКО, у которого приоритет выше.

  10. ilkup

    Здравствуйте. Написал решение к заданию в воскресенье. Появилась ссылка на видео в понедельник, ни моего решения ни ответа преподавателя нет. Не видно и остальных комментариев.

  11. vmalov

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

    Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(9718)}: Ошибка при вызове метода контекста (Удалить): Значение индекса выходит за границы диапазона.

    Проблема с ПВД: СотрудникиЛичноеСлужебноеАвто

    • Ольга Кузнецова

      Здравствуйте!
      Какая-то ошибка в правилах, возможно, неправильно ПКО указали где-то. Прикрепите к комментарию правила в zip или rar архиве, я посмотрю

  12. Nei

    Вопрос по видео уроку 1.7.8.
    На 5 минуте записи говориться о том, что после загрузки данных в конечную базу (т.е. в обработчике “После загрузки”) можно получать старые данные запросом из базы данных. Как так может быть, если новые данные уже были загружены в конечную базу, то где же могут храниться старые данные?

    • Ольга Кузнецова

      Здравствуйте!
      Просто обработчик ПКО После загрузки выполняется до записи этого объекта в информационную базу. Поэтому по ссылке можно из информационной базы получить “старую” версию объекта. “Новая” версия – заполненный, но еще не записанный объект – находится в параметре Объект. Можно их сравнить и как-то изменить новую загружаемую версию

  13. emelva

    При повторе примера из видео 1.7.7 “Конвертация одна строка в несколько”, а именно добавляю стоку для прочих услуг

    Если ВыборкаТовары.ДопЗатраты > 0 Тогда
    СтрокаТЧ = Услуги.Добавить();
    СтрокаТЧ.Товар = “ПрочиеУслуги”;
    СтрокаТЧ.Сумма = ВыборкаТовары.ДопЗатраты;
    КонецЕсли;

    при выгрузке получаю ошибку:
    “Ошибка получения значения свойства объекта (по имени свойства источника)
    ПКО = Номенклатура (Справочик: Товары)
    ПКС = 2 (Код -> Код)
    Объект = ПрочиеУслуги (Строка)
    СвойствоПриемника = Код (Строка)
    ОписаниеОшибки = Получение значения по индексу для значения не определено

    Помогите разобраться, пожалуйста.

    • Ольга Кузнецова

      Здравствуйте!
      Получается, что вместо товара передается строка “ПрочиеУслуги”, а выгружается она по такому ПКО, которому должна быть передана ссылка на Товар, чтобы из этой ссылки получить все свойства. Либо нужно для этой строки отдельное ПКО, которое умеет выгружать элемент справочника из строки, либо в эту строку табличной части записать не строковое значение, а хотя бы структуру, у которой будут все необходимые свойства (для которых в ПКО Номенклатура настроены ПКС)

  14. tatira14

    Напомните, пожалуйста, как обращаться к структуре “Параметры” в Обработчике ПВД “Перед обработкой”.
    Ранее создала ПКС с передачей в параметр. Пробовала Параметры.ВидВыпуска и Параметры[“ВидВыпуска”] – “Поле объекта не обнаружено (ВидВыпуска)”

    • Ольга Кузнецова

      Здравствуйте!
      Обработчик ПВД перед обработкой выполняется даже раньше, чем ПКО и ПКС. Данные, переданные через ПКС с видом Передача в параметр, можно получить в обработчике ПКО После загрузки (или Поля поиска, если это ПКС отмечено флагом поиска) из соответствия ПараметрыОбъекта

  15. Антон Губарьков

    ДЗ 1.6.2. Я использую функцию ВыгрузитьПоПравилу для создания документа Требование-накладная. Этот документ создается и выгружается в файл XML. Функция возвращает следующий узел XML (ТипЗнч = Строка), который совпадает с узлом ссылки в выгруженном документе Требование-Накладная.

    2012-08-01T00:00:00

    000000001

    В моей версии КД, (Конвертация данных, редакция 2.1 (2.1.8.2)) параметр УзелСсылки доступен только в обработчике После Выгрузки, и присвоение ему возвращаемого значения не приводит к заполнению узла ссылки для свойства ТребованиеНакладная.
    Подскажите, пожалуйста, как необходимо передать возвращаемое значение в узел ссылки выгружаемого свойства ТребованиеНакладная.

    Присвоение Значение = Источник.Номер обработчике Перед Выгрузкой – это единственный способ, который я нашел для того, чтобы заставить обработчик После Выгрузки выполниться. Если не присвоить значение, но вызов обработчика После Выгрузки не выполняется.

    • Антон Губарьков

      Сам нашел вот такой способ.
      В обработчик ПКС ТребованиеНакладная добавил код
      УзелСсылки = ВыгрузитьПоПравилу(Источник,,,, “Выпуск_ТребованиеНакладная”);

      ДобавитьПодчиненный(УзелСвойства, УзелСсылки);
      ДобавитьПодчиненный(Приемник, УзелСвойства);

      После этого свойство выгрузилось в файл обмена и успешно заполнилось в конечной базе. Мне в этом решении не нравится то, что я фактически вручную формирую узел свойства и вручную его записываю в файл обмена. Есть ли более понятное (следующему разработчику) решение?

      • Ольга Кузнецова

        Здравствуйте!
        Вы все сделали правильно, но слишком сложно.
        Вызов функции ВыгрузитьПоПравилу() – это как раз момент перехода из ПКС (для ссылочного типа) в ПКО (указанное в нем). Эта функция выгружает объект свойства согласно ПКО и возвращает узел ссылки, который будет присвоен в узел свойства. То есть то же самое, что Вы сделали вручную. Позвольте ПКС ТребованиеНакладная отработать автоматически. Для этого ему нужна та же информация, которую Вы сообщили функции ВыгрузитьПоПравилу() – указать ПКО и задать Источник (в ПКС это параметр Значение). И результат будет тот же.
        Если нужно более подробно – пишите на странице вопросов по ДЗ.

        • Антон Губарьков

          Спасибо большое за объяснение. Теперь всё встало в моей голове на места. Действительно так гораздо проще и понятней.

  16. Антон Губарьков

    ДЗ 1.6.1. Помогите, пожалуйста, решить загадку. Создал правила по этому ДЗ (ПВД НоменклатураМатериалыТоварыПродукция) и получил выгрузку. Загрузил в конечную. Вся номенклатура разложилась по группам, как положено. Но отчего же коды перенеслись в каждой группе одинаковые? В данных они все разные.

    • Ольга Кузнецова

      Здравствуйте!
      Вы прибавляете к ним префикс, и получается слишком длинная строка, которая обрезается.

  17. korpas

    1. Особенность применения «Узел ссылки»

    Не открывается видео под этим пунктом.

    • Татьяна Гужавина

      Доброго дня!
      Видео Вам удалось скачать? Видео не отображается или после скачивания не открывается?
      Видео-кодек TSCC у Вас установлен?

  18. 87konstantin@mail.ru

    Здравствуйте, в ходе решения ДЗ 1.6.2 у меня появились некоторые вопросы. На всякий случай привожу текст моего решения:
    Здравствуйте,
    1) Создал ПКО “ПереносВыпусков” c ПКС ТребованиеНакладная, Дата. Также создал ПКГС Выпуск с ПКС Номенклатура и количество. Установил автоматическую генерацию номера.
    2) Создал ПВД “Перенос выпусков” с произвольным алгоритмом со следующим кодом в событии перед обработкой:
    ВыборкаДанных = Новый ТаблицаЗначений;
    ВыборкаДанных.Колонки.Добавить(“Ссылка”);
    ВыборкаДанных.Колонки.Добавить(“Дата”);
    ВыборкаДанных.Колонки.Добавить(“Выпуск”);
    ВыборкаДанных.Колонки.Добавить(“ТребованиеНакладная”);
    ВыборкаДанных.Колонки.Добавить(“Материалы”);

    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | ВыпускПродукцииВыпуск.Ссылка КАК Ссылка,
    | ВыпускПродукцииВыпуск.Ссылка.Дата КАК Дата,
    | ВыпускПродукцииВыпуск.Номенклатура,
    | ВыпускПродукцииВыпуск.Количество,
    | ВыпускПродукцииВыпуск.ВидВыпуска
    |ИЗ
    | Документ.ВыпускПродукции.Выпуск КАК ВыпускПродукцииВыпуск
    |ИТОГИ
    | МАКСИМУМ(Дата)
    |ПО
    | Ссылка”;

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаСсылка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Пока ВыборкаСсылка.Следующий() Цикл
    Запись = ВыборкаДанных.Добавить();
    Запись.Ссылка = ВыборкаСсылка.Ссылка;
    Запись.Дата = ВыборкаСсылка.Дата;
    Запись.ТребованиеНакладная = “1”;

    Выпуск = Новый ТаблицаЗначений;
    Выпуск.Колонки.Добавить(“Количество”);
    Выпуск.Колонки.Добавить(“Номенклатура”);
    Запись.Выпуск = Выпуск;

    Материалы = Новый ТаблицаЗначений;
    Материалы.Колонки.Добавить(“Количество”);
    Материалы.Колонки.Добавить(“Номенклатура”);
    Запись.Материалы = Материалы;
    ВыборкаДетальныеЗаписи = ВыборкаСсылка.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Если ВыборкаДетальныеЗаписи.ВидВыпуска = Перечисления.МатериалПродукция.Продукция Тогда
    ЗаписьТЧ = Выпуск.Добавить();
    ЗаписьТЧ.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
    ЗаписьТЧ.Количество = ВыборкаДетальныеЗаписи.Количество;
    Иначе
    ЗаписьТЧ = Материалы.Добавить();
    ЗаписьТЧ.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
    ЗаписьТЧ.Количество = ВыборкаДетальныеЗаписи.Количество;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    3) Создал ПКО ТребованиеНакладнаяВОтчетеПроизводства с ПКС Дата и ПКГС Материалы. Установил для них признак получать из входящих данных. Снял поиск по УИН включил автоматическую генерацию кода. Установил поиск по ПКС Дата по точному соответствию.
    4) В ПКС ТребованиеНакладная ПКО “ПереносВыпусков” в событии перед выгрузкой следующий код:
    ИсходящиеДанные = Новый Структура(“Дата,Материалы”,Источник.Дата,Источник.Материалы);
    5) Выгрузил, загрузил данные. Убедился что все хорошо переносится.

    С какими проблемами я столкнулся при решении. Конвертация упорно не хотела заходить в ПКО ТребованиеНакладнаяВОтчетеПроизводства пока я в произвольном алгоритме выгрузки не написал следующее: Запись.ТребованиеНакладная = “1”; Получается если в значении Источника у нас значится Неопределено, а Запись.ТребованиеНакладная = “1”;, судя по всему так и было ПКО не будет выполняться для ПКС что ли (Причем я пробовал просто даже написать Запись.ТребованиеНакладная = “”;, все равно КД не выполняла это правило)?

    Затем встал у меня вопрос с синхронизацией – как синхронизировать Требование накладную? Синхронизацию по УИН естественно я снял так как у меня его вообще нету, ну и галочки поиска тоже решил не проставлять. Что получил в итоге? Требование у меня перенеслось, но как ссылка не проставилась в Отчет производства за смену, когда я проставил что поиск документа у меня пойдет по точному соответствию даты – то все прошло успешно. Получается что если у нас переносится объект с примитивными типами данных то галочки вообще все снимать можно (Допустим я одноразово буду переносить некоторые данные в чистую базу, то мне эти галочки вообще не нужны), а если нет (как в нашем случае в Отчете производства за смену переносилось Требование), то тогда если у нас отключен поиск по УИН, обязательно нужно включать поиск хотя бы поиск по 1 из полей. Просьба как-то тоже прокомментировать это умозаключение.

    • Ольга Кузнецова

      Здравствуйте!
      ПКО для ТребованияНакладной не выполнялось, скорее всего, потому, что в ПКС в параметре Значение было пусто, а в этом случае конвертация этого значения не происходит. Можно в ПКС в событии Перед выгрузкой написать
      Значение = 1;
      И ПКО начнет выполняться. Или, как Вы правильно сделали, в формируемой таблице присвоить любое (но не пустое!) значение этому свойству.

      Поле ЭтоГруппа нужно отмечать флагом поиска, чтобы корректно переносились группы справочников. В остальных случаях если не используется уникальный идентификатор и не отмечено ни одно поле поиска, то объекты загрузятся один раз правильно, а в последующие загрузки будут дублироваться. При этом на эти объекты потеряются ссылки из других объектов. Кроме того, из-за этого могут быть еще другие ошибки, если правила достаточно сложные. В реальной работе лучше отмечать хотя бы одно поле поиска для более стабильной работы обмена

  19. bala35am

    Добрый день. Ранее в курсе было сказано, что если не указано пко в пкс, то подбирается пко по соответствию источник-приемник и с высшим приоритетом. У меня же в случае с уроком 1.7.2 (конвертация один в несколько часть 2) пко подбирается по соответствию только приемника и приоритета (т.е. из критериев подбора выкинут источник). И в видео уроке как полагаю тоже самое. Или я что-то не понимаю ?

    • Ольга Кузнецова

      Здравствуйте!
      На самом деле при подборе правила учитывается только тип переданного объекта. То есть среди всех настроенных ПКО происходит поиск такого, где тип объекта-источника совпадает с типом выгружаемого объекта, и при этом максимальный приоритет.
      В реальной работе лучше не надеяться на автоматический подбор правил, а указывать ПКО явно во всех ПКС для ссылочных типов

  20. CTmuB

    В 1.6.2 создаётся ВыборкаДанных и двумя ПКО переносится в два документа предполагая что поля приемников не пересекаются
    Вопрос такой: если в двух документах приемниках есть ТЧ “Номенклатура” но в каждый документ надо переносить “свою” номенклатуру.
    Ну или проще, надо создать два документа с разными датами. Например в исходной базе есть документ с реквизитами “ДатаНачала” и “ДатаОкончания” в конечной надо создать два документа и перенести “ДатаНачала” и “ДатаОкончания” в поле “Дата”
    Тобишь можно ли произвольным алгоритмом (допустим все данные выбираются одним запросом) создать две (3,4,5) выборок данных (в которых поля могут называться одинаково, но содержать разные данные) и передать их в разные ПКО?

    • Ольга Кузнецова

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

      • CTmuB

        ВыгрузитьПоПравилу(Источник,Приемник,ВходящиеДанные,ИсходящиеДанные,ИмяПКО,УзелСсылки, ТолькоПолучитьУзелСсылки,ПКО,ЭтоПравилоСГлобальнойВыгрузкойОбъектов,ВыборкаДляВыгрузкиДанных)
        а если в одном ПВД для которого не указано ПКО сформировать таблицы ВыборкаДанных1,ВыборкаДанных2,ВыборкаДанных3 а потом в этом же ПВД

        ВыгрузитьПоПравилу(,,,,”ПКО1″,,,,,ВыборкаДанных1);
        ВыгрузитьПоПравилу(,,,,”ПКО2″,,,,,ВыборкаДанных2);
        ВыгрузитьПоПравилу(,,,,”ПКО3″,,,,,ВыборкаДанных3);

        • CTmuB

          Получилось

          В ПВД “ПередОбработкой” указал

          ВыгрузитьПоПравилу(ВыборкаДанных1,,,,”ИмяПКО_1″);
          ВыгрузитьПоПравилу(ВыборкаДанных2,,,,”ИмяПКО_2″);
          Отказ = 1;

          • Ольга Кузнецова

            Здравствуйте!
            По этому ПВД должно выгрузиться 2 объекта, если в выборке данных находятся подходящие данные

        • Ольга Кузнецова

          Функция ВыгрузитьПоПравилу() выгружает только один объект, она не выполняет обход выборки. Так что так можно, но это должно быть в цикле по строкам выборки.

          • CTmuB

            В цикле по строкам выборки не получилось. Сделал в цикле формирование “ВыборкаДанных” и сразу их в “Выгрузить по правилу”. Хоть и надо было по одному разу выгрузить но поэкспериментировать интересно было. Спасибо.

  21. angur

    На домашнем задании 1.6.2 у меня возник вопрос, который, наверное, надо было задать раньше. Вот мы переносим документы по ссылке и считаем, что в базе-приемнике такого УИД быть не может. По условиям задачи подразумевается, что пользователь не создаёт там документы самостоятельно? Или я не понимаю чего-то основополагающего?

    • Ольга Кузнецова

      Здравствуйте!
      Если данные из базы-Источника впервые переносятся в базу, которая велась полностью отдельно от базы-Источника, то вероятность совпадения уникальных идентификаторов объектов в них исчезающе мала. Вероятность эта становится больше, если объекты с идентификаторами уже переносились, а независимое ведение базы-Приемника продолжается. Или если обе базы являются потомками одной.
      Поэтому в типовых конфигурациях для синхронизации объектов используется регистр сведений “Соответствие объектов информационных баз”. Это самый оптимальный подход для сопоставления объектов.
      Но в рамках решения домашнего задания можно считать, что синхронизация по идентификатору нас устраивает

  22. Надежда

    Ольга, добрый день! У меня вопрос по реквизиту СтавкаНДС из табличной части. В видео 1.7.6, 1.7.7, 1.7.8 четко видно, что Ставка НДС переносится и проставляется только 1 раз (как 10%, так и 18), Например, если в ТЧ 2 товара со ставкой 18 % и этот документ первый из переносимых, то Ставка НДС заполняется только у первого товара, второй идет без ставки, в последующих документах – если должна быть ставка НДС 18 %, то она не проставляется вообще. В видео отчетливо это видно (лично мне казалось, что Евгений вот-вот скажет про эти ставки, он даже курсор туда ставит), но Евгений не акцентирует на этом внимание. Подскажите, как реализовать полный перенос всех ставок НДС в документы, не используя галку “Не запоминать выгруженные объекты” (с ним количество выгружаемых объектов знаичительно больше) у ПКО “СтавкиНДС”, ключ мне как-то не удалось придумать. Хочется выгрузить Ставки НДС 1 раз и потом везде где надо их подставлять.

    • Ольга Кузнецова

      Здравствуйте!
      Дело в том, что в этих видео-уроках для ПКС СтавкиНДС использовалось ПКО СтавкиНДС, разработанное в видео-уроке 1.5.4. В этом ПКО происходило присвоение нужного значения параметру УзелСсылки. В этом случае ключ выгружаемых данных не поможет, это ПКО будет работать только с установленным флажком “Не запоминать выгруженные”.
      Для конвертации в перечисление (для всех случаев, кроме прямого сопоставления значений перечислений в ПКЗ) не нужно создавать ПКО. В ПКС СтавкаНДС нужно написать

      Если Источник.СтавкаНДС.Процент = 10 Тогда
      Значение = “Ставка10”;
      ИначеЕсли…

      и так далее. В этом случае все будет перенесено корректно, и лишней информации в файл данных записано не будет

      • Надежда

        Ольга, спасибо огромное! Подкорректировала Ваш код до:

        Если ОбъектКоллекции.СтавкаНДС.Процент = 10 Тогда
            Значение = "Ставка10";
        ИначеЕсли ОбъектКоллекции.СтавкаНДС.Процент = 18 Тогда
            Значение = "Ставка18";
        ИначеЕсли ОбъектКоллекции.СтавкаНДС.Процент = 0 Тогда
            Значение = "БезНДС";
        КонецЕсли;

        в обработчике ПередВыгрузкой у ПКС СтавкаНДС, и все заработало.

  23. Vitaliy Pidopryhora

    в решении задачи 1.6.2 использовал одну ссылку (УИД) с документа выпуск продукции для 2-вух документов в приемнике
    пробовал на разных тестовых данных… загружалось нормально
    по идее, таблицы разные, но допустимо ли такое на практике?
    или нужно создать дополнительный реквизит в базе приемнике для поиска?

    • Vitaliy Pidopryhora

      после просмотра решения, вопрос снят

    • Ольга Кузнецова

      Здравствуйте!
      На практике лучше, конечно, записывать идентификаторы объектов в регистр сведений, и синхронизировать по этому регистру, как это сделано в типовых конфигурациях

  24. serk@rarus.ru

    Здравствуйте,

    При решении задания 1.6.2 пытаюсь в одном ПВД заполнить ВыборкуДанных как таблицу значений

    Причем колонка “ТребованиеНакладная” это тоже таблица значений, которая состоит из Даты, Номера, и таблицы значений “Материалы”

    При переносе свойства “ТребованияНакладная” указано в явном виде правило.

    При обмене возникает ошибка:
    ” Не найдено правило конвертации объектов
    ТипОбъекта = Строка таблицы значений
    Объект = СтрокаТаблицыЗначений
    КодСообщения = 45″

    Что я не так делаю, или нужно делать два ПВД?

    • Ольга Кузнецова

      Здравствуйте!
      Помещайте в колонку ТребованиеНакладная не таблицы, а структуры с элементами Дата, Номер и Материалы. А вот Материалы это должна быть таблица значений

      • serk@rarus.ru

        Спасибо ошибка ушла. У меня не было выбрано правило конвертации в ПВД.

  25. Артём

    Здраствуйте, возникли проблемы с выполнением задания 6.1
    В общем создал я новое ПКО (для переноса групп) с пустым источником для справочника номенклатура. Убрал галочку “Искать объект приемника по вн. ид.”, установил авт. генерирование номера или кода.
    Установил поиск по наименованию и ЭтоГруппа. Для наименования указал “Получать из входящих данных”, для ЭтоГруппа в “ПередВыгрузкой” установил Значение = Истина;
    Ну и соответственно во всех ПКО для поля Родитель указываю это новое ПКО и в исходящие данные передаю наименование справочника.
    При переносе при этом группы номенклатуры не создаются.
    В чем может быть проблема? Может я не правильно задание, как его вообще надо выполнять?

    • Ольга Кузнецова

      Здравствуйте!
      Нет, все правильно, только в ПКС Родитель нужно написать
      Значение = 1;
      Если в ПКС переменная Значение остается не заполненной, то ПКО не выполняется

  26. Helen

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

    • Ольга Кузнецова

      Здравствуйте!
      Да, курс записывался на более старой версии КД, а в версиях 2.1.8.1 и 2.1.8.2 есть небольшая ошибка. Можете исправить: Общая форма “ПравилаОбмена”, в Процедуре СозданиеПравилВыгрузкиДанных() нужно “ИЛИ” заменить на “И”.

  27. uvers

    Здравствуйте.
    В примере решения ДЗ 6.1 при переносе 3-х справочников в 1,преподаватель использует служебный реквизит “Синхронизация”. Не пойму откуда он взялся?

    • Ольга Кузнецова

      Здравствуйте!
      Этот реквизит был добавлен в базу данных в процессе решения домашнего задания 1.5.1

  28. leotom

    Как долго рассматривают ответы по дом.заданиям ?

    • Юлия Толстых


      (текст комментария доступен только участникам Мастер-группы)

  29. toypaul

    Странно, но ДЗ 1.6.1 вроде не похоже на конвертацию “один в несколько”. Скорее наоборот – несколько в один. Это что – задание на сообразительность и проверку пройденного :) ?

  30. nesteruk

    Вопрос по уроку 1.7.7. Повторяю все за преподавателем, но результат не тот. На вход ПКО “ПоступлениеТоваровУслуг” приходит корректно заполненная таблица значений “ВыборкаДанных” (ПВД с произвольным алгоритмом). У данной таблицы имеется колонка “Ссылка” – она заполнена. Количество строк в ТЗ соответствует количеству переносимых документов в исходной базе. Синхронизация документов происходит по внутреннему идентификатору. Однако на этапе выгрузки данных из базы-источника в файле выгруженных данных содержится только один документ. Ситуация меняется только если в настройках ПКО установить флаг “Не запоминать выгруженные объекты” или в обработчике “ПередВыгрузкой” ПКО установить: КлючВыгружаемыхДанных = Источник.Ссылка. В видеоматериалах же выгрузка происходит без каких-либо проблем. Подскажите, что я делаю не так.

    • Ольга Кузнецова

      Здравствуйте!
      Возможно, Вы в каком-то ПКО, для которой выборка формируется произвольным способом, установили Объект-источник, а Евгений в видео-уроке не установил. Это могло бы дать описанный эффект. Если не найдете ошибку, прикрепите Ваши правила к комментарию в zip или rar архиве, я посмотрю

  31. RS

    Если мое решение задачи 1.6.1 не принято, прошу сообщить.

    • Ольга Кузнецова

      Здравствуйте!
      Отчет одобрен

  32. Станислав Бобков

    Добрый вечер. Прокомментируйте пожалуйста вопрос 3 теста. Мы создали ПКО для справочника, но не указали его ни в одном ПВД. Будет ли происходить выгрузка по этому правилу? Если он не указан в ПКС, как может выгружаться?

    • Ольга Кузнецова

      Здравствуйте! Потому что существует еще автоматический подбор правил в процессе выгрузки. Это тоже нужно всегда учитывать.

  33. kreizzyman

    Добрый вечер!!!
    В уроке 1.7.8 был рассмотрен пример того чтобы не затирался номер счета если он задан вручную используя обработку v8exchange. А как быть если настроен типовой односторонний обмен (УТ 10.3 в БП 2.0, Обе базы типовые)? В БП в ТЧ документа (например РеализацииТоваровИУслуг) есть реквизит “Субконто” которое ссылается на ПВХ, в УТ его нет, поэтому бухгалтер заполняет его самостоятельно после загрузки из УТ. Но проблема в том что при повторной загрузке это субконто затирается. В таблице регистрации изменений для узла БП после отправки квитанции таблица не очищается. Ни после первого обмена, ни после второго. Вообщем совсем не очищается. Хотелось бы посоветоваться. Куда еще можно глянуть?

    • Ольга Кузнецова

      Здравствуйте!
      В случае с субконто, Вы можете использовать схему, которая представлена в уроке. Вам нужно модифицировать правила обмена, дописать обработчик ПКО после загрузки.
      Насчет очистки таблиц регистрации, найдите в модуле обработки ОбменДаннымиXML метод УдалитьРегистрациюИзменений() в процедуре ПроизвестиЧтениеДанных(). Регистрации удаляются там. Можно посмотреть в отладчике, что происходит при загрузке.

  34. Nicfest

    Да в этих документах есть возможность использования характеристики. А разве существует типовой обмен между этими базами или я что-то не то понимаю под словосочетанием типовой обмен. Я так понимаю это тот который присутствует в базе типовой но в УПП я такового не видем да и в БП не встречал.
    СоответствиеОбъектовИнформационныхБаз – а о этом объекте где нибудь в курсе рассказывается?
    Т.е. как я понял из Ваших слов необходимо создать ПВД для выгрузки характеристик и там каким-то образом описать привязку к номенклатуре, а если например у Номенклатуры нет характеристики.
    Может существует возможность описать пример с такого рода переносом или видео урок и показать как используется СоответствиеОбъектовИнформационныхБаз или может где далее по курсу такое есть, прошел весь первый модуль, но похожего на свою задачу не нашел. Был бы очень признателен за помощь

    • Ольга Кузнецова

      Про типовые обмены рассказывается в 4-м модуле курса, и там же – про регистр СоответствиеОбъектовИнформационныхБаз.
      Если у Номенклатуры нет характеристики – у конкретного элемента может не быть характеристик вообще? Или в конкретном документе не указана характеристика?
      Схема решения этой задачи простая, а сложны тонкости, которые могут возникнуть. В первую очередь нужно решить, как данные должны выглядеть в приемнике. Например, какая номенклатура должна подставиться в документ, в котором не указана характеристика. Ведутся ли остатки по характеристикам в источнике? Может быть, нужно создать какую-то номенклатуру без характеристик. А может быть, придется писать механизм восстановления партионного учета. Все очень сильно зависит от задачи.

      • Nicfest

        В источнике номенклатура может разбиваться на характеристики, а может быть и без характеристики, но если в принципе если в конкретном документе указана номенклатура без характеристики, то она же и должна попасть в документ в приемнике а не подставляться какая то другая. Т.е. есть некоторый однотипный товар, который различается только каким либо признаком, например воздушный шар одного размера различающийся только цветом и цвет это его характеристика, а в конечной базе этот шар должен разбиваться на столько номенклатур, сколько у него цветов. И еще в принципе если у номенклатуры есть характеристика, то в документе он всегда представлен с характеристикой, а если он в документе представлен без характеристики, то и у самой номенклатуры нет характеристики. Вопрос все так же актуален – как возможно синхронизировать объекты
        И если можно очень бы хотелось пример по переносу одного объекта с характеристиками в несколько.

        • Ольга Кузнецова

          У меня совет все тот же, сделать ПВД для Характеристик. И ПКО Характеристика – Номенклатура. Каждая характеристика будет перенесена как одна номенклатура. Это не “Один в несколько”. Это “Один в один”. Синхронизацию настраивайте, как удобнее. Самый оптимальный вариант – по идентификатору через регистр. Для тех номенклатур, у которых нет характеристик, придется сделать отдельное ПВД, где их все собрать запросом. И ПКО Номенклатура – Номенклатура. Таким образом, это будет загрузка двух справочников в один. В курсе есть такие примеры. Если синхронизация будет настроена через регистр, то эта ситуация не вызовет проблем.

  35. Nicfest

    Добрый день! Проблемка такая, если с переносом Один в несколько все более-менее понятно, то не совсем понятно как сделать перенос из нескольких справочников в один, т.е пример с типовыми конфигурациями: УПП 1.3 и БП 2.0. В УПП есть справочник номенклатура и есть подчиненный ему справочник ХарактеристикаНоменклатуры ну и соответственно Номенклатура ведется в разрезе Характеристик. А вот в БП номенклатура в разрезе Характеристик не ведется. И вот соответственно вопрос как сделать перегрузку Двух справочников в один и самое главное по чем выполнять синхронизацию, ведь Наименование должно будет состоять из наименования характеристики и номенклатуры да и измениться оно может. Я так понял о обмене из нескольких в один говориться нигде не будет. Подскажите пожалуйста как настроить такого рода обмен.

    • Ольга Кузнецова

      Здравствуйте!
      В этом случае, скорее всего, нужно настроить ПКО “ХарактеристикиНоменклатуры – Номенклатура”. Там прописать в ПКС Наименование что-то вроде
      Значение = Источник.Владелец.Наименование + Источник.Наименование. Ну и для всех реквизитов, которые должны попасть из Номенклатуры в Номенклатуру, в ПКС писать Значение = Источник.Владелец.ИмяРеквизита.
      Здесь будет сложность, если есть такие документы и регистры, где Номенклатура указывается без Характеристики. Там надо подумать, какой элемент должен туда подставиться в Источнике. А если указаны и Характеристика, и Номенклатура, то ПКС настраивается как “Харктеристика – Номенклатура”, и там указываем наше ПКО. Возможно, будут другие сложности, пишите, подскажу

      • Nicfest

        Самый главный вопрос как настроить синхронизацию. С наименованием все в принципе понятно, а вот синхронизация.
        Ведь по уникальному идентификатору не привязать и по наименованию тоже, тем более что наименование очень не надежный реквизит, а номенклатуры может быть до нескольких тысяч.
        И вот еще что не понятно при конвертации происходит последовательный выбор элементов, т.е будет выбираться элемент справочника номенклатура, но в этом справочнике например 10 характеристик. Т.е по моему пониманию перенесется только одна характеристика которая будет первая, она сконвертируется по правилу “ХарактеристикиНоменклатуры – Номенклатура” а остальные характеристики получается остануться, номенклатуру как-то необходимо размножить до количества характеристик, если они будут присутствовать у номенклатуры. Т.е. не совсем понятно как из одного элемента справочника, создать несколько элементов для выгрузки.

        • Ольга Кузнецова

          А какой обмен используете? Универсальный, какой-то из типовых? Односторонний или двусторонний? Регулярный или однократный? Синхронизация зависит от этого.
          Нужно настраивать ПВД для Характеристик, а не для Номенклатуры. И ПКО там указывать “Характеристики – Номенклатура”. И во всех документах и регистрах, где встречается Номенклатура и Характеристики настраивать ПКС “Характеристика – Номенклатура”

          • Nicfest

            Необходим Односторонний-Регулярный обмен по перегрузке некоторых документов типа ВыпускПродукции и Реализации и т.д из УПП в БП соответственно перегружать Номенклатуру по этим документам тоже придется. Вот и не знаю к чему привязать синхронизацию.

            • Ольга Кузнецова

              Синхронизация определенно должна быть привязана к Характеристикам. Других вариантов я не вижу. Если это регулярный обмен, то самый лучший подход к Синхронизации – использование регистра сведений СоответствиеОбъектовИнформационныхБаз (в базе-приемнике). В него нужно записывать информацию о соответствии элемента Характеристик в базе-источнике и Номенклатуры в базе-приемнике, синхронизировать объекты по нему.
              Если Вы используете типовой обмен, то система будет использовать этот регистр самостоятельно.
              В Реализации и Выпуске указывается Характеристика?

  36. Alexander Fokin

    Весь урок был понятен, пока не посмотрел ответ1. Что за “ИмяПредопределенногоЭлемента”? Где раньше мы это рассматривали? Вроде не рассматривали и вообще использование такой переменной является недокументированной возможностью?

    • Ольга Кузнецова

      Здравствуйте!
      Да, в описании этого параметра, кажется, нет. Но вообще говоря, работая с конвертацией, мы очень часто пользуемся возможностями, которых нет в описании. Просто описание неполное, а код обработки вполне понятный, что позволяет аккуратно использовать весь контекст событий

Комментарии закрыты