Имя: Пароль:
1C
 
Сравнить данные регистра и ТЗ в запросе
0 Elf_80_lvl
 
14.08.25
15:39
Возникла задача. Нужно периодически загружать некий файл csv с примитивными типами данных условно Идентификатор, Дата в периодический независимый регистр сведений с теми же измерениями Идентификатор, Дата.
При этом в файле могут быть как новые данные так и ранее уже загруженный Идентификатор с другой датой.
Смысл в том, чтобы из файла вычленить только новые и измененные данные по сравнению с данными регистра.
Проблема в том, что файл довольно большой несколько миллионов записей, нужен максимально производительный алгоритм.

Я читаю файл, парсю его в таблицу значений, передаю это в запрос, там же выбираю срез последних с регистра и не могу сообразить как их связать. При связи же отсекутся данные которых нет в обоих источниках, правильно же?
1 Fish
 
гуру
14.08.25
15:42
" При связи же отсекутся данные которых нет в обоих источниках" - Смотря как соединять.
2 Elf_80_lvl
 
14.08.25
15:45
Да как обычно, написал и понял, как решить. Надо уже просто в блокнотик писать свой вопрос, может, озарение будет работать, как и с форумом =)
Конечно, надо просто левое соединение к файлу делать.
3 Fish
 
гуру
14.08.25
15:50
(2) Тогда ты потеряешь новые данные, которые есть только в файле.
4 Волшебник
 
14.08.25
15:52
Fish намекает, что здесь подойдёт ПОЛНОЕ СОЕДИНЕНИЕ
5 Elf_80_lvl
 
14.08.25
15:54
Так, похоже надо освежить в памяти главу по соединениям в запросе. Спасибо.
6 Fish
 
гуру
14.08.25
15:58
(4) Нет, подойдёт левое, но смотря как понять фразу "левое соединение к файлу "

Я понял так, что основная таблица - это регистр, а левым соединением файл.
А правильно будет наоборот.
7 Волшебник
 
14.08.25
15:59
(6) тоже вариант
8 Elf_80_lvl
 
14.08.25
16:04
Нет, основная таблица это файл который на текущий момент актуален и надо регистр привести в соответствие с этим файлом. Тоесть дописать в регистр не 5 миллионов записей, а только изменения
9 Fish
 
гуру
14.08.25
16:05
(8) Ну тогда всё верно. Левым соединением по ИД цепляешь регистр, а дальше отбираешь только те, которые не соединились и те, у которых есть изменения.
10 Fish
 
гуру
14.08.25
16:06
(8) "надо регистр привести в соответствие с этим файлом" - А вот это несколько расходится с (0) "вычленить только новые и измененные данные по сравнению с данными регистра."

Что делать с записями, которых нет в файле? Если надо "привести в соответствие с этим файлом", то их надо бы удалять, тогда (9) не пойдёт.
11 Elf_80_lvl
 
14.08.25
16:08
(10) Да этот вопрос у меня тоже возник и я задал его заказчику. Он задаст его ещё куда то... Короче дело не быстрое =)
Но на данный момент хочу хотя бы изменения и добавления выловить.
Спасибо за подсказку.
12 unenu
 
14.08.25
17:04
Относительно Источника и Приемника у вас два вида данных к обработке:

1. ПакетНовыхИд
2. ПакетИдСИзменениямиБД

используйте ВыполнитьПакет()

Затем выполните запись новых по первому пакету и
изменение существующих по второму.

Стремление получить все данные(к обработке) в одном
результате запроса не принесет выгоды - количество записей будет то же самое. Но вам придется писать дополнительные условия при обработке записи нового или модификации существующего.

Думаю, ИИ ответил бы что-то подобное.
Независимо от того, куда вы едете — это в гору и против ветра!