Имя: Пароль:
1C
1C 7.7
v7: Помощь в быстром запросе
0 kstep174
 
22.08.19
11:57
Комплексная конфигурация. Есть сделанный на подобии отчета Акт сверки документ. В табличной части поле "Документ" с типом Документ неопределенного типа.
Задача: Быстрым запросом найти документы АктСверки в которых присутствует выбранный документ. Реализация напр.
Алгоритм ниже выдает пустоту. Хочется понять почему. Из-за того что в документах есть строки с не выбранным документом? Или типизацию делаю не так?

Вроде всё просто, а не работает:
    |SELECT DISTINCT Журнал.IDDOC
    |FROM _1SJOURN AS Журнал With (NOLOCK)
    |INNER JOIN $ДокументСтроки.АктСверки AS АктСверкиД With (NOLOCK) ON Журнал.IDDOC = АктСверкиД.IDDOC
    |WHERE (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)AND($АктСверкиД.Документ = :МойДок)    
    |";
    
    RS.УстановитьТекстовыйПараметр("МойДок", Докум);
1 nicesc
 
22.08.19
12:06
Думаю проблема в этом месте:
AND($АктСверкиД.Документ = :МойДок)
Так как у тебя в ТЧ поле документ имеет тип неопр.

Надо делать как то так:
AND (Журнал.iddocdef+Журнал.IDDOC= :МойДок)

Ну и это условие тебе нужно вынести в ON иначе просядет производительность.

ON (Журнал.IDDOC = АктСверкиД.IDDOC) AND (Журнал.iddocdef+Журнал.IDDOC= :МойДок)
2 trad
 
22.08.19
12:18
$АктСверкиД.Документ = :МойДок~
3 trad
 
22.08.19
12:21
Можно еще добавить
and Журнал.IDDOCDEF = $ВидДокумента.АктСверки
Будет несколько быстрее
4 kstep174
 
22.08.19
12:41
Такая конструкция "Журнал.iddocdef+Журнал.IDDOC= :МойДок" приводит к ошибке в конверсии "Conversion failed when converting the varchar value ' 18E0M   ' to data type int".
":МойДок~" - заработало. Спасибо!
Но первый вариант интересен для саморазвития.
Программист всегда исправляет последнюю ошибку.