Понадобилось организовать фильтр для 1SUPDTS.
База DBF. Необходимо удалить записи по виду документа ДоговорДвижения по следующему принципу:
- в документе ДоговорДвижения есть реквизит типа Документ.Договор;
- в документе Договор есть реквизит РозничнаяТочка типа Справочник.РозничныеТочки
- в справочнике Розничные точки есть реквизит ЗонаМиграции типа Справочник.ЗоныМиграции
- в справочнике РозничныеТочки есть реквизит ИдентификаторРИБ типа строка, 3
Запись из 1supdts должна удаляться, если зона миграции розничной точки, у которой ИдентификаторРИБ = DBSIGN записи, не равна зоне миграции розничной точки, указанной в договоре, который в свою очередь указан в документе ДоговорДвижения, найденном по OBJID
DELETE updts
FROM
1supdts as updts
INNER JOIN
$Документ.ДоговорДвижения as Движения
ON (Движения.iddoc = updts.objid)
INNER JOIN
$Документ.Договор as Договоры
ON (Договоры.iddoc = $Движения.Договор)
INNER JOIN
$Справочник.РозничныеТочки as РозничныеТочки
ON (РозничныеТочки.id = $Договоры.РозничнаяТочка)
INNER JOIN
$Справочник.РозничныеТочки as РозничныеТочкиРИБ
ON (UPPER($РозничныеТочкиРИБ.ИдентификаторРИБ) = updts.dbsign)
WHERE
(updts.DBSIGN + updts.TypeID + updts.ObjID LIKE '___' + $ВидДокумента.ДоговорДвижения + '_________'
AND $РозничныеТочки.ЗонаМиграции <> $РозничныеТочкиРИБ.ЗонаМиграции)";
Вот этот запрос выполняется больше 20 минут при количестве записей:
1supdts - 200 000
Договор - 580 000
ДоговорДвижения - 920 000
Розничные точки - 135
Можно ли ускорить и как?