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

Перенос документов и записей регистров

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

  • Глава 6. Конвертация документов и регистров

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

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

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

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

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

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

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

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

  1. Валерий

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

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

      Добрый день

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

      • Валерий

        Да, я передаю свойство “АВСкласс” в параметр объекта, в файле я этого параметра к сожалению не вижу. Попробовал скопировать еще раз, как Вы рекомендовали, не помогло.

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

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

          • Валерий

            Ольга, добрый день! Благодарю за помощь!
            Выполнил все Ваши рекомендации.
            1. В свойстве “АВСкласс” убрал ПКО “КлассыКонтрагентов”, в обработчике “Перед выгрузкой” прописал

            Если НЕ Источник.ЭтоГруппа Тогда
            Если Источник.АВСкласс = Перечисления.КлассыКонтрагентов.Акласс Тогда
                Значение = "Акласс";
            ИначеЕсли Источник.АВСкласс = Перечисления.КлассыКонтрагентов.Вкласс Тогда
                Значение = "Вкласс";
            ИначеЕсли Источник.АВСкласс = Перечисления.КлассыКонтрагентов.Скласс Тогда
                Значение = "Скласс"; 
            КонецЕсли;
            КонецЕсли;

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

            Если Константы.ИспользоватьКлассификациюКонтрагентов.Получить() Тогда

                Если НЕ Объект.ЭтоГруппа И ПараметрыОбъекта <> Неопределено Тогда
                   
                    Объект.АВСкласс = ПараметрыОбъекта["АВСкласс"];
                    Объект.Записать();
                    ОбъектМодифицирован = Ложь;
                    Сообщить(ПараметрыОбъекта["АВСкласс"]);
                КонецЕсли;
            КонецЕсли;

            но в итоге в конечной базе реквизит “АВСкласс” все еще остается незаполненным.

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

              Добрый день
              В конечной тип реквизита АВСкласс – это перечисление. А передается только имя элемента перечисления. Нужно при загрузке найти сам элемент и присвоить в реквизит

              • Валерий

                Большое спасибо, Ольга! Все заработало!

  2. olimoli

    Добрый день.
    Видео 1-6-7 – Обеспечение проведения документа.
    После добавления кода для проведения документа, при загрузке в конечную базу выдается ошибка.
    Как ее вылечить?

    Для теста загрузил выгрузку конечной базы, которая была в материалах курса.
    Выполнил перенос (без установки режима записи и проведения) – ошибок нет.
    В конечной базе пробую вручную провести документ – ошибка “Поле объекта не обнаружено (Хозрасчетный)”.
    Этого поля нигде нет.
    Спасибо.

    • AlexeyDubrovin

      Ошибка судя по картинке происходит в обработке проведения документа. Поставьте точку останова в строке на которую ругается программа и посмотрите что там не так. Хозрасчетный – это план счетов.

  3. syberman12

    в задание 1.5.3 сделал ПВД “ВводНачальныхОстатков”

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

    Создал ПКО “ВводНачальныхОстатков” см рисунок 1 и 2, код

    Объект.Движения.ОстаткиНоменклатуры.Записывать = Истина;

    В ПКС Номенклатура написал код

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

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

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

      Добрый день!

      А в файле данных есть движения документа?

      В коде и на скриншотах не вижу ошибок

      • syberman12

        Если я правильно понимаю, то движения в xml файле есть…

        Вопрос закрыт, причина была в отриц остатках

        • syberman12

          все разобрался, причина была в отриц. остатках…

  4. Юлия Чубукова

    Здравствуйте.
    подскажите как быть с ошибкой: метод Добавить при загрузке в ДЗ 1.5.2

    • AlexeyDubrovin

      перенесите код по добавлению в параметры таблицы документов, которые нужно провести, в обработчик ПередВыгрузкойДанных

                • AlexeyDubrovin

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

                  • Юлия Чубукова

                    Здравствуйте.
                    В первой версии было в ПередЗагрузкойДанных, по рекомендации перенесла в ПередВыгрузкойДанных.
                    Вернула обратно в ПередЗагрузкойДанных.

                    Ошибка та же.

                    • AlexeyDubrovin

                      Добрый день
                      С этими правилами у меня отлично все выгрузилось

                      Начало выгрузки:   13.02.2020 10:43:51
                      Ссылка на Организацию {"U"}
                      Ссылка на Организацию {"U"}
                      Ссылка на Организацию {"U"}
                      Окончание выгрузки: 13.02.2020 10:43:52
                      Выгружено объектов: 7

                      Выгружал только реализации

  5. Roma1

    Уже писал свой вопрос меня отправили на страницу соответствующего занятия. В моём случае это перенос табличной части документа поэтому пишу здесь.

    Переношу данные из УПП 1.3 в ЗУП 3.1 платформа 8.3.13 в конечной базе документ “Начальная штатная расстановка” заполняться табличная часть документа “Начисления”. Изначально документы существуют (проведен) я пере заполняю табличную часть. После загрузки в ТЧ “Начисления” сотрудники видны при проведении появляется ошибка (сотрудник не найден). Если перепроводить документ до загрузки ТЧ ошибки нет. Если смотреть по коду при проведении происходит запись регистра сведений “Плановые начисления сотрудников” ошибка на строчке “Набор.Записать();” смотрю что в наборе записей. Во всех ссылочных типах набора записей написано “Ошибка получения представления значения В данной транзакции уже происходили ошибки”. В процедуре перед записью этого регистра сведений останавливаюсь в конце процедуры ссылочные типы отображаться нормально дальше идут еще несколько процедур во всех ссылочные типы в конце процедуры отображаются, значение видно. Когда дохожу до строчки “Набор.Записать();” ссылочные типы не видны, до этого видны, текст: “Ошибка получения представления значения В данной транзакции уже происходили ошибки”. Как это исправить ?

    • AlexeyDubrovin

      Вопрос не столько по сути конвертации, сколько по реализации конкретных правил обмена. Без правил и без конкретных данных сложно что-то посоветовать. Набор относится к какому регистру ?

      • Roma1

        Набор записей регистра сведений “Плановые начисления”. Ссылочные типы которые с ошибкой при переносе не пере записываются. В правиле конвертации справочника сотрудники стоят флаги: не создавать новый объект если он не найден и не пере заполнять существующие. На скриншоте код с ошибкой до строки “Набор.Записать();” ссылочные типы видны.

        • AlexeyDubrovin

          Может в том и проблема, что стоят флаги Не создавать новый объект ?

      • Roma1

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

  6. Abacadabra

    Разьясните пожалуйста 1 момент в решении преподавателя:
    В обработчике конвертации После загрузки данных он присваивает ДокументОбъект = Неопределено; А затем и в 1 и во 2 условии все равно получает ДокументОбъект от Ссылки. Ссылка у нас существует всегда (он заполнятеся в ПКО). Не логичнее вынести это в общий код перед условиями? Или я чего-то не понял?

    • AlexeyDubrovin

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

  7. olgapetunina

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

    • AlexeyDubrovin

      Для начала в обработке универсального обмена на закладке Дополнительные настройки поставьте галку Вывод информационных сообщений в окно сообщений и посмотрите где валится ошибка. Скорее всего станет понятно на каком объекте

      • olgapetunina

        К сожалению, не особо стало понятнее..

        • AlexeyDubrovin

          Скорее всего на реализации и валится. Проверяйте соответствие структуры в правилах и в базе приемнике

  8. Galina86

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

    • AlexeyDubrovin

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

  9. denya_0705

    подскажите как перенести контактную информацию из регистра сведеней КИ в тч КИ объекта (конфигурации из бп2 в бп3). Проблема в том что в бп3 надо у поля значениеполей представить в виде xml.

    делал так
    Если ТипЗнч(ВходящиеДанные) = Тип(“Структура”) Тогда
    ВходящиеДанные.Вставить(“КонтактнаяИнформация”);
    Иначе
    ВходящиеДанные = Новый Структура(“КонтактнаяИнформация”);
    КонецЕсли;

    ВходящиеДанные.КонтактнаяИнформация = Новый ТаблицаЗначений;
    ВходящиеДанные.КонтактнаяИнформация.Колонки.Добавить(“Представление”);
    ВходящиеДанные.КонтактнаяИнформация.Колонки.Добавить(“Вид”);
    ВходящиеДанные.КонтактнаяИнформация.Колонки.Добавить(“ВидДляСписка”);
    ВходящиеДанные.КонтактнаяИнформация.Колонки.Добавить(“Тип”);

    ВходящиеДанные.КонтактнаяИнформация.Колонки.Добавить(“ЗначенияПолей”);
    ВходящиеДанные.КонтактнаяИнформация.Колонки.Добавить(“Страна”);
    ВходящиеДанные.КонтактнаяИнформация.Колонки.Добавить(“Регион”);
    ВходящиеДанные.КонтактнаяИнформация.Колонки.Добавить(“Город”);
    ВходящиеДанные.КонтактнаяИнформация.Колонки.Добавить(“АдресЭП”);
    ВходящиеДанные.КонтактнаяИнформация.Колонки.Добавить(“ДоменноеИмяСервера”);
    ВходящиеДанные.КонтактнаяИнформация.Колонки.Добавить(“НомерТелефона”);
    ВходящиеДанные.КонтактнаяИнформация.Колонки.Добавить(“НомерТелефонаБезКодов”);

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

    Запрос.УстановитьПараметр(“ТекущийОбъект”, Источник);
    Выборка = Запрос.Выполнить().Выбрать();

    Пока Выборка.Следующий() Цикл
    НоваяСтрока = ВходящиеДанные.КонтактнаяИнформация.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
    КонецЦикла;

    • AlexeyDubrovin

      А в чем проблема при заполнении таблицы значений сформировать XML и присвоить эту строку соответствующему реквизиту строки таблицы значений ?
      Даже без всяких ЗаписьXML, по тупому
      НоваяСтрока = “< ?xml version="1.1" encoding="UTF-8" ?> + “< Город>” + Выборка.Город + “” + …

      • denya_0705

        а Вы видели эту строку xml которая получается? руками там все не учесть, где допустим в БП 2.0 взять значения кодов типов дома, квартиры, строения. Все руками прописывать? Для примера (дом и квартира):

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

          Там в БП есть стандартный метод, который преобразует значения полей в XML. Посмотрите УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(), точно не помню, но вроде этот.

          Его нужно вызвать в событии После загрузки

  10. Алексей

    Добрый день!
    Помогите разобраться с проблемой синхронизации при загрузке. Пытаюсь воспроизвести пример главы 6, урока 3 – перенос справочника Контрагенты произвольным запросом вместе с ABC-классификацией. Создал ПВД, где запросом выбираю все данные справочника Контрагенты, в том числе и поле Ссылка. Создал отдельное ПКО Контрагенты_Запросом, источник пустой, включена синхронизация по внутреннему идентификатору, создал ряд ПКС, в том числе ЭтоГруппа. Для ЭтоГруппа установлен флаг поиска. Состав и имена ПКС и полей в запросе совпадают, источник в ПКС пустой.
    Выгружаются все данные справочника (в файле данных присутствуют узлы для каждого элемента). Однако при загрузке создаются ровно 1 группа и ровно 1 элемент справочника. В уроке такая проблема была рассмотрена и решена добавлением поля Ссылка в запрос. В мое случае это не срабатывает – поле в запросе есть, в обработчиках ПКС и ПКО его видно (через Источник.Ссылка), значение корректное. Что можно сделать в данной ситуации?
    Использую версию Конвертации данных 2.1.8.2, платформа 8.3.10.2651. Правила обмена и файл с данными прилагаю.
    UPD: Экспериментируя с обработчиками “Поля поиска” и “После загрузки”, обнаружил, что UUID ссылки созданного объекта после записи отличается от искомого UUID в соответствии СвойстваПоиска, но в чем причина этого поведения, не разобрался.

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

      Добрый день!

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

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

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

      ПрекратитьПоиск = Истина;

      Тогда все должно работать правильно

  11. zvivla

    Здравствуйте.
    При решении задачи 1.5.2 используются методы не описанные в курсе. Это разве правильно?
    Плюс не проще ли было описать проведение просто в ПКО После загрузки?

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

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

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

  12. Inna_Kikot

    Здравствуйте! Уже догадалась. Надо в ПКО справочник->перечисление поставить галочку “не запоминать выгруженные объекты”. Спасибо.

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

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

  13. Inna_Kikot

    Здравствуйте, если я ещё не сделала ДЗ, я могу задавать вопросы?

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


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

  14. Inna_Kikot

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

  15. vishnyakov

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

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

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

      Добрый день!

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

      При загрузке программа определит, что свойство ссылочного типа, а значение загружается типа Строка. Тогда будет произведен поиск предопределенного элемента с таким именем. Если нет такого элемента, будет попытка найти элемент с таким кодом. Если будет найден такой элемент, ссылка на него будет подставлена в свойство. Если не будет найден – свойство останется пустым, объект не будет создан.

      А если ПКО в ПКС указано, то это значение “Белый” при выгрузке будет передано в это ПКО в качестве Источника, и будет попытка выгрузки с использованием ПКО. В таком случае поиск объекта в приемнике определяется настройками в ПКО. Если объект не найден в приемнике, то создается новый объект, если иное не указано в ПКО.

      • vishnyakov

        Спасибо за ответ. Становится понятнее. Но я не понял как одновременно
        “В этом случае при выгрузке не будет производиться поиск ПКО для такого типа данных свойства-приемника, даже если это ПКО настроено в правилах. Потому что тип значения — примитивный («Белый» — строка).”
        “А если ПКО в ПКС указано, то это значение «Белый» при выгрузке будет передано в это ПКО в качестве Источника, и будет попытка выгрузки с использованием ПКО.”
        По-видимому, речь о разных случаях, но я не вижу разницы между “ПКО настроено в правилах” и “ПКО в ПКС указано”.

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

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

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

          • vishnyakov

            Если загрузка идет по значению примитивного типа данных и в ПКС указано ПКО, то загрузка по внутреннему идентификатору будет бессмыслена?

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

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

      • Сергей

        В занятии 7 обратил внимание на нюанс выгрузки элемента ПВХ. В уроке используется такой код в ПКО для ПВХ “ВидыСубконто”:

        Если ТипЗнч(Источник) = Тип("Строка") Тогда
            ИмяПредопределенногоЭлемента = Источник;
        Иначе
            Отказ = Истина;
        КонецЕсли;

        Мы обсуждали, что если при загрузке ссылочного типа данных система обнаружит значение строкового типа, то она выполнит попытку поиска предопределенного элемента. Получается, что для ПВХ это не работает? Я пробовал передавать в качестве значения строку с именем предопределенного элемента, но при загрузке появлялась ошибка. При использовании кода указанного выше, все сработало.

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

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

          • Сергей

            То есть если задано ПКО и я передам строку в это ПКО, то будет выполнен поиск предопределенного элемента?
            А “ИмяПредопределенногоЭлемента” – это такая незадокументированная возможность, потому что переменная доступна в контексте выполняемой процедуры? Она будет работать для всех ссылочных типов данных, которые могут иметь предопределенные элементы?

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

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

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

  16. Максим

    Добрый день!
    Скажите пожалуйста, а есть такое событие на стороне конечной базы, чтобы была уже сформирована ссылка для нового объекта? Другими словами: событие для объекта, которое срабатывает после его записи в базу.
    Пытаюсь решить задачу 1.5.2, получается в ПКО я имею доступ только к объекту (ссылки ещё нет, если объект новый). Думал может есть событие, которое срабатывает после записи, чтобы в глобальный параметр добавить ссылки, а потом уже их в событии конвертации после загрузки обходить в цикле и проводить.

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

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

  17. b0nd

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

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

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

      Выгрузка в перечисление с использованием параметра УзелСсылки – действительно не очень удачный способ. Нужно в ПКО устанавливать флажок “Не запоминать выгруженные”, тогда этот метод работает.

      Проще ПКО для перечисления не создавать совсем, а напрямую в ПКС СтавкаНДС писать

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

      и так далее

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

  18. Chernoff

    Добрый вечер.
    Укажите мне, пожалуйста, направление.
    Есть база УПП. Учет по номенклатуре ведется в разрезе характеристик (основная масса), но есть номенклатура, которая ведется без хар-к.
    Есть база БП, где хар-к отродясь и не было.
    Мне нужно настроить выгрузку номенклатуры из УПП в БП (по ссылке, т.е. я выгружаю только документы), чтобы сохранилась информация о хар-ках.
    Я, так понимаю, что номен-ра с хар-ками будет конвертироваться из одной в несколько. Наименование будет склеиваться из номенклатуры + хар-ка. В качестве УИД здесь, наверно, будет выступать УИД хар-ки. Код нужно генерировать автоматически.
    В случае, если номен-ра ведется без хар-к, то тогда выгружаю просто номенклатуру.
    Как-то так мне это видится.
    Может я что-то не учел или есть какой-то иной путь?

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

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

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

      Я здесь только одну проблему вижу – если номенклатура ведется по характеристикам, а в документе она указана без характеристик, то как ее переносить – как отдельную без характеристик? Или такая ситуация невозможна?

      • Chernoff

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

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

          Такую задачу часто решают, но совсем красивого решения, которое бы учитывало все частные случаи, я не знаю.

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

    Здравствуйте! Хотелось бы уточнить один момент. В одном из тестов для самопроверки был вопрос где следует “создавать” наименование объекта – перед выгрузкой или после загрузки. Правильный ответ был – после загрузки, т.к. это уменьшает объем файла с данными. В решении урока 1.5.1 наименование формировали в выборке ПВД. Итак, как лучше? Или это зависит от объема данных или от удобности использования… Какие рекомендации?

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

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

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

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

      В конечном итоге, да, зависит от объема данных. Если нужно бороться за объем – то это критично, если нет, можно руководствоваться удобством.

  20. Nikolay

    Здравствуйте!
    У меня вопросы по ДЗ 1.5.2
    1. Почему для создания параметра был выбран обработчик конвертации “ПередВыгрузкойДанных”, а не любой из обработчиков выше (например “ПередОбработкой”). Почему бы не создавать параметр в Обработчики “Правила выгрузки данных” “Перед обработкой”. Ведь, если у нас аналогичная задача по нескольким объектам, то в обработчике конвертации будет очень большая “простыня” кода и будет достаточно сложно ориентироваться какой параметр для какого объекта выгрузки создавался.

    2. Почему добавление объекта в параметр-коллекцию происходит в обработчике ПКО “После загрузки”, а не в ПВД “После выгрузки”. От чего зависит в данном случае выбор обработчика?

    3. Перебор коллекции происходит в обработчике конвертации “После загрузки”. Чем обусловлен данный выбор? Почему не воспользоваться обработчиком ПВД “После обработки”? ПО описанию данный обработчк нам подходит лучше:
    Обработчики “Правила выгрузки данных”
    После обработки
    Условия возникновения события
    Событие выполняется после выгрузки всех данных по определенному правилу выгрузки.

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

    4. Чем в целом можно руководствоваться выбирая обработчик ПКО/ПВД или конвертации?

    5. Правильно ли я понимаю общий принцип обработчиков, характерный для ПКО/ПВД/ПКС/Конвертации:
    1. “Перед выгрузкой” – обычно происходит выборка данных;
    2. “При выгрузке” происходит запись в xml;
    3. “После выгрузки” – данные выгружены, но еще не записаны (так ли это?)
    4. “После обработки” – данные записаны в источнике.

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

    2. В ПВД “ПослеВыгрузки” я произвожу заполнение коллекции:
    ДокументОбъект = Объект.ПолучитьОбъект();
    Если ДокументОбъект.ЭтоНовый() ТОгда
    Параметры.СписокДокументов.Добавить(Объект);
    КонецЕсли;

    3. В Конвертации “Позле выгрузки данных” добавил код обхода коллекции:
    Для Каждого ДокументСсылка ИЗ Параметры.СписокДокументов Цикл
    КонецЦикла;

    На стороне конечной базы при загрузке данных появляется ошибка:
    “Поле объекта не обнаружено (СписокДОкументов)”. То есть система не видит созданный параметр “СписокДокументов”

    ПС. Если П.3 Закомментировать, то ошибки не возникает.

    Заранее благодарен за ответ!

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

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

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

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

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

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

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

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

      5. Обработчик “Перед выгрузкой” выполняется, когда программа получила очередной объект, его нужно выгрузить, но выгрузка еще не началась.
      “При выгрузке” – выгрузка уже началась. Если это объект – уже создан узел объекта и выгружена часть свойств. Если это свойство – уже получено его значение.
      “После выгрузки” – xml-узел объекта уже сформирован, но в файл с данными еще не записан.
      “После обработки” – все объекты по этому ПВД выгружены в файл данных. Программа переходит к следующему ПВД, если оно есть.

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

      • Nikolay

        Благодарю за развернутый ответ!
        Очень полезная информация

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

    Здравствуйте.
    1. Про УзелСсылки все-таки не совсем ясно. Чем использование такого подхода лучше, чем было в уроке “Справочник в перечисление”. Если варианты эквивалентны, то можно пример, когда без УзлаСсылки никак не обойтись?
    2. Возможно дальше это будет разбираться в уроках, но спрошу – что это за параметр ПКО “ТолькоПолучитьУзелСсылки – Если Истина, то объект не выгружается – лишь формируется узел ссылки. В списке выгруженных – объект ищется.” Для чего формировать узел ссылки, если объект не выгружается?! Если объект не выгружается, то в каком списке выгруженных объект ищется… Очень походит на кэширование, но зачем оно программно, как его использовать?
    3. В конвертации на закладке Параметры в сам низу есть признак “Работа с параметрами в формате версии 2.01”, что это такое?

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

      Здравствуйте!
      1. Для конвертации из справочника в перечисление остальные способы, без использования параметра УзелСсылки, лучше подходят. Параметр УзелСсылки очень редко бывает нужен, только в исключительных случаях
      2. ТолькоПолучитьУзелСсылки – такой параметр, который отключает выгрузку объекта целиком по ссылке. Например, если при выгрузке документа из свойства документа встретилась ссылка на справочник, то обычно этот элемент справочника тоже будет выгружен полностью (“по ссылке”), а в свойство документа будет вставлен узел ссылки на этот элемент. При загрузке документ и элемент справочника загрузятся полностью, и благодаря этому узлу ссылки, ссылка из документа на этот элемент сохранится. Если же в ПКО для справочника написано
      ТолькоПолучитьУзелСсылки = Истина;
      , то этот элемент целиком выгружаться не будет, выгрузится только узел ссылки. При загрузке если этот элемент уже есть в базе-приемнике, то он будет найден, а если нет, то будет создан пустой элемент, в котором будет только та информация, которая была в узле ссылки.
      Это способ сократить размер выгружаемого файла. Можно, например, справочники и документы переносить в разных файлах, и для этого сделать так, чтобы справочники по ссылкам из документов целиком не выгружались.
      3. Этот флажок создан ради совместимости со старым форматом выгрузки. Раньше параметры не редактировались в диалоге и не передавались при выгрузке. Если отключить этот флажок, то так и будет. Но лучше использовать последние версии обработок и флажок этот не снимать.

  22. Nikodemos

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

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

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

  23. Sherlock99

    В уроке 1.6.5 при конвертации справочника в документ оставлен поиск по уник. идентификатору. Как система будет сопоставлять справочник с документом?

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

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

      • Sherlock99

        Получается уник. идентификатор формируется в разрезе всей базы, а не объектов конфигурации?

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

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

  24. Sherlock99

    А можно перенести только некоторые документы (например, приходные накладные с 1 января по 31 января)?

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

      Здравствуйте!
      Да, можно. Можно даты жестко в правилах указать, а можно создать параметры под любые критерии выгрузки документов, которые будет задавать пользователь.

  25. andregyandex

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

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

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

  26. Buchhalter

    Здравствуйте.
    Вопрос по заданию 1.5.1
    Не получается перенести или установить реквизит ВидСпецификации.
    Для решения этого задания создал ПВД Спецификации (РегистрСведения СоставПродукции). Поместил в него следующий код:

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

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

    • Buchhalter

      Разобрался.. инициатива наказуема:). Не надо было указывать в ПКС ВидСпецификации ПКО ВидСпецификаций.
      Зато появился еще один вопрос. В информации по обработчикам для обработчика “перед обработкой” ПВД написано следующее:

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

      А в видеорешении задания 1.5.1 это не было сделано, не был установлен признак “Не запоминать выгруженные объекты” у ПКО Спецификации. Насколько это важно?

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

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

        Скорее всего, просто ПКО ВидыСпецификаций неправильно как-то настроили. Обычно ПКО в ПКС указывать надо, так стабильнее работает.

        Если у ПКО не указан источник, то флажок считается установленным по умолчанию. А вот если указать источник в ПКО, но выбрать для него данные произвольным запросом, то флажок обязательно нужно устанавливать. Потому что в этом случае (если флажок снят) будет неправильно работать механизм кеширования, и вместо нескольких объектов будет выгружен один.

        • Buchhalter

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

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

            Да, прошу прощения, это я перепутала. В этом случае ПКО действительно не нужно

  27. Art82

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

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

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

  28. adanos@ngs.ru

    Здравствуйте.
    Столкнулся с проблемой вызова внешней обработки. Добавил в подключаемые обработки новую обработку, в обработчике конвертации после загрузки правил обмена пытаюсь ее вызвать, но система выдает ошибку, что поля объекта “внешняяОбработка2” не обнаружено и нет возможности вызвать метод ОткрытьФорму.
    С 8.3 перешел на 8.2 обычное приложение и тогда следующий код нормально выполнился и обработка отобразилась
    ОбрПараметры=ДопОбработки.ВнешняяОбработка2.ПолучитьФорму(“ФормаОбычная”);
    ОбрПараметры.Открыть();
    Соответсвенно, вопрос, а в 8.3 УФ есть возможность вызвать внешние обработки?

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

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

  29. markgenuine

    Добрый день, у меня проблема с сквозным примером 1.6.8 не могу сделать, чтобы в ТЧ СписокДокументов из ПКО ПоступлениеТоваровУслуг в обработчике после загрузки добавлялись строки ТЧ в доп обработку, получаю ошибку.
    Прикладываю Скриншот, правила выгрузки и внешнюю обработку.

    • markgenuine

      Если посмотреть тип “ДопОбработки.ДокументыДляПроведения”, то это объект.
      Если посмотреть тип “ДопОбработки.ДокументыДляПроведения.СписокДокументов”, то это уже строка.
      Как решить эту проблему????

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

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

        • markgenuine

          Спасибо, извините за не внимательность.

  30. Turkish

    Помогите пожалуйста. Видео 1.6.8. Вроде было все хорошо обработка работала, но в один прекрасный момент перестала работать. Все проверил. Не могу найти. Вываливается сообщение.
    Начало загрузки: 17.09.2015 0:30:31
    Диван
    Спальный гарнитур
    Поступление товаров и услуг 000000001 от 20.07.2012 8:40:50
    Гвозди
    Поступление товаров и услуг 000000002 от 19.07.2012 8:40:40
    Поступление товаров и услуг 000000003 от 14.09.2015 17:05:34

    Ошибка в обработчике события ПослеЗагрузкиДанных (конвертация)
    Обработчик = ПослеЗагрузкиДанных (конвертация)
    ОписаниеОшибки = Ошибка при вызове метода контекста (ПолучитьФорму): {Форма.ФормаОбычная.Форма(8,104)}: Ожидается выражение: {Форма.ФормаОбычная.Форма(8,104)}: Ожидается выражение
    ПозицияМодуля = (1)
    КодСообщения = 23

    Окончание загрузки: 17.09.2015 0:30:31

    Загружено объектов: 25

    В обработчике:
    Форма=ДопОбработки.ДокументыДляПроведения.ПолучитьФорму(“ФормаОбычная”);
    Форма.Открыть();

    Обработка в конвертацию загружена. Загрузка проходит нормально, но форма не открывается. Я уже мозг сломал.

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

      Здравствуйте!
      Есть подозрение, что кавычки в методе ПолучитьФорму() используются не те, которые нужно. Такие ошибки уже встречались. Прикрепите к комментарию правила, запакованные в архив с расширением .zip или .rar.

    • palsergeich

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

  31. adanos@ngs.ru

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

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

      Здравствуйте!
      Нет, сравнение с Неопределено возвращает значение Истина. Судя по коду, NULL туда не может попасть. Все функции поиска в случае неудачи возвращают Неопределено.

  32. adanos@ngs.ru

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

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

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

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

    В ДЗ 1.5.2 столкнулся с ошибкой {(4)}: Ошибка при вызове метода контекста (Записать): Действие не может выполняться в режиме загрузки данных.

    Я в параметре конвертации создал новую Таблицу Значений с Колонками ДокументОбъект и РежимЗаписи.
    В событии После Загрузки Объекта я добавляю туда строку с ДокументОбъект = Объект и РежимЗаписи = РежимЗаписиДокумента.Проведение.

    В событии После Загрузки данных конвертации я использую следующий код
    Для Каждого Док из Параметры[“Документы”] Цикл
    Попытка
    Сообщить(Строка(Док.РежимЗаписи)+” документа “+Строка(Док.Объект.Ссылка));
    Док.Объект.Записать(Док.РежимЗаписи);
    Исключение
    Сообщить(“Не удалось “+Строка(Док.РежимЗаписи)+” “+Строка(Док.Объект.Ссылка));
    Инфо = ИнформацияОбОшибке();
    Сообщить(“Описание='” + Инфо.Описание + “‘”);
    Сообщить(“ИмяМодуля='” + Инфо.ИмяМодуля + “‘”);
    Сообщить(“НомерСтроки=” + Инфо.НомерСтроки);
    Сообщить(“ИсходнаяСтрока='” + Инфо.ИсходнаяСтрока + “‘”);
    Сообщить(ОписаниеОшибки());
    КонецПопытки;

    КонецЦикла;
    и у меня не проводится ни один документ. Как это побороть?

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

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

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

        Но ведь получение объекта по ссылке – это ещё 1 запрос в базу. Хотел избежать. Если я правильно помню, в уроке 1.6.7 мы записывали объекты в обработчике события После Загрузки объекта при помощи метода Записать.

        Оказывается, что во всех объектах, которые созданы УОД, установлен флаг ОбменДанными.Загрузка=Истина. Этот флаг запрещает проведение. Но его уже можно сбросить в событии, которое вызывается после загрузки всех данных.

        Вот этот код в После загрузки данных позволяет провести документы без танцев со ссылками для новых документов.

        Для Каждого Док из Параметры[“Документы”] Цикл
        Попытка
        Сообщить(Строка(Док.РежимЗаписи)+” документа “+Строка(Док.Объект.Ссылка));
        Док.Объект.ОбменДанными.Загрузка=Ложь;
        Док.Объект.Записать(Док.РежимЗаписи);
        Исключение
        Сообщить(“Не удалось “+Строка(Док.РежимЗаписи)+” “+Строка(Док.Объект.Ссылка));
        Инфо = ИнформацияОбОшибке();
        Сообщить(“Описание='” + Инфо.Описание + “‘”);
        Сообщить(“ИмяМодуля='” + Инфо.ИмяМодуля + “‘”);
        Сообщить(“НомерСтроки=” + Инфо.НомерСтроки);
        Сообщить(“ИсходнаяСтрока='” + Инфо.ИсходнаяСтрока + “‘”);
        Сообщить(ОписаниеОшибки());
        КонецПопытки;

        КонецЦикла;

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

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

    • vitaly.karpov

      В ПКО”РеализацияТоваровИУслуг” Перед выгрузкой: РежимЗаписи = “Проведение”; Ошибка пропала.Все работает.)

  34. Дмитрий

    ДЗ 1.5.1, нюанс про синхронизацию при переносе 2х справочников в один. Предлагаю добавить еще вариант хранения доп. реквизита в РегистреСведений ЗначенияСвойствОбъектов. Он имеется во многих типовых конфигурациях, синхронизацию с использованием РС мы уже рассматривали. А главное – не придется менять конифгурацию-приемник.

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

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

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