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