|
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 работает, остановлюсь на нем. Спасибо всем |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |