УСН Загрузка данных (из торговли), повторяющиеся коды

1. alprk 02.12.11 09:40 Сейчас в теме
Здравствуйте,

у нас из торговли (10.2.6.4) выгружаются данные в XML стандартной обработкой "Выгрузка данных в УСН". Затем стандартной обработкой "Загрузка данных" загружаются в Упрощенку.
В последнее время стали проявляться проблемы, связанные с совпадением кодов в торговле и усн в справочниках. При загрузке если есть объект с таким кодам, он должен получать новый код, а объект из файла загрузки записываться с тем кодом который указан в файле загрузке, но это происходит не всегда (а возможно только для папок). Обработка просто перезаписывает эти объекты поверх.


Вот код, в котором, как я считаю происходит ошибка:
Функция ПроверкаУникальностиОбъектаСправочника(Справочник, ЕстьКонтроль, ЕстьВладелец, Уникальность, АвтоНумерация)
          
     // проверка на существование других элементов с уникальным кодом
     
     Если ПустоеЗначение(ЕстьКонтроль) = 1 Тогда Возврат(1) КонецЕсли;
     
     Вид               =     Справочник.Вид();
     Конфликт     =     СоздатьОбъект("Справочник." + Вид);
     Если ЕстьВладелец = 1 Тогда Конфликт.ИспользоватьВладельца(Справочник.Владелец) КонецЕсли;
     Если Уникальность = "ВПределахПодчинения" Тогда
          Если Справочник.Родитель.Выбран()=1 Тогда
               Конфликт.ИспользоватьРодителя(Справочник.Родитель);
          КонецЕсли;
          УчитыватьИерархию     =     1;
     Иначе
          УчитыватьИерархию     =     0;
     КонецЕсли;
     Если          Конфликт.НайтиПоКоду(Справочник.Код, УчитыватьИерархию) = 0     Тогда
     ИначеЕсли     Конфликт.ТекущийЭлемент() = Справочник.ТекущийЭлемент()          Тогда
     ИначеЕсли     ПустоеЗначение(АвтоНумерация) = 1                                   Тогда
          ЗапомнимКонфликт     =     Конфликт.ТекущийЭлемент();
          
          Ошибка = "Код не уникальный - назначен новый код существующему элементу: " + ЗапомнимКонфликт;
          ЗаписатьОшибку(Ошибка, "!");
          
          Конфликт.ПорядокКодов();     //     используем именно этот объект чтобы учесть установленных родителя и владельца
          Конфликт.ОбратныйПорядок(1);
          Конфликт.ВыбратьЭлементы(УчитыватьИерархию);
          Конфликт.ПолучитьЭлемент();
          СчКода                    =     "";
          Результат               =     ВыделитьПрефикс(Конфликт.Код, СчКода);
          ДлинаКода               =     Метаданные.Справочник(Вид).ДлинаКода;
          
          //Пока ДлинаКода - СтрДлина(Результат) - СтрДлина(СчКода + 1) > 0 Цикл
          //    Результат          =     Результат + "0";
          //КонецЦикла;
          //НовыйКод               =     Результат + Строка(СчКода + 1);
          
          Пока ДлинаКода - СтрДлина(Результат) - СтрДлина(СчКода + 1) > 0 Цикл
              СчКода               =     Строка(СчКода) + "0";
          КонецЦикла;
          НовыйКод               =     Результат + Строка(Число(СчКода) + 1);
          
          
          ВспомнимКонфликт     =     СоздатьОбъект("Справочник." + Вид);
          ВспомнимКонфликт.НайтиЭлемент(ЗапомнимКонфликт);
          ВспомнимКонфликт.Код     =     НовыйКод;
          //ВспомнимКонфликт.Записать();
          ЗаписатьОбъект(ВспомнимКонфликт);
     Иначе
          ЗапомнимКонфликт     =     Конфликт.ТекущийЭлемент();
          
          Ошибка = "Код не уникальный - назначен новый код существующему элементу: " + ЗапомнимКонфликт;
          ЗаписатьОшибку(Ошибка, "!");
          
          Конфликт.Новый();     //     используем именно этот объект чтобы учесть установленных родителя и владельца
          Конфликт.УстановитьНовыйКод(ВыделитьПрефикс(Справочник.Код));
          
          ВспомнимКонфликт     =     СоздатьОбъект("Справочник." + Вид);
          ВспомнимКонфликт.НайтиЭлемент(ЗапомнимКонфликт);
          ВспомнимКонфликт.Код     =     Конфликт.Код;
          //ВспомнимКонфликт.Записать();
          ЗаписатьОбъект(ВспомнимКонфликт);
     КонецЕсли;
     
     Возврат(1);
     
КонецФункции          //     ПроверкаУникальностиОбъектаСправочника()
Показать


В объектах которые перезаписываются выполняется условие "Конфликт.ТекущийЭлемент() = Справочник.ТекущийЭлемент()", и, соответственно, 1с проскакивает блок с изменением кода. Не очень понимаю семерку, а нужно срочно, помогите пожалйста.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. warenic 109 02.12.11 16:42 Сейчас в теме
В обеих базах нумерация идет без префикса? Т.е. в одной базе завели товар "А" код 0001. а в другой товар "Б" код 0001, то при переносе из первой базы во вторуб товар "Б" становится "А".
При загрузке если есть объект с таким кодам, он должен получать новый код, а объект из файла загрузки записываться с тем кодом который указан в файле загрузке,

Ну и что мы получим? После каждой загрузки будет меняться код у существующего элемента.
Установите префиксы, они исправят неуникальность кодов. Будут, например, коды в одной базе "Т0001", в другой "Б0001"...
3. warenic 109 02.12.11 16:56 Сейчас в теме
В объектах которые перезаписываются выполняется условие "Конфликт.ТекущийЭлемент() = Справочник.ТекущийЭлемент()"

Если тут планируется присвотть новый код, то нужно вставить
Конфликт.УстановитьНовыйКод(ВыделитьПрефикс(Справочник.Код));
Конфликт.Записать();
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот