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

Простые переносы данных

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

  • Глава 3. Конвертация иерархических и подчиненных справочников

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

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

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

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь.

Если не активировали токен — посмотрите видео-инструкцию (видео N5)

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

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

  1. olya_rinchinova@mail.ru

    Здравствуйте, уважаемые учителя! Подскажите как правильно сделать: при переносе реквизита типа Справочник из Источника нужно в Приемнике подставлять определенный элемент этого Справочника

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

      Добрый день

      Всегда один и тот же элемент нужно подставлять? Тогда лучше в ПКО в обработчике «После загрузки» прописать что-то вроде

      Объект.ИмяРеквизита = СсылкаНаНужныйЭлемент;

      • olya_rinchinova@mail.ru

        Да, всегда один и тот же. Объект.ИмяРеквизита = СсылкаНаНужныйЭлемент; А как мне выполнить поиск в базе приемнике?

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

          Событие ПКО После загрузки выполняется в базе-приемнике. Там можно использовать все методы базы-приемника, доступны все объекты, общие модули и т.д.

          • olya_rinchinova@mail.ru

            Извините за глуп вопросы, в процедуре ПКО ПослеЗагрузки пытаюсь записать реквизит ТЧ
            Объект.Скидки[0].СкидкаНаценка = Справочники.СкидкаНаценка.НайтиПоКоду(«000001460»); В результате выходит ошибка Поле объекта не обнаружено (СкидкаНаценка). Имя реквизитов прописаны правильно. Что я делаю не так?

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

              Здесь все-таки либо имя реквизита неправильно написано, либо имя справочника. Попробуйте скопировать из конфигуратора — имя реквизита отдельно, имя справочника отдельно, может где-то латинская буква затесалась

  2. Strafer

    Когда зашел на страницу увидел следующий опрос, и мой ответ (1) был не верным, правильный это 2 и 3. В видео модуль 1 глава 4 урок 2 отрезок времени 8-15 четко сказано что необходимо обязательно указывать. Или вопрос с подвохом или моё понимание сказанного в видео было неверным?

    Нужно настроить ПКО для подчиненного справочника. Обязательно ли нужно устанавливать флаг поиска у ПКС Владелец?
    1. Да, обязательно
    2. Нет, если синхронизация выполняется по внутреннему идентификатору объекта-источника
    3. Нет, даже если синхронизация по идентификатору не применяется, может стоять задача искать элемент независимо от владельца
    • AlexeyDubrovin

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

  3. idoronin

    Обмен УТП для Украины (обычное приложение) — Розница 2.0 (управляемое)
    План обмена в приемнике добавлял (стандартного не было). Добавлял по мануалу https://help1c.by/nastroyka-novogo-obmena-v-konfiguratsii-ut-11/

    Справочник номенклатуры по иерархии одинаковые в источнике и приемнике, с правилами тоже вроде все ок
    При переносе в приемнике пропадает вся вложенность групп — все группы верхним уровнем переносятся,
    номенклатура по группам не распредляется, за исключением двух позиций номенклатуры (каким-то чудом получили родителя группу)
    Уже и для родителя создавал отдельное ПКО — ничего не выходит

    Что не так? Глаза болят уже, всю ночь пытался разобраться
    Пните меня в нужное русло

    http://i.piccy.info/i9/f000aaaf22499469612b7df197dd4465/1548673069/112277/1297933/khelp2.png
    http://i.piccy.info/i9/ec7f2212ec1369993125dd4a1febe1d7/1548673095/29384/1297933/khelp3.png
    результат выгрузки номенклатуры (часть выгрузки)
    http://i.piccy.info/i9/65df513b816222e9ddfca598be4205c1/1548677033/42749/1297933/khelp7.png

    • AlexeyDubrovin

      Добрый день
      А Вы не торопитесь ? Работа с планами обмена рассматривается в 3 модуле.
      Правила обмена проверяли через УниверсальныйОбменДаннымиXML? Работают корректно? Можно на них глянуть ?

        • AlexeyDubrovin

          Скачать правила с этого ресурса без регистрации на нем не дает. Если через универсальныйОбменДаннымиXML все переносится красиво, то проблема явно где-то в настройках работы с онлайн-обменом. Попробуйте для начала зарегистрировать все элементы справочника в плане обмена с помощью обработки РеагистрацияИзмененийДляПланаОбмена и выполните обмен.

  4. Буклин Алексей

    Добрый день. Проблема с заданием 1.2.2
    Выходит ошибка при выгрузке
    Ошибка получения свойства объекта из входящих данных
    ПКО = Сотрудники (Справочник: Сотрудники предприятия)
    ПКС = 8 (—> ДолжностьСотрудника)
    Объект = Петров Иван Сидорович (Сотрудники предприятия)
    СвойствоПриемника = ДолжностьСотрудника (СправочникСсылка.ДолжностиСотрудников)
    ОписаниеОшибки = Получение элемента по индексу для значения не определено
    ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8282)
    КодСообщения = 68

    Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1693)}: Ошибка получения свойства объекта из входящих данных
    ПКО = Сотрудники (Справочник: Сотрудники предприятия)
    ПКС = 8 (—> ДолжностьСотрудника)
    Объект = Петров Иван Сидорович (Сотрудники предприятия)
    СвойствоПриемника = ДолжностьСотрудника (СправочникСсылка.ДолжностиСотрудников)
    ОписаниеОшибки = Получение элемента по индексу для значения не определено
    ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8282)
    КодСообщения = 68

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

      Добрый день

      Думаю, ошибка из-за того, что включено ПВД Сотрудники. При выгрузке сотрудника из документа, должность берется из ВходящихДанных, которые ранее определяются в ПКО для документа.

      А при выгрузке Сотрудника из ПВД, ВходящиеДанные пустые, их не определили нигде, из-за этого ошибка

      В таких случаях лучше создавать разные ПКО для Сотрудников — одно для выгрузки из документа (с должностью), другое для использования в ПВД и, например, для групп (без должности)

  5. tamidi

    Добрый день!
    Для правил конвертации из ЗУП 3.1 в УПП задано следующее ПКС.
    Код в обработчике перед выгрузкой реквизита Код задано: Значение = «000000001»;
    что соответствует коду элемента справочника в УПП.
    Каждый раз при загрузке создается новая организация, аналогичная уже имеющейся.
    Пробовала делать поиск по ИНН и отключать код. Все равно создается новый элемент справочника Организации.
    Подскажите, что я делаю неверно, чтобы сопоставить выгружаемый элемент с уже имеющимся.

    %D0%921.png

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

      Добрый день

      В ПКО указан поиск по уникальному идентификатору без продолжения поиска по полям в случае, если по идентификатору не найден. Поэтому поиск по коду не отрабатывает

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

    Добрый день.

    Есть следующие вопросы:
    1. В случае, если для конвертации ссылочных свойств не указать в явном виде правило, а есть несколько ПКО, которые подходят под конвертацию свойства, как система определит, какое правило использовать? Есть ли явные признаки, типа приоритета, либо возьмет первое попавшееся?
    2. Вопрос по переносу сотрудников: мы в ПКО для сотрудника включили, что значение должности заполняется из данных заполнения. В коде обработали перенос реквизита ЭтоГруппа. При выгрузке документов это ПКО работает корректно. А как теперь выгружать по этому правилу просто справочник сотрудники? Появится ошибка незаполненного свойства во входящих параметрах для должности (пример на картинке). Как я понимаю, есть два варианта:
    1) При выгрузке свойства должность проверить наличие данной структуры во входящих параметрах. Если ее нет — выгрузку свойства отменить (Отказ = Истина).
    2) Сделать отдельное два ПКО «Сотрудники» и «СотрудникиВыгрузкаДолжности». Для выгрузки родителя используется первый ПКО. Для выгрузки сотрудника из документа Прием на работу — второй ПКО. Во втором ПКО также выгружается должность через входящие данные.
    Какой из этих вариантов более методологически правильный? Второй вроде требует меньше кода, но ПКО будут задвоены (хотя будут использоваться каждое по своему назначению).

    ScreenShot.png

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

      Добрый день

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

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

  7. geimer90

    Здравствуйте!
    Прохожу тест для самопроверки на данной странице. После выполнения не отображаются мои и правильные ответы.

    %D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%8B%20%D0%BD%D0%B0%20%D1%82%D0%B5%D1%81%D1%82%D1%8B.jpg

    • Кузьмин Сергей

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

  8. Alexman

    Мы создали еще одно ПКО для «Единиц измерения». А была ли необходимость его создавать, если оно идентично старому? Можно таким же образом выбрать старое в качестве принудительного правила?

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

      Добрый день

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

  9. ikarekb

    Добрый день. Окончательно запутался в уроке 3 главы 3. Там есть момент. ПКС «ЕдиницаИзмерения» стоит перед ПКС «Товар». При тесте правил, преподаватель показывает, что у товара «Диван» не заполнен реквизит «Единица измерения». Не понимаю причинно следственных связей. Я повторил у себя эту ситуацию. Смотрю получившийся файл обмена.
    Вижу что у узла с диваном в узле «ОсновнаяЕдиницаИзмерения» стоит лишь узел «ссылка» с атрибутом Нпп=»4″. Внутри узла ничего нет. А должны быть узлы с UID и полями поиска (владелец и код). Как так вышло? Верно ли я понимаю, что при загрузке, обработке не хватает вот этого Нпп=»4″ для того чтобы понять о чем идет речь, ей нужен узел «ссылка» целиком?

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

      Добрый день

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

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

  10. mongiig

    Добрый день, возникает такая ошибка при открытии в базе «Исходная» обработки «Универсальный обмен данными». В архиве видео с экрана и сами обработки из поставок с КД, пробовал разные версии.

    • mongiig

      Проблемы нет, если запускаться с платформы 8.2.

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

      Добрый день!

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

      Если Не ПравоДоступа("Удаление", ОбъектМД) Тогда

      изменить на

      Если Не ПравоДоступа("Изменение", ОбъектМД) Тогда
  11. Дмитрий

    Здравствуйте.
    Подскажите куда смотреть, уже весь мозг сломал и думаю лезть отладчиком в процедуры загрузки в БП3.0. Используется обмен из УТ10.3 в БП3.0 по своим самописным правилам (которые когда-то были типовые, но УТ не обновлялась много лет, поэтому все правила подработаны).

    Проблема — не передается реквизит ВидНоменклатуры в справочнике Номенклатура. После загрузки пишет на вкладке Незаполненные реквизиты ошибку «Поле Вид номенклатуры не заполнено». Что уже не пробовал:
    — просто передавал в ПСК из пустого источника в приемник ВидНоменклатуры значение программно в обработчике Перед выгрузкой:

    Если (НЕ Источник.ЭтоГруппа) И (Источник.ВидНоменклатуры.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар) Тогда
        Значение = "Товары"; //это наименование, которое точно есть в БРП3, кода в БП у этого справочника нет
    КонецЕсли;

    В файл выгрузки все попадает, но в БП после загрузка ошибка не пропадает.

    — Делал в обработчике После загрузки у ПКО Номенклатура жесткое заполнение реквизита у созданного Объекта конкретным значением.

    Только еще не делал передачу справочника ВидыНоменклатуры, но мне его и не надо передавать, так как в БП свои настроены.

    Может это проблема приема данных в типовой конфигурации? Подскажите, куда рыть?

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

      Добрый день!

      А как Вы делали после загрузки заполнение конкретным значением? Откуда это значение получали?

      Если установить значение у объекта в ПКО После загрузки, то изменить это значение могут либо обработчики Конвертации После загрузки объекта или После загрузки данных. Либо еще в самой БП может отработать какая-нибудь подписка на событие Перед записью, например, или обработчик события справочника Номенклатура.

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

      • Дмитрий

        Все, решил вопрос, спасибо за подсказки. Просто не правильно настраивал ПКО для ссылочного типа данных…

        • idoronin

          Помогите, пожалуйста, мне. Та же проблема. Уже голову себе сломал

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

            Добрый день

            Тоже пытались присвоить объекту свойство в приемнике, а оно не присваивается? Опишите подробнее, какие базы, что делали?

  12. Divan

    При загрузке данных (делаю аналогично 1 уроку из 3 главы) вылезает сообщение: Тип не определен (ПеречислениеСсылка.ВидыПодразделений). Правила конвертации значений для перечисления есть.

  13. b0nd

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

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

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

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

      • b0nd

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

        ИсходящиеДанные = Новый Структура;
        ИсходящиеДанные.Вставить("Владелец",Источник.Контрагент);

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

        Upd. Кажется дошло. Склад отобразится в сообщении в том случае, если напишем
        Сообщить(ВходящиеДанные), так как склад содержится там. В источнике для ПКС Комментарий в ПКО ТИпыЦенНоменклатуры содержится ТипЦеныНоменклатуры…

        2016-12-27_14-32-57%20%282%29%20%282%29%20%283%29.png

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

          Здравствуйте!
          Да, если было бы написано

          Сообщить(ВходящиеДанные.Комментарий)

          , то было бы выведено наименование склада, которое было записано в первом ПКО в ИсходящиеДанные.

  14. b0nd

    Здравствуйте.
    Занятие 1.3.2
    1. В ПКО Контрагенты есть ПКС Родитель, правило конвертации для которого — Контрагенты. Рекурсивный вызов ПКО?
    2. Когда мы находимся в ПКС, допустим, Контактное лицо (которое находится в ПКО Контрагенты), то используя ПередВыгрузкой обработчик ИсходящиеДанные и указывая в них Источник (как ссылку на текущего контрагента) мы имеем в виду не источник, который указан в ПКС (КонтактноеЛицо), но источник Контрагенты, то есть ПКО, в котором находимся? Довольно сложные связи…
    3. Каков будет результат выгрузки/загрузки между справочниками подчиненными/независимыми, если ПКС Владелец вообще отключить, игнорировать при выгрузке? Насколько я понимаю, элементы справочников перенесутся, но в значениях подчиненного справочника в базе приемника просто не появятся? То есть у нас будут заполнены справочники Контрагенты и Контактные лица отдельно друг от друга, но при переходе из элемента справочника-владельца в подчиненный справочник я ничего не увижу?

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

      Здравствуйте!
      1. Да, объекты из свойств других объектов по ссылкам всегда выгружаются рекурсивно. Если объект и его свойство одного тип, то может использоваться одно ПКО.

      2. В процессе выполнения ПКО для объекта ссылка на этот объект находится в параметре Источник. А ПКС тоже выполняются в рамках ПКО, поэтому Источник там тот же.

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

  15. Spodarenko

    Перечитал все вопросы и ответы, но выходит ошибка
    ДЗ 1.2.2
    Начало выгрузки: 01.12.2016 11:29:04

    Ошибка получения свойства объекта из входящих данных
    ПКО = Сотрудники (Справочник: Сотрудники предприятия)
    ПКС = 8 (—> ДолжностьСотрудника)
    Объект = Работающие (Сотрудники предприятия)
    СвойствоПриемника = ДолжностьСотрудника (СправочникСсылка.ДолжностиСотрудников)
    ОписаниеОшибки = Получение элемента по индексу для значения не определено
    ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8282)
    КодСообщения = 68

    Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1693)}: Ошибка получения свойства объекта из входящих данных
    ПКО = Сотрудники (Справочник: Сотрудники предприятия)
    ПКС = 8 (—> ДолжностьСотрудника)
    Объект = Работающие (Сотрудники предприятия)
    СвойствоПриемника = ДолжностьСотрудника (СправочникСсылка.ДолжностиСотрудников)
    ОписаниеОшибки = Получение элемента по индексу для значения не определено
    ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8282)
    КодСообщения = 68

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

      Здравствуйте!
      Эта ошибка возникает из-за того, что по ссылке из элемента справочника Сотрудники выгружается родитель — группа «Работающие». При выгрузке группы не передается должность, и возникает ошибка. Есть два варианта решения: либо для групп создать отдельное правило без должности (для непосредственной выгрузки справочника Сотрудники из ПВД тоже можно будет его использовать), либо в ПКС ДолжностьСотрудника прописать проверку на то, что ВходящиеДанные заполнены, а иначе параметр Отказ установить в значение Истина

  16. ikarekb

    Не уложилось по какому принципу работает кеширование. Не понятно, в какой момент и почему что-то не выгружается если для ПКО не отключено кэширование.

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

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

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

      • ikarekb

        Ольга, я попытался осмыслить ваш ответ на примере ДЗ123. И как то наверное я не так вас понял. Ход рассуждения: Выгружается строка регистра Цены по ПКО «Цены» — доходим до ПКС «Свойство номенклатуры», вызывается ПКО «Свойство номенклатуры» — доходим до ПКС «Владелец» и попадаем на ПКО «Номенклатура», там доходим до ПКС «Свойство номенклатуры» вызывается ПКО «Свойство Номенклатуры» и ТУТ! система находит в своем кэше объект уже раннее выгруженный по этому свойству и не выгружает его. Хорошо!
        Не понятно дальше. Я меняю порядок ПКС в ПКО цены. Теперь цепочка такая:
        ПКО «Цены» — ПКС «Товары» — ПКО «Номенклатура» — ПКС «Основное Свойство» — ПКО «Свойства Номенклатуры» — ПКС «Владелец» — ПКО «Номенклатура» — по логике сработавшей выше, здесь, система должна была найти ранее выгруженный объект Номенклатуры и не грузить у его. В итоге у свойства номенклатуры должен быть пустой владелец. Но нет, на практике он не пустой. Значит я ничего не понял :). Помогите пожалуйста понять. Вот на этом примере.

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

          Примерно так все и происходит.
          Действительно, ситуация со Свойствами и Номенклатурой в данном случае симметричная, за исключением одного — флажка поиска.

          В ПКО Свойства номенклатуры установлен флажок поиска у ПКС Владелец, а в ПКО Номенклатура у ПКС Свойства номенклатуры — не установлен.

          Если поставить флажки поиска у ПКС Владелец для ПКО Свойства номенклатуры и у ПКС Свойство у ПКО Номенклатура, то не зависимо от порядка ПКС в ПКО для документа, загрузка будет идти не корректно. И если эти флажки снять, то все будет загружаться нормально.

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

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

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

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

          Вот здесь на картинке желтой рамкой обведен узел ссылки на Свойство номенклатуры, а зеленой — узел ссылки на Номенклатуру

          %D0%A6%D0%B8%D0%BA%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8_%D0%A3%D0%B7%D0%BB%D1%8B%D0%A1%D1%81%D1%8B%D0%BB%D0%BE%D0%BA.jpg

          • ikarekb

            Ооо! Спасибо. Все стало понятно и причинно следственные и как диагностировать. Спасибо!

  17. mikhail.tsybikov@gmail.com

    Добрый день! Задаю параметр в обработчике «Перед выгрузкой»
    Параметры = Новый Структура;
    Параметры.Вставить(«УИД», СокрЛП(Источник.УникальныйИдентификатор()))
    Далее в обработчике «Поля поиска» пишу код. Выдает ошибку что ПараметрыОбъекта не является значением объектного типа. Что я делаю не так?
    Если НомерВариантаПоиска = 1 Тогда
    Если Не СвойстваПоиска.Получить(«ЭтоГруппа») Тогда
    НовыйGUID = Новый УникальныйИдентификатор(ПараметрыОбъекта.УИД);
    СсылкаГУИД=Справочники.Сотрудники.ПолучитьСсылку(НовыйGUID);
    Если СсылкаГУИД.ЭтоНовый() Тогда

    СтрокаИменСвойствПоиска = «ИНН_Сотрудника»;

    Иначе

    СсылкаНаОбъект = СсылкаГУИД;

    КонецЕсли;
    Иначе

    НовыйGUID = Новый УникальныйИдентификатор(ПараметрыОбъекта.УИД);
    СсылкаГУИД=Справочники.Сотрудники.ПолучитьСсылку(НовыйGUID);
    СсылкаНаОбъект = СсылкаГУИД;

    КонецЕсли;
    КонецЕсли;

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

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

      Глобальная структура Параметры и соответствие ПараметрыОбъекта — это разные сущности. Чтобы значение попало в ПараметрыОбъекта, нужно в ПКО создать ПКС с видом «Передавать данные в параметр», и указать в этом ПКС имя параметра. Если это ПКС отметить флагом поиска, то значение этого параметра можно получить в обработчике ПоляПоиска.

      То есть в Вашем случае нужно создать ПКС с видом «Передавать данные в параметр», указать имя параметра — «УИД», отметить ПКС флагом поиска, а в обработчике Перед выгрузкой написать

      Значение = Строка(Источник.УникальныйИдентификатор());

      Тогда в обработчике ПоляПоиска эта строка будет доступна, как ПараметрыОбъекта[«УИД»]

  18. SegaZX

    Ольга добрый день.
    В дополнении к заданию 1.2.2 где разбирается ошибка переноса, такой вопрос:
    Не понятно почему мы проверяем именно ВходящиеДанные в ПКС «ДолжностиСотрудника»? Ведь входящие данные всегда есть, мы из документа передали отдельно сотрудника и отдельно программно должность, они во входящих данных полюбому ведь есть? Я логично понимаю что ошибка вот почему: Мы передали в ПКО «Сотрудники» данные по должности программно, а дальше если, в текущий момент обрабатывается группа, то система ей не может присвоить значение должности, потому что у группы такого реквизита нет. и логичнее было бы написать такой код:
    Если ВходящиеДанные.ЭтоГруппа Тогда Отказ = Истина;
    Но в видео говорится о том, что во ВходящихДанных должности нет.
    «Система пытается перенести группу, пытается подтянуть должность этой группы и ничего не находит, поскольку структура этой должности не определена»..
    Мы же должность отдельно передали, а не берем ее из переносимой группы? Не могу понять (((

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

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

      • SegaZX

        Еще раз.
        Вы говорите что «Далее в ПКО Сотрудники выгружается свойство Родитель». и для него опять подбирается ПКО «Сотрудники». получается что это ПКО срабатывает дважды?

        Сотрудник выгружается из документа ПриемНаРаботу в документ «ПриемНаРаботу», т.к. в ПКО «ПриемСотрудника» настроено соответствие между ПКС «Сотрудник» и «Сотрудник». А именно, дойдя до ПКС «Сотрудник», система переходит к ПКО «Сотрудники» и дальше заполняет сотрудника, каким образом это происходит?
        как я понимаю, ссылка на сотрудника уже есть, и система в данном ПКО «Сотрудники» уже ее видит и заполняет все соотетствующие поля (ПКС). А каким то образом выгружается свойство Родитель?

        Ведь когда мы перешли к ПКО «Сотрудники», туда уже передалась ссылка на весь объект? а ВходящиеДанные — это какие то дополнительные данные, т.е. ссылку система получает не из Входящих данных, а она уже просто изначально передалась? :-(

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

          ПКО на этапе выгрузки нужно для того, чтобы выгружаемый объект (например, ссылку на элемент справочника) превратить в xml-узел и записать в файл данных. Оно будет отрабатывать столько раз, сколько будет вызвано, чтобы выгрузить объект.
          В ПВД ПриемСотрудника формируется выборка ссылок на документы. В процессе обхода этой выборки очередная ссылка передается в ПКО ПриемСотрудника. Чтобы выгрузить документ, нужно выгрузить и его свойства тоже, для этого обходятся ПКС, настроенные в этом ПКО. Если в ПКС свойство ссылочного типа (например, справочникСсылка.Сотрудники), значит, нужно выгрузить и самого Сотрудника тоже, а то вдруг его в конечной базе нет, на что тогда будет ссылаться документ? Для этого ссылка на сотрудника, полученная из свойства документа, передается в ПКО, указанное в этом ПКС (или в автоматически подобранное). Вот в этот момент из ПКС в ПКО можно передать не только ссылку, но и ИсходящиеДанные, если нужно передать какие-то дополнительные данные. Документ еще не выгрузился, он «висит» в списке выгружаемых объектов. Теперь выгружается элемент справочника. Для этого нужно выгрузить опять-таки его свойства, и происходит обход ПКС в ПКО для сотрудников. Там опять встречается свойство ссылочного типа — Родитель. И его тоже нужно выгрузить целиком. Поэтому ссылка на группу передается в ПКО, указанное в ПКС Родитель (или в автоматически подобранное). А сотрудник тоже пока «висит» в списке выгружаемых объектов. Группа справочника не ссылается ни на что, поэтому она выгружается сразу, формируется xml-узел, записывается в файл данных, ПКО заканчивает свою работу. Программа возвращается к выгрузке Сотрудника. В узле этого объекта появился вложенный узел — свойство Родитель со ссылкой на уже выгруженную группу. Обход ПКС для Сотрудника продолжается. В результате в файле данных будут записаны сначала узел с группой справочника Сотрудники, потом узел с Сотрудником, а потом уже, ниже — узел с документом.

  19. Виталий Тарасов

    Здравствуйте.
    1. В видео «Изменение вида иерархии» переносятся элементы из иерархии элементов в иерархию групп и элементов. Несмотря на то что правила были корректны, в конечной базе элементы в группы не превратились (для получения верного результата пришлось очистить справочник). Почему это произошло? Ведь поиск по УИД должен был найти эти элементы, а т.к. у ПКС реквизит «не замещать значение свойства …» отключен, то реквизит ЭтоГруппа должен был заполниться передаваемым значением Истина.

    2. В ДЗ 1.2.2 создаем 2 ПКО Сотрудники. Требуется ли их создавать идентичными по ПКС, или достаточно во втором использовать только ПКС Должности, т.к. поиск все-равно происходит по УИД.

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

      Здравствуйте!
      1. Свойство СправочникОбъект.[ИмяСправочника].ЭтоГруппа недоступно для записи. Созданный элемент справочника нельзя превратить в группу справочника никак. Можно только создать новую группу.
      2. Не обязательно делать их идентичными по ПКС. Можно в одном из правил оставить только ПКС ДолжностьСотрудника. Но если сотрудник будет перенесен только по этому правилу, у такого элемента будет заполнена только должность. То есть нужно будет выполнять обмен так, чтобы исключить такую ситуацию. Каждый сотрудник, который будет встречен по ссылке из документа, должен быть обязательно выгружен целиком по полному правилу.

  20. Andry

    Разбирался подробнее с переносом подчиненных справичников и попробовал такой перенос. Есть Справочник и есть Подчиненный ему справочник надо перенести в один справочник по таким условиям: если нет подчиненных элементов, то все понятно — создаем элемент Справочника, но если есть подчиненные элементы перенести надо создав новый элемент с наименованием содержащим наименование справочника + наименование подчиненного, и столько новых элементов будет сколько есть подчиненных элементов у справочника в исходной. Подскажите в какую сторону двигаться.

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

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

  21. SegaZX

    Добрый день. Я просмотрел видео урок 1.3.3 «Циклические ссылки» и мне нужно до конца разобрать такие моменты:
    1. нужно всегда писать правила от меньшего к большему, т.е. сначала единица измерения, затем Номенклатура, а затем документ. А если на практике встретятся ситуации, объекты каким либо образом но все взаимосвязаны? например справочник Номенклатура, у него есть реквизит «ЕдиницаИзмерения», а у единицыИзмерения есть реквизит «справочник Номенклатура», ну или еще какой либо, но который ссылается на номенклатуру. это я для примера. То в этом случае какое ПКО нужно создавать первым?
    2. На что влияет порядок следования ПКС в ПКГС? т.е. если у нас сначала выгружаются товары, а затем ЕдиницаИзмерения, и если в документе 10 строк, то сначала выгрузятся 10 товаров и только потом будут выгружаться единицы измерения из ТЧ? или же За первым товаром будет выгружаться единица измерения и только потом второй товар?
    3.Правильно ли я понял, что когда выгружается какое либо ПКО (например ЕдиницаИзмерения) в явном виде, т.е. например у документа ПоступлениеТоваров настроено соответствующее ПКС и оно сработает в явном виде (так говорится в видео). А если из документа срабатывает другое ПКО (например Номенклатура) и уже в нем по ссылке срабатывает ПКО «Единица измерения», то это уже не в явном виде, т.е. как бы если вызываем ПКО из вложенного ПКО, то это уже будет не в явном виде и, если до этого уже был выгружен такой объект, то тут он второй раз не выгрузится? Поэтому когда мы Номенклатуру поставили выше, а идиницуИзмерения ниже, то все сработало.
    4. Если создать ПВД для ЕдиницыИзмерения, то тогда по полю Владелец выгрузится вся номенклатура. А если мы не создаем ПВД для единицы Измерения, а создадим например ПВД для Номенклатуры, то в этом случае вся номенклатура так же выгрузится и выгрузятся все единицы измерения, которые указаны в качестве ОсновнойЕдиницыИзмерения? Как я понял, если ПВД для объекта создали, то в этом случае срабатыват выгрузка по всем элементам этого объекта, если же этот объект выгружается из какого либо другого ПКО по ссылке, и для него мы не создаем ПВД, то он выгрузится как бы по фильтру, т.е. не все элементы, а только те, что встретились?
    5. Почему нельзя на практике просто выключать галочку «Не запоминать выгруженные объекты»? только потому что будет объем данных выгружен больше, в чем неоптимальность?
    Спасибо.

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

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

  22. selena0363

    Доброе утро! Использую конфигурацию КД 2.1.8.2. Форма ПКО другая, нежели в курсе. Не могу найти, где находится аналог закладки «Параметры, получаемые из входящих данных». Подскажите, пжл.

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

      Здравствуйте!
      Эта закладка появляется, только если в каком-нибудь из ПКС установлен флажок получения из входящих данных

      • Florio

        Здравствуйте! Смоделировал ситуацию, у ПКС поставил флаг «получить из входящих данных», а закладки «Параметры, получаемые из входящих данных», в КД 2.1.8.2 так и не вижу… Что-то не так делаю, или в этом релизе все-таки данную возможность убрали?

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

          Здравствуйте!
          Скорее всего, не там смотрите. Закладка эта появляется в версии 2.1.8.2. Для этого нужно установить у любого ПКС флаг получения из входящих данных и потом открыть форму ПКО (дважды щелкнуть на ПКО в списке). Откроется форма, в которой можно писать обработчики ПКО. Там после закладки «online-обмен» будет закладка «Параметры, получаемые из входящих данных».

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

      Потому что теперь в ПКО ПриемСотрудника в ПКС Сотрудник тоже это правило без должности используется, автоматически подбирается по типам данных. Если правил настроено два для Сотрудников, то во всех ПКС их нужно явно указывать. Укажите в ПКС Сотрудник правило Сотрудники

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

      Здравствуйте!
      Эта ошибка возникает потому, что из ПКС Родитель ПКО Сотрудники выгружается группа — Уволенные. Из ПКС Родитель Исходящие данные не передаются, а ПКО используется то же самое, Сотрудники, оно подбирается по типам данных. Поэтому возникает ошибка.
      Лучше всего настроить еще одно ПКО, без ПКС ДолжностьСотрудника. Его можно использовать для ПКС Родитель, а также в ПВД Сотрудники, поскольку из ПВД тоже ИсходящиеДанные не передаются.
      А в остальном правила настроены корректно

  23. evsob

    Это правила обмена по предыдущему посту

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

      Файл не прикрепился.
      Проверьте, пожалуйста, файл какого формата Вы пытаетесь опубликовать?
      Вы мoжете добавить к комментарию:
      — изображение (JPG, PNG, GIF)
      — архивы (ZIP,RAR)
      — документы и текст (TXT, DOC, DOCX, XLS, XLSX, PPT, PPTX или PDF)

  24. lucy2211

    Здравствуйте!
    Вопрос по тесту, вопрос 2 : почему все-таки приходит источник ТипЦен, а не склад. Дома на своей базе перед ответом смоделировала такую ситуацию : свправочник номенклатура, там есть единица измерения, где в ПКС наименованиеПолное ед.измерения поставила Сообщить Источник и ПолучитьИзВходящихДанных. В номенклатуре для ед.измерения сформировала структуру ИсходящиеДанные.Вставить(«НаименованиеПолное»,»…» + Источник.Наименование).
    При обмене в ед.Измерения пришло наименование номенклатуры. Что не так?

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

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

  25. SegaZX

    Здравствуйте. Я просмотрел урок 1.3.2 гды была реализация из независимого справочника в подчиненныйненный. Не совсем понятно несколько моментов:
    1. Что значит флажок «Поиск». Я так понял, если флажок «Искать объект приемника по внутреннему идентификатору» установлен, то поиск осуществляется именно по идентификатору, и тогда флажки поиска можно вообще отключать, т.к. система их игнорирует?
    2. Если все таки поиск происходит по коду и по владельцу, то система при синхронизации будет искать в приемнике именно элементы по этим двум свойствам вместе? я просто для примера пробовал отключить поиск по владельцу, и при первой выгрузке так же выгрузились владельцы. т.е. не понятно в каком случае ставить флажок «поиск», а в каком случае нет, ведь информация в любом случае по владельцу приедет в базу приемник, если мы ее не отключаем.
    3. Флажок «Не запоминать выгруженные объекты» я так понял просто выгружает не один элемент справочника, а столько раз, сколько этот элемент по ссылке будет встречаться, но этот флажок не работает когда установлен флажок «Искать объект приемника по внутреннему идентификатору»? часто ли он на практике используется?
    4. Если изначально мы в первый раз выгрузили элементы по уникальному идентификатору, а затем перенастроили правила, выключив флажок «Искать объект приемника по внутреннему идентификатору» и включив поиск например по коду, или же наоборот, то на реальной практике не произойдет наложения в приемнике? или так делать нельзя?
    Заранее спасибо за ответы ))

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

      Здравствуйте!
      1. Да, если поиск только по идентификатору, флажки поиска ни на что не влияют. Исключение — флажок у ПКС ЭтоГруппа, он обязательно должен стоять, чтобы группы загрузились нормально
      2. Да, поиск происходит по набору свойств, ПКС для которых отмечены флагом поиска. Свойства эти выгружаются в файл данных, даже если флаг не установлен, но если Вы отключили поиск по Владельцу, то если, например, Вы выгрузили из Источника два элемента с одинаковым кодом и с разными Владельцами, то в конечной базе они будут загружены как один элемент. Владелец у этого элемента будет такой, какой был у последнего из этих объектов в файле данных.
      3. Флаг «Не запоминать выгруженные» может работать, когда установлен флаг поиска по уникальному идентификатору. Да, он позволяет выгружать объекты целиком каждый раз, когда они встретились по ссылкам, используется часто.
      4. Если нужно, то можно изменить способ поиска. Если поиск по идентификатору был выключен, а его включили (а продолжить поиск по полям — нет), то объекты задвоятся, так как идентификатор у них был создан другой. Если наоборот — был поиск по идентификатору, а его выключили, и включили поиск по полям, то не задвоятся, будут найдены корректно, если, конечно, значения полей поиска в этих объектах где-нибудь не изменились с момента прошлого обмена.

  26. ilkup

    Вопрос по задаче 1.2.1. В поставщиках в конечной базе заведен контрагент 1. При выгрузке данных из Исходной базы я поставил удаление данных по поставщикам. Контрагент 1 в конечной базе остался. Я так понимаю, он остался потому, что его не было в исходной базе. Как быть в таком случае, если надо очистить все элементы справочника конечной базы?

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

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

  27. Pivas

    Здравствуйте! У меня вопрос по заданию 1.2.2 при попытке выгрузки документов получаю следующую ошибку: «Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(10443)}: Значение не является значением объектного типа (ИмяТипа)» в ПКГС при выгрузке реквизита должности, пишу следующий программный код:

    Значение  = Новый Структура;
    Значение.Вставить("Наименование", ОбъектКоллекции.Должность.Наименование);

    Затем создаю новое ПКО Должности сотрудников и там получаю значения из входящих данных в наименование этого справочника на стороне приемника, следующим кодом:

    Значение = ВходящиеДанные.Наименование;

    Соответственно указываю ПВД и при выгрузке возникает данная ошибка… Прикладываю сами правила, сможете помочь разобраться что я делаю не так.

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

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

      • Pivas

        Ольга! Спасибо Вам огромное, теперь я полностью разобрался что я делал не так (видимо устал сильно) на свежую голову с Вашими советами все получилось!

  28. aekjll

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

    Непонятен один момент по уроку 1.3.2 Независимый -> Подчиненный.
    Для того, чтобы в конечной БД создать два контактных лица из одного в исходной, в ролике снимают галочку «Искать объект приемника по внутреннему идентификатору» и оставляют настройки ПКС — поиск по коду и владельцу.
    Как в этом случае осуществляется поиск уже существующего контактного лица, учитывая, что поля Владелец в исходной базе нет? Зачем тогда вообще осуществлять поиск по владельцу? Не могли бы вы описать на примере?

    И ещё один момент по уроку 1.3.3 Проблема циклических ссылок.
    Почему всё-таки не заполняется реквизит ОсновнаяЕдиницаИзмерения? Понятно, что система не создаёт новую единицу измерения, потому что она уже создана, но ведь системе просто нужно выбрать уже созданную единицу измерения на предыдущем шаге и подставить её в реквизит ОсновнаяЕдиницаИзмерения. Поясните, пожалуйста.

    Заранее спасибо!

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

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

      • SegaZX

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

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

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

          • SegaZX

            Спасибо, понял )) т.е. узел считается завершенным, когда обработались и выгрузились все поля поиска, А владелец еще не был готов на тот момент.

  29. AlMaz

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

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

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

  30. vidovi4

    Если в предложенном решении задания 1.2.2 одновременно выполнить выгрузку По ПВД «СотрудникиПредприятия» и «ПриемСотрудника», то должности выгружаться не будут из-за кэширования. Нужно либо отключать кэширование, либо писать второе ПКО для сотрудников без должностей, либо договариваться о последовательности выгрузки.

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

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

  31. Dmitrii Kondrashov

    Не изменяется порядок свойств в ПКС, при нажатии на «стрелочки» ничего не происходит, почему?

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

      Здравствуйте!
      Не сталкивалась с таким поведением. А все остальное нормально работает? Перезапустите базу, проверьте еще раз

  32. independe

    Здравствуйте
    Возникла заминка с заданием 1.2.1. с заполнением реквизита комментарий. В ПКС Комментарий, установил в «Перед выгрузкой», Источник=»Перенесено из Исходной базы»;
    Но при выгрузке из исходной базы выдается сообщение
    Ошибка в обработчике события ПередВыгрузкой (свойства)
    ПКО = Контрагенты (Справочник: Поставщики)
    ПКС = 7 (—> Комментарий)
    Объект = Новые поставщики (Поставщики)
    СвойствоПриемника = Комментарий (Строка)
    Обработчик = ПередВыгрузкойСвойства
    ОписаниеОшибки = Поле объекта недоступно для записи (Ссылка)
    ПозицияМодуля = (1)
    КодСообщения = 55

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

      Здравствуйте!
      Судя по отчету по ДЗ, Вы все сделали правильно :)
      В параметре Источник находится ссылка на выгружаемый объект, а для изменения значений свойств используется параметр Значение

  33. limm

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

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

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

  34. AlexShch

    Добрый день!
    Задание 1.2.1 выполнил,
    «сверх нормы» перенес реквизит «Юридическое лицо»
    путем конвертации «Булево» в перечисление.
    Скан прилагаю…
    Задание 1.2.2 выполнил:
    1. Сделал ПКО «Должности сотрудников».
    2. В ПКГС у Сотрудника (ПКО «ПриемСотрудника»)
    в обработчик «Перед выгрузкой» добавил:
    ИсходящиеДанные=Новый Структура(«ДолжностьСотрудника»,ОбъектКоллекции.Должность);
    3. Изменил ПКО «Сотрудники», добавив туда ПКС «»->»ДолжностьСотрудника»
    «Получить значение из входящих данных». Все получилось…
    Задание 1.2.3 выполнил
    Были проблемы с переносом реквизита номенклатуры «ОсновноеСвойство».
    Проблема решилась, когда у ПКО «ЦеныНоменклатуры» ПКС «Номенклатура»поставил
    в диалоге раньше, чем ПКС «СвойстваНоменклатуры».
    Видимо, если ПКС «СвойстваНоменклатуры» стоит раньше, происходит перенос элемента
    справочника «Номенклатура» как владельца «СвойстваНоменклатуры» без записи реквизита
    «ОсновноеСвойство», поскольку оно еще не создано и когда доходит дело до ПКС «Номенклатура»
    перезапись элемента с заполнением реквизита «ОсновноеСвойство» не происходит…
    Так ли это?

    %D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%B0%D0%B3%D0%B5%D0%BD%D1%82%D1%8B%20%D0%B8%20%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D0%BD%D1%8B%D0%B5%20%D0%BB%D0%B8%D1%86%D0%B0.jpg

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

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

  35. habibi8000

    Вопрос по Д/з 1.2.2 Из Источника данные выгружаются, а в приемнике при загрузке выдает ошибку
    Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7175)}: Поле объекта не обнаружено, справочник должностей не выгружается

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

      Здравствуйте!
      Обычно такое бывает, если настроено ПКС Должность без приемника. Отключите это ПКС. Чтобы переносились сами должности, для них тоже нужно настроить ПКО.

  36. VitalyTarasov

    1. В видео 1.3.1 рассказывается как переносить из иерархии элементов в иерархию групп и элементов, при этом рассматривается частная задача, что группы — всегда верхние. Для общей задачи был предложен «запрос в цикле» и тут же раскритикован. Так какой же метод тогда использовать?!

    2. В одном из видео прозвучала фраза, что «сначала поиск ведется по ПКС», видимо для выборки объектов. Если у ПКО включить поиск по УИД, то доступна галка продолжения поиска по полям поиска. Но в уроках поиск по УИД отключают, а поиск в ПКС остаётся. Как взаимосвязаны галки поиска у ПКС и в настройках ПКО?!

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

      Здравствуйте!
      1. Думаю, оптимально было бы в ПВД для Подразделений запросом выбрать данные так, чтобы в зависимости от того, имеются ли у каждого элемента дочерние, для него было определено значение ЭтоГруппа. Просто произвольный алгоритм выборки данных будет рассмотрен в курсе далее, а на текущем этапе обучения предложенный способ оптимален
      2. Посмотрите на странице занятия 3 раздел Лучшие вопросы участников курса, вопрос № 11, схема вариантов поиска.
      Если флажок поиска по идентификатору не стоит, то поиск будет производиться только в алгоритме Поля поиска (если он есть) и по полям. А если флажок установлен, то сначала по идентификатору, а уж если по нему не найден, тогда в алгоритме и по полям.
      Синхронизация — это как раз тема следующего занятия. Там более подробно рассказано

  37. eadmvl

    Здравствуйте не вижу свой комментарий, а ответы уже вижу, не вижу решения здания

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

      Доброго дня!
      Вы уже выполнения задания 1.1.1, 1.1.2, 1.2.1, 1.2.2.
      После одобрения Вашего варианта решения Вам становится доступно решения на той же странице, где Вы оставляли отчет.
      На каких страницах Вы не видете решение?

      • eadmvl

        Спасибо, не обратил внимание на вкладку, думал 1.2.2 это тут)))

  38. Алексей Полубенский

    Решил для интереса сделать такую выгрузку (в рамках задания №1.2.1) — использовать для переноса Поставщиков и «Сотрудников поставщиков» только одно ПВД для Сотрудников. То есть выгружать Сотрудников поставщиков, а когда дойдем до выгрузки Владельца — по ссылке перенесутся и Поставщики.
    Добавил в ПКО Сотрудников ПКС «Владелец» и указал для него ПКО справочника «Поставщики».
    В ПКО «Поставщики» отключил ПКС для реквизита «ОтветственноеЛицоПоставщика», чтобы не усложнять.

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

    • Алексей Полубенский

      Только написал и сразу вроде понял в чем дело — у ПКС «Владелец» приемник то был пустой!! Наверно в этом дело?
      Я в этом ПКС в обработчике «После выгрузки» указал «Отказ = Истина;» и тогда все стало корректно загружаться в Конечную базу.
      или можно было как то «более правильно» поступить?

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

        Здравствуйте!
        ПКС с пустым приемником лучше сразу отключить — у ПКС есть соответствующий флажок

        • Алексей Полубенский

          Так ведь у меня весь смысл был в этом ПКС, чтобы по ссылке перенести Владельца )

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

            Да, можно и так )) Тогда в ПКС Владелец в событии После Выгрузки напишите
            Отказ = Истина;
            Чтобы владелец не добавлялся в узел свойства

  39. salikoff

    Здравствуйте.
    Я так понял, что значение для ПКС можно назначить двумя способами: или присвоить непосредственно, например,
    Значение = КакоеТоЗначение; или получить из входящих данных. Какое значение будет в итоге, если используются оба способа одновременно?
    И ещё: возможен ли третий способ — передать значение в ПКС НекоеСвойство из ПКО в обработчике ПередВыгрузкой, например, Источник.НекоеСвойство = КакоеТоЗначение; ?
    Если возможен, что будет в этом случае, когда все три способа будут задействованы?

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

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

  40. Сергей

    Добрый день!

    1. Создал ПКО «Поставщики»-«Контрагенты» и «СотрудникиПоставщиков»-«КонтактныеЛица».
    2. Создал ПКС для соответствующих реквизитов. Для контактных лиц выбрал поиск по наименованию.
    3. Создал ПВД для Поставщиков.
    4. Для переноса комментария попробовал 2 способа:
    — в ПКС «Комментарий» в обработчике «Перед выгрузкой» — Значение = «Перенесено из Исходной базы»;
    — в ПКО «Контрагенты» в обработчик «После загрузки»:
    Если ОбъектНайден И Объект.ЭтоГруппа = 0 Тогда
    Объект.Комментарий = «Перенесено из Исходной базы»;
    КонецЕсли;
    Оба варианта работают.

  41. mik19770727

    Добрый день!
    ДЗ 1.2.1 в ПКС Контрагенты для комментария ПередВыгрузкой написал так

    ИсходящиеДанные = Новый Структура(«Комментарий»);
    ИсходящиеДанные.Комментарий = «Перенесено из исходной базы»;

    при выгрузке из исходной базы дает такую ошибку, смотрел в отладке во ВходящиеДанные передается Неопределено

    Ошибка получения свойства объекта из входящих данных
    ПКО = Контрагенты (Справочник: Поставщики)
    ПКС = 7 (—> Комментарий)
    Объект = Новые поставщики (Поставщики)
    СвойствоПриемника = Комментарий (Строка)
    ОписаниеОшибки = Получение элемента по индексу для значения не определено
    ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8282)
    КодСообщения = 68

  42. Practic75

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

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

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

      • Practic75

        Подскажите пожалуйста в виде примера, а как к нему обратиться. Спасибо

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

          В событии ПКО После загрузки загружаемый объект доступен в параметре Объект. Можно написать
          Объект.Комментарий = «Загружено… «;

          Эти обработчики будут рассмотрены далее в курсе

  43. MaeXtro

    Здравствуйте!
    В уроке 1.3.2. обратил внимание, что после последнего переноса Контрагентов образовалось два Контактных лица Сидоров Сидор но оба с одним кодом. Если это намеренная ошибка, то хорошо бы это комментировать лектору.

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

      Здравствуйте!
      Здесь на уникальности кодов просто не акцентировалось внимание. В других видео-уроках рассказано, что в таких случаях нужно просто отключить ПКС Код и включить в ПКО автогенерацию кода.

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