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



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

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

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

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

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

ВЫБРАТЬ
    РеестрОтпусков.Сотрудник КАК Сотрудник,
    
    ВЫБОР КОГДА СпрВидыОтпуска.Ссылка is null Тогда РеестрОтпусков.ВидОтпуска // тут может еще левое (левое в смысле кривое) соединение вылезти, если будет представление выводиться
        КОГДА СпрВидыОтпуска.НаименованиеПолное <> "" Тогда СпрВидыОтпуска.НаименованиеПолное
    ИНАЧЕ СпрВидыОтпуска.Наименование
    КОНЕЦ
ИЗ
    РегистрСведений.РеестрОтпусков КАК РеестрОтпусков
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыОтпусков КАК СпрВидыОтпуска ПО РеестрОтпусков.ВидОтпуска = СпрВидыОтпуска.Ссылка
21 Suricatt
 
12.11.16
15:07
Выразить в таких случаях стоит использовать только после проверки типа. Читатйте справку.

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

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

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



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

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

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


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


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


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


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

будет так

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

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

Составной тип атрибута означает, что в этом атрибуте могут быть значения разных типов в разных записях таблицы. В одной каждой конкретной записи всегда одно значение одного типа. В твоем случае - везде строка, а не справочник.
Составной тип не означает, что в одной записи два значения.
49 h-sp
 
14.11.16
16:06
(46) ВЫБРАТЬ
    РеестрОтпусков.Сотрудник КАК Сотрудник,
    ВидыОтпусков.НаименованиеПолное КАК ВидОтпуска

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