Имя: Пароль:
1C
1С v8
выбор, когда и неверные параметры
0 Wobland
 
19.03.13
11:05
добываю из внешнего источника ID типа строка(9). хочу сразу преобразовать этот ИД в ссылки на справочник:

   |    ВЫБОР
   |        КОГДА ОтчётыККМ.ВидНоменклатуры=""   2Q2   "" ТОГДА &НоменклатураТовар
   |        КОГДА ОтчётыККМ.ВидНоменклатуры=""   1X3   "" ТОГДА &НоменклатураУслуга
   |        КОГДА ОтчётыККМ.ВидНоменклатуры=""   7YB   "" ТОГДА &НоменклатураГП
   |        ИНАЧЕ ОтчётыККМ.ВидНоменклатуры
   |    КОНЕЦ,

и натыкаюсь на ошибку "Неверные параметры". в консоли пробовал

   ВЫБОР
       КОГДА ОтчётыККМ.ВидНоменклатуры = "   2Q2   "
           ТОГДА 0
       КОГДА ОтчётыККМ.ВидНоменклатуры = "   1X3   "
           ТОГДА 1
       КОГДА ОтчётыККМ.ВидНоменклатуры = "   7YB   "
           ТОГДА 2
       ИНАЧЕ 3
   КОНЕЦ

всё отработало. со ссылкой на справочник работать не хочет. что я делаю не так? не связано ли это с группировкой по этому полю?
1 Wobland
 
19.03.13
11:06
выбрать выбор когда "да"="да" тогда &ном конец
в консоли отработало хорошо (&ном - ссылка на справочник). уж не знаю, что и думать
2 Ёпрст
 
19.03.13
11:07
а весь текст запроса какой ?
3 MSII
 
19.03.13
11:08
|    ВЫБОР
   |        КОГДА ОтчётыККМ.ВидНоменклатуры=""   2Q2   "" ТОГДА &НоменклатураТовар
   |        КОГДА ОтчётыККМ.ВидНоменклатуры=""   1X3   "" ТОГДА &НоменклатураУслуга
   |        КОГДА ОтчётыККМ.ВидНоменклатуры=""   7YB   "" ТОГДА &НоменклатураГП
   |        ИНАЧЕ &НоменклатураПустаяСсылка
   |    КОНЕЦ,

Так пробовал?
4 Ёпрст
 
19.03.13
11:09
если этот выбор в селекте - пихай его и в группировку или оберни во вложенный запрос
5 Wobland
 
19.03.13
11:09
(2) 4 пейдж-дауна.

   "SELECT
   |    Истина AS Пометка,
   |    SUBSTRING(ОтчётыККМ.ДатаДок, 1, 8) AS Дата,
   |    Кассы.Descr AS Касса,
   |    Кассы.Code AS КодКассы,
   |    ВЫБОР
   |        КОГДА ОтчётыККМ.ВидНоменклатуры=""   2Q2   "" ТОГДА &НоменклатураТовар
   |        КОГДА ОтчётыККМ.ВидНоменклатуры=""   1X3   "" ТОГДА &НоменклатураУслуга
   |        КОГДА ОтчётыККМ.ВидНоменклатуры=""   7YB   "" ТОГДА &НоменклатураГП
   |        ИНАЧЕ ОтчётыККМ.ВидНоменклатуры
   |    КОНЕЦ AS Номенклатура,
   |    ВЫБОР
   |        КОГДА ОтчётыККМ.СтавкаНДС=""    I8   "" ТОГДА ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10)
   |        КОГДА ОтчётыККМ.СтавкаНДС=""   6CF   "" ТОГДА ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС18)
   |        ИНАЧЕ ОтчётыККМ.СтавкаНДС
   |    КОНЕЦ AS СтавкаНДС,
   |    SUM(ОтчётыККМ.Сумма) AS СуммаОтчётовККМ,
   |    SUM(Возвраты.Сумма) AS СуммаВозвратов,
   |    SUM(ПартииО.Сумма) AS СебестоимостьОтчётовККМ,
   |    SUM(ПартииВ.Сумма) AS СебестоимостьВозвратов,
   |    SUM(ОтчётыККМ.Сумма)-SUM(ISNULL(Возвраты.Сумма, 0)) AS ИтогПродаж,
   |    SUM(ПартииО.Сумма)-SUM(ISNULL(ПартииВ.Сумма, 0)) AS ИтогСебестоимости
   |FROM
   |    (SELECT
   |        ЖурО.Date_Time_IDDoc AS ДатаДок,
   |        ОтчётККМТЧ.IDDoc AS Ссылка,
   |        ОтчётККМШ.SP3363 AS Касса,
   |        ОтчётККМТЧ.SP3102 AS Номенклатура,
   |        спрНоменклатура.SP2417 AS ВидНоменклатуры,
   |        ОтчётККМТЧ.SP3108 AS СтавкаНДС,
   |        SUM(ОтчётККМТЧ.SP3107) AS Сумма
   |    FROM
   |        ВнешнийИсточникДанных.ТиС.Таблица.dbo__1SJOURN AS ЖурО
   |    INNER JOIN
   |        ВнешнийИсточникДанных.ТиС.Таблица.dbo_DH3114 AS ОтчётККМШ
   |    ON
   |        ОтчётККМШ.IDDoc=ЖурО.IDDoc
   |    INNER JOIN
   |        ВнешнийИсточникДанных.ТиС.Таблица.dbo_DT3114 AS ОтчётККМТЧ
   |    ON
   |        ОтчётККМШ.IDDoc=ОтчётККМТЧ.IDDoc
   |    INNER JOIN
   |        ВнешнийИсточникДанных.ТиС.Таблица.dbo_SC84 AS спрНоменклатура
   |    ON
   |        ОтчётККМТЧ.SP3102=спрНоменклатура.ID
   |    WHERE
   |        ЖурО.Date_Time_IDDoc BETWEEN &ДатаНачала AND &ДатаОкончания
   |        AND ((ЖурО.Closed=1) OR (ЖурО.Closed=3) OR (ЖурО.Closed=5) OR (ЖурО.Closed=7))
   |        AND (ЖурО.sp5365=&Организация OR &ПустаяОрганизация)
   |        AND (ОтчётККМШ.SP3093=&Склад OR &ПустойСклад)
   |        AND ОтчётККМШ.SP11859=""     0   ""
   |    GROUP BY
   |        ЖурО.Date_Time_IDDoc,
   |        ОтчётККМТЧ.IDDoc,
   |        ОтчётККМШ.SP3363,
   |        ОтчётККМТЧ.SP3102,
   |        спрНоменклатура.SP2417,
   |        ОтчётККМТЧ.SP3108
   |    ) AS ОтчётыККМ
   |    INNER JOIN
   |        ВнешнийИсточникДанных.ТиС.Таблица.dbo_SC1809 AS Кассы
   |    ON
   |        Кассы.ID=ОтчётыККМ.Касса
   // ОтчётыККМ //////////////////////////////////////////////////////
   ///////////////////////////////////////////////////////////////////
   |LEFT JOIN
   |    (SELECT
   |        ЖурВ.Date_Time_IDDoc AS ДатаДок,
   |        ВозвратТЧ.IDDoc AS Ссылка,
   |        ВозвратШ.SP1633 AS ДокОснование,
   |        ОтчётККМ.SP3363 AS Касса,
   |        ВозвратТЧ.SP1644 AS Номенклатура,
   |        SUM(ВозвратТЧ.SP1649) AS Сумма
   |    FROM
   |        ВнешнийИсточникДанных.ТиС.Таблица.dbo__1SJourn AS ЖурВ
   |    INNER JOIN
   |        ВнешнийИсточникДанных.ТиС.Таблица.dbo_DH1656 AS ВозвратШ
   |    ON
   |        ВозвратШ.IDDoc=ЖурВ.IDDoc
   |    INNER JOIN
   |        ВнешнийИсточникДанных.ТиС.Таблица.dbo_DT1656 AS ВозвратТЧ
   |    ON
   |        ВозвратШ.IDDoc=ВозвратТЧ.IDDoc
   |    INNER JOIN
   |        ВнешнийИсточникДанных.ТиС.Таблица.dbo_DH3114 AS ОтчётККМ
   |    ON
   |        SUBSTRING(ВозвратШ.SP1633, 5, 9)=ОтчётККМ.IDDoc
   |    WHERE
   |        ЖурВ.Date_Time_IDDoc BETWEEN &ДатаНачала AND &ДатаОкончания
   |        AND ((ЖурВ.Closed=1) OR (ЖурВ.Closed=3) OR (ЖурВ.Closed=5) OR (ЖурВ.Closed=7))
   |        AND (ЖурВ.sp5365=&Организация OR &ПустаяОрганизация)
   |        AND (ВозвратШ.SP1639=&Склад OR &ПустойСклад)
   |    GROUP BY
   |        ЖурВ.Date_Time_IDDoc,
   |        ВозвратТЧ.IDDoc,
   |        ВозвратШ.SP1633,
   |        ОтчётККМ.SP3363,
   |        ВозвратТЧ.SP1644
   |    ) AS Возвраты
   |    ON
   |        SUBSTRING(Возвраты.ДокОснование, 5, 9)=ОтчётыККМ.Ссылка
   |        AND SUBSTRING(Возвраты.ДатаДок, 1, 8)=SUBSTRING(ОтчётыККМ.ДатаДок, 1, 8)
   |        AND ОтчётыККМ.Касса=Возвраты.Касса
   |        AND ОтчётыККМ.Номенклатура=Возвраты.Номенклатура
   // ВозвратОтПокупателя ////////////////////////////////////////////
   ///////////////////////////////////////////////////////////////////
   |LEFT JOIN
   |    (SELECT
   |        прт.IDDoc AS Ссылка,
   |        прт.SP331 AS Номенклатура,
   |        SUM(прт.SP344) AS Сумма
   |    FROM
   |        ВнешнийИсточникДанных.ТиС.Таблица.dbo_RA328 AS прт
   |    GROUP BY
   |        прт.IDDoc,
   |        прт.SP331) AS ПартииО
   |    ON
   |        ОтчётыККМ.Ссылка=ПартииО.Ссылка
   |        AND ОтчётыККМ.Номенклатура=ПартииО.Номенклатура
   |LEFT JOIN
   |    (SELECT
   |        прт.IDDoc AS Ссылка,
   |        прт.SP331 AS Номенклатура,
   |        SUM(прт.SP344) AS Сумма
   |    FROM
   |        ВнешнийИсточникДанных.ТиС.Таблица.dbo_RA328 AS прт
   |    GROUP BY
   |        прт.IDDoc,
   |        прт.SP331) AS ПартииВ
   |    ON
   |        Возвраты.Ссылка=ПартииВ.Ссылка
   |        AND Возвраты.Номенклатура=ПартииВ.Номенклатура
   // Партии /////////////////////////////////////////////////////////
   ///////////////////////////////////////////////////////////////////
   |GROUP BY
   |    SUBSTRING(ОтчётыККМ.ДатаДок, 1, 8),
   |    Кассы.Descr,
   |    Кассы.Code,
   |    ВЫБОР
   |        КОГДА ОтчётыККМ.ВидНоменклатуры=""   2Q2   "" ТОГДА &НоменклатураТовар
   |        КОГДА ОтчётыККМ.ВидНоменклатуры=""   1X3   "" ТОГДА &НоменклатураУслуга
   |        КОГДА ОтчётыККМ.ВидНоменклатуры=""   7YB   "" ТОГДА &НоменклатураГП
   |        ИНАЧЕ ОтчётыККМ.ВидНоменклатуры
   |    КОНЕЦ,
   |    ВЫБОР
   |        КОГДА ОтчётыККМ.СтавкаНДС=""    I8   "" ТОГДА ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10)
   |        КОГДА ОтчётыККМ.СтавкаНДС=""   6CF   "" ТОГДА ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС18)
   |        ИНАЧЕ ОтчётыККМ.СтавкаНДС
   |    КОНЕЦ
   |ORDER BY
   |    SUBSTRING(ОтчётыККМ.ДатаДок, 1, 8),
   |    Кассы.Descr
   |
   |ИТОГИ
   |    СУММА(СуммаОтчётовККМ),
   |    СУММА(СуммаВозвратов),
   |    СУММА(СебестоимостьОтчётовККМ),
   |    СУММА(СебестоимостьВозвратов),
   |    СУММА(ИтогПродаж),
   |    СУММА(ИтогСебестоимости)
   |ПО
   |    Дата,
   |    Касса";
6 Defender aka LINN
 
19.03.13
11:10
ВидНоменклатуры, поди, строка неограниченной длины?
7 Wobland
 
19.03.13
11:10
(3) так ещё нет
(6) ID из семёрки. вроде ж нет
8 Defender aka LINN
 
19.03.13
11:11
(7) А я таки думаю, что да. А строка неограниченной длины не может быть в составном типе.
9 MSII
 
19.03.13
11:12
(7) Попробуй. Зачем тебе строка в группировочном поле.
10 Wobland
 
19.03.13
11:12
(8) этот же запрос со вторым кейсом из (0) отрабатывает
11 MSII
 
19.03.13
11:13
(10) Там у тебя один тип выбирается - число. Поэтому отрабатывает.
12 MSII
 
19.03.13
11:14
Думаю, действительно не может сгруппировать ссылку и строку.
13 Ёпрст
 
19.03.13
11:15
(5) в гроуп бай не хватает поля..
14 Ёпрст
 
19.03.13
11:15
вот этого:

SELECT
   |    Истина AS Пометка,
15 Wobland
 
19.03.13
11:16
СГРУППИРОВАТЬ ПО
   истина,
   ПОДСТРОКА(ОтчётыККМ.ДатаДок, 1, 8),
...
   ВЫБОР
       КОГДА ОтчётыККМ.ВидНоменклатуры = "   2Q2   "
           ТОГДА &НоменклатураТовар
       КОГДА ОтчётыККМ.ВидНоменклатуры = "   1X3   "
           ТОГДА &НоменклатураУслуга
       КОГДА ОтчётыККМ.ВидНоменклатуры = "   7YB   "
           ТОГДА &НоменклатураГП
       ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
   КОНЕЦ КАК Номенклатура,
   ВЫБОР
       КОГДА ОтчётыККМ.СтавкаНДС = "    I8   "
           ТОГДА ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10)
       КОГДА ОтчётыККМ.СтавкаНДС = "   6CF   "
           ТОГДА ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС18)
       ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС18)
   КОНЕЦ КАК СтавкаНДС,

неверные параметры
16 Ёпрст
 
19.03.13
11:17
(15) убери с гроуп бай
Как Номенклатура
КАК СтавкаНДС
17 Wobland
 
19.03.13
11:18
(16) это погрешности копи-паста. запрос сейчас делается конструктором и синтаксически верно
18 Ёпрст
 
19.03.13
11:20
(17) если закомментишь Выбор ... в селекте и в гроуп бай, запрос выполняется хоть ?
А так, всё должно работать
19 Wobland
 
19.03.13
11:24
закомментил. результат пустой. но работает. но пустой...
20 Wobland
 
19.03.13
11:25
(18) параметры на числа заменял - работало
21 НафНаф
 
19.03.13
11:26
какие параметры то?
22 Ёпрст
 
19.03.13
11:26
Странно, с параметрами тоже должно работать
23 Ёпрст
 
19.03.13
11:26
ты их хоть устанавливаешь где ?
:)
24 Wobland
 
19.03.13
11:26
не, вру. заменил в консоли на числа - неверные параметры
25 Defender aka LINN
 
19.03.13
11:27
(20) Врешь, у тебя в ИНАЧЕ не параметр был ни разу :)
26 Wobland
 
19.03.13
11:29
так. вариант 1: оставляю в тексте &НоменклатураТовар
вариант 2: пишу ТОГДА 0 (или 1 или 2)
(25) был. просто ты этого не видел

результаты опытов:
вариант 1: неверные параметры
вариант 2: работает, результат пустой
27 Wobland
 
19.03.13
11:31
(26) пустота результата вызвана другими параметрами. вариант 2 даёт непустой результат
28 Wobland
 
19.03.13
11:31
где-то я вру. то ли в (0) то ли в (26)...
29 Ёпрст
 
19.03.13
11:33
и чего хоть за параметры устанавливаешь ?
30 Defender aka LINN
 
19.03.13
11:34
(28) Вот-вот...
31 Wobland
 
19.03.13
11:35
зафиксировал ошибку. текст запроса не трогаю

   ВЫБОР
       КОГДА ОтчётыККМ.ВидНоменклатуры = "   2Q2   "
           ТОГДА &НоменклатураТовар
       ИНАЧЕ &НоменклатураТовар
   КОНЕЦ КАК Номенклатура,

при &НоменклатураТовар=0 работает, при &НоменклатураТовар=ссылке на справочник неверные параметры. всё в консоли
32 Wobland
 
19.03.13
11:35
ставка НДС курит в углу: ОтчётыККМ.СтавкаНДС КАК СтавкаНДС,
33 Wobland
 
19.03.13
11:45
облегчённый запрос с сохранением ситуации

ВЫБРАТЬ
   ВЫБОР
       КОГДА ОтчётыККМ.ВидНоменклатуры = "   2Q2   "
           ТОГДА &НоменклатураТовар
       ИНАЧЕ &НоменклатураТовар
   КОНЕЦ КАК Номенклатура
ИЗ
   (ВЫБРАТЬ
       ЖурО.DATE_TIME_IDDOC КАК ДатаДок,
       ОтчётККМТЧ.IDDOC КАК Ссылка,
       ОтчётККМШ.SP3363 КАК Касса,
       ОтчётККМТЧ.SP3102 КАК Номенклатура,
       спрНоменклатура.SP2417 КАК ВидНоменклатуры,
       ОтчётККМТЧ.SP3108 КАК СтавкаНДС,
       СУММА(ОтчётККМТЧ.SP3107) КАК Сумма
   ИЗ
       ВнешнийИсточникДанных.ТиС.Таблица.dbo__1SJOURN КАК ЖурО
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.ТиС.Таблица.dbo_DH3114 КАК ОтчётККМШ
           ПО (ОтчётККМШ.IDDOC = ЖурО.IDDOC)
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.ТиС.Таблица.dbo_DT3114 КАК ОтчётККМТЧ
           ПО (ОтчётККМШ.IDDOC = ОтчётККМТЧ.IDDOC)
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.ТиС.Таблица.dbo_SC84 КАК спрНоменклатура
           ПО (ОтчётККМТЧ.SP3102 = спрНоменклатура.ID)
   ГДЕ
       ЖурО.DATE_TIME_IDDOC МЕЖДУ &ДатаНачала И &ДатаОкончания
       И (ЖурО.CLOSED = 1
               ИЛИ ЖурО.CLOSED = 3
               ИЛИ ЖурО.CLOSED = 5
               ИЛИ ЖурО.CLOSED = 7)
       И (ЖурО.SP5365 = &Организация
               ИЛИ &ПустаяОрганизация)
       И (ОтчётККМШ.SP3093 = &Склад
               ИЛИ &ПустойСклад)
       И ОтчётККМШ.SP11859 = "     0   "
   
   СГРУППИРОВАТЬ ПО
       ЖурО.DATE_TIME_IDDOC,
       ОтчётККМТЧ.IDDOC,
       ОтчётККМШ.SP3363,
       ОтчётККМТЧ.SP3102,
       спрНоменклатура.SP2417,
       ОтчётККМТЧ.SP3108) КАК ОтчётыККМ

СГРУППИРОВАТЬ ПО
   ВЫБОР
       КОГДА ОтчётыККМ.ВидНоменклатуры = "   2Q2   "
           ТОГДА &НоменклатураТовар
       ИНАЧЕ &НоменклатураТовар
   КОНЕЦ
34 zladenuw
 
19.03.13
11:48
(31) должно работать.
все отрабатывает. в группировках не надо указывать имена полям

ВЫБРАТЬ
   ВЫБОР
       КОГДА Авто.Наименование <> ""
           ТОГДА &п
       КОГДА Авто.Наименование <> "678"
           ТОГДА &ло
       //ИНАЧЕ &л
   КОНЕЦ КАК Поле1
ИЗ
   Справочник.Авто КАК Авто
ГДЕ
   Авто.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
   ВЫБОР
       КОГДА Авто.Наименование <> ""
           ТОГДА &п
       КОГДА Авто.Наименование <> "678"
           ТОГДА &ло
       //ИНАЧЕ &л
   КОНЕЦ
35 Ёпрст
 
19.03.13
11:48
а не в консоли работает ?
36 Wobland
 
19.03.13
11:50
(35) нет. в консоль перебрался специально для выявления
37 Wobland
 
19.03.13
11:54
ещё более облегчённый вариант ;)

ВЫБРАТЬ
   ВЫБОР
       КОГДА ОтчётыККМ.ВидНоменклатуры = "   2Q2   "
           ТОГДА &НоменклатураТовар
       ИНАЧЕ &НоменклатураТовар
   КОНЕЦ КАК Номенклатура
ИЗ
   (ВЫБРАТЬ
       спрНоменклатура.SP2417 КАК ВидНоменклатуры
   ИЗ
       ВнешнийИсточникДанных.ТиС.Таблица.dbo_SC84 КАК спрНоменклатура
   
   СГРУППИРОВАТЬ ПО
       спрНоменклатура.SP2417) КАК ОтчётыККМ
38 zladenuw
 
19.03.13
11:59
может так ВЫРАЗИТЬ(ОтчётыККМ.ВидНоменклатуры КАК Строка(3))="  2Q2"
39 Wobland
 
19.03.13
12:02
(38) а разницы? в результате такого выбора будет выбран &НоменклатураТовар. а когда в там число, всё хорошо
проверил - неверные параметры при справочнике, всё работает при числе
40 Wobland
 
19.03.13
12:02
и ведь показывает несколько строк..

ВЫБРАТЬ
   ОтчётыККМ.*
ИЗ
   (ВЫБРАТЬ
       спрНоменклатура.SP2417 КАК ВидНоменклатуры
   ИЗ
       ВнешнийИсточникДанных.ТиС.Таблица.dbo_SC84 КАК спрНоменклатура
   
   СГРУППИРОВАТЬ ПО
       спрНоменклатура.SP2417) КАК ОтчётыККМ
41 Wobland
 
19.03.13
12:12
сдаётся мне, тут какая-то магия внешних источников. со справочником запрос, аналогичный (37) работает
ВЫБРАТЬ
   ВЫБОР
       КОГДА ОтчётыККМ.ВидНоменклатуры = "   2Q2   "
           ТОГДА &НоменклатураТовар
       ИНАЧЕ &НоменклатураТовар
   КОНЕЦ КАК Номенклатура
ИЗ
   (ВЫБРАТЬ
       спрНоменклатура.Код КАК ВидНоменклатуры
   ИЗ
       Справочник.Контрагенты КАК спрНоменклатура
   
   СГРУППИРОВАТЬ ПО
       спрНоменклатура.Код) КАК ОтчётыККМ
42 zladenuw
 
19.03.13
12:14
может тогда получать результат с внешнего источника в тз и уже  тогда делать запрос к нему ? хотя это платформа шалит :)
43 Wobland
 
19.03.13
12:23
(42) видимо, так и придётся ;)
44 zladenuw
 
19.03.13
12:27
(43) обидно. сделают цяцю которая не работает на 100%.
45 Wobland
 
21.03.13
13:29
кстати, когда пытался написать ПОМЕСТИТЬ, конструктор сказал, что при работе с внешними источниками использование ВТ недопустимо. в итоге имею

   ТЗ=Запрос.Выполнить().Выгрузить();
   Запрос.Текст="текст про выбор когда";
   Запрос.УстановитьПараметр("ТЗ", ТЗ);
   Кедр=Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);

непонятная магия внешних источников...