Имя: Пароль:
1C
1С v8
ВЫБОР... в запросе
0 емое
 
14.03.12
14:38
Добрый день, помогите разобраться, второй день в ступоре.

Есть запрос, который из временной таблички выбирает документы и получает содержание:
ВЫБОР
КОГДА ВТДанные.Документ ЕСТЬ NULL
   ИЛИ ВТДанные.Документ = НЕОПРЕДЕЛЕНО
   ИЛИ ВТДанные.Документ = ""
   ТОГДА ""
ИНАЧЕ ВЫБОР ТИПЗНАЧЕНИЯ(ВТДанные.Документ)
       КОГДА ТИП(Документ.СписаниеСРасчетногоСчета)
           ТОГДА ВТДанные.Документ.НазначениеПлатежа
       КОГДА ТИП(Документ.ПоступлениеНаРасчетныйСчет)
           ТОГДА ВТДанные.Документ.НазначениеПлатежа
       КОГДА ТИП(Документ.ПриходныйКассовыйОрдер)
           ТОГДА ВТДанные.Документ.Основание
       КОГДА ТИП(Документ.РасходныйКассовыйОрдер)
           ТОГДА ВТДанные.Документ.Основание
       КОГДА ТИП(Документ.ПриходБонусныхБаллов)
           ТОГДА ВТДанные.Документ.Комментарий
       КОГДА ТИП(Документ.РасходБонусныхБаллов)
           ТОГДА ВТДанные.Документ.Комментарий
       КОГДА ТИП(Документ.ОперацияБух)
           ТОГДА ВТДанные.Документ.Содержание
       КОГДА ТИП(Документ.ПоступлениеТоваровУслуг)
           ТОГДА ВТДанные.Документ.Комментарий
       КОГДА ТИП(Документ.ОказаниеУслуг)
           ТОГДА ВТДанные.Документ.Комментарий
       КОГДА ТИП(Документ.АвансовыйОтчет)
           ТОГДА ВТДанные.Документ.НазначениеАванса
       КОГДА ТИП(Документ.ОтражениеЗарплатыВРеглУчете)
           ТОГДА ВТДанные.Документ.Комментарий
       КОГДА ТИП(Документ.РегламентнаяОперация)
           ТОГДА ВТДанные.Документ.Комментарий
       КОГДА ТИП(Документ.СписаниеОС)
           ТОГДА ВТДанные.Документ.Комментарий
       КОГДА ТИП(Документ.ТребованиеНакладная)
           ТОГДА ВТДанные.Документ.Комментарий
       ИНАЧЕ ""
   КОНЕЦ
КОНЕЦ

Ругается: {(16, 30)}: Поле не найдено "ВТДанные.Документ.НазначениеПлатежа"
ТОГДА ВТДанные.Документ.<<?>>НазначениеПлатежа

причем таблица ВТДанные может получаться разными запросами, и ошибка возникает только в том случае если колонка таблицы ВТДанные.Документ = NULL, т.е. в запросе который создает таблицу ВТДанные написано:
...
NULL Как Документ,
...

Если я второй "ВЫБОР" заменяю таким образом

ВЫБОР
КОГДА ВТДанные.Документ ЕСТЬ NULL
   ИЛИ ВТДанные.Документ = НЕОПРЕДЕЛЕНО
   ИЛИ ВТДанные.Документ = ""
   ТОГДА ""
ИНАЧЕ "!!!!!!!!!!!!!!!!!!!!!"
КОНЕЦ

выгружаю результат в ТЗ и вывожу на экран, ни одной строки с "!!!!!!!!!!!!!!!!!!!!!" не выводится.
Т.е. получается в иначе первого выбора заходить не должно, откуда тогда ошибка???

Можно как-то обойти проблему в запросе? Лезть в механизм формирования ВТДанные очень не хочется.
1 Kashemir
 
14.03.12
14:40
Это что за чудо конструкция ?
ВЫБОР ТИПЗНАЧЕНИЯ(ВТДанные.Документ) КОГДА
2 емое
 
14.03.12
14:41
работает по аналогии с case TSQL, пробовал переписать стандартным образом, ничего не меняется
3 Kashemir
 
14.03.12
14:42
(2) А зря, лучше бы СП почитал.
4 Kashemir
 
14.03.12
14:44
(3) хм, то ли я от жизни отстал. Пойду сам почитаю :)
5 Kashemir
 
14.03.12
14:47
+(4) Да нет - вроде как все по старому:
Операция выбора описывается следующим набором правил:


<Операция выбора>
 |
  ВЫБОР  <Альтернативы выбора>  [ИНАЧЕ <Выражение>] КОНЕЦ
                           |
                           <Одиночный выбор> [<Альтернативы выбора>]
                                               |
                                               КОГДА <Логическое выражение> ТОГДА <Выражение>


В операции выбора может указываться неограниченное количество альтернативных одиночных выборов КОГДА… ТОГДА. Они обрабатываются в запросе последовательно; если <Логическое выражение> имеет значение ИСТИНА, обработка операции выбора завершается; результатом операции является значение выражения, указанного после слова ТОГДА.
Значение выражения, указанного после слова ИНАЧЕ используется в качестве результата операции выбора в том случае, если во всех ранее указанных альтернативных одиночных выборах предикат имел значение ЛОЖЬ.



_______


В твоем случае лучше так

ВЫБОР
       КОГДА ВТДанные.Документ ССЫЛКА Документ.СписаниеСРасчетногоСчета
           ТОГДА ВТДанные.Документ.НазначениеПлатежа
       КОГДА ВТДанные.Документ ССЫЛКА Документ.ПоступлениеНаРасчетныйСчет
           ТОГДА ВТДанные.Документ.НазначениеПлатежа
и т.д.
6 Kashemir
 
14.03.12
14:51
+(5) А посколько еще и ВТДанные.Документ являются неясным типом судя по ошибке, то перед обращение к разыименованому полю требуется типизировать его родителя:

ВЫБОР
       КОГДА ВТДанные.Документ ССЫЛКА Документ.СписаниеСРасчетногоСчета
           ТОГДА ВЫРАЗИТЬ(ВТДанные.Документ КАК Документ.СписаниеСРасчетногоСчета).НазначениеПлатежа

      КОГДА ВТДанные.Документ ССЫЛКА Документ.ПоступлениеНаРасчетныйСчет

           ТОГДА ВЫРАЗИТЬ(ВТДанные.Документ КАК Документ.ПоступлениеНаРасчетныйСчет).НазначениеПлатежа
7 емое
 
14.03.12
15:48
алилуя, заработало (6), спасибо