Имя: Пароль:
1C
1C 7.7
v7: прямые запросы 1с++. Неизвестное метаимя или алиас
0 patapum
 
18.06.15
16:45
Продолжаю ковырять прямые запросы. Пишу следующий запрос, глядя на примеры в интернете, кажется, что все должно работать. Выдает ошибку. Подскажите, в чем не прав?

Запрос:
СкриптSQL = "SELECT
|$ПеревозчикиСальдо.КредДокумент as [КредДокумент $Документ.Перевозка],
|$ПеревозчикиСальдо.СуммаОстаток as СальдоПеревозчика
|FROM $РегистрОстатки.Перевозчики(,,, (КредДокумент), (Сумма) ) as ПеревозчикиСальдо
|";

Ошибка:
Meta name parser error: неизвестное метаимя или алиас "$ПеревозчикиСальдо"
1 akaBrr
 
18.06.15
16:55
$ не надо
2 Serginio1
 
18.06.15
16:55
Пользуйся консолью.
Убери $
ПеревозчикиСальдо.СуммаОстаток
3 patapum
 
18.06.15
16:57
(1), (2) спасибо! и правда, в примерах без $, не заметил. убрал, все норм.
да, $ вообще пора отменить!!! :)))
4 Serginio1
 
18.06.15
17:03
(3) http://www.1cpp.ru/forum/YaBB.pl?num=1332077808/4#4

Вообще есть конструктор запросов.
Есть консоль запросов
http://www.1cpp.ru/forum/YaBB.pl?num=1193394153/
5 Эльниньо
 
26.06.15
12:13
Памажите, плз

    ТекстЗапроса = "
    |SELECT
    |right(Рег.ПозицияДокумента,9) as [Док $Документ],
    |Рег.ВидДокумента  as Док_вид,
    |Рег.Товар as [Товар $Справочник.Номенклатура],
    |Рег.СуммаПродажиОборот СуммаП,
    |FROM $РегистрОбороты.Продажи(:НачДата,:КонДата~, Документ) as Рег

Как вытянуть из Док реквизит?
Чую, что джойн там чего-то, но нуб
6 Ёпрст
 
26.06.15
12:18
(5) лефт джоин $документ.вася as вася он вася.iddoc = right(Рег.ПозицияДокумента,9)
7 Ёпрст
 
26.06.15
12:18
ну и в селекте $вася.реквизит as реквизит
8 Ёпрст
 
26.06.15
12:20
если доков много, то либо джойнить со всеми и в селекте писать

select coalesce ($Вася.Реквизит,$Федя.Реквизит,....,$Наташа.Реквизит) как Реквизит

или соединение с подзапросом, в котором через юнион объединить нужные виды доков
9 ЧеловекДуши
 
26.06.15
12:35
(0) >>> $ПеревозчикиСальдо

С каких это пор 1С++ может так работать?...
Хотя мне никогда не нравилось такая самодеятельность от разработчиков 1С++, Решал проблему нормального писания запроса, без использования "оптимизаторов" кода от 1С++ :)
10 Эльниньо
 
26.06.15
12:38
|LEFT JOIN $Документ.Фирма as Фирма (nolock) on Фирма.IDdoc = right(Рег.ПозицияДокумента,9)    

Meta name parser error: объект не найден "$Документ.Фирма"
11 Абыр
 
26.06.15
12:41
(10) "Фирма" - идентификатор документа или идентификатор реквизита документа?
12 Mikeware
 
26.06.15
12:42
(10) Фирма - в журнале, а не в докумете
Журнал.$ОбщийРеквизит.Фирма
13 ЧеловекДуши
 
26.06.15
12:43
(10) Если Фирма общий реквизит, то это еще нечего не значит, что он доступен в общем журнале, как реквизит :)
14 ЧеловекДуши
 
26.06.15
12:43
(12) Не для всех :)
15 Mikeware
 
26.06.15
12:45
(14) не для всех.
Но скорее всего для него именно так.
Хотя с учетом LEFT JOIN $Документ.Фирма....
16 Абыр
 
26.06.15
12:48
(10), если "Фирма" - это общий реквизит с флажком "Отбор" в пофигураторе, то джойни рег с журналом.
Если просто реквизит или общий без отбора, то (6), (7), (8)
17 Эльниньо
 
26.06.15
12:55
Фирма - общий реквизит
Хрен с ней фирмой. Её полюбасу в измерение добавить надо.

Та же ошибка с реквизитом шапки

|LEFT JOIN $Документ.ПризнакНакладной as Признак (nolock) on Признак.IDdoc = right(Рег.ПозицияДокумента,9)    

ПризнакНакладной - перечисление
18 Serginio1
 
26.06.15
12:55
(5) Case When Рег.ВидДокумента=$ВидДокумента.ТвойДокумент

Либо Джойны но что бы лишний раз не лезть в поис с условием
ОN (Рег.ВидДокумента=$ВидДокумента.ТвойДокумент) And ( вася.iddoc = right(Рег.ПозицияДокумента,9))
19 Mikeware
 
26.06.15
12:58
(17) |LEFT JOIN $Документ.Накладная
20 Serginio1
 
26.06.15
13:00
18+ Select ЧтоТоТам From  $Документ.ПризнакНакладной as Признак (nolock) on Признак.IDdoc = right(Рег.ПозицияДокумента,9)
21 Mikeware
 
26.06.15
13:01
(20) лучше  $Документ.ПРИЗРАК_НАКЛАДНОЙ!
22 Абыр
 
26.06.15
13:56
(17)
SELECT
...все, что надо из регистров...,
$Ипполит.ПризнакНакладной
FROM $РегистрОбороты.Продажи(:НачДата,:КонДата~, Документ) as Рег
LEFT JOIN
$Документ.ИдентификаторДокументаКРеквизитуКоторогоХочешьОбратиться as Ипполит
ON
Ипполит.IDDOC = right(Рег.ПозицияДокумента,9)
23 Эльниньо
 
26.06.15
14:38
(22) В запросе будет 2 вида дока с реквизитом ПризнакНакладной
24 Ёпрст
 
26.06.15
14:44
(23) от ты ленивый
select
...все, что надо из регистров...,
coalesce($Вася.ПризнакНакладной,$Федя.ПризнакНакладной,$Наташа.ПризнакНакладной) ПризнакНакладной
FROM $РегистрОбороты.Продажи(:НачДата,:КонДата~, Документ) as Рег
left join
$Документ.Вася as Вася (nolock) on Вася.iddoc = right(Рег.ПозицияДокумента,9)left join
left join
$Документ.Федя as Федя (nolock) on Федя .iddoc = right(Рег.ПозицияДокумента,9)left join
left join
$Документ.Наташа as Наташа (nolock) on Наташа .iddoc = right(Рег.ПозицияДокумента,9)
25 Ёпрст
 
26.06.15
14:45
ну там, синтаксис поправь (копипасте же)
26 Эльниньо
 
26.06.15
15:22
|Рег.КолвоБазОборот Количество,
    |$ПоследнееЗначение.Номенклатура.МатрицаНов(Рег.Товар,:КонДата) Матр,
    |$ПоследнееЗначение.Номенклатура.МатрицаМаг(Рег.Товар,:КонДата) Фокус,
    |coalesce($Вася.ПризнакНакладной,$Федя.ПризнакНакладной) ПризнакНакладной
    |FROM $РегистрОбороты.Продажи(:НачДата,:КонДата~, Документ) as Рег
    |LEFT JOIN $Справочник.Номенклатура Номенклатура (nolock) on Номенклатура.id = Рег.Товар    
    |LEFT JOIN $Документ.РасходнаяНакладная as Вася (nolock) on Вася.iddoc = right(Рег.ПозицияДокумента,9)
    |LEFT JOIN $Документ.РасходнаяНакладнаяБ as Федя (nolock) on Федя.iddoc = right(Рег.ПозицияДокумента,9)
    |WHERE (ПризнакНакладной = Перечисление.ПризнРасхНакл.Продажа) and (1=1) and (2=2) and (3=3) and (4=4)";

Invalid column name 'ПризнакНакладной'
27 Ёпрст
 
26.06.15
15:25
(26)

//|WHERE (ПризнакНакладной = Перечисление.ПризнРасхНакл.Продажа) and (1=1) and (2=2) and (3=3) and (4=4)";

|WHERE (coalesce($Вася.ПризнакНакладной,$Федя.ПризнакНакладной) = :ВыбПризнак) and (1=1) and (2=2) and (3=3) and (4=4)";
28 Ёпрст
 
26.06.15
15:26
Запрос.УстановитьТекстовыйпараметр("ВыбПризнак",Перечисление.ПризнРасхНакл.Продажа);
29 Ёпрст
 
26.06.15
15:28
или так

|WHERE (coalesce($Вася.ПризнакНакладной,$Федя.ПризнакНакладной) = $Перечисление.ПризнРасхНакл.Продажа) and (1=1) and (2=2) and (3=3) and (4=4)";
30 Ёпрст
 
26.06.15
15:28
подзабывать я стал синтаксис ужо
31 Mikeware
 
26.06.15
15:35
(29) так
32 Эльниньо
 
26.06.15
15:40
Домучил!
Всем Спасибо! Ёпрсту слава!
33 trad
 
26.06.15
15:41
(9) в 1с++ есть оптимизатор кода?
просвети, плиз