На 3_40_1_28 не взлетел такой запрос:
SELECT
Журнал.IDDOCDEF||Журнал.IDDOC as [Док:Документ],
PARENTVAL,
SubStr(PARENTVAL,7,9) as [Кл:Справочник.Клиенты],
CASE WHEN ПН.ЗаказПоставщику=1 THEN 'Order to supplier' WHEN ПН.Оригинал=2 THEN 'Advances invoice' WHEN ПН.Оригинал=3 THEN 'Proforma Invoice' When Сч.Давальческая=1 Then 'Order GIVEN' When Сч.ТипСчета=0 Then 'Счет-Заказ' ELSE '' END as НазвИнвойса,
CASE WHEN ПН.ЗаказПоставщику=1 THEN 1 WHEN ПН.Оригинал=2 THEN 2 WHEN ПН.Оригинал=3 THEN 3 When Сч.Давальческая=1 Then 4 When Сч.ТипСчета=0 Then 5 ELSE 0 END as ДляСорт
FROM
__1S_CRDOC As Отбор
Inner JOIN
Журнал on Журнал.IDDOC = Отбор.ChildID
Left JOIN
Документ_ПриходнаяНакладная As ПН On ПН.IDDOC=Отбор.ChildID
Left JOIN
Документ_Счет As Сч On Сч.IDDOC=Отбор.ChildID
WHERE
(MDID=:ГрафаОтбора.КлиентПриходных Or MDID=:ГрафаОтбора.КлиентСчетов)
AND Журнал.Date between '20220513' and '20230613'
AND (Сч.ТипСчета=0))
AND PARENTVAL = 'B1' || :ВидСправочника.Клиенты || :Клиент
AND CLOSED&1=1 -- ограничение на выбор записей только проведенных документов. Фактически при корректных записях в базе, это условие '&1' лишнее, но при каких то «глюках» таким условием можно «отловить» непроведенные документы с существующими движениями (к сожалению такое может встречаться).
ORDER BY ДляСорт, Журнал.Date
Из плана запроса 28й версии:
SCAN Отбор VIRTUAL TABLE INDEX 1:PARENT; 13 !" 0p .!%
SCAN Журнал VIRTUAL TABLE INDEX 1:ACDATETIM; 14 !" 0
SCAN ПН VIRTUAL TABLE INDEX 0:ID; 10 ! 0p nHyd! kM LEFT-JOIN
SCAN Сч VIRTUAL TABLE INDEX 0:ID; 10 ! 0p nHyd! kM LEFT-JOIN
USE TEMP B-TREE FOR ORDER BY
На 26й версии
SCAN Отбор VIRTUAL TABLE INDEX 1:PARENT; 13 !" 0p .!%
SCAN Журнал VIRTUAL TABLE INDEX 0:IDDOC; 21 ! 0p nHy$|0`
SCAN ПН VIRTUAL TABLE INDEX 0:ID; 10 ! 0p nHyd!
SCAN Сч VIRTUAL TABLE INDEX 0:ID; 10 ! 0p nHyd!
USE TEMP B-TREE FOR ORDER BY