Конвертация Данных. Нюансы использования конструкции "НеЗамещатьОбъект = Истина" в обработчике события "ПриЗагрузке"

10.09.19

Интеграция - Обмен между базами 1C

У конвертации данных есть «особенности», которые «пьют кровь» программистов. Эта статья про очередную обнаруженную «особенность».

Клиент – крупный холдинг. Настроен обмен по правилам между двумя базами (УСХП) через ftp ресурс. Пользователи стали жаловаться, что после обмена «затираются» реквизиты документов, а иногда документы «прилетают» не полностью заполненными. В источнике -  все ок. Проблема прослеживалась на платформах с 8.3.10 по 8.3.14

Расследование

Правила обмена уже выучил наизусть. Закономерность в проблеме с реквизитами обнаружить не удалось. Типы документов различные, реквизиты тоже: то склад, то номенклатура в ТЧ, то организация … .  От google никакого толку. Наконец, удалось «поймать» файл выгрузки с косячными документами (пока пользователи сообщат о проблеме, уже пройдет следующая синхронизация).

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

(1)
<Правило>
     <Код> ПеремещениеТоваров </Код>
     <ПриЗагрузке>
          Если ОбъектНайден Тогда
                ИсходныйОбъект = Объект.Ссылка.ПолучитьОбъект();
                Если ИсходныйОбъект.ОтражатьВБухгалтерскомУчете тогда
                    НеЗамещатьОбъект  =  Истина;
                КонецЕсли;
          КонецЕсли;
     </ ПриЗагрузке >
     <СинхронизироватьПоИдентификатору>true</СинхронизироватьПоИдентификатору>
     <Источник>ДокументСсылка. ПеремещениеТоваров </Источник>
     <Приемник>ДокументСсылка. ПеремещениеТоваров </Приемник>
</Правило>

 

Из справки: «НеЗамещатьОбъект - Булево - Если установить значение Истина, то существующий объект информационной базы не будет изменен.»

Причина проблемы (на примере реквизита «Склад»)

При выгрузке данных в xml используется кеширование, т.е. в первом  выгружаемом объекте (в нашем случае документ «Перемещение товара») склад выгружается полностью:

(2)
<Объект Нпп="27" Тип="ДокументСсылка.ПеремещениеТоваров" ИмяПравила="ПеремещениеТоваров">

…

     <Ссылка Нпп="28" НеСоздаватьЕслиНеНайден="true">
          <Свойство Имя="{КлючПоискаВИБИсточнике}">
               <Значение>{"#",f9727404-36b6-4005-a5b4-77243dc0ff00,419:80bf9457a55a905311e6b55f082221c2}</Значение>
          </Свойство>
          <Свойство Имя="{ИмяТипаВИБИсточнике}">
               <Значение>СправочникСсылка.Склады</Значение>
          </Свойство>
          <Свойство Имя="{УникальныйИдентификатор}">
               <Значение>082221c2-b55f-11e6-80bf-9457a55a9053</Значение>
          </Свойство>
          <Свойство Имя="Код">
               <Значение>00825    </Значение>
          </Свойство>
          <Свойство Имя="Наименование">
               <Значение>Склад бабы Вали</Значение>
          </Свойство>
     </Ссылка>

…

</Объект>

Далее всех последующих объектов выгрузки вместо склада «Склад бабы Вали» подставляется тег <Нпп>28</Нпп> (чтобы не выгружать каждый раз одно и то же и уменьшить объем файла выгрузки).

(3)
<Объект Нпп="266" Тип="ДокументСсылка.КомплектацияНоменклатуры" ИмяПравила="КомплектацияНоменклатуры">

…

     <Свойство Имя="Склад">
          <Нпп>28</Нпп>
     </Свойство>

…

</Объект>

…

И вот возникла ситуация, когда при загрузке в приемник документ «Перемещение Товаров» (именно тот, в котором выгружена ссылка на склад (2)) соответствует условию правила (1) (т.е. в базе уже есть документ с установленным реквизитом БУ и его под страхом смерти нельзя загружать) и выполняется код:

НеЗамещатьОбъект  =  Истина;

Вследствие чего у всех объектов, у которых в xml свойство склад имело значение <Нпп>28</Нпп>, реквизит «Склад» чудесным образом превратился в неопределено («затерся»).

Решение

Правила обмена были переписаны:

(4)
<ПослеЗагрузки>
    Если ОбъектНайден Тогда
         ИсходныйОбъект = Объект.Ссылка.ПолучитьОбъект();
         Если ИсходныйОбъект.ОтражатьВБухгалтерскомУчете Тогда
             Отказ = Истина;
         КонецЕсли;
    КонецЕсли;
</ПослеЗагрузки>

Резюме

 Учитывайте эту особенность при написании правил обмена. Надеюсь, статья сэкономит Ваше время и убережет от ошибок.

Конвертация данных пропадают реквизиты не полностью заполняются документы

См. также

SALE! 20%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки

Обмен между базами 1C Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) в продаже с 2015 года, постоянно работаем над их развитием | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

45650 36520 руб.

04.08.2015    159733    364    267    

345

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    134979    721    291    

388

SALE! 20%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

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

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 27720 руб.

15.04.2019    68448    180    138    

111

SALE! 20%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

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

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

43450 34760 руб.

03.12.2020    34181    80    58    

78

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 25200 руб.

23.07.2020    46322    196    64    

158

Перенос данных из Парус 10 в ЗГУ ред.3

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

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9217    9    8    

10

SALE! 10%

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 25200 руб.

15.12.2021    20266    132    38    

90

SALE! 10%

Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2. Переносятся начальные остатки, документы и справочники

Обмен между базами 1C Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

В продаже с 2014г. | Воспользовались более 122 предприятий! | Перенос данных из БП 3.0 в УТ 11 | из БП 3.0 в КА 2 | из БП 3.0 в ERP | Сэкономьте свое время - используйте готовое решение для перехода! | Постоянно работаем над развитием переноса данных | Обновляем на новые релизы 1С | Есть фильтр выгрузки по организациям | Переносятся начальные остатки на выбранную дату, документы за период времени и вся возможная справочная информация | Перенос сделан на технологии КД 2 (правила конвертации данных)

50722 45650 руб.

31.10.2014    231441    124    327    

296
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. triviumfan 93 10.09.19 23:31 Сейчас в теме
Хм, а тут не дело в приоритетах?
А вообще - речь про так называемый online-обмен?
5. ivanek 39 11.09.19 09:09 Сейчас в теме
(1)К сожалению, дело не в приоритетах, проверено.
2. insurgut 207 11.09.19 06:13 Сейчас в теме
Поведение, конечно, не очевидное. У складов в настройках стоит "Использовать быстрый поиск объекта при выгрузке и загрузке"?
4. ivanek 39 11.09.19 09:06 Сейчас в теме
(2)Нет, ни у одного объекта флаг "Использовать быстрый поиск объекта при выгрузке и загрузке" не установлен.
3. Batman 165 11.09.19 08:04 Сейчас в теме
Сталкивался с подобным
6. AlX0id 11.09.19 11:15 Сейчас в теме
ИсходныйОбъект = Объект.Ссылка.ПолучитьОбъект();
Если ИсходныйОбъект.ОтражатьВБухгалтерскомУчете Тогда
Отказ = Истина;
КонецЕсли;


Вообще - не очень решение.. В особенности, если документов много. Лучше уж запросом бы сделали получение флага, нежели весь объект вытаскивать.. А в идеале - так и вовсе где-то надо одним запросом вытащить все загружаемые объекты, отраженные в БУ.
10. Vovan1975 13 11.09.19 13:05 Сейчас в теме
(6) да хреновое решение.

Если конфа стандартная 1с то лучше было бы использовать функцию БСП: ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита, ВыбратьРазрешенные)
11. ivanek 39 11.09.19 14:19 Сейчас в теме
(6)Спасибо, согласен, учту замечание.
14. Sintson 411 20.09.19 16:52 Сейчас в теме
(6) согласен, токмо со вторым предложением про один запрос для кэширования объектов БУ, если просто запросом, то получится запрос в цикле, что мягко говоря не кошерно.
7. Vasvas05 22 11.09.19 12:39 Сейчас в теме
Не ясна связь между у всех объектов, у которых в xml свойство склад имело значение <Нпп>28</Нпп> и документами. НеЗамещатьОбъект должно относится к конкретному объекту, а получается что влияет на реквизиты других даже объектов. Непонятно. Код загрузки надо смотреть в базе приемнике, как там обрабатывается флажок НеЗамещатьОбъект
8. wowik 885 11.09.19 12:48 Сейчас в теме
12. ivanek 39 11.09.19 14:21 Сейчас в теме
(8)Забыл в статье указать КД 2.1.8.2
9. Vovan1975 13 11.09.19 12:52 Сейчас в теме
Мой склероз мне подсказывает, что где-то в глубинах КД есть параметр управляющий кэшированием объектов при загрузке(он так и называется "не кэшировать объекты".
Вот его надо было выключить.
Правда побочка была бы в том что при каждом упоминании выгружался бы элемент целиком, что не очень с точки зрения памити (при разборе файлика обмена) да и файлик тоже "вспучивался".
15. Sintson 411 20.09.19 16:55 Сейчас в теме
Напишите ваше сообщение
(9) А мой склероз мне подсказывает что есть возможность файл выгрузки жать, хотя это тоже не панацея конечно, время загрузки/выгрузки может вырасти в разы.
13. Астиг 18 13.09.19 13:51 Сейчас в теме
Спасибо! "При выгрузке данных в xml используется кеширование" - не знал о таком.
16. azazana 71 20.09.19 17:02 Сейчас в теме
А ТолькоПолучитьУзелСсылки = Ложь не поможет в данном случае?
19. ivanek 39 24.09.19 09:04 Сейчас в теме
(16)Как появиться время попробую.
17. Casey1984 3 21.09.19 14:14 Сейчас в теме
Из справки КД:

НеЗамещатьОбъект - Булево - Если установить значение Истина, то существующий объект информационной базы не будет изменен.


Получается в первом варианте объект перезаписывается?
18. ivanek 39 24.09.19 09:04 Сейчас в теме
20. handscenter 59 04.10.19 09:05 Сейчас в теме
более простой способ добавить контроль при получении документов
https://infostart.ru/public/1130733/
21. ivanek 39 04.10.19 09:50 Сейчас в теме
22. echo77 1868 26.05.21 17:41 Сейчас в теме
У меня подобная беда с Онлайн-обменом Контрагенты, ДоговорыКонтрагентов - когда выгружается несколько Договоров одного контрагента - у первого договора переносится свойство Владелец(Контрагент) - он ищется по полям поиска, у всех остальных при загрузке - Владелец Пусто. Как это поправить?
23. ivanek 39 01.06.21 12:48 Сейчас в теме
(22)Добрый день. Если еще актуально, прикрепите файл с правилами обмена. я попробую Вам помочь.
24. echo77 1868 01.06.21 13:20 Сейчас в теме
(23) Спасибо. Проблема решена, описано здесь: https://infostart.ru/1c/articles/1448782/

Облегченные правила на которых воспроизводилась проблема прикрепил
Прикрепленные файлы:
УСО - До лайт.xml
25. aleksey.kubovtsov 116 22.01.22 13:06 Сейчас в теме
УТ 10 лохматого года
БП 30 актуального релиза

Был произведен переход БП 20 на БП 30

Грузим один документ , все хорошо

Грузим массив, НПП , все приплыли
Стоял признак в правилах обмена Не замещать объект созданные в инф...
Решение
Помогло
https://infostart.ru/1c/articles/1448782/
Убрать признак в моей ситуации проблему не решило.
Действительно в конфигурации "НайтиОбъектПоНомеру" обработки КонвертацияОбъектовИнформационныхБаз возвращает "Неопределено"
Сделал альтернативный поиск, не запоминать выгруженные и прочее завершало сеанс ут 10 старого релиза, что там в ней не так было, копать не стали
Оставьте свое сообщение