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