Занятие № 04. Курс «1С:Конвертация данных 2.1 – Профессиональная настройка правил обмена и типовые сценарии переноса данных»
Преобразования при переносе данных
Изучите теорию модуля № 1:
- Глава 5. Перенос разнотипных данных
Выполните практические задания:
Отчеты по домашним заданиям размещайте по ссылкам, указанным выше. Отчеты, опубликованные на этой странице, удаляются без предупреждения.
Ваши вопросы по материалам данного занятия задавайте в комментарии ниже.
Общие вопросы по курсу, не связанные с конкретным занятием, задавайте на странице: http://kursy-po-1c.ru/data-conv/all-hw/convdata-common-qa/
Общие вопросы по курсу, не связанные с конкретным занятием, задавайте на странице: http://kursy-po-1c.ru/data-conv/all-hw/convdata-common-qa/
К сожалению, у Вас недостаточно прав для дальнейшего просмотра.
Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.
Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.
Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.
Комментарии / обсуждение (184):
Комментарии закрыты

Можно заставить конвертацию открывать внешнюю обработку в управляемой форме, хотя и только в толстом клиенте. В приложенной файле такое решение. Пришлось потратить некоторое время на разработку, но видно, что такая возможность есть.
Здравствуйте!
Да, действительно, окно открывается, и список документов там заполнен. Спасибо за вариант!
Здравствуйте.
При выполнении урока (не ДЗ) не могу победить следующую проблему при переносе в составной тип. Данные переносятся как строка. На снимке видно. В обоаботчике, как и сказано в уроке прописано
Значение="ЗаПрогул";
ТипПриемника="ПеречислениеСсылка.ПричиныУвольнения";
ИначеЕсли Найти(нрег(Источник.ПричинаУвольнения),"собствен") тогда
Значение="ПоСобственномуЖеланию";
ТипПриемника="ПеречислениеСсылка.ПричиныУвольнения";
КонецЕсли;
Но в файле с данными тип не задан. Для «за пьянство…» указан «Строка», а вот для этих — ничего. Не могу понять, в чем м.б. проблема.
Здравствуйте!
Попробуйте перед выгрузкой в обработке Универсальный обмен на закладке “Дополнительные настройки” отключить флажок “Использовать оптимизированный формат”.
Этот флажок отключают, если нужно записывать в узлы типы данных. Когда он включен, все типы выгружаются в начале файла данных, а все типы, которые встречаются в узлах, игнорируется
Да, это помогло. В файле выгрузки сразу появилась запись о типе и загрузка прошла правильно.
Урок 1.4.8. Почему-то задваивается номенклатура, не срабатывает поиск. Артикул не переносится, хотя в исходном файле есть.
Посмотрите, пожалуйста, Ольга!
Урок 1.4.8. 14:01 Появляется речь о переносе документа Поступление товаров. Ранее о переносе документов не говорилось. Сам настроил — перенеслись только номенклатура, количество, сумма. Как настроить соответствия табличной части в КД? Или что нужно делать на этом уроке до раздела, где объясняется перенос табличных частей?
ПКО для документа Поступление товаров настраивается в уроке 1.3.3 «Проблема циклических ссылок».
Спасибо!! Я как-то пропустил этот урок!!!
пожалуйста, посмотрите, почему-то в уроке 1.5.1 для работников не устанавливается основная организация. Это тот же случай, что и с Артикулами?
По правилам, приложенным к комментарию, файл данных выгружается другой, все работники там с организациями. Попробуйте еще раз, может, просто правила не обновили?
Здравствуйте!
У Вас в файле данных совсем нет артикулов у номенклатуры. Это связано с тем, что КД сейчас несколько иначе работает, отключенные свойства не выгружаются. Для этих целей сейчас используются параметры объекта. Нужно создать новое ПКС, установить в нем переключатель в положение «Передавать данные в параметр», указать имя параметра — Артикул и установить этому ПКС флаг поиска.
Тогда в обработчике Поля поиска это значение будет находиться не в соответствии СвойстваПоиска, а в соответствии ПараметрыОбъекта.
Добрый день. Возникли сложности при переносе в реквизит составного типа. Урок 1.5.5.
Делаю как в уроке, прилагаю скрины, почему-то в файле выгрузки не указывает «Тип». Хотя по коду и отладочным сообщениям проваливается на второе условие.
Здравствуйте!
Попробуйте перед выгрузкой в обработке Универсальный обмен на закладке “Дополнительные настройки” отключить флажок “Использовать оптимизированный формат”.
Этот флажок отключают, если нужно записывать в узлы типы данных. Когда он включен, все типы выгружаются в начале файла данных, а все типы, которые встречаются в узлах, игнорируется
Добрый день. Вопрос по использованию информации об обработчиках. Если я правильно поняла, для того чтобы посмотреть определение того или иного обработчика, нужно знать к какому типу или виду (конвертации, правил, свойств) он относится. И часто приходится перебирать все обработчики, чтоб найти определение нужного параметра. Как я поняла эта справка содержится во встроенной обработке. Получается, что нет возможности найти то, что мне нужно например по индексу или по поиску как в справке? Я правильно понимаю?
Здравствуйте!
Если открывать информацию об обработчиках из конкретного обработчика, то автоматически открывается информация именно об этом обработчике. Это самый удобный способ. А больше никакого поиска там нет
Добрый день.
Вопрос по вопросу 1 теста для самопроверки. Не могу понять: почему ответ = 1? Чем в данном случае является ИмяПКО? Я понимаю, что ИмяПКО — это имя правил самого ПКО, но на картинке это имя «Сотрудники».
Здравствуйте!
Да, ИмяПКО в данном случае — «Сотрудники». То есть оно одинаковое для каждого выгружаемого сотрудника. Значит, ключ выгружаемых данных тоже будет одинаковый. А это ключ уникальности объекта. То есть для программы все выгружаемые сотрудники будут считаться одним и тем же объектом
Вопрос к домашнему заданию 1.4.2, перенос организации.
В решении домашнего задание в ПКО Организации в ПКС Наименование в обработке «Перед выгрузкой» код:
Значение = Источник;
В ПКО РеализацияТоваровУслуг в ПКС Организация код:
Значение = Константы.Организация.Получить();
В моем варианте решения
ПКО Организации, ПКС Наименование: Значение = Константы.Организация.Получить();
ПКО РеализацияТоваровУслуг, ПКС Организация: Значение = 1;
то же все работает.
Есть какое-то принципиальное различие?
Здравствуйте!
Нет, для этой конкретной задачи — нет разницы. В реальных задачах если ПКО всегда должно возвращать определенное значение, можно в нем его и получить, и вызывать, передавая ему значение = 1, как Вы сделали. Если же нужно, чтобы в ПКО передавались разные значения, а оно бы на основании них выгружало объект (или ссылку на него), то придется передавать ему значения.
Добрый день!
Возникли вопросы по заданию №1.4.2
1. Достаточно ли для решения вручную создать в Конечной ИБ элемент справочника «Организация», а в обработчике
ПКС реквизита «Организация» просто напрямую указать «Значение = ?
2. Каким образом оптимальнее настроить перенос реквизита «Единица измерения»: использовать запрос для создания-поиска в Конечной ИБ необходимого элемента или можно обойтись без него?
Здравствуйте!
1. Да, можно и так
2. Вручную писать запрос совершенно необязательно. Можно создать ПКО без источника для конвертации строки в справочник, как рассказано в курсе
При выполнении домашнего задания 1.4.1 я не делала проверку на группу.
Создала ПКС для реквизита «Юридическое лицо». 6) В обработчике «Перед загрузкой»: Значение = ?(Источник.ЮридическоеЛицо = истина, «ЮридическоеЛицо», «ФизическоеЛицо»).
Тем не менее ошибки никакой не выдалось, и правила отработали корректно. Почему так?
Здравствуйте!
В этом варианте свойство выгрузится в файл и у группы тоже. Но при загрузке выполняется проверка, есть ли такое свойство у объекта. Поэтому ошибки не возникает. Однако файл с данными становится больше за счет лишней информации.
Здравствуйте!
Подскажите, пожалуйста, как переносить реквизиты с типом данных строка в реквизиты с типом данных дата?
Как, например, конвертировать строку вида «МС.01.2015» в дату вида «Январь 2015»?
Здравствуйте!
Используйте метод глобального контекста Дата(), чтобы выгрузить готовое значение типа Дата. Это самый лучший путь
Здравствуйте!
При переносе состовного типа данных (урок 1.5.5) не удалось добиться переноса в перечисление. А если отключаю галочку «Использовать оптимизированный формат» при выгрузке, то в конечную базу загружаются не все объекты. В чем причина, и как это исправить?
Здравствуйте!
Не сталкивалась с таким пока что. Со снятым флажком обычно все работает корректно. Запакуйте правила и файл с данными, выгруженный со снятым флажком, в архив с расширением .zip или .rar и прикрепите к комментарию.
Здравствуйте!
Не сталкивалась с таким пока что. Со снятым флажком обычно все работает корректно. Запакуйте правила и файл с данными, выгруженный со снятым флажком, в архив с расширением .zip или .rar и прикрепите к комментарию.
Некоторые ПКС с пустым источником не отрабатываются, но не все. Система их игнорирует. Приходится в обработчик ПередВыгрузкой определять параметр Значение. Подскажите пожалуйста. Где про это можно подробней почитать или посмотреть. Именно в каких случаях и почему это так?
Здравствуйте!
Если ПКС с пустым источником и без флажка «Получить из входящих данных», то происходит еще попытка получить значение из выгружаемого объекта по имени свойства-приемника. Если не получилось, то параметр Значение останется пустым.
Подскажите, пожалуйста, что мне делать с аварийными завершениями платформы? В приложении мои правила. При выгрузке платформа завершается аварийно. У меня 1С:Предприятие 8.3 (8.3.6.2152)
Я забыл указать, что я пытаюсь выполнить ДЗ 1.4.2, соответственно пытаюсь выгрузить документы продажи.
Здравствуйте! ПКО Номенклатура и ПКО СвойстваНоменклатуры взаимно ссылаются друг на друга, и оба отмечены флагом НеЗапоминатьВыгруженные. Это приводит к зацикливанию. Снимите этот флажок в каком-нибудь из правил
спасибо большое. Помогло.
В тесте для самопроверки вопрос 2. Ответ: нет правильного ответа. Так как же все-таки алгоритмы возвращают значение?
Здравствуйте!
Алгоритмы — это франменты кода, которые выполняются с помощью метода Выполнить(). Они не оформлены в функции и процедуры. Поэтому они могут только изменять содержимое любых переменных, существующих в том контексте, где они выполняются
Всем здравствуйте!
При просмотре данной темы обнаружил, что в альбоме отсутствует слайд «Конвертация перечисление — справочник».Прошу обратить внимание.
Ежели данная новость повтор или я ошибся, удалите сиё сообщение.
С уважением
Здравствуйте!
Действительно, нет такого слайда. Спасибо за информацию!
Как передать из ПКС строки табличной части документа строку табличной части этого же документа в ПКО ?
Здравствуйте! Обычно для этого используют входящие — исходящие данные. В ПКС текущая выгружаемая строка находится в параметре ОбъектКоллекции. Можно ее записать в Исходящие данные, и в ПКО она будет доступна в параметре ВходящиеДанные
Добрый день!
Урок 1.5.5.
Сделано всё как в видео-уроке
Для причины увольнения в ПриВыгрузке код:
Если Найти(Источник.ПричинаУвольнения,»Прогул»)>0 Тогда
Значение = «ЗаПрогул»;
ТипПриемника = «ПеречислениеСсылка.ПричиныУвольнения»;
ИначеЕсли Найти(Источник.ПричинаУвольнения,»собств»)>0 Тогда
Значение = «ПоСобственномуЖеланию»;
ТипПриемника = «ПеречислениеСсылка.ПричиныУвольнения»;
//Иначе
КонецЕсли;
При выгрузке в xml:
Для Абрамова: ПоСобственномуЖеланию без указания типа.
Для Абдулова: За пьянство на рабочем месте с типом строка.
Однако в конечную базу для Абрамова загружается значение = ПоСобственномуЖеланию как строка, и перечисление не выбирается в итоге.
Здравствуйте!
Попробуйте перед выгрузкой в обработке Универсальный обмен на закладке “Дополнительные настройки” отключить флажок “Использовать оптимизированный формат”.
Так заработало.
Спасибо.
Означает ли это что данный флажок нужно отключать всегда?
Этот флажок нужно отключать, если нужно записывать в узлы типы данных. Когда он включен, все типы выгружаются в начале файла данных, а все типы, которые встречаются в узлах, игнорируется
Спасибо.
Так понятно.
Видимо это ошибка версии 2.1.8.2.
Можно в обработчике ПриВыгрузке прописать
Если Найти(Источник.ПричинаУвольнения, «Прогул») > 0 Тогда
УстановитьАтрибут(УзелСвойства, «Тип», «ПеречислениеСсылка.ПричиныУвольнения»);
ИначеЕсли Найти(Источник.ПричинаУвольнения, «собств») > 0 Тогда
УстановитьАтрибут(УзелСвойства, «Тип», «ПеречислениеСсылка.ПричиныУвольнения»);
КонецЕсли;
Тогда будет работать с установленным флажком “Использовать оптимизированный формат”, но не будет работать без него. Возникнет ошибка: Дублирование атрибута! Может есть еще какой-то способ обхода?
Здравствуйте!
Это точно не ошибка. Так работает оптимизация. Такого рода задачи встречаются довольно редко, но если уж нужно выгрузить тип данных, лучше отключить оптимизированный формат, чем вручную записывать узел в файл
Урок 1.5.5 Перенос в реквизит составного типа.
1) Если значение источника не соответствует ни одному из условий алгоритма — оно переносится как строка. Почему именно как строка?
2) Если рассмотреть аналогичную ситуацию: источник — справочник ссылка, а приемник — строка и справочник ссылка. И текущее значение источника не удовлетворяет ни одному из условий. Что произойдет?
Здравствуйте!
1. Потому что строковое значение записывается в файле данных в этот реквизит с типом «Строка», поскольку это тип по умолчанию. При загрузке происходит попытка эту строку записать в реквизит, и эта попытка оказывается успешной, поскольку строка есть среди типов свойства.
2. В отличие от строки, элементы справочника не могут выгружаться без ПКО. Если в этом ПКС нигде не указано, по какому правилу выгружать это значение, будет предпринята попытка найти ПКО по типу этого выгружаемого объекта свойства. Если какое-то ПКО будет найдено, то тип конечного значения будет определен настройками этого ПКО. А если не будет, то свойство будет выгружено пустым
Доброго дня.
Дошел до этого момента как переносить составные типы. Но в видео, мне показалось, не очень полно рассмотрен этот момент. Может конечно он есть где-то дальше, но у меня вопрос такой:
Есть ли какой-то оптимальный способ переносить данные из составного типа в составной, особенно в том случае когда типов много и они могут быть разными в двух базах? Например, бывает такой реквизит «Документ основание». Получается надо прописывать условия для каждого типа отдельно, например так:
ТипПриемника = "ДокументСсылка.ДокументРасчетов";
ИмяПКО=<Имя ПКО для документа расчетов>;
КонецЕсли;
Добрый день.
Да, лучше всего для каждого типа явно указать ПКО.
Если каждый возможный тип документа-основания переносится только в один тип в базе-приемнике, то можно понадеяться на автоматический подбор правил в программе. Правило подбирается по фактическому типу ссылки в свойстве, происходит попытка найти ПКО с таким же типом объекта-источника. Но гораздо лучше прописать условия явно, так меньше неприятностей в перспективе будет.
Здравствуйте!
Скажите пожалуйста как правильно вновь создать ПКС для табличных частей документов,
если при создании ПКС допушена ошибка. Подробности на рисунке.
При попытке создать вновь ПКС для табличных частей они уже недоступны для выбора,
даже если предыдущее правило помечено на удаление.
Удалить «неправильное» правило тоже не получается
Здравствуйте!
Объекты, помеченные на удаление, можно удалить с помощью стандартного сервиса.
Можно попробовать исправить ошибки ПКГС, обычно это возможно
И ПКС, и ПКГС можно добавить не только через сервис сопоставления свойств, но и вручную, используя командную панель на форме
Здравствуйте!
Зачем в уроке 1.5.2 используется ПКО Организация_ВтораяОрганизация?
У меня происходит перенос организации по коду и без использования этого ПКО в ПКС «КодФилиала->Организация? Т.е. в конечной базе организация получается по коду из значения строки «КодФилиала».
Здравствуйте!
На этой странице в Лучших вопросах участников курса посмотрите вопрос №5, там есть объяснение этого механизма. Но на мой взгляд, лучше настраивать ПКО явно, это повысит стабильность работы обмена.
Здравствуйте, в видео для главы 5 (1.5.1 Заполнение реквизитов приемника) когда мы рассматриваем 3-ий вариант загрузки (по константе), сказано что правильнее всего описывать алгоритм в событии после загрузки. Затем мы вообще отключаем синхронизацию по организации в ПКО работники. Но при событии после загрузки, как я понимаю объект в конечной базе будет записывается дважды или это не так? Вот если бы мы не отключали Синхронизацию по работнику и писали код в событии перед загрузкой, то сначала организация у нас подставилась бы третья, а потом переподставилась бы вторая согласно алгоритму для второго варианта загрузки описанного раньше в видео. И получается что если мы уж отключили ПКС Организация в ПКО Работники, то получается лучше писать алгоритм по переносу константы в событии Перед выгрузкой, тогда объект в конечной базе запишется 1 раз. Или я что-то не учел?
Здравствуйте!
Если выполняется алгоритм После загрузки, то это не значит, что объект будет записан два раза. Этот алгоритм влияет на запись объекта только в одном случае — если объект был найден в базе-приемнике, и в процессе загрузки он не был изменен, то есть его не нужно было бы записывать. Но для него выполняется алгоритм После загрузки (или При загрузке, там тот же механизм), и по умолчанию считается, что объект мог быть в этих алгоритмах, и тогда он записывается. Чтобы показать системе, что алгоритм не изменяет объект, и не нужно его записывать, существует параметр ОбъектМодифицирован, его тогда устанавливают в «Ложь», и объект не записывается.
В событии Перед загрузкой объект еще не создан, и записать в него ничего нельзя.
Здравствуйте. У меня в обработке Универсальный обмен на закладке “Дополнительные настройки” не включен флажок “Использовать оптимизированный формат”. Но причина увольнения у Абрамова все равно переносится как «ПоСобственномуЖеланию». Может это ошибка версии конвертации? Или самой обработки в этом релизе? У меня стоит версия 2.1.8.2.
Я еще заметила, что когда писала свои правила обмена, мне нужно было в регистр «Соответствие объектов информационных баз» писать тип источника и тип приемника. Когда я передавала через параметры «ТипПриемника», «ТипИсточника», записывалось просто значение «Справочник». И мне в правилах приходилось писать конкретное значение строкой, например, «СправочникСсылка.Контрагенты».
Здравствуйте!
Протестировала Ваши правила, они работают корректно. Если флажок «Использовать оптимизированный формат» снят, то причина увольнения переносится как значение перечисления. Попробуйте еще раз. Только сначала удалите этого контрагента из базы-приемника.
Вы переносили тип значения через параметры из источника в приемник? По умолчанию могут переноситься только примитивные типы. Значение типа «Тип» не может быть записано в XML файл автоматически.
«Если флажок «Использовать оптимизированный формат» снят, то причина увольнения переносится как значение перечисления.» — почему???
Здравствуйте!
Когда установлен флажок «Использовать оптимизированный формат», то типы данных описываются в самом начале файла, а в каждом свойстве не указываются. Если есть задача, в которой тип данных указывается в свойстве «вручную», то есть в обработчиках событий, то этот флажок нужно снимать. Попробуйте выгрузить с установленными и снятым флажком, и посмотрите файл данных, как выглядят объекты и свойства
Добрый день. Может быть сегодня неудачный для меня день, но я не могу понять почему правильный ответ 1 на первый вопрос из теста для самопроверки.
И не могу понять почему будет более оптимальным использовать обработчик ПКО, а не записать значение в ПКС.
Здравствуйте!
Вопрос 1. Если КлючВыгружаемыхДанных — это ключ уникальности выгружаемого объекта. Т.е. если встретился второй объект, у которого такой же ключ, то он выгружаться не будет. Если ключ этот — имя правила конвертации, то он будет одинаковым для всех объектов, которые выгружаются по этому правилу конвертации. Значит, по нему не может быть выгружено больше одного объекта
Вопрос 3. Есть общее правило: все, что не зависит от данных базы-Источника, лучше заполнять при загрузке. В данном случае комментарий одинаковый для всех объектов. Если заполнять его в ПКС, то он будет каждый раз вместе с объектом выгружаться в файл, и файл получится больше. Кроме того, выгрузка будет идти дольше.
Ольга, добрый день! Ну опять у меня «не взлетели» правила из видео. Видео 1.5.5. «Перенос в реквизит составного типа данных». При переносе справочника работников неправильно переносится причина увольнения, если название соответствует одному из перечислений: в частности у Абрамова подставляется причина увольнения «ПоСобственномуЖеланию», при попытке посмотреть что это такое выдается тип — строка. То есть значение перечисления не подставляется. Я повторяю все действия из видео. Проверила данные правила на версии КД 2.1.6.1 и обработках данной версии — таже самая проблема. Подскажите, в чем ошибка? Правила прилагаю.
Ольга, нашла Ваш ответ на аналогичный вопрос. Убрала флаг “Использовать оптимизированный формат” на закладке “Дополнительные настройки” и все получилось. Вопрос снимаю.
Хорошо)
Подскажите, при выполнении ДЗ 1.4.1 создавал служебное ПКО для переноса перечисление в справочник, расскажите почему для него нельзя настроить ПВД
Здравствуйте!
Вручную ПВД настроить можно, но если оставить стандартную выборку, выгрузка по нему все равно происходить не будет. По умолчанию выборка значений перечислений не предусмотрена
Здравствуйте.
Видео 1.5.4.
Не могу понять почемму код:»
Если Источник.СтатусДокумента = Cправочники.СтатусыДокументов.ВПроцессе Тогда
Значение = «ВРаботе»;
ИначеЕсли Источник.СтатусДокумента = Справочники.СтатусыДокументов.Завершен Тогда
Значение = «Выполнен»;
КонецЕсли;
»
Надо выполнять в обработчике «ПриВыгрузке» а не «ПередВыгрузкой».
Здравствуйте!
Посмотрела видео-урок, этот код был именно в обработчике ПКС Перед выгрузкой
Добрый вечер! Вопрос по видео 1.5.4.Не совсем понятно место (8:25), где рассказывается про использование Алгоритмов(Замена кода на Выполнить(Алгоритмы.ПередВыгрузкойСостоянияДокумента)).
В алгоритме прописано:
Значение = "ВРаботе";
ИначеЕсли Источник.СтатусДокумента = Справочники.СтатусыДокументов.Завершен Тогда
Значение = "Выполнен";
КонецЕсли;
и этим кодом заменяется код:
Выражение = "Перечисления.СостоянияДокументов.ВРаботе";
ИначеЕсли Источник.СтатусДокумента = Справочники.СтатусыДокументов.Завершен Тогда
Выражение = " Перечисления.СостоянияДокументов.Выполнен";
КонецЕсли;
Почему правильно срабатывает, если указано «выражение», а в алгоритме «Значение»?
Здравствуйте!
Параметр Значение используется, когда значение из исходной базы должно быть сконвертировано и выгружено в файл данных так, чтобы в конечной базе корректно загрузиться. В данном случае это имя элемента перечисления. Программа смотрит, что в этом ПКС тип приемника — это перечисление, а в значение записана строка, поэтому она выгрузит в файл узел, в котором будет тип приемника и эта строка. При загрузке она будет искать элемент с таким именем в указанном перечислении.
Параметр Выражение используется, чтобы выгрузить просто строку кода, без конвертации и изменений, которая должна выполниться при загрузке в конечной базе, и результат ее выполнения будет подставлен в этот реквизит загружаемого объекта. В нашем случае при загрузке программа выполнит примерно следующее
Объект.СостояниеДокумента = Выполнить(Выражение);
Добрый вечер.
Есть вопросы, которые выходят за рамки решаемой задачи, я не знаю куда писать подобные вопросы, по этому простите если что не так.
1) Во всех обработчиках доступен параметр «Параметры», тип структура — это единый глобальный сборник параметров?
Можно ли использовать параметры определенные в процессе выгрузки данных на этапе их загрузки?
2) На форме элемента справочника Конвертации есть закладка Параметры — там указываются совсем другие, чем о которых я говорил в первом вопросе. Для чего они нужны?
3) Зачем разделять параметры на те которые хранятся в структуре и те которые во втором вопросе?
Здравствуйте!
1) Параметры — это глобальная переменная, которая определяется по умолчанию как Структура. Эта переменная существует на протяжении всей выгрузки, и на протяжении всей загрузки. Но поскольку загрузка — это другой процесс, который выполняется в другой базе, то параметры, созданные при выгрузке, автоматически на сторону загрузки не попадают.
2) На закладке Параметры в КД указываются те параметры, которые будут добавлены в глобальную структуру Параметры. При выгрузке в структуру будут добавлены все эти параметры. Если установить флаг «При загрузке», то параметр будет добавлен в структуру Параметры на стороне загрузки (пустой). А если установить флажок «Передавать при выгрузке», то значение параметра, которое было установлено при выгрузке, будет записано в файл данных, а при загрузке получено и присвоено параметру на стороне загрузки (Для передачи параметров ссылочных типов нужно в этом случае ПКО).
Добрый вечер.
В решении этих задач Евгений использует параметр ПКО «ключ выгружаемых данных» — после просмотра совсем понимаю что это — раньше я думал, что это и есть так называемый узел ссылки.
Прочитав описание этого параметра в справке я пришел к выводу, что это уникальный идентификатор узла выгруженного объекта в файле обмена данными. После просмотра видео предположил, что значение параметра «ключ выгруженных данных» может любой примитивный тип данных и немного не примитивный например УИ, даже такой УИ, который сгенерирован методом «Новый УникальныйИдентификатор».
Я немного сомневаюсь, что правильно понял определение из справки, поэтому скажите, пожалуйста, что такое ключ выгружаемых данных, где он находится в узле объекта и верны ли мои предположения по этому поводу?
Что будет если у конвертируемого объекта, поиск которого осуществляется по УИ, установить параметр ключ выгружаемых данных в некое числовое значение, то повлияет ли это на синхронизацию данных?
Что такое узел ссылки — это тот самый тег «Ссылка» в узле выгруженного объекта?
Здравствуйте!
Посмотрите на странице Занятия 3 В разделе «Лучшие вопросы участников курса», вопрос 10 «Ключ выгружаемых данных».
Ключ выгружаемых данных не попадает в файл выгрузки. Он существует только на этапе выгрузки и только для одной цели — чтобы один и тот же объект, который встретился при выгрузке два раза, не выгружался в файл данных целиком повторно. По умолчанию Ключ выгружаемых данных — это результат метода ЗначениеВСтрокуВнутр(Источник). Если выгружаемый объект-Источник это элемент справочника или документ, то все отрабатывает хорошо. Бывает, что выгружается строка табличной части ВыборкаДанных, или просто текстовая строка в элемент справочника, тогда Ключ выгружаемых данных определяет разработчик так, чтобы для каждого выгружаемого объекта он был уникален.
Ключ выгружаемых данных никак не влияет на синхронизацию.
Да, узел ссылки — это узел [Ссылка] в узле каждого объекта в файле данных.
и еще вопрос. Чем отличается Значение от Выражение? в первом случае будет поиск по переданному значению, во втором просто подставится переданное значение? когда лучше использовать первое, а когда второе?
Значение — это значение, которое будет сконвертировано. Например, оно может быть передано в ПКО для выгрузки объекта. А Выражение — это строка кода, который выполнится в приемнике, и результат которого будет присвоен напрямую реквизиту в приемнике. Кстати, можно использовать Выражение в случае составного типа данных реквизита в приемнике.
Добрый вечер.
Я правильно понял если в ПКС у обработчике «Перед выгрузкой» задать параметр выражение: «Справочники.Номенклатура.НайтиПоКоду(«1″)» то при загрузке объекта будет в реквизит приемника будет помещен результат этого метода менеджера Справочники.Номенклатура?
Здравствуйте!
Да, именно так
и еще вопрос по уроку 1.5.5.
Если в Источнике ПКС не составного типа, например, справочник Пользователи, а в Приемнике составного типа, нужно ли всегда указывать ТипПриемника ?
И наоборот, если ПКС в Источнике составного типа, а в Приемнике не составного типа ?
Здравствуйте!
Обычно это ссылочные типы, и можно просто для каждого из типов создать и указать ПКО. Т.е. в зависимости от типа данных (или поставленной задачи) можно параметру ИмяПКО присвоить имя нужного ПКО, и именно оно будет использоваться, и в свойство попадет результат работы этого ПКО, соответствующий объект.
Если же это примитивные типы или перечисления, тогда да, можно использовать ТипПриемника. Это если составной тип в Приемнике. Если же в Приемнике не составной, то достаточно просто прописать алгоритм преобразования к этому типу.
Не совсем поняла про «УзелСсылки» из урока 1.5.4 и почему там происходит кэширование
Здравствуйте!
Кэширование работает таким образом: когда элемент встречается по ссылке первый раз за эту выгрузку, то происходит выгрузка этого элемента в узел “Объект”, этот узел вставляется в файл данных, а в узел свойства, в котором встретился этот элемент, вставляется полный узел ссылки. Он содержит информацию, необходимую для поиска элемента в базе данных (поля поиска, идентификатор и т.д.). А выгруженный элемент запоминается в структуре выгруженных объектов с присвоением ему “Нпп” – номера по порядку. И в дальнейшем, когда он будет встречаться в процессе выгрузки, в узел свойства будет вставлен узел ссылки только с этим Нпп – не полный узел ссылки.
Поэтому, когда Евгений отключил кэширование для правила, то каждый раз, когда этот элемент справочника встречался в процессе выгрузки, он выгружался полностью в отдельный узел “Объект” и в свойство вставлялся полный узел ссылки. Поэтому все заработало, хотя узел “Объект” был пустым
спасибо))
а зачем вообще мы используем УзелСсылки в обработчике ПриВыгрузке? как еще это может быть использовано?
Здравствуйте!
В случае ссылочных объектов УзелСсылки в обработчике ПриВыгрузке уже сформирован и закрыт. Можно его, например, сохранить в параметр, а потом вставить в свойство какого-нибудь другого объекта. Но это все работа вручную с xml, она бывает нужна не часто, в случае сложных пребразований
Ольга, подскажите, пожалуйста, почему когда в ПКС у нас имеются разные типы данных и я создаю правило ПКО конвертации к ним, то в правиле ПКО объект источник необходимо очищать? Ведь все равно у меня тип Источника ПКО совпадает с типом источника ПКС! У меня из-за неочищенного поля не получалось ДЗ, хотя все кроме этого правильно сделал.
PS более того в ПКО у меня все данные берутся из ВходящихДанных — так что тип Источника ПКО вообще не должен играть никакой роли.
Не очень поняла, как Вы настроили правила. Но, судя по всему, ошибка в чем-то другом. Вы можете обратно установить Источник и воспроизвести ошибку? Если получится, прикрепите к комментарию правила в zip или rar архиве, я напишу, в чем дело. Только используйте, пожалуйста, страницу с вопросами по Домашним заданиям
http://xn—-1-bedvffifm4g.xn--p1ai/data-conv/all-hw/questions-on-homeworks/
Добрый день! Делаю все как в главе 1.5.5 в ПКС ПричиныУвольнения ПередЗагрузкой модуль
Если Найти(Источник.ПричинаУвольнения, «прогул»)>0 Тогда
Значение = «Прогул»;
ТипПриемника = «ПеречислениеСсылка.ПричиныУвольнения»;
ИначеЕсли Найти(Источник.ПричинаУвольнения, «собств»)>0 Тогда
Значение = «ПоСобственномуЖеланию»;
ТипПриемника = «ПеречислениеСсылка.ПричиныУвольнения»;
КонецЕсли;
выгружается строка «ПоСобственномуЖеланию», а тип приемника игнорируется.
Здравствуйте!
Видимо, в обработке Универсальный обмен на закладке “Дополнительные настройки” включен флажок “Использовать оптимизированный формат”.
Об этом рассказано в видео-уроке 2.5.1
Отключите этот флажок, и все должно получиться
Здравствуйте.
Скажите пожалуйста, почему при конвертации справочника в перечисление используется именно Выражение = перечисления.состоянияДокументов? Можно ли использовать Значение = перечисления.состоянияДокументов?
Здравствуйте!
Да, можно использовать параметр Значение. Тогда в него нужно просто записать имя элемента перечисления в виде строки. Тип перечисления система определит по значению Приемника в ПКС
Добрый день.
Вопрос скорее по решению в дз, когда конвертировали организацию из константы в справочник.
В видеорешении в пкс (->организация) программно передавалось значение константы, а в служебном пко организации определялось пкс наименование, где значение = источник.
В своём решении я делал немного по другому. Я в служебном ПКО организации программно определял пкс наименование, как Значение = константы.организация.получить(), и столкнулся с проблемой, что в ПКО домумента пкс (->организации) источник оставался пустым (не заполнялся программно) и почему-то тогда не вызывалось служебное пко организации. Проблему решил инициализировав пкс (->организации) фиктивным значением Значение = «1»; тогда служебное пко стало вызываться и там в наименование подставлялось значение константы.
Вопрос в следующем, имеет ли право на существование мой вариант, и как принудительно заставить вызваться ПКО, если в ПКС не указан источник и программно не заполнено значение?
Здравствуйте!
Да, можно и так сделать. Ваш способ ничем не хуже.
Если в ПКС переменная Значение остается пустая, то ПКО, указанное в этом ПКС, не выполняется. Вы все правильно сделали, так обычно и делают. Пишут
Значение = 1;
Добрый день.
Если я ничего не пропустил, то в данной теме рассматривается только конвертация предопределенных значений в перечисление. А что изменится, если значения будут не предопределёнными? Как в таком случае выполнить конвертацию в перечисление?
Здравствуйте!
Если нужно перенести не предопределенные элементы справочника в значения перечисления, тогда Вам предстоит решить, по какому принципу эти элементы должны соответствовать значениям перечислений. Либо по значению какого-либо реквизита справочника. Либо просто по наименованию. Либо по вхождению какой-либо строки в наименование. И нужно будет прописать код, аналогичный тому, который показывает Евгений в видео-уроках. Например,
Если Источник.СтатусДокумента.Наименование = «В процессе» Тогда
Значение = «ВРаботе»;
и так далее
Добрый день. Собственно по занятию 3 вопроса.
1. В последнем уроке для строк не проводилась строгая типизация получателя. Как-то размыто сказано, что «попробуем», и «о все в порядке». Я правильно понял, что по умолчанию значение пытается перейти в тот же тип, что был у источника?
2. Ответ на вопрос 2 по заполнению значений по умолчанию в обработчике ПослеЗагрузки. Там сбрасывается модифицированность для исключения лишних инициаций записи. Но проверки на изменение других реквизитов не проводится. Насколько это корректно? Если нет, можно-ли использовать для проверки необходимости записи это самое свойство модифицированности, но в начале обработчика?
3. Запредельно удобный метод показан в ответе на последний вопрос. Но там же уточнено, что он не документирован. Есть-ли хотя-бы 90-я вероятность, что его не уберут в следующих версиях обработки? (понятно, что можно самому обработку поправить, но клиенты-то отваливаются бывает и не хотелось бы их подставлять неожиданно ставшими неработающими загрузками.)
Здравствуйте!
1. По умолчанию у выгружаемого свойства указывается тот же тип, что и в поле «Тип приемника» в этом ПКС
2. Если параметр ОбъектМодифицирован установить в значение Истина, это еще не значит, что он не будет записан. Если он был модифицирован, он будет записан все равно. Посмотрите в Занятии 5 Лучший вопрос №4
3. На мой взгляд, нет ничего удобного. В чем проблема явно настроить поиск по коду? Через несколько месяцев, открыв свои же таким образом настроенные правила, будете мучительно вспоминать, что Вы имели в виду. Разработчики конвертации попытались сделать так, чтобы в ходе выгрузки и загрузки не возникало ошибок. Поэтому обработка умеет многое «додумывать» — подбирать правила, варианты синхронизации. В результате после удачной загрузки через месяц вдруг обнаруживаешь, что загруженные данные выглядят не так, как нужно. Именно поэтому важно знать про эти скрытые механизмы, чтобы внимательно проверять свои перенесенные данные.
1. Я наверное неправильно понимаю. В последнем уроке рассматривается составной тип приемника, как возможно указать составной тип по умолчанию..
2. Вы наверное хотели написать «установить в значение ложь»?
1. Да, неправильно написала. В данном случае в ПКС в качестве типа приемника указан не тип Строка, а составной тип. Если тип приемника не определен явно, или не указан, то анализируется выгружаемое Значение. Некоторые типы система умеет определять сама, это Строка, Число, Дата, Булево, ХранилищеЗначения, УникальныйИдентификатор.
2. Да, именно так
Почему в уроке 1.5.2 Евгений пишет «Значение = Источник»
Откуда береться источник, ведь в этом ПКС источника нет.
Здравствуйте!
В параметре Источник внутри ПКО (и подчиненных ПКС) содержится тот объект, который передан для конвертации в это ПКО. В данном случае ПКО Организация_ВтораяОрганизация вызывается из ПКС «КодФилиала — Организация». В этом ПКС будет получено значение кода филиала и передано в качестве Источника в ПКО Организация_ВтораяОрганизация. Потом этот код филиала из параметра Источник копируется в ПКС Код в Значение, и в результате выгружается элемент справочника Организации с одним свойством — код, который равен коду филиала, а ссылка на этот элемент будет добавлена в реквизит Организация элемента Работники
Добрый вечер!
Скажите, почему в уроке № 1.5.1 Евгений пишет именно так:
Значение = «ОсновнаяОрганизация»?
Здравствуйте!
Можно в параметр Значение записывать имя предопределенного элемента. Тип этого свойства программа добавит в узел сама. В результате при загрузке будет происходить попытка поиска предопределенного элемента по этому имени
Добрый день. У меня возникла ситуация, что мне нужно преобразовать из строки в строку. Я создал ПКО, тип источника не указал (иначе возникает ошибка при обмене), тип приемника Строка. В обработчике ПередВыгрузкой описал:
Если Источник = «…» тогда Приемник = «…»;
и т. п.
В справке к этому обработчику написано: Приемник — Строка. Может использоваться для тех правил, у которых приемник является значением примитивного типа (Строка, Число, Булево, Дата).
Но при выгрузке возникает ошибка. В обработке я нашел следующий код:
Приемник.ЗаписатьКонецЭлемента();
То есть, Приемник используется для чего-то другого? Как тут лучше поступить?
Здравствуйте!
Вообще говоря, Приемник — это узел объекта-приемника. Его можно использовать так, как написано в обработчике, если это ПКО вызывается только из ПКС другого ПКО, для этого нужно еще написать в обработчике Перед выгрузкой
Отказ = Истина;
Но для конвертации значений примитивных типов не требуется создавать ПКО, они конвертируются автоматически. Для преобразования из строки в строку достаточно создать ПКС для этого строкового реквизита, и в событии При выгрузке произвести нужные манипуляции с этой строкой. Она будет находится в параметре Значение
Просто это преобразование встречается несколько раз в конвертации, в нем достаточно много условий и я хотел для таких ПКЗ указать это ПКО и данное преобразование описать 1 раз.
Можно написать алгоритм на закладке Алгоритмы по преобразованию переменной Значение, и во всех ПКС вставлять только одну строку
Выполнить(Алгоритмы.Имя_Алгоритма);
Это будет более правильно, чем создавать ПКО
Добрый вечер! В видео 1.5.1 Евгений для значения Организации подставляет предопределенное значение(в обработчике) в ПКС Организации,затем по условию задачи необходимо выбирать не предопределенное значение из справочника и Евгений создает новое ПКО. Скажите пожалуйста, определить значение в ПКС можно только предопределенное? или когда создавать новое ПКО? спасибо
Здравствуйте!
Общее правило — ПКО создается для всех не примитивных типов данных. Т.е. если реквизит ссылочного типа, для этого типа нужно создать ПКО, иначе этот реквизит не будет перенесен. Но, действительно, есть исключение — если будут загружаться только ссылки на предопределенные элементы этого ссылочного типа, то ПКО можно не создавать. Но на практике такое бывает довольно редко
когда рассматривали конвертацию «справочник» — «перечисление» один из приемнов заключался в программном подставлении значения перечисления. В примере в обработчике ПриВыгрузке() заполнялся параметр «УзелСсылки». Не совсем понял как это работает. Можно поподробнее про работу с параметром УзелСсылки?
Здравствуйте!
УзелСсылки — это узел XML, в котором находится информация, необходимая для поиска объекта в базе-Приемнике.
Если Вы откроете любой файл данных, то увидите, что там объекты находятся в узлах Объект, внутри этих узлов первым идет узел Ссылка. В нем Нпп объекта (номер по порядку), Идентификатор (если нужен) и свойства, ПКС для которых было отмечено флагом поиска. И если ссылка на объект А встретилась в каком-то свойстве, то в узел этого свойства тоже вставляется узел ссылки на объект А. Параметр УзелСсылки используют для модификации этого узла, когда в него, например, нужно добавить дополнительную информацию.
Описанный в видео-уроке способ я считаю не оптимальным. Так выгружаются лишние объекты. Для конвертации Справочник -> Перечисление ПКО можно создать для синхронизации ПКЗ, а в остальных случаях ПКО не нужно.
спасибо
В последнем видео с решением ДЗ 1.4.2 лектор рассказывает как оптимизировать правила, чтобы не выгружались лишние объекты. И в ПКО для организации, в обработчике события ПередВыгрузкой пишется код:
КлючВыгружаемыхДанных = «Организации»;
ЗапоминатьВыгруженные = Истина;
но в справке к данному обработчику написано:
КлючВыгружаемыхДанных — Произвольный. По умолчанию — это ссылка на объект Источник, а если Источник неопределен, то используется ИмяПКО (подразумевается, что правило описывает в таком случае один объект-приемник)….
Т.е. КлючВыгружаемыхДанных итак уже = «Организации», тем не менее, если оставить лишь одну строку: ЗапоминатьВыгруженные = Истина;
Выгружается больше объектов. Поясните пожалуйста почему система отрабатывает не так, как заявлено в описании?
Здравствуйте!
В данном случае система работает действительно не совсем так, как в описании. В ее поведении еще есть зависимость от флажка «Не запоминать выгруженные», который ставится в ПКО. В нестандартных ситуациях лучше КлючВыгружаемыхДанных присваивать вручную.
Видео 1.5.4
Я например не понял, почему Евгений определил, что проблема в кэшировании, когда мы рассматривали последний вариант с созданием ПКО «Справочник-перечисление»? Можно поподробнее.
Здравствуйте!
Кэширование работает таким образом: когда элемент встречается по ссылке первый раз за эту выгрузку, то происходит выгрузка этого элемента в узел «Объект», этот узел вставляется в файл данных, а в узел свойства, в котором встретился этот элемент, вставляется полный узел ссылки. Он содержит информацию, необходимую для поиска элемента в базе данных (поля поиска, идентификатор и т.д.). А выгруженный элемент запоминается в структуре выгруженных объектов с присвоением ему «Нпп» — номера по порядку. И в дальнейшем, когда он будет встречаться в процессе выгрузки, в узел свойства будет вставлен узел ссылки только с этим Нпп — не полный узел ссылки.
Поэтому, когда Евгений отключил кэширование для правила, то каждый раз, когда этот элемент справочника встречался в процессе выгрузки, он выгружался полностью в отдельный узел «Объект» и в свойство вставлялся полный узел ссылки. Поэтому все заработало, хотя узел «Объект» был пустым
Видео 1.5.1
Вопрос 1: исходя из видео, все таки где предпочтительнее выполнять подстановку, на стороне источника, или на стороне конечной базы?
Вопрос 2: не уследил, как третья организация попала в константу?
1. Конечно, на стороне Приемника лучше выполнять подстановку. Файл данных станет меньше, скорость выгрузки возрастет. Не будет ошибок, связанных с изменением элемента справочника Организации. Но часто бывает, что такой константы в приемнике нет, и изменять конфигурацию нежелательно. Можно сохранить ее, например, в реквизите узла плана обмена, о чем будет рассказано в четвертом модуле ))
2. Евгений сначала открыл константу, потом нажал на кнопку выбора, и в открывшемся списке создал новую организацию ))
Здравствуйте. В видео 1.5.0 нужно было заполнить организацию в приемнике предопределенной организацией из источника. Для ПКС «Организация» указали ПКО «Организация_ВтораяОрганизация», а в событии «Перед выгрузкой» прописали код: «Значение =1;» В описании события написано: «Значение — Неопределено. Конвертируемое значение свойства. Если значение определить в теле обработчика, то стандартная процедура получения значения не будет происходить.». Что за стандартная процедура получения значения? Я думал, что стандартная процедура — это ПКО и что он не будет отрабатываться. А получается, что тут и Значение заполнилось и ПКО выполнилось. Поясните, пожалуйста.
Здравствуйте!
Нет, стандартная процедура получения значения свойства — это попытка получить значение реквизита. Если у Вас настроено, например, ПКС «Номенклатура — Номенклатура», то будет попытка получить из Источника по ключу «Номенклатура» искомое значение. Примерно так:
Значение = Источник[«Номенклатура»];
Если в ПКС стоит флаг получения из входящих данных, то будет попытка получить его из них
Если в событии Перед выгрузкой переменная Значение еще пустая, и если ее там заполнить, то попыток получить значение по имени реквизита происходить не будет. Что позволяет избежать ошибок при выгрузке в тех случаях, когда в параметре Источник нет элемента с таким ключом
Здравствуйте. Подскажите, а каким образом работает получение из входящих данных для ПКС? В предыдущих видеоуроках был только пример Исходящие данные (ПКС) —> Входящие данные (ПКО).
Здравствуйте!
В видео-уроке 1.3.2, например, рассказывается, как из ПКС «Контактное лицо» передаются Исходящие данные в ПКО «Контактные лица». Далее внутри этого ПКО эти Входящие данные могут быть использованы как угодно. Но обычно из этих Входящих данных нужно получить значение для одного из ПКС внутри этого ПКО. Чтобы не писать получение этого значения вручную, существует автоматический механизм — отмечаете ПКС флажком получения из Вход. данных, называете один из элементов этих Исходящих/Входящих данных так же, как ПКС, и Значение будет получено автоматически.
Когда для ПКС справочник->перечисление создавали отдельное ПКО, то использовали событие ПриВыгрузке: УзелСсылки=»Знач» и отключали кеширование. Во-первых, шаг неочевидный и, во-вторых, порождающий избыточность. Вопрос — какие события/свойства/параметры можно еще использовать у этого ПКО для создания более правильного варианта переноса?
Здравствуйте!
Я не рекомендую этот путь. Создать ПКО для перечислений можно только с целью синхронизации значений. В остальных случаях достаточно в ПКС перед выгрузкой поместить в переменную Значение имя элемента перечисления в базе-приемнике.
Здравствуйте.
А будет в курсе рассматриваться ситуация формирования табличной части, например, документа на стороне приемника, которой нет в исходной базе? Например реализация в исходной базе содержит табличную часть только для товаров, а у приемника есть дополнительная табличная часть по услугам, в которую необходимо внести предопределенный перечень услуг с расчетом их стоимости, например от суммарной стоимости номенклатуры. Реализация алгоритма на стороне приемника очевидна, интересен вариант формирования файла данных на стороне исходной базы.
Здравствуйте!
В курсе есть все необходимые сведения, чтобы сформировать табличную часть любым способом. Например, в ДЗ 1.5.3 требуется сформировать набор движений, технически это ничем не отличается от формирования табличной части.
Эх, что то мне не везет. Попробовал повторить последнее занятие, перенос составного типа. Но перечислением данные так и не загрузились, всегда получается строка. При этом я уверен, что условие отрабатывает. И даже в получившемся файле, формируется нужные записи:
ЗаПрогул
Но в конечной базе все равно строка.
Здравствуйте!
Знаете, да, есть там одна тонкость. Когда выгрузка идет в режиме управляемого приложения, на закладке «Дополнительные настройки» флажок «Использовать оптимизированный формат» по умолчанию установлен, а когда используется этот оптимизированный формат, то типы данных описываются в самом начале файла, а в каждом свойстве не указываются. Если этот флажок снять, то в этом примере все работает корректно. Попробуйте выгрузить с установленными и снятым флажком, и посмотрите файл данных, как выглядят объекты и свойства
И правда работает. Мы ведь потом изучим все эти галочки?
Да, в курсе есть информация обо всех этих настройках. Конкретно этот флажок рассматривается в видео-уроке 2.5.1