-
Формируем массив ИД документов, которые остаются в БД:
SELECT SUM(g_his_add(1, id))
FROM gd_document
WHERE documentdate >= :D
Обратите внимание, что и шапки и позиции сразу попадут в выборку, так как у позиции документа дата обязательно совпадает с шапкой. Организуем цикл по таблицам H. Для каждой формируем и выполняем запрос:
SELECT
SUM(g_his_add(1, HjK1)),
COUNT(HjK1),
SUM(g_his_add(1, HjK2)),
COUNT(HjK2),
...
FROM Hj
WHERE g_his_has(1, documentkey)
Важно собрать все поля в один запрос, чтобы обойтись только одним сканом таблицы.
Для позиций:
SELECT
COUNT(*),
SUM(g_his_add(1, documentkey)),
SUM(g_his_add(1, PjK1)),
COUNT(PjK1),
SUM(g_his_add(1, PjK2)),
COUNT(PjK2),
...
FROM Pj
WHERE g_his_has(1, masterkeykey)
Если после обработки всех таблиц шапок и всех позиций, все суммы сложились в ноль, то значит ни одной записи не добавилось к сохраняемому множеству ИД. Если больше нуля, то повторяем, начиная с шага 2. Если после обработки таблицы мы получили:
COUNT(HjKi)- SUM(g_his_add(1, HjKi)) = 0
То такую колонку исключаем из дальнейшей обработки. Если в таблице исключены все колонки, то в дальнейшем такую таблицу не обрабатываем.
Комментариев нет:
Отправить комментарий