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

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

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

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

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

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

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

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

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

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

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

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

  1. Валерий Швабинский

    Добрый день!
    В предыдущих уроках при синхронизации передается Идентификатор документа,
    и, уже по нему генерируется ссылка на вновь создаваемый объект.
    У меня вопрос:
    Возможно ли сгенерировать УИД с «нуля»? Ведь если нам нужно передавать
    в базу приемник документы/справочники, остается (хоть и не большая) вероятность
    того, что в базе уже может быть объект с существующей ссылкой, но не относящейся
    к объекту базы источника. Такая ситуация возможна, когда в приемной базе уже ведется
    учет, но нам необходимо дополнять данными из других баз.
    Заранее спасибо.

    • Валерий Швабинский

      Разобрался:

      Если Ссылка.Пустая() Тогда
      // Назначим документу ссылку
      СсылкаНового = Документы.РеализацияТоваровУслуг.ПолучитьСсылку();
      Объект.УстановитьСсылкуНового(СсылкаНового);
      Объект.Записать();
      ОбъектМодифицирован = Ложь;
      …………………..

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

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

        Если Вы так сделаете в правиле с установленным поиском по идентификатору, то поиск по идентификатору работать не будет, поскольку у объектов в базе-приемнике он будет другой. Лучше тогда отключите поиск по УИД совсем, и этот код не потребуется

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

      Здравствуйте!
      Если в ПКО отключен флажок «Искать объект по внутреннему идентификатору объекта-источника», то в базе-приемнике объекты будут создаваться со случайно создаваемым Идентификатором. Но и поиск тогда не будет проходить по идентификатору.
      Лучший выход из этой ситуации — регистр СоответствияОбъектовИнформационныхБаз, где идентификатору источника устанавливается соответствие в приемнике. Так сделано в типовых конфигурациях и обмене на базе подсистемы БСП «Обмен данными»

  2. Сергей Онучин

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

    Есть замечание по решению задачи 1.5.2.
    В третьем файле рассматривается перенос пометки удаления — и действительно, если в базе-источнике пометить документ на удаление, то пометка переносится в базу приемник.
    Но интересно было бы рассмотреть перенос значения (ПометкаУдаления = Ложь), т.е., если в приемнике документ помечен на удаление, а в источнике — нет.
    Если мы переносим непроведенный документ, то проблем нет, надо лишь добавить действие снятия пометки удаления при противоположном условии: (Не СтрокаТаблицы.ПометкаУдаления И Ссылка.ПометкаУдаления).
    Однако если надо перенести проведенный документ, то важно, что снятие пометки удаления необходимо выполнить до проведения. Причем объект должен быть записан, т.е. надо либо выполнить:
    ДокументОбъект.ПометкаУдаления = Ложь;
    ДокументОбъект.Записать();
    либо:
    ДокументОбъект.УстановитьПометкуУдаления(Ложь);

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

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

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

  3. dsdred

    При прохождении урока 1.6.7 в конечной БД есть ошибка в модуле документа «ПоступлениеТоваровУслуг»

    В процедуре ОбработкаПроведения

    Есть строки
    Движение.СчетДт = ПланыСчетов.Хозрасчетный.Товары;
    Движение.СчетКт = ПланыСчетов.Хозрасчетный.Поставщики;

    В конечной БД есть только ПланыСчетов.ХозрасчетныйПланСчетов

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

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

  4. RBEvgeny

    Добрый день. Возникла трудность с задачей 1.5.3

    какую из виртуальных таблиц использовать в запросе? Если понять буквально «Остатки» тогда в остатках нет значения «ВидДвижения». Там либо положителен, либо отрицателен результат, но он один на дату. Если обороты или остатки и обороты. То в таком случае конечно можно вычислить «ВидДвижения» исходя из заполненных значение количества приход и количество расход. Но что то мне кажется что не совсем верно.

    Я использовал просто ОстаткиТМЦ, но с проверкой на Дату (начало периода) меньше запрашиваемой.
    Верно или все же я ошибаюсь?

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

      Здравствуйте!
      Поскольку в конечной базе в регистре пусто и нужно ввести только остатки на дату, то сами движения и их виды из базы-источника не нужны. Нужно, чтобы в регистре-приемнике были такие же остатки на эту дату, как и в регистре-источнике. В нашем случае запрета отрицательных значений Количества в регистре не установлено, поэтому можно получить все остатки на заданную дату (положительные и отрицательные) и ввести их с видом движения «Приход».

  5. 87konstantin@mail.ru

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

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

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

  6. also11

    Вопрос по 1C-ConvData-Module1-HomeWork05.1-Solution-Part04.avi

    Не проще ли синхронизировать по коду, типа Значение = «МТ» + Прав(Источник.Код,7), или что-то подобное?

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

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

  7. RBEvgeny

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

    Если это так, то как мне добраться до этого параметра который описан в «Перед загрузкой данных»?
    Что то я запутался. Подскажите пожалуйста.

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

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

  8. Templ

    здравствуйте
    ДЗ 1.5.1. Не могу понять как в таблчную часть перенести данные если продукция состоит из нескольких позиций. Без табличной части все понятно.

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

      Ответила на странице вопросов по ДЗ

  9. CTmuB

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

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

      Здравствуйте!
      Это было сделано для того, чтобы ускорить проверку переноса всей остальной информации, просто как «заглушка». В реальных задачах, конечно, нужно будет эту проверку прописать аккуратно.

  10. pavlig

    Код написан в обработчике ПКО После загрузки.
    При загрузке данных ошибка:
    Документ не может быть проведен в закрытом периоде!

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

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

  11. kamalion

    Добрый день! Возникла такая проблема. При переносе справочника хочу передать в базу-приемник не все элементы, а только 2-3. Для этого в ПВД делаю запрос с использованием выражения «Первые 3». Из универсальной обработки все корректно выгружает — 3 объекта. Но при использовании данных правил обмена в плане обмена, разработанном на основе БСП 2.1, переносятся абсолютно все элементы справочника. Так и должно быть? И как в таком случае все-таки обеспечить перенос ограниченного количества элементов?

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

      Здравствуйте!
      При использовании для выгрузки узла плана обмена, произвольная выборка игнорируется, а для выгрузки выбираются объекты, зарегистрированные на узле. Если Вы хотите выгрузить определенные объекты, нужно удалить регистрацию всех лишних объектов с помощью обработки «Регистрация изменений для обмена»

      • kamalion

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

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

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

  12. Надежда

    Добрый день, Ольга! Возникла проблема в главе 6. видео 1.6.8.
    Не открывается никак внешняя обработка DocumentsForPosting, выложенная в доп. материалах, при загрузке данных, даже в толстом клиенте, даже в обычном приложении, ни на 8.2, ни на 8.3 — короче вообще никак, хотя при этом сама обработка вручную открывается. При попытке загрузить выдается ошибка:

    Ошибка в обработчике события ПослеЗагрузкиДанных (конвертация)
        Обработчик             =  ПослеЗагрузкиДанных (конвертация)
        ОписаниеОшибки         =  Ошибка при вызове метода контекста (ОткрытьФорму): Неизвестное имя формы. Имя: "ВнешняяОбработка.DocumentsForPosting.Форма.Форма"
        ПозицияМодуля          =  (1)
        КодСообщения           =  23

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

    • Надежда

      Ольга, у меня заработало!!! Достаточно было дать обработке при подключении в конвертации русское имя, например, «ДокументыДляПроведения», заменить везде DocumentsForPosting на ДокументыДляПроведения и все заработало, без проблем запускается в управляемом приложении в толстом клиенте :) Я правильно делаю вывод, что имя обработки, задаваемое при подключении в конвертации в поле «имя обработки», должно быть написано только русскими буквами? А вообще мистика какая-то: код

      ОткрытьФорму("ВнешняяОбработка.DocumentsForPosting.Форма.Форма")

      не срабатывал никак и нигде,
      а код

      Форма = ДопОбработки.DocumentsForPosting.ПолучитьФорму("ФормаОбычная");
      Форма.Открыть();

      в обработчике «После загрузки данных» работает без проблем.

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

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

  13. Надежда

    Добрый день, Ольга! Присоединяюсь к вопросу venvlad, который остался без ответа. Суть вопроса:
    Видеоурок 1.6.7.
    В ПКО “ПоступлениеТоваровУслуг” прописываю:
    РежимЗаписи = “Проведение”;
    РежимПроведения = “Неоперативный”;
    Из Исходной ИБ выгружается без ошибок.
    При загрузке в Конченную вылезает ошибка:

    Ошибка при записи документа
        ИмяПКО                 =  ПоступлениеТоваровУслуг
        ТипОбъекта             =  Поступление товаров и услуг
        Объект                 =  Поступление товаров и услуг 000000001 от 20.07.2012 8:40:50
        ОписаниеОшибки         =  Ошибка при вызове метода контекста (Записать): Ошибка при выполнении обработчика - 'ОбработкаПроведения': {Документ.ПоступлениеТоваровУслуг.МодульОбъекта(11)}: Поле объекта не обнаружено (Хозрасчетный)
        ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7516)
        КодСообщения           =  25

    Как от нее избавиться?

    • Надежда

      Ольга, внесла изменения кода конфигурацию — документ «Поступление товаров и услуг» стал проводиться в ручном режиме (раньше он тоже не проводился) и загрузка прошла нормально. Вопрос снимаю.

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

        Здравствуйте!
        Да, там ошибка в обработке проведения

  14. Людмила

    Добрый день.
    Вопрос по заданию 1.5.2
    В ответе преподавателя к данному занятию, часть 2.
    В решении для проведения документов/отмена проведения используется обработчик конфигурации «После загрузки».
    Я проведение делала в ПКО в обработчике «После загрузки».
    Результат загрузки был такиим же. (Проведенные провелись непроведенные не провелись)
    Модно ли так делать? В чем различие или какие «подводные камни» могут быть в таком способе.

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

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

  15. chernlen

    Подскажите,пожалуйста из-за чего может быть такая ошибка .
    Не загружаются правила. При загрузке:
    {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(724)}: Тип не определен
    Возврат Новый(Тип);
    Отключала новые правила, даже правила прошлых уроков не загружаются.
    Конфигурации не менялись, КД последнего релиза.

    Создала новую конвертацию, все работает.
    Спасибо.

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

      Здравствуйте!
      Хорошо, что работает. Раньше с такой ошибкой не встречалась

  16. RomanB

    Вопрос по тесту для самопроверки:
    ПКС с видом «Передача данных в параметр» нужны для
    1. Передачи дополнительных данных этого объекта из базы-Источника в базу-Приемник
    2. Передачи дополнительных данных этого объекта из ПКС в ПКО.
    3. Передачи дополнительных данных этого объекта из ПКО в ПКС.
    4. Верны 1 и 2 вариант

    Почему вариант 4 неверный? Ведь можно же через Параметр передавать данные из ПКС в ПКО?

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

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

  17. RomanB

    Вопрос по тесту для самопроверки:
    Как можно производить синхронизацию независимого регистра сведений?
    Почему ответ «По полям поиска» неправильный? можно же в полях поиска указать все измерения независимого регистра и получится синхронизация.

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

      Здравствуйте!
      Если Вы настраиваете ПКО для регистра сведений, там нельзя указать поля поиска

  18. Владимир

    Вопрос по уроку 1.6.4.
    Если в ИБ в табличной части документа скопировать строку, то при загрузке в КБ, вторая строка окажется с незаполненным значением ставки НДС. Понятно, что это можно обойти, поставив флаг «Не запоминать выгруженные объекты». Но почему КД ведет себя именно так? Вот с номенклатурой же он не путает, а ведь это по сути, такая же ссылка. Если же значение определять в ПКС (через ОбъектКоллекции), а не в ПКО, то все заполняется корректно. Как так?

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

      Здравствуйте!
      Этот способ конвертации «справочник — перечисление» описывается в конце урока 1.5.4, и там возникают такие же проблемы. Это не лучший способ преобразования в перечисление, сделать это в ПКС гораздо правильнее.

  19. Владимир

    Вопрос по уроку 1.6.3.
    Создаем ПКО «Контрагенты» (источник контрагенты, приемник контрагенты), ставим у него флаг «продолжить поиск по полям поиска». У ПКС оставим стандартные поля поиска, «Код» и «ЭтоГруппа». А теперь создадим пример из урока 1.6.3 (ПКО «КонтрагентыПроизвольнаяВыборка». Сразу видно, что при обработке ПКС «Родитель», цепляется ПКО «Контрагенты», исправим это, указав прямо ПКО «КонтрагентыПроизвольнаяВыборка». Смотрим на результат, видим, что загрузка происходит некорректно. После проверки всего, что только можно, понимаю, что причина может быть только в первом ПКО «Контрагенты», но ведь у вас в примере все работает. Путем экспериментов, прихожу к решению, что если снять флаг «продолжить поиск по полям поиска» у первого ПКО «Контрагенты», то все начинает работать корректно. Т.е. КД заходит в это ПКО, хоть правилах прямо указано, что обрабатывать всегда надо ПКО «КонтрагентыПроизвольнаяВыборка». Как так? Как такую ситуацию обходить в реальной работе?

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

      Здравствуйте!
      Да, есть одна ошибка, связанная с флажком “Продолжить поиск по полям поиска”. Если настроено два разных ПКО, в которых в приемнике указан один и тот же объект метаданных, то программа может брать значение этого флажка не из того ПКО, по которому происходит загрузка, а из второго.
      Чтобы это обойти, можно в обоих этих ПКО поставить флажки «Продолжить…», а в том, в котором в действительности продолжать поиск не нужно, можно в обработчике «Поля поиска» написать
      ПрекратитьПоиск = Истина;

  20. Renegade

    Видео-урок 1.6.11
    Делаю выгрузку по аналогично созданным правилам, но при выгрузке выдается ошибка

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

    2й день не могу понять в чем проблема

    Ниже ссылка с информацией из отладчика и файл правил:
    http://imgur.com/NVoNhCq
    http://rghost.ru/57067017

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

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

      • Renegade

        Спасибо проблема решилась, но появилась новая :)
        Выгрузка идет, документы создаются, но в них записывается только дата, но сами записи не попадают, хотя в файле обмена они есть, и по названиям они сходятся. Ниже файл выгрузки
        http://rghost.ru/57084487

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

          Здравствуйте!
          Попробуйте в ПКО этих документов в событии После загрузки написать
          Объект.Движения.ОстаткиТоваров.Записывать = Истина;

  21. Артём

    1.6.8. Почему используется именно обычное приложение? Ведь мы можем в толстом клиенте открыть управляемую форму, передав в нее параметры, а в них уже указать ссылки на документы. Можно также поместить данные во временное хранилище, а в форму параметром передать адрес. Таким образом у нас произойдет заполнение данных.

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

      Здравствуйте!
      Да, такой вариант тоже работает.

  22. oleg1117

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

    В модуле 1.6.8 Главы 6 (Реализация проведения документов) курса
    используется открытие формы в толстом клиенте ОБЫЧНОЕ приложение.

    Здесь можно открывать форму
    и в толстом клиенте УПРАВЛЯЕМОЕ приложении.

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

    тз = Новый ТаблицаЗначений;
    тз.Колонки.Добавить(«Док»);
    Параметры.Вставить(«ПроводимыеДокументы», тз);

    В ПКО документа ПослеЗагрузки:

    нс = Параметры.ПроводимыеДокументы.Добавить();
    УИД = Новый УникальныйИдентификатор(ПараметрыОбъекта[«УИД»]);
    …
    нс.Док = Ссылка;

    В конвертации ПослеЗагрузкиДанных:

    ВремТз = Новый ТаблицаЗначений;
    ВремТз.Колонки.Добавить(«Док»);
    Для Каждого стр из Параметры.ПроводимыеДокументы Цикл
    нс = ВремТз.Добавить();
    нс.Док = стр.Док;
    КонецЦикла;
    Парам = Новый Структура;
    Парам.Вставить(«тзДокументы», ВремТз);

    ОткрытьФорму(«ВнешняяОбработка.ДокументыДляПроведения.Форма.Форма», Парам);

    И в подключаемой обработке ДокументыДляПроведения в процедуре
    ПриСозданииНаСервере формы список проводимых документов
    загружаем из параметра формы:

    об = РеквизитФормыВЗначение(«Объект»);
    тчСписок = об.СписокДокументов;
    Пар= ЭтаФорма.Параметры.тзДокументы;
    Если НЕ Пар = Неопределено Тогда
    тчСписок.Загрузить(Пар);
    КонецЕсли;
    ЗначениеВРеквизитФормы(об, «Объект»);

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

      Здравствуйте!
      Спасибо за вариант! Проверила, в толстом клиенте действительно работает!

  23. KatherineZ

    Вопрос, касающийся урока 1.6.3 (использование запроса в ПВД) Но в этом уроке никак не осветили тему заполнения АВСкласса контрагента в зависимости от значения константы. Я оставила настройку из урока 1.6.2 в обработчике «После загрузки» в созданном ПКО Контрагенты. Но этот код не сработал. Или здесь нужно применять второй вариант, о котором говорил Евгений — смотреть значение константы и очищать реквизит АВСкласс, если константа выключена?

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

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

  24. Helen

    Здравствуйте. Возникла проблема на главе 6. лекция 1.6.8.
    Вроде по 10 раз повторила и пересмотрела ролик.. все равно не хочет открывать самодельную внешнюю обработку, даже в толстом клиенте. Пишет что не знает такого метода, как ОткрытьФорму(это через загрузку данных), хотя вручную при запуске Файл/Открыть — открывается нормально.
    в чем может быть проблема? КД версия 2.1.8, платформа 8.2.19.80
    Универсальный обмен в формате ХМЛ — версия 2.1.7

    • Helen

      В обычном приложении открылось как положено…
      Может рискнуть платформу 8.3

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

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

        • Helen

          Показалось мне или нет, что при работе с базами можно использовать платформу 8.3?На какой лучше работать с данными заданиями — на 8.2 или на 8.3? А то думаю может поставить платформу 8.3.5х?

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

            Мы пока работаем на платформе 8.2

  25. Максим

    Для выгрузки документов(регистров) с отбором по дате в видеоуроках использовался способ произвольного запроса к базе данных.
    А чем плох способ в ПКО перед выгрузкой написать что-то типа
    Если Дата < Параметры.Дата Тогда
    Отказ = истина
    КонецЕсли
    Вроде бы за линейное время отсекаем лишние записи, а написание кода выглядит попроще.

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

      Здравствуйте!
      Напишите, по какому конкретно видео-уроку возник вопрос. Там везде решаются несколько разные задачи

  26. cpo_agriz

    ПараметрыОбъекта.Получить(«ИмяПараметра») можно использовать только в ПКО, в ПКС которого реквизиты передаются в параметр?

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

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

  27. cpo_agriz

    Если используем ПВД с произвольным алгоритмом, то в ПКС можно определять значения реквизитов программно?

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

      Можно. Значение, заданное в обработчиках ПКС всегда будет приоритетным.

  28. cpo_agriz

    Видео 1.6.8. Документы выгружаются, загружаются, в форме обработки отображаются. При нажатии на кнопку «Выполнить» возникает ошибка {Форма.ФормаОбычная.Форма(5)}: Ошибка при вызове метода контекста (Записать)
    ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
    по причине:
    Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
    по причине:
    {Документ.ПоступлениеТоваровУслуг.МодульОбъекта(11)}: Поле объекта не обнаружено (Хозрасчетный)
    ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);

    • cpo_agriz

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

      • Helen

        Это наверное специально такие маленькие шутки делают, чтобы нас проверить)))

  29. cpo_agriz

    видео-урок 1.6.4. Выгружаю документ Поступление товаров. Выгружается без ошибок, загружается все данные, но выдает ошибку
    Ошибка в обработчике события ПослеЗагрузкиДанных (конвертация)
    Обработчик = ПослеЗагрузкиДанных (конвертация)
    ОписаниеОшибки = Поле объекта не обнаружено (ДокументыДляПроведения)
    ПозицияМодуля = (2)
    КодСообщения = 23
    В чем может быть дело?

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

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

      Ошибка в обработчике события конвертации «После загрузки данных». Описание ошибки — Поле объекта не обнаружено (ДокументыДляПроведения).
      Возможно, в этом обработчике прописан алгоритм проведения документов, но этот параметр ДокументыДляПроведения почему-то не создан. Посмотрите, где он должен был создаваться. Если не найдете ошибку, прикрепите к комментарию zip или rar архив с правилами, я посмотрю

  30. bestteacher.1c

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

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

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

      • bestteacher.1c

        С домашним заданием разобрался. Спасибо за раздел «Лучшие вопросы». Я правильно понял, что заполненный программно при выгрузке параметр нельзя передать на «другую» сторону? Передаче подлежать только параметры, созданные интерактивно (если есть флаг)?

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

          Если Вам нужно передать значение параметра на сторону приемника, лучше создать его в КД, поставить флаг и указать тип, и, если нужно, правило конвертации. А присвоить ему значение можно и программно.
          Коллекции передавать через параметр неправильно, нужно избегать этого.

  31. bytecoded

    Для параметров конвертации невозможно задать параметры их выбора? Например, отфильтровать по какому-то реквизиту.

    Нет возможности для пользователя ввести какой-либо параметр в конечной базе? Все они должны быть введены в начальной?

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

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

  32. bytecoded

    Реализация загружаемых в правила диалоговых обработок для управляемых приложений в принципе невозможна или эта тема просто не рассматривается в рамках этого занятия?

    • Евгений Гилев (Мастер-тренер)

      В текущих релизах конвертации диалоговая обработка в Управляемом приложении невозможна.

  33. zels

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

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

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

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

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

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

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

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

  34. Androsov_R@Runa.ru

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

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

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

  35. zels

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

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

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

  36. Androsov_R@Runa.ru

    Как решить данную ситуацию: если нам нужно загружать в базу приемник иерархический справочник, примем нужно загружать в уже ранее созданную там группу (например «Загрузка») с сохранением иерархии источника внутри группы «Загрузка»?

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

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

      • Androsov_R@Runa.ru

        А почему работает, если для ПКС Родитель прописать Значение = «Загрузка»? программа же должна искать элемент по наименованию?

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

          Не очень поняла, у Вас предопределенная группа с именем «Загрузка»? Тогда будет работать и код Значение = «Загрузка» в ПКС. Как будет происходить поиск элементов и групп — это зависит от настроек ПКО.
          Эту задачу можно решить и кодом на стороне выгрузки. Но тогда будет выгружаться лишняя информация. На стороне загрузки ее решать более оптимально

  37. venvlad

    Видеоурок 1.6.7
    Нажимаю провести, ошибка!!!

    f3ccdd27d2000e3f9255a7e3e2c48800.jpg

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

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

  38. venvlad

    Видеоурок 1.6.7.
    В ПКО «ПоступлениеТоваровУслуг» прописываю:
    РежимЗаписи = «Проведение»;
    РежимПроведения = «Неоперативный»;
    Из Исходной ИБ выгружается без ошибок.
    При загрузке в Конченную вылезает ошибка.

    4a47a0db6e60853dedfcfdf08a5ca249.png

  39. zels

    В задании 1.5.1 Справочник Материал должен переноситься в справочник номенклатура. Как избежать конфликта кодов? Пусть материал записался с кодом, которого нет в справочнике номенклатура. Но потом в исходной базе появилась продукция с таким же кодом (а код-поле поиска) и новая продукция «перекроет» материал…

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

      Здравствуйте!
      Можно у всех трех ПКО отключить ПКС Код и установить флажки «Генерировать новый номер или код, если не задан». Тогда коды будут уникальны

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

      Здравствуйте!
      Посмотрите на странице занятия №1 Лучшие вопросы участников курса, вопрос №3

  40. Androsov_R@Runa.ru

    Подскажите, а как осуществить следующую конвертацию: имеем документ с табличной частью (поля «Сотрудник», «Подразделение» и др.) и этот документ надо конвертировать в другой документ, который представляет из себя строку табличной части (содерит реквизиты «Сотрудник», «Подразделение»). Т.е. конвертация «Строка табличной части» — «Документ».
    Не нашел такого кейса/шаблона или что-то я упустил?

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

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

  41. Klukva

    Добрый день. В домашнем задании 1.5.3 необходимо перенести остатки регистра накопления ОстаткиТМЦ, и сделать это нужно документом ВводНачальныхОстатков. Но у регистра измерение Номенклатура имеет смешанный тип данных — либо Материал, либо Продукция. Подскажите пожалуйста как в таком случае выполнять перенос данных? Ведь правило конвертации можно указать лишь одно, а если не указывать вообще, переносятся не все остатки.

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

      Здравствуйте!
      Можно в ПКС Номенклатура определить параметр ИмяПКО в зависимости от типа выгружаемой ссылки

  42. Владимир Выдрыч

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

    Действительно нет способа открыть управляемую форму и связать ее с объектом, или все-таки есть, но в уроках это не рассматривается?

    • Yasen

      В данном случае снимать конфигурацию с поддержки не требуется.
      В Конфигураторе в меню «Сервис-Параметры-Общие» достаточно установить радиокнопку в «Управляемое приложение и обычное приложение». Это даст возможность запускать 1С в любом из режимов.
      Снятие же конфигурации с поддержки может потребоваться, если требуется поменять свойство «Основной режим запуска» — то есть, режим приложения по умолчанию для данной конфигурации.

  43. Klukva

    Добрый день. В видео 1.6.3, при формировании запроса в ПВД, лектор в том числе выбирает ссылку: Контрагенты.Ссылка. И в последствии ПВО (у которого установлена галочка искать по уникальному идентификатору) осуществляет поиск по УИ понимая, что это Ссылка. Т.е. система всегда будет воспринимать поле результата запроса с псевдонимом Ссылка как уникальный идентификатор?

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

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

  44. Юрий

    ДЗ 1,5,1 Сказано, спр.Материалы нужно перенести в спр.Номенклатура, а как сделать чтобы все материалы переносились в папку «Материалы» спр.Номенклатура?

  45. NikolayNN

    Здравствуйте!
    Интересно почему для параметра «ПараметрыОбъекта» (обработчик «После загрузки») выбран тип «соответствие», а не «структура»? Ведь ключом является имя параметра, т.е. всегда строковый тип.

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

      Здравствуйте!
      Могу только предположить. Структура очень чувствительна к той строке, которая выступает в качестве Ключа. Эта строка должна удовлетворять требованиям для наименования переменной. А у Соответствия Ключ может быть любой строкой

  46. Alexander Fokin

    1. ВнешняяОбр.ПолучитьФорму() — почему не работает в толстом клиенте упр. приложения? В Синтакс-помощнике ошибка?
    Замечания:
    1. Лучше не передавать УИД через параметр таким сложным образом (для вставки ссылки в свою обработку), достаточно получить его методом ПолучитьСсылкуНового() в конечной базе.
    2. Не кошерно использовать обычное приложение, чтобы просто показать форму своей обработки, это можно сделать и в толстом клиенте упр.приложения методом получитьформу() и установки значений реквизитов этой формы.

    • Евгений Гилев (Мастер-тренер)

      Добрый день!

      1. ВнешняяОбр.ПолучитьФорму() – почему не работает в толстом клиенте упр. приложения? В Синтакс-помощнике ошибка?
      Возможно Вы не учли примечание, цитата:
      При работе внешних обработок в толстом клиенте следует учитывать, что при работе в режиме управляемого приложения возможно открытие только управляемых форм, при работе в обычном режиме — только обычных форм.

      Замечания:
      Ок, спасибо.

  47. aPOSTAL

    В видеоуроке 1.6.9 при переносе док-а, который проведен и в исходной и в конечной базе, почему-то по умолчанию предлагается выполнять его перепроведение.
    Зачем?

    • aPOSTAL

      Понятно, что если в источнике изменились реквизиты док-а, то после переноса его надо перепровести. Есть ли возможность в обработчике ПослеЗагрузки понять это? Параметр ОбъектМодифицирован тут, наверное, не поможет?

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

        Дело в том, что при загрузке документа табличная часть полностью замещается, если в правилах не указано обратное. Поэтому документ все равно будет перезаписан. Про параметр ОбъектМодифицирован смотрите вопрос №4 из лучших вопросов на этой странице

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

      Здравствуйте!
      Потому что в процессе загрузки документ мог быть изменен, и при проведении движения сформируются по-новому

  48. benony

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

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

      Здравствуйте!
      При создании собственных переменных Вы можете воспользоваться префиксами. Многие глобальные переменные и некоторые методы в конвертации данных имеют префикс «од» — обмен данными. Вы можете использовать какой-то другой префикс

  49. Stan

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

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

      Здравствуйте!
      Да, обычно так остатки и переносят.

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