|   |   | 
| 
 | v7: Прямой запрос | ☑ | ||
|---|---|---|---|---|
| 0
    
        koteyka-2 02.12.19✎ 14:57 | 
        Добрый день. Я в прямых запросах новичок, поэтому прошу помощи.
 |SELECT | Жур.IDDoc as [Док $Документ], | Жур.IDDocDef as Док_вид, | Жур.$ОбщийРеквизит.Склад as [Склад $Справочник.Склад] | $ПоследнееЗначение.Склад.Фирма(Склад.ID, cast(left(Жур.date_time_iddoc,8) as datetime) Фирма |FROM | _1SJourn Жур |WHERE | (cast(left(Жур.date_time_iddoc,8) as datetime) >= :НачДата) | AND (cast(left(Жур.date_time_iddoc,8) as datetime) <= :КонДата) | AND Жур.IDDocDef = $ | AND Жур.Closed & 1 = 1 |"; Сейчас запрос выдает ошибку, но если я комментирую строку | $ПоследнееЗначение.Склад.Фирма(Склад.ID, cast(left(Жур.date_time_iddoc,8) as datetime) Фирма То запрос работает Собственно, есть документ РасходнаяНакладная и у нее реквизит Склад, он общий. У всех документов общий реквизит склад (Справочник.Склад), а у склада периодический реквизит Фирма (Справичник.Фирмы) Мне нужно выбрать Суммы по документам (пока не дописал), склады и фирмы у склада на дату документа Что у меня не так со строкой | $ПоследнееЗначение.Склад.Фирма(Склад.ID, cast(left(Жур.date_time_iddoc,8) as datetime) Фирма ? | |||
| 1
    
        ДенисЧ 02.12.19✎ 14:59 | 
        Есть такой символ на клавиатуре, "запятая" называется...
 Ты её в складе забыл... | |||
| 2
    
        koteyka-2 02.12.19✎ 15:03 | 
        Спасибо за оперативность. 
 Действительно забыл, но теперб ругается на Склад.ID | |||
| 3
    
        ДенисЧ 02.12.19✎ 15:04 | 
        Там вроде есть ещё одна закорючка, $ называется.
 Я могу ошибаться, но нужно $ПоследнееЗначение.Склад.Фирма($Склад.ID, cast(left(Жур.date_time_iddoc,8) as datetime) Фирма Но это не точно... | |||
| 4
    
        koteyka-2 02.12.19✎ 15:04 | 
        The multi-part identifier Склад.ID could not be bound     | |||
| 5
    
        koteyka-2 02.12.19✎ 15:06 | 
        Не. Так выходит неизвестное метаимя или алиас $Склад     | |||
| 6
    
        koteyka-2 02.12.19✎ 15:07 | 
        Там я еще скобку пропустил в строке
 $ПоследнееЗначение.Склад.Фирма(Склад.ID, cast(left(Жур.date_time_iddoc,8) as datetime)) Фирма Но в коде она есть | |||
| 7
    
        Sserj 02.12.19✎ 15:09 | 
        У тебя нет в запросе таблицы Склад, зато есть Жур.$ОбщийРеквизит.Склад     | |||
| 8
    
        koteyka-2 02.12.19✎ 15:10 | 
        Да. Но без строки с выбором последнего значения запрос работает и склады выбирает     | |||
| 9
    
        Sserj 02.12.19✎ 15:11 | 
        Т.е. согласно идеологии SQL секция SELECT происходит "в один момент" и в ней нельзя использовать алиасы присвоенные в этой же секции, их ты сможешь использовать только в секциях позже, т.е. собственно только в ORDER BY, но и то алиас у тебя не Склад а [Склад $Справочник.Склад]     | |||
| 10
    
        Sserj 02.12.19✎ 15:12 | 
        (8) И помоему не нужно кастить к datetime, достаточно
 $ПоследнееЗначение.Склад.Фирма( Жур.$ОбщийРеквизит.Склад, left(Жур.date_time_iddoc,8)) | |||
| 11
    
        Злопчинский 02.12.19✎ 15:15 | 
        начдата и кондата - если что - можно битвин использовать     | |||
| 12
    
        koteyka-2 02.12.19✎ 15:18 | 
        Знаю, но он не спасает ситуацию     | |||
| 13
    
        koteyka-2 02.12.19✎ 15:18 | 
        $ПоследнееЗначение.Склад.Фирма( Жур.$ОбщийРеквизит.Склад, left(Жур.date_time_iddoc,8))
 Так ругается на неизвестны алиас $ОбщийРеквизит | |||
| 14
    
        Sserj 02.12.19✎ 15:19 | 
        (cast(left(Жур.date_time_iddoc,8) as datetime) >= :НачДата) 
 Вот это однозначно нужно переделать в left(Жур.date_time_iddoc,8) BETWEEN :НачДата AND :КонДата~ Потому как если ты используешь приведение то SQLServer уже не будет использовать индекс а будет выполнено полное сканирование журнала. | |||
| 15
    
        Sserj 02.12.19✎ 15:21 | 
        (13) Ну тогда просто без Жур его поставь, так как таблица у тебя одна то и никаких двусмысленностей не будет
 $ПоследнееЗначение.Склад.Фирма($ОбщийРеквизит.Склад, left(Жур.date_time_iddoc,8)) | |||
| 16
    
        dk 02.12.19✎ 15:22 | 
        про скобку в 
 $ПоследнееЗначение.Склад.Фирма(Склад.ID, cast(left(Жур.date_time_iddoc,8) as datetime)) Фирма уже было? | |||
| 17
    
        koteyka-2 02.12.19✎ 15:24 | 
        Да Было. То я здесь не дописал. В коде она есть.
 В нете вычитал, что если нужно на дату документа, то используется cast(left(Жур.date_time_iddoc,8) as datetime) | |||
| 18
    
        koteyka-2 02.12.19✎ 15:24 | 
        Не могу просто скопипастить код, т.к. по RDP работаю     | |||
| 19
    
        koteyka-2 02.12.19✎ 15:25 | 
        Приходится вручную здесь писать     | |||
| 20
    
        koteyka-2 02.12.19✎ 15:27 | 
        Ошибка только при наличии этой строки
 $ПоследнееЗначение.Склад.Фирма(Склад.ID, cast(left(Жур.date_time_iddoc,8) as datetime)) Фирма Пробовал после |FROM | _1SJourn Жур Дописать LEFT JOIN $Справочник.Склад as Склад Не помогло | |||
| 21
    
        Ёпрст гуру 02.12.19✎ 15:36 | 
        выложи последний запрос, лень все смотреть     | |||
| 22
    
        Ёпрст гуру 02.12.19✎ 15:37 | 
        AND Жур.IDDocDef = $ //очень интересное условие     | |||
| 23
    
        dk 02.12.19✎ 15:40 | 
        SELECT
 Влож.IDDOC [Документ $Документ] , Влож.IDDOCDEF [Документ_вид $ВидДокументаПредставление] , Влож.DOCNO Документ_ном , Влож.Дата , Влож.Фирма [Фирма $Справочник.Фирмы] , $ПоследнееЗначение.Фирмы.ГлБухгалтер(Влож.Фирма, Влож.Дата) глБух FROM (SELECT Журнал.IDDOC , Журнал.IDDOCDEF , Журнал.DOCNO , CAST(LEFT(Журнал.DATE_TIME_IDDOC,8) AS DATETIME) Дата , Журнал.$ОбщийРеквизит.Фирма Фирма FROM _1SJOURN AS Журнал With (NOLOCK) WHERE (Журнал.DATE_TIME_IDDOC >= :выб) AND (Журнал.IDDOCDEF = $ВидДокумента.ПриходнаяНакладная) ) Влож | |||
| 24
    
        Ёпрст гуру 02.12.19✎ 15:40 | 
        (20) не нужен там лефт джоин склад     | |||
| 25
    
        dk 02.12.19✎ 15:40 | 
        оберни через вложенный все     | |||
| 26
    
        Ёпрст гуру 02.12.19✎ 15:41 | 
        (23) ну, вложенный тут не нужен как бэ..     | |||
| 27
    
        Ёпрст гуру 02.12.19✎ 15:41 | 
        (25) а зачем ?     | |||
| 28
    
        dk 02.12.19✎ 15:44 | 
        последнеезанчение не хочет принимать общий реквизит как параметр     | |||
| 29
    
        koteyka-2 02.12.19✎ 15:44 | 
        Вот, что у меня на данный момент
 |SELECT | Жур.IDDoc as [Док $Документ], | Жур.IDDocDef as Док_вид, | Жур.$ОбщийРеквизит.Склад as [Склад $Справочник.Склад], | $ПоследнееЗначение.Склад.Фирма(Склад.ID, cast(left(Жур.date_time_iddoc,8) as datetime)) Фирма |FROM | _1SJourn Жур |WHERE | (cast(left(Жур.date_time_iddoc,8) as datetime) >= :НачДата) | AND (cast(left(Жур.date_time_iddoc,8) as datetime) <= :КонДата) | AND Жур.IDDocDef = $ | AND Жур.Closed & 1 = 1 |"; Ошибка The multi-part identifier Склад.ID could not be bound | |||
| 30
    
        koteyka-2 02.12.19✎ 15:48 | 
        Сори.
 Там вот так AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная | |||
| 31
    
        Злопчинский 02.12.19✎ 15:51 | 
        (29) может пригодится, информационно
 | select Жур.iddoc | from 1sjourn as Жур | where | between | ( | Жур.iddocdef+dtos(Жур.date)+Жур.time+Жур.iddoc, | $ВидДокумента.ЗаявкаПокупателя+dtos(:ДатаН~~)+' '+' ', | $ВидДокумента.ЗаявкаПокупателя+dtos(:ДатаК~~)+'ZZZZZZ'+'ZZZZZZZZZ' | ) | |||
| 32
    
        Sserj 02.12.19✎ 15:51 | 
        (28) Так блин не мудрить а просто этот общий руками тупо вбить
 МетаДата = СоздатьОбъект("MetaDataWork"); полеСклада = "sp" + МетаДата.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента("Склад")); ".. $ПоследнееЗначение.Склад.Фирма("+полеСклада+", left(Жур.date_time_iddoc,8)) .." | |||
| 33
    
        dk 02.12.19✎ 15:56 | 
        (32) да, так тоже робит     | |||
| 34
    
        dk 02.12.19✎ 16:01 | 
        (31) Это чтобы по индексу iddocdef + date_time_iddoc идти?
 а чего такой сложно? скуль сам его выберет, если фильтры поставить по iddocdef и date_time_iddoc типа как (23) | |||
| 35
    
        koteyka-2 02.12.19✎ 16:02 | 
        Похоже на костыль, но сработало.
 Но теперь фирмы выданы как Н001, 4001 и т.д. | |||
| 36
    
        Sserj 02.12.19✎ 16:04 | 
        (34) А это он для DBF написал, там поля отдельно date, time, iddoc вместо date_time_iddoc в SQL
 (35) Дэк типизируй колонку as [Фирма $Справочник.Фирмы] | |||
| 37
    
        Ёпрст гуру 02.12.19✎ 16:04 | 
        (28)та ну ?
 автор, проверь: SELECT Жур.IDDOC [Документ $Документ] , Жур.IDDOCDEF Документ_вид , Жур.DOCNO Документ_ном , CAST(LEFT(Жур.DATE_TIME_IDDOC,8) AS DATETIME) Дата , Жур.$ОбщийРеквизит.Склад [Склад $Справочник.Склады] , $ПоследнееЗначение.Склад.Фирма(Жур.$ОбщийРеквизит.Склад,CAST(LEFT(Жур.DATE_TIME_IDDOC,8) AS DATETIME)) [Фирма $Справочник.Фирмы] FROM FROM _1SJOURN AS Жур(NOLOCK) WHERE left(Жур.date_time_iddoc,8) BETWEEN :НачДата AND :КонДата~ AND Жур.IDDOCDEF = $ВидДокумента.ПриходнаяНакладная | |||
| 38
    
        Ёпрст гуру 02.12.19✎ 16:06 | 
        (29) 
 это че ??? >>>AND Жур.IDDocDef = $ | |||
| 39
    
        koteyka-2 02.12.19✎ 16:06 | 
        Пару минут, а то нужно руками набрать, копипаст на RDP отключен     | |||
| 40
    
        Ёпрст гуру 02.12.19✎ 16:07 | 
        (39) беги оттуда, или открой браузер в самом сеансе rdp     | |||
| 41
    
        koteyka-2 02.12.19✎ 16:23 | 
        Нет там браузера. Всё зашифровано. Самого бесит такая паранойя.
 Ошибка в вашем варианте неизвестное метаимя или алиас $ОбщийРеквизит Вариант Sserj работает, остановлюсь на нем. Спасибо всем | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |