Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Запрос: ВЫРАЗИТЬ (составной ресурс у РегистраСведений)

Запрос: ВЫРАЗИТЬ (составной ресурс у РегистраСведений)
Я
   dft2014
 
11.11.16 - 17:23
Тяну данные из РегистраСведений, у которого ресурс "ВидОтпуска" имеет составной тип (Строка, СправочникСсылка.ВидыОтпусков). Почему не срабатывает конструкция ВЫРАЗИТЬ из запроса ниже? Если пишу просто РеестрОтпусков.ВидОтпуска, то запрос срабатывает, но мне надо выполнить условие в ВЫРАЗИТЬ. Вот запрос:



Запрос.Текст =
"ВЫБРАТЬ
|    РеестрОтпусков.Сотрудник КАК Сотрудник,
//если пишу условие ниже, то вообще название ВидаОтпуска не выводит(

|    ВЫБОР
|        КОГДА ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное = """"
|            ТОГДА ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).Наименование
|        ИНАЧЕ ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное
|    КОНЕЦ КАК ВидОтпуска,
//)

|    РеестрОтпусков.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск КАК РабочийГодС,
|    РеестрОтпусков.КонецПериодаЗаКоторыйПредоставляетсяОтпуск КАК РабочийГодПо
|ИЗ
|    РегистрСведений.РеестрОтпусков КАК РеестрОтпусков";
 
 
   lxs
 
1 - 11.11.16 - 17:24
через Ссылка Делай
   lxs
 
2 - 11.11.16 - 17:24
а.. нет. чушь сказал.
   zladenuw
 
3 - 11.11.16 - 17:25
Так правильно у тебя составной тип. как ты можешь строку выразить в строка.Наименование ?
   aleks_default
 
4 - 11.11.16 - 17:26
потому что возращает Null а он <> ""
   dft2014
 
5 - 11.11.16 - 17:28
(3), (4) И как это побороть?
   zladenuw
 
6 - 11.11.16 - 17:28
Выбор когда РеестрОтпусков.ВидОтпуска Ссылка Справочник.ВидыОтпусков Тогда   КОГДА ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное = """"
            ТОГДА ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).Наименование
        ИНАЧЕ ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное
   КОНЕЦ ИНАЧЕ РеестрОтпусков.ВидОтпуска КОНЕЦ ВидОтпуска
   aleks_default
 
7 - 11.11.16 - 17:32
сначала пытаешься выразить, если получается не null тогда сверяешь и выводишь наименование, если нет - тогда просто РеестрОтпусков.ВидОтпуска
   dft2014
 
8 - 11.11.16 - 17:39
(6) Спасибо, но не поняла почему два раза подряд КОГДА, выдает синтаксическую ошибку:

Запрос.Текст =
"ВЫБРАТЬ
|    РеестрОтпусков.Сотрудник КАК Сотрудник,
|   ВЫБОР
|       КОГДА РеестрОтпусков.ВидОтпуска Ссылка Справочник.ВидыОтпусков Тогда   
|        КОГДА ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное = """"
|            ТОГДА ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).Наименование
|        ИНАЧЕ ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное
|    КОНЕЦ КАК ВидОтпуска,
|    РеестрОтпусков.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск КАК РабочийГодС,
|    РеестрОтпусков.КонецПериодаЗаКоторыйПредоставляетсяОтпуск КАК РабочийГодПо
|ИЗ
|    РегистрСведений.РеестрОтпусков КАК РеестрОтпусков";
   vicof
 
9 - 11.11.16 - 17:42
(8) ВЫБОР КОГДА ... ТОГДА ВЫБОР КОГДА ... ТОГДА
   aleks_default
 
10 - 11.11.16 - 17:42
(8)потому что условие, даже вложеное, должно начинаться с ВЫБОР
 
 Рекламное место пустует
   dft2014
 
11 - 11.11.16 - 17:47
(8) Добавила, все равно выдает синтаксическую ошибку:

Запрос.Текст =
"ВЫБРАТЬ
|    РеестрОтпусков.Сотрудник КАК Сотрудник,
|   ВЫБОР
|       КОГДА РеестрОтпусков.ВидОтпуска Ссылка Справочник.ВидыОтпусков Тогда  
|    ВЫБОР
|        КОГДА ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное = """"
|            ТОГДА ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).Наименование
|        ИНАЧЕ ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное
|    КОНЕЦ КАК ВидОтпуска,
|    РеестрОтпусков.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск КАК РабочийГодС,
|    РеестрОтпусков.КонецПериодаЗаКоторыйПредоставляетсяОтпуск КАК РабочийГодПо
|ИЗ
|    РегистрСведений.РеестрОтпусков КАК РеестрОтпусков";
   1sanekmaloi1
 
12 - 11.11.16 - 17:55
"КОНЦОВ" тоже должно быть 2
   1sanekmaloi1
 
13 - 11.11.16 - 17:56
+(12)Ну точнее сколько "ВЫБОРОВ" столько и "КОНЦОВ"
   dft2014
 
14 - 11.11.16 - 17:59
(12), (13) Добавила концы, все равно ошибка синтаксиса:

Запрос.Текст =
"ВЫБРАТЬ
|    РеестрОтпусков.Сотрудник КАК Сотрудник,
|   ВЫБОР
|       КОГДА РеестрОтпусков.ВидОтпуска Ссылка Справочник.ВидыОтпусков Тогда  
|    ВЫБОР
|        КОГДА ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное = """"
|            ТОГДА ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).Наименование
|        ИНАЧЕ ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное
|    КОНЕЦ КАК ВидОтпуска1,
|    КОНЕЦ КАК ВидОтпуска2,
|    РеестрОтпусков.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск КАК РабочийГодС,
|    РеестрОтпусков.КонецПериодаЗаКоторыйПредоставляетсяОтпуск КАК РабочийГодПо
|ИЗ
|    РегистрСведений.РеестрОтпусков КАК РеестрОтпусков";
   Cyberhawk
 
15 - 11.11.16 - 18:01
Сколько платят за решение вопроса?
   dft2014
 
16 - 11.11.16 - 18:02
(15) Б Е З В О З М Е З Д Н О ))
   zladenuw
 
17 - 11.11.16 - 18:05
|    КОНЕЦ КАК ВидОтпуска1,
|    КОНЕЦ КАК ВидОтпуска2,

А это что КОНЕЦ КОНЕЦ КАК ВидОтпуска1
   dft2014
 
18 - 11.11.16 - 18:07
(17) Незнаю, пробую всякие варианты... (((
   zladenuw
 
19 - 11.11.16 - 18:10
"ВЫБРАТЬ
|    РеестрОтпусков.Сотрудник КАК Сотрудник,
|   ВЫБОР
|       КОГДА РеестрОтпусков.ВидОтпуска Ссылка Справочник.ВидыОтпусков Тогда  
|    ВЫБОР
|        КОГДА ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное = """"
|            ТОГДА ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).Наименование
|        ИНАЧЕ ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное
|    КОНЕЦ ИНАЧЕ РеестрОтпусков.ВидОтпуска КОНЕЦ КАК ВидОтпуска1,
|    РеестрОтпусков.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск КАК РабочийГодС,
|    РеестрОтпусков.КонецПериодаЗаКоторыйПредоставляетсяОтпуск КАК РабочийГодПо
|ИЗ
|    РегистрСведений.РеестрОтпусков КАК РеестрОтпусков"
   youalex
 
20 - 11.11.16 - 19:15
(0) вместо выразить - можно использовать явные соединения, т.е.:

ВЫБРАТЬ
    РеестрОтпусков.Сотрудник КАК Сотрудник,
    
    ВЫБОР КОГДА СпрВидыОтпуска.Ссылка is null Тогда РеестрОтпусков.ВидОтпуска// тут может еще левое (левое в смысле кривое) соединение вылезти, если будет представление выводиться

        КОГДА СпрВидыОтпуска.НаименованиеПолное <> "" Тогда СпрВидыОтпуска.НаименованиеПолное
    ИНАЧЕ СпрВидыОтпуска.Наименование
    КОНЕЦ 
ИЗ
    РегистрСведений.РеестрОтпусков КАК РеестрОтпусков
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыОтпусков КАК СпрВидыОтпуска ПО РеестрОтпусков.ВидОтпуска = СпрВидыОтпуска.Ссылка
   Suricatt
 
21 - 12.11.16 - 15:07
Выразить в таких случаях стоит использовать только после проверки типа. Читатйте справку.
У вас в виде отпусков строка, тогда выражение ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное будет равно NULL.НаименованиеПолное
   PR
 
22 - 12.11.16 - 15:11
(0) Че за бред?
|    ВЫБОР
|        КОГДА РеестрОтпусков.ВидОтпуска.НаименованиеПолное = """" ИЛИ РеестрОтпусков.ВидОтпуска.НаименованиеПолное ЕСТЬ NULL
|            ТОГДА РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков.Наименование
|        ИНАЧЕ РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков.НаименованиеПолное
|    КОНЕЦ КАК ВидОтпуска
   Лефмихалыч
 
23 - 12.11.16 - 18:28
я бы выкинул наиух полное наименование из запроса, ибо толку от него ноль.
И тогда все становится просто, как мычание:

ЕСТЬNUL(РеестрОтпусков.ВидОтпуска.Наименование, РеестрОтпусков.ВидОтпуска)
   Лефмихалыч
 
24 - 12.11.16 - 18:29
+(23) т.к. там всего два типа, то и в выразить выразить - это точно такой же лефт джоин, что и в данном естьнул
   dft2014
 
25 - 14.11.16 - 10:39
(19) Чудеса какие-то. Ваш запрос тоже выводит всегда Наименование, а нужно НаименованиеПолное, т.к. в спр.Виды Отпусков у всех отпусков НаименованиеПолное - заполнено. В чем может быть причина?
   dft2014
 
26 - 14.11.16 - 11:12
+(25) Чтобы разобраться, в консоли накидала простой запрос (см. ниже):

ВЫБРАТЬ
    РеестрОтпусков.Сотрудник,
    РеестрОтпусков.ВидОтпуска,
    РеестрОтпусков.ВидОтпуска.Наименование,
    РеестрОтпусков.ВидОтпуска.НаименованиеПолное
ИЗ
    РегистрСведений.РеестрОтпусков КАК РеестрОтпусков
ГДЕ
    РеестрОтпусков.Сотрудник = &Сотрудник



В результате я получила, что РеестрОтпусков.ВидОтпуска.Наименование и РеестрОтпусков.ВидОтпуска.НаименованиеПолное возвращает NULL!!! ПОЧЕМУ ТАК? 

HELP!!!
   youalex
 
27 - 14.11.16 - 11:29
(26) ВидОтпуска - строка?
   vi0
 
28 - 14.11.16 - 11:47
(26) группа?
   dft2014
 
29 - 14.11.16 - 12:04
(27) Тяну данные из РегистраСведений, у которого ресурс "ВидОтпуска" имеет составной тип (Строка, СправочникСсылка.ВидыОтпусков).
   Sammo
 
30 - 14.11.16 - 12:22
(29) Имеется в виду, что в случаях, когда наименование нулл, то чему равен ВидОтпуска?
   h-sp
 
31 - 14.11.16 - 12:23
(29) так и должно быть. Почему вы удивляетесь?
   vi0
 
32 - 14.11.16 - 12:45
Напиши сюда чему равны поля Тип1 и ЭтоГруппа там где есть где null

ВЫБРАТЬ
    РеестрОтпусков.ВидОтпуска,
    ТИПЗНАЧЕНИЯ(РеестрОтпусков.ВидОтпуска) КАК Тип1,
    РеестрОтпусков.ВидОтпуска.ЭтоГруппа КАК ЭтоГруппа,
    РеестрОтпусков.ВидОтпуска.Наименование,
    РеестрОтпусков.ВидОтпуска.НаименованиеПолное
ИЗ
    РегистрСведений.РеестрОтпусков КАК РеестрОтпусков
ГДЕ
    РеестрОтпусков.Сотрудник = &Сотрудник
   dft2014
 
33 - 14.11.16 - 12:50
(32) Тип1 - Строка. Групп нет.
 
 
   Sammo
 
34 - 14.11.16 - 12:52
(33) Если взять .Наименование от типа Строка. то что получится?
   Sammo
 
35 - 14.11.16 - 12:54
+34 Т.е. надо корректно обрабатывать ситуацию, когда .ВидОтпуска имеет тип строка. Например, если это тип строка то выводить его (без проверки на заполненность, т.к. других вариантов особо и нет).
   dft2014
 
36 - 14.11.16 - 12:55
Мне непонятно, почему код ниже не возвращает ПолноеНаименование, хотя оно заполнено в справочнике! Вот код:


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


В коде же явно я прописала, если НаименованиеПолное = """" то тянуть Наименование, иначе НаименованиеПолное тянуть. А он всегда тянет просто Наименование!!! Предполагаю, что это из-за того, что РегистрСведений имеет ресурс "ВидОтпуска" составной тип (Строка, СправочникСсылка.ВидыОтпусков). Как это побороть???
   h-sp
 
37 - 14.11.16 - 13:02
ВЫБОР
        КОГДА РеестрОтпусков.ВидОтпуска.Наименование Есть NULL ТОГДА
        РеестрОтпусков.ВидОтпуска
        ИНАЧЕ ВЫБОР
                    КОГДА ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное = """"
                        ТОГДА ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).Наименование
                    ИНАЧЕ ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное
                КОНЕЦ
  
    КОНЕЦ КАК ВидОтпуска1,
   youalex
 
38 - 14.11.16 - 13:09
isnull(
ВЫБОР КОГДА ВидОтпуска.Наименование  = "" Тогда ВидОтпуска.НаименованиеПолное Иначе ВидОтпуска.Наименование КОНЕЦ
 выразить(ВидОтпуска.Наименование КАК Строка))
   youalex
 
39 - 14.11.16 - 13:11
(38) вторая строка:
, выразить(ВидОтпуска КАК Строка))
   dft2014
 
40 - 14.11.16 - 14:12
(37) Попробовала, Ваш код тоже тянет всегда только Наименование! А надо НаименованиеПолное!
   dft2014
 
41 - 14.11.16 - 14:29
Уже простой запрос пишу в консоли, все равно выдает NULL в полях ОтпускНаим и ОтпускНаимПолное!!!


ВЫБРАТЬ
    РеестрОтпусков.Сотрудник,
    ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).Наименование КАК ОтпускНаим,
    ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков).НаименованиеПолное КАК ОтпускНаимПолное
    ИЗ
    РегистрСведений.РеестрОтпусков КАК РеестрОтпусков
ГДЕ
    РеестрОтпусков.Сотрудник = &Сотрудник
    И (ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков) ЕСТЬ НЕ NULL)


HELP!!! SOS!!!
   kumena
 
42 - 14.11.16 - 15:15
составной тип надо на НЕОПРЕДЕЛЕНО проверять, а не NULL
   kumena
 
43 - 14.11.16 - 15:16
И (ВЫРАЗИТЬ(РеестрОтпусков.ВидОтпуска КАК Справочник.ВидыОтпусков) ЕСТЬ НЕ NULL)

будет так

и РеестрОтпусков.ВидОтпуска <> Неопределено
   Лефмихалыч
 
44 - 14.11.16 - 15:19
ГДЕ
    РеестрОтпусков.Сотрудник = &Сотрудник
    И (РеестрОтпусков.ВидОтпуска ссылка Справочник.ВидыОтпусков)
   Лефмихалыч
 
45 - 14.11.16 - 15:20
(43) там может быть пустая ссылка или строка из пробелов
   dft2014
 
46 - 14.11.16 - 16:01
(45) ТИПЗНАЧЕНИЯ(РеестрОтпусков.ВидОтпуска) КАК Тип1, выдает, что все-таки это строка, а у строки нет наименования! 

И как тогда теперь тянуть ПолноеНаименование, ведь  РегистрСведений.РеестрОтпусков, у которого ресурс "ВидОтпуска" имеет составной тип (Строка и СправочникСсылка.ВидыОтпусков), хранит как выяснилось,  данные в строке, а мне надо вытянуть ПолноеНаименование из Справочник.ВидыОтпусков?
   НЕА123
 
47 - 14.11.16 - 16:03
здесь нечестно играют (с)
   Лефмихалыч
 
48 - 14.11.16 - 16:04
(46) >И как тогда теперь тянуть ПолноеНаименование
ни как

Составной тип атрибута означает, что в этом атрибуте могут быть значения разных типов в разных записях таблицы. В одной каждой конкретной записи всегда одно значение одного типа. В твоем случае - везде строка, а не справочник.
Составной тип не означает, что в одной записи два значения.
   h-sp
 
49 - 14.11.16 - 16:06
(46) ВЫБРАТЬ
    РеестрОтпусков.Сотрудник КАК Сотрудник,
    ВидыОтпусков.НаименованиеПолное КАК ВидОтпуска
 
ИЗ
    РегистрСведений.РеестрОтпусков КАК РеестрОтпусков
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыОтпусков КАК ВидыОтпусков
ПО РеестрОтпусков.видОтпуска = ВидыОтпусков.Наименование
ГДЕ
    РеестрОтпусков.Сотрудник = &Сотрудник
 
 Рекламное место пустует
   Лефмихалыч
 
50 - 14.11.16 - 16:08
(49) а если там не наименования, а какая-нить чудовищная е*банина?
   h-sp
 
51 - 14.11.16 - 16:32
(50) скорее всего так
   youalex
 
52 - 14.11.16 - 16:39
(46) зачем вообще в этом поле строки? Как они заполняются?
   dft2014
 
53 - 14.11.16 - 17:18
(49) С П А С И Б О !!!  :*
Все получилось!


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует