EnterpriseData – часть 3. Загрузка данных, идентификация объектов

22.08.19

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

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

Наконец-то дошли руки до третьей статьи из цикла – Новый формат обмена данными!

Тем, кто не читал первые, можно перейти по ссылкам ниже:

Чтобы облегчить восприятие информации, я сделал схемы с кратким пояснением. Под схемами идет более подробное описание. Схемы можно скачать в формате PowerPoint в комментарии к статье. 

 
 Термины, используемые в статье

 

Общая последовательность операций при загрузке данных

Ниже приведена общая схема процессов загрузки данных:

Процесс загрузки данных

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

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

Для каждого объекта выполняется поиск ПОД по типа объекта, и его выполнение.

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

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

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

Дальше выполняется само отложенное заполнение объектов. Отрабатываются алгоритмы для каждого объекта из таблицы «КомпонентыОбмена.ЗагруженныеОбъекты».

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

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

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

 

Идентификация объектов при загрузке

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

В КД31 доступны три варианта идентификации:

Идентификация объектов при загрузке

По уникальному идентификатору (УИД), используется по умолчанию – поиск выполняется по значению уникального идентификатора. Данный способ применяется, когда не нужно сопоставлять объекты одной ИБ с объектами в другой. Когда все объекты создаются только в одной ИБ, а затем переносятся в другую. После переноса объекта в ИБ приемнике у него создается УИД, аналогичный УИД этого объекта в ИБ источнике. После этого можно выполнять произвольное изменение реквизитов этого объекта в ИБ приемнике, на дальнейшую синхронизацию это не повлияет.

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

По уникальному идентификатору и полям поиска – поиск выполняется по УИД, если объект не найден, продолжается по указанным полям поиска. Если объект был найден по полям поиска, его УИД будет записан в специальный регистр сведений «ПубличныеИдентификаторыСинхронизируемыхОбъектов». При последующей синхронизации, поиск будет выполняться по УИД в данном регистре сведений, а не по полям. Таким образом можно выполнять сопоставление объектов, созданных в двух ИБ, и решается проблема поиска только по полям. 

Примечание. Если загрузка данных выполняется в режиме «С дополнительными параметрами», и сопоставление объектов выполняется вручную, данные о сопоставленных объектах также записываются в регистр «ПубличныеИдентификаторыСинхронизируемыхОбъектов», и последующий поиск выполняется именно в данном регистре. Это справедливо только для объектов с идентификацией «По уникальному идентификатору» или «По уникальному идентификатору и полям поиска».

КД31 позволяет указать несколько разных комбинаций для поиска объектов по полям. Поиск в ИБ приемнике будет выполнен по всем комбинациям. Объект будет считаться найденным, если поиск успешен хотя бы по одной из этих комбинаций.

 

Конвертация объектов по правилам конвертации (ПКО)

Рассмотрим более подробно алгоритм основного этапа загрузки данных, в процессе которого происходит идентификация и запись новых или найденных объектов в ИБ.

Данный алгоритм можно разделить на два разных процесса:

  • Конвертация объекта, загружаемого по ПОД – объект выгружен целиком из базы источника.
  • Конвертация объекта по ссылке – загружается ссылка на объект из другого объекта.

Конвертация объекта, выгруженного целиком

Общая схема конвертации полного объекта:

Конвертация полного объекта

Первым действием происходит поиск объекта по УИД, если данный вид идентификации доступен для объекта.

Дальше выполняется конвертация свойств (ПКС) первого этапа. На первом этапе происходит конвертация тех свойств, для которых задано свойство формата.

Дальше выполняется обработчик «При конвертации данных XDTO». В обработчике доступны параметры:

  • ДанныеXDTO – структура с полученными данными.
  • ПолученныеДанные - новый, созданный объект данного типа, с частично заполненными свойствами (на первом этапе конвертации).

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

После выполнения обработчика выполняется конвертация свойств второго этапа. Конвертируются все свойства и коллекции, добавленные в структуру «ДополнительныСвойства» параметра «ПолученныеДанные».

Дальше, если объект был найден по УИД, выполняется обработчик «Перед записью полученных данных». В обработчике доступны параметры: «ПолученныеДанные» и «ДанныеИБ».

 Если объект найден, параметр «ДанныеИБ» содержит ссылку на этот объект.  

Если объект не найден по УИД, и для него доступен поиск по полям, происходит поиск по этим полям. Если объект найден по полям, также вызывается обработчик «Перед записью полученных данных» с заполненным параметром «ДанныеИБ».

Если объект не найден ни по УИД ни по полям, в обработчике «Перед записью полученных данных», параметр «ДанныеИБ» будет иметь значение «Неопределено».

В данном обработчике, можно реализовать собственный поиск объекта, и присвоить параметру «ДанныеИБ» найденный объект самостоятельно. Если же параметр «ДанныеИБ» останется не заполненным, в ИБ будет создан новый объект, который находится в параметре «ПолученныеДанные».

Если объект был найден (по УИД, полям поиска или произвольным образом), его данные будут замещены значениями из параметра «ПолученныеДанные». Причем замещаться будут только те свойства объекта для которых были определены ПКС в настройках КД31.

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

Объект (новый или найденный) будет записан в режиме «ОбменДанными.Загрузка = Истина». Это значит, что не будут выполнены многие платформенные проверки и обработчики при записи объекта, и он запишется в любом случае. 

 

Конвертация объекта, выгруженного по ссылке

Общая схема конвертации по ссылке:

Конвертация объекта по ссылке

Так же, как и в случае с загрузкой полного объекта, сначала происходит поиск по УИД (если он доступен). Если объект найден, возвращается ссылка на него, и больше никаких действий не происходит.

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

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

Дальше происходит поиск объекта по полям поиска. В случае, если объект найден, возвращается ссылка на него. А если же он не найден, выполняется обработчик «Перед записью полученных данных». В этом обработчике можно реализовать собственный поиск объекта. Но, обратите внимание, поиск будет выполняться только в том случае, если объект не был найден ни по УИД ни по полям поиска.

Дальше происходит запись частично заполненного объекта (заполнены только поля поиска), и возвращается ссылка не него. Поскольку запись происходит в режиме «ОбменДанными.Загрузка = Истина», объект будет записан на данном этапе.

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

 
 Полезные процедуры общего модуля «ОбменДаннымиXDTOСервер»

 

 
 Основные элементы структуры «КомпонентыОбмена»

 

На этом все, спасибо за внимание. Напишите, пожалуйста, в комментариях, какие еще темы по ED могут быть интересны. Ну и ставьте плюс, если статья Вам понравилась.

 

Другие мои статьи из серии «Новый подход к обмену данными»

  1. Теоретическая, вводная статья по EnterpriseData
  2. EnterpriseData  Часть 2. Процесс выгрузки данных
  3. Пример доработки правил конвертации данных без использования КД31 

 

EnterpriseData загрузка данных обработчики событий загрузки идентификация объектов при загрузки.

См. также

SALE! 20%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 22338 руб.

12.06.2017    141517    798    297    

419

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.234.x) и БП 3.0 (3.0.161.x). Правила подходят для версии ПРОФ и КОРП.

35000 31500 руб.

15.12.2021    24018    169    51    

127

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.19.x).

35000 31500 руб.

23.07.2020    51255    228    69    

185

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    36589    94    66    

89

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

55778 50200 руб.

29.10.2018    56207    59    105    

61

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171173    303    257    

378

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 13005 руб.

18.02.2016    186875    589    509    

526

SALE! 10%

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

55778 50200 руб.

24.04.2015    194980    150    243    

280
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 22.08.19 10:53
Сообщение было скрыто модератором.
...
2. acanta 22.08.19 13:28 Сейчас в теме
Спасибо!
Самый большой плюс КД 3 в том, что доработка обмена не требует КД3.
avmironov; +1 Ответить
3. ids79 8538 22.08.19 20:37 Сейчас в теме
(2)Пожалуйста. Да, это так. Но существенные доработки все-таки лучше делать в КД 3
avmironov; acanta; +2 Ответить
17. Xershi 1555 01.05.24 12:01 Сейчас в теме
(2) не совсем так. Отладка решения возможна без КД 3. Но и КД 2 через внешние обработки отлаживается без КД 2. А серьезные доработки без КД 3 не сделаешь всё равно, потом за такими кустарниками переписывать такое себе...
4. shusharu 23.09.19 14:39 Сейчас в теме
Спасибо за статьи! Очень помогает.
Есть вопрос. Можно ли как то отказаться от получения объекта, при определенных условиях. Попробовал в процедуру ПКО_Документ_ПКОРасчетыССотрудниками_Получение_ПриКонвертаци­иДанныхXDTO сделать условие с возвратом. Но все равно объект попадает в форму сопоставления данных. (обмен между ЕРП и БУХ). Нужен аналог флага Отказ=Истина;
avmironov; user811769; ids79; +3 Ответить
5. ids79 8538 23.09.19 15:06 Сейчас в теме
(4)Чтобы отказаться от загрузки объекта, используйте событие "При обработке" правила обработки данных (ПОД).
Код следующий:
ИспользованиеПКО.ПКО_Документ_ПКОРасчетыССотрудниками_Получение = Ложь;
Также в обработчике доступны ДанныеXDTO, можно отменить загрузку выборочно.
Но более правильно поставить ограничение на этапе отправки, чтобы не нужные данные не попадали в файл выгрузки. На этапе выгрузки также можно использовать обработчик "При обработке".
avmironov; user811769; +2 Ответить
6. shusharu 23.09.19 16:10 Сейчас в теме
(5)
При обработке

Спасибо. А если в МенеджерОбменаЧерезУниверсальныйФормат13 на этот вид операции документа нет такого обработчика?
Только на вид Документ_ПКОРозничнаяВыручка_Получение, есть обработчик.

Вот кусочек из модуля

#Область Документ_ПКОРасчетыССотрудниками_Получение
Процедура ДобавитьПОД_Документ_ПКОРасчетыССотрудниками_Получение(ПравилаОбработкиДанных)
	ПравилоОбработки                         = ПравилаОбработкиДанных.Добавить();
	ПравилоОбработки.Имя                     = "Документ_ПКОРасчетыССотрудниками_Получение";
	ПравилоОбработки.ОбъектВыборкиФормат     = "Документ.ПКОРасчетыССотрудниками";
	ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_ПКОРасчетыССотрудниками_Получение");
КонецПроцедуры
#КонецОбласти
#Область Документ_ПКОРозничнаяВыручка_Получение
Процедура ДобавитьПОД_Документ_ПКОРозничнаяВыручка_Получение(ПравилаОбработкиДанных)
	ПравилоОбработки                         = ПравилаОбработкиДанных.Добавить();
	ПравилоОбработки.Имя                     = "Документ_ПКОРозничнаяВыручка_Получение";
	ПравилоОбработки.ОбъектВыборкиФормат     = "Документ.ПКОРозничнаяВыручка";
	ПравилоОбработки.ПриОбработке            = "ПОД_Документ_ПКОРозничнаяВыручка_Получение_ПриОбработке";
	ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_ПКОРозничнаяВыручка_Получение");
КонецПроцедуры
Показать




Мне самому добавить такой обработчик?

Что касается выгрузки я понимаю что так лучше, то основная доработка обмена идет на стороне Бухгалтерии и хотелось по возможности остаться только там, если не получится придется тогда сделать расширение и в ЕРП.
7. ids79 8538 24.09.19 09:35 Сейчас в теме
(6) Я бы посоветовал использовать конвертацию данных 3.1 в таком случае.
Но если уже решили вносить изменения вручную, добавляйте процедуру по аналогии с другими объектами. Также нужно отредактировать процедуры: ДобавитьПОД_Документ_ПКОРасчетыССотрудниками_Получение и ВыполнитьПроцедуруМодуляМенеджера
avmironov; user811769; +2 Ответить
8. shusharu 25.09.19 13:32 Сейчас в теме
(7) СПАСИБИЩЕ!!! Описал свой обработчик в расширении и все получилось!!


Вот так это выглядело в итоге, может кому пригодится
&Вместо("ДобавитьПОД_Документ_ПКОРасчетыССотрудниками_Получение")
Процедура АБС_ДобавитьПОД_Документ_ПКОРасчетыССотрудниками_Получение(ПравилаОбработкиДанных)
	ПравилоОбработки                         = ПравилаОбработкиДанных.Добавить();
	ПравилоОбработки.Имя                     = "Документ_ПКОРасчетыССотрудниками_Получение";
	ПравилоОбработки.ОбъектВыборкиФормат     = "Документ.ПКОРасчетыССотрудниками";
	ПравилоОбработки.ПриОбработке            = "АБС_ПОД_Документ_ПКОРасчетыССотрудниками_Получение_ПриОбраб­отке";
	ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_ПКОРасчетыССотрудниками_Получение");
КонецПроцедуры
&Вместо("ДобавитьПОД_Документ_ПКОРасчетыСКонтрагентами_Получение")
Процедура АБС_ДобавитьПОД_Документ_ПКОРасчетыСКонтрагентами_Получение(ПравилаОбработкиДанных)
	ПравилоОбработки                         = ПравилаОбработкиДанных.Добавить();
	ПравилоОбработки.Имя                     = "Документ_ПКОРасчетыСКонтрагентами_Получение";
	ПравилоОбработки.ОбъектВыборкиФормат     = "Документ.ПКОРасчетыСКонтрагентами";
	ПравилоОбработки.ПриОбработке            = "АБС_ПОД_Документ_ПКОРасчетыСКонтрагентами_Получение_ПриОбра­ботке";
	ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_ПКОРасчетыСКонтрагентами_Получение");
КонецПроцедуры

Процедура АБС_ПОД_Документ_ПКОРасчетыССотрудниками_Получение_ПриОбрабо­тке(ДанныеXDTO, ИспользованиеПКО, КомпонентыОбмена)
	Если ДанныеXDTO.КлючевыеСвойства.ТипЗначения="ПКОРасчетыССотрудниками" Тогда
		ИспользованиеПКО.Документ_ПКОРасчетыССотрудниками_Получение = Ложь;
	КонецЕсли;
КонецПроцедуры
Процедура АБС_ПОД_Документ_ПКОРасчетыСКонтрагентами_Получение_ПриОбраб­отке(ДанныеXDTO, ИспользованиеПКО, КомпонентыОбмена)
		ИспользованиеПКО.Документ_ПКОРасчетыСКонтрагентами_Получение = Ложь;
КонецПроцедуры

&После("ВыполнитьПроцедуруМодуляМенеджера")

Процедура АБС_ВыполнитьПроцедуруМодуляМенеджера(ИмяПроцедуры, Параметры)
	Если ИмяПроцедуры = "АБС_ПОД_Документ_ПКОРасчетыССотрудниками_Получение_ПриОбраб­отке" Тогда 
		АБС_ПОД_Документ_ПКОРасчетыССотрудниками_Получение_ПриОбрабо­тке(
		Параметры.ОбъектОбработки, Параметры.ИспользованиеПКО, Параметры.КомпонентыОбмена);
	ИначеЕсли  ИмяПроцедуры = "АБС_ПОД_Документ_ПКОРасчетыСКонтрагентами_Получение_ПриОбра­ботке" Тогда 
		АБС_ПОД_Документ_ПКОРасчетыСКонтрагентами_Получение_ПриОбраб­отке(
		Параметры.ОбъектОбработки, Параметры.ИспользованиеПКО, Параметры.КомпонентыОбмена);
	КонецЕсли;	
КонецПроцедуры
Показать
avmironov; user811769; ids79; +3 Ответить
9. Jungle Murzik 10.06.20 20:07 Сейчас в теме
Не могу поверить, что отложенное проведение выполняется после обработчика "После конвертации"
В документации написано, что этот обработчик выполняется после проведения документов
https://its.1c.ru/db/metod8dev#content:5846:hdoc
10. viki_glebova 18.03.22 14:05 Сейчас в теме
11. ids79 8538 18.03.22 15:46 Сейчас в теме
12. user1203419 25.03.22 19:35 Сейчас в теме
Доброго дня

Для того чтобы не замещать имеющийся объект использую
ПередЗаписьюПолученныхДанных
Если ДанныеИБ<> Неопределено Тогда
ПолученныеДанные = Неопределено;
КонецЕсли;


В целом порос наземещения это решает
Но вызывает ошибку и запись в ЖР
Мелочь, но неприятно

Если не затруднит, подскажите пожалуйста как все таки правильно отказаться от загрузки объекта, если по каким то причинам при загрузке стало понятно, что он не нужен.
Прикрепленные файлы:
13. ids79 8538 30.03.22 12:06 Сейчас в теме
(12)Сделайте проверку перед кодом, который вызывает ошибку "Если ПолученныеДанные <> Неопределено Тогда". Я думаю проблема решиться.
14. BETEP0K 18.08.22 18:15 Сейчас в теме
Вот у вас написано:
"Если объект был найден (по УИД, полям поиска или произвольным образом), его данные будут замещены значениями из параметра «ПолученныеДанные». Причем замещаться будут только те свойства объекта для которых были определены ПКС в настройках КД31."

Это по моему не вполне так:
Пример:
Делаю обмен данными справочника физ лица. Поле Дата рождения.
Заполнил в базе источнике поле дата рождения, сделал обмен:
1. данные выгрузились в файл
2. в файле дата рождения есть
3. в базе приемнике дата рождения загрузилась.. всё ок!

Однако

После этого очищаю поле Дата рождения в источнике. Опять делаю обмен:
1. в файл пусчтое поле Дата рождения НЕ выгружается.
2. При загрузке в базе приемнике - НЕ ОЧИЩАЕТСЯ!!!

В настройках ПКС нигде нет ничего при загрузку/выгрузку пустых свойств.

И в процедуре ОбменДаннымиXDTOСервер.КонвертацияСвойстваСтруктурыОбъектаXDTO
прямо стоит:
Если Не ЗначениеЗаполнено(ЗначениеСвойства) Тогда
Возврат;
КонецЕсли;

т.е. КД3 почему-то пустыми свойствами не обменивается. и при обходе ПКС ничего не делает если значение свойство пустое и не очищает его в объекте приемнике.

Отсюда, кстати и вопрос, и как факт очистки поля передать через КД3??
15. ids79 8538 19.08.22 10:51 Сейчас в теме
(14)Проверил. Да, имеет место такое поведение. Получается нужно обрабатывать этот момент в событии "ПередЗаписьюПолученныхДанных".
16. maxf 05.10.23 19:44 Сейчас в теме
Мне, наоборот, было нужно, чтобы при первой загрузке и обновлении номенклатуры сохранялась иерархия базы-приемника. То есть, чтобы не перезаписывался реквизит "Родитель". На этапе загрузки это сделать легко, но первоначально старались придерживаться концепции "никаких доработок приемника", всё в источнике. Так вот, даже если вообще убрать атрибут "родитель" из выгрузки, он заполнялся пустым элементом при загрузке! И номенклатура выпадала в корень )
В принципе, весьма распространенное поведение, но не всегда полезное.

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