Имя: Пароль:
1C
1C 7.7
v7: Прямой запрос: Недопустимое имя столбца
,
0 OnePrg
 
27.04.20
16:55
SELECT
      spr.ID,
      spr.ВнутреннийКонтрагент
FROM
      $Справочник.Контрагенты as spr


Ошибка: Недопустимое имя столбца "ВнутреннийКонтрагент".

Хотя такое поле в справочнике есть.
1 Sserj
 
27.04.20
16:56
$spr.ВнутреннийКонтрагент
2 OnePrg
 
27.04.20
16:58
Спасибо, друг - помогло.
3 Sserj
 
27.04.20
16:58
На вопрос почему  spr.ID без $: ID это реальное поле таблицы, а ВнутреннийКонтрагент это псевдоним в 1С, который нужно преобразовать в реальное имя поле и $ указывает 1СPP на необходимость обработки.
4 OnePrg
 
27.04.20
17:05
SELECT
     сТовар.ParentID as [Товар $Справочник.Товар],
     Реал.Период as Период,
         сМестаХранения.ParentID as [Склад $Справочник.МестаХранения],
         SUM(Реал.СуммаОборот) as Сумма,
         SUM(Реал.СуммаУчетнаяОборот) as СуммаУчетная
    FROM
         $РегистрОбороты.Реализация(:ВыбНачПериода,:ВыбКонПериода,Месяц, , ,(Товар,МестоХранения,Контрагент),(Сумма,СуммаУчетная)) AS Реал
    LEFT JOIN
         $Справочник.Товар as сТовар
         ON сТовар.ID = Реал.Товар
    LEFT JOIN
         $Справочник.МестаХранения as сМестаХранения
         ON сМестаХранения.ID = Реал.МестоХранения
    LEFT JOIN
         $Справочник.Контрагенты as cКонтрагенты
         ON cКонтрагенты.ID = Реал.Контрагент
    WHERE
         Left(Реал.Контрагент,4) = $ВидСправочника36.Контрагенты
         and CASE WHEN Left(Реал.Контрагент,4) = $ВидСправочника36.Контрагенты
              THEN $cКонтрагенты.ВнутреннийКонтрагент        !!!!!!! вот это строка не срабатывает - запрос пустой, если ставлю THEN 0 - запрос полный
              ELSE 1
             END = 0
    GROUP BY
         сТовар.ParentID,
         Реал.Период,
         сМестаХранения.ParentID
5 Изучаю1С8
 
27.04.20
17:30
Что такое END = 0
6 Sserj
 
27.04.20
17:45
(4) 1. А какой тип у ВнутреннийКонтрагент, там точно число?
2. У тебя уже условие:
    WHERE
         Left(Реал.Контрагент,4) = $ВидСправочника36.Контрагенты
зачем еще раз проверка?

Можно же проще:
    WHERE
         Left(Реал.Контрагент,4) = $ВидСправочника36.Контрагенты
         and $cКонтрагенты.ВнутреннийКонтрагент = ЧтоНужно.
7 OnePrg
 
27.04.20
18:00
SELECT
         сТовар.ParentID as [Товар $Справочник.Товар],
         Реал.Период as Период,
         сМестаХранения.ParentID as [Склад $Справочник.МестаХранения],
         SUM(Реал.СуммаОборот) as Сумма,
         SUM(Реал.СуммаУчетнаяОборот) as СуммаУчетная
    FROM
         $РегистрОбороты.Реализация(:ВыбНачПериода,:ВыбКонПериода,Месяц, , ,(Товар,МестоХранения,Контрагент),(Сумма,СуммаУчетная)) AS Реал
    LEFT JOIN
         $Справочник.Товар as сТовар
         ON сТовар.ID = Реал.Товар
    LEFT JOIN
         $Справочник.МестаХранения as сМестаХранения
         ON сМестаХранения.ID = Реал.МестоХранения
    LEFT JOIN
         $Справочник.Контрагенты as cКонтрагенты
         ON cКонтрагенты.ID = SUBSTRING(Реал.Контрагент, 5, 9)
    WHERE
         Left(Реал.Контрагент,4) = $ВидСправочника36.Контрагенты
         and $cКонтрагенты.ВнутреннийКонтрагент = 0
    GROUP BY
         сТовар.ParentID,
         Реал.Период,
         сМестаХранения.ParentID

Этот запрос работает. Один добрый человек подсказал ON cКонтрагенты.ID = SUBSTRING(Реал.Контрагент, 5, 9), но не объяснил почему

Почему если ставлю ON cКонтрагенты.ID = Реал.Контрагент запрос пустой?
8 Sserj
 
27.04.20
18:43
(7) А ну теперь все понятно.
Реал.Контрагент это у тебя тип Справочник, без вида. В базе он хранится как строка 13 символов первые 4 обозначают вид, следующие 9 ID.
ID это строка 9 символов.
И когда ты пишешь:
ON cКонтрагенты.ID = Реал.Контрагент: получается связываешь по полю 9 символов с 13.

поэтому в условии:

THEN $cКонтрагенты.ВнутреннийКонтрагент  - выдает NULL, который собственно никогда ничему не равен и после такого условия у тебя выборка пустая.
9 OnePrg
 
27.04.20
23:39
Спасибо.

А какую документацию посоветуешь по прямым запросам к БД?
10 Ёпрст
 
28.04.20
10:07
(9) форум 1cpp и книжка по основам t-sql
11 orefkov
 
28.04.20
10:41
+(10)
1cv7.dds ещё :)