Имя: Пароль:
1C
1С v8
Не работает ВЫРАЗИТЬ() для выражения с типом, определённым в ПВХ
, ,
0 ssalikoff
 
10.11.16
03:31
Помогите, пожалуйста, решить задачу.
В запросе получаю значение из таблицы ДополнительныеРеквизитыИСведения.
Тип значения определен в соответствующем ПВХ и задан как Булево.
Возвращаемый запросом тип — Характеристика.ДополнительныеРеквизитыИСведения, но я хочу его явно привести к Булеву. Пытаюсь применить ВЫРАЗИТЬ(), но не работает:
«Ошибка в запросе набора данных
по причине:
{(85, 2)}: Несовместимые типы "ВЫРАЗИТЬ"
<<?>>ВЫРАЗИТЬ(ВложенныйЗапрос.Значение КАК БУЛЕВО) КАК Метка»

Для чего мне вообще нужно приводить тип? Дело в том, что этот запрос используется для формирования динамического списка, и требуется для соответствующего поля установить вид «Поле флажка». А поставить его можно лишь в том случае, если ПутьКДанным имеет тип Булево.
1 youalex
 
10.11.16
07:24
(0) скорее всего, "Возвращаемый запросом тип" - это ссылка ПВХ, а не значение характеристики. Текст запроса?
2 Лефмихалыч
 
10.11.16
08:57
ВЫБОР
   КОГДА ВложенныйЗапрос.Значение=Истина
      Тогда истина
   ИНАЧЕ Ложь
КОНЕЦ


но я не удивлюсь, если это во всех строках вернет ложь
3 ssalikoff
 
10.11.16
16:41
(2) Я именно так и пробовал, но это не работает:
1С ругается на сравнение ВложенныйЗапрос.Значение=Истина и вываливает ошибку

Существуют ли какие-нибудь ещё обходные манёвры?
4 DrShad
 
10.11.16
16:44
весь запрос давай
5 ssalikoff
 
10.11.16
16:44
(1) «Возвращаемый запросом тип - это ссылка ПВХ». Конечно, так оно и есть.
А значение характеристики возвращается в самом значении ВложенныйЗапрос.Значение
6 Лефмихалыч
 
10.11.16
16:47
(3) (5) что-то из этого - наглая ложь. Сравнивать ссылку с булевом в запросе можно.

Чего ты хочешь-то? Ты сознательно пытаешься преобразовать ссылку к булево. Зачем?
7 ssalikoff
 
10.11.16
16:48
ВЫБРАТЬ
    ДокументЗаказКлиента.Ссылка КАК Ссылка,
    ...
    ...
    ЗапросДобавленоНаКарту.Значение КАК НаКарте
    
ИЗ
    Документ.ЗаказКлиента КАК ДокументЗаказКлиента

        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            МАКСИМУМ(ЗаказКлиентаДополнительныеРеквизиты.Значение) КАК Значение,
            ЗаказКлиентаДополнительныеРеквизиты.Ссылка КАК Ссылка
        ИЗ
            Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты
        ГДЕ
            ЗаказКлиентаДополнительныеРеквизиты.Свойство = &СвойствоДобавленоНаКарту
        
        СГРУППИРОВАТЬ ПО
            ЗаказКлиентаДополнительныеРеквизиты.Ссылка) КАК ЗапросДобавленоНаКарту
        ПО ДокументЗаказКлиента.Ссылка = ЗапросДобавленоНаКарту.Ссылка
8 ssalikoff
 
10.11.16
16:48
Спрашиваю про ЗапросДобавленоНаКарту.Значение
9 ssalikoff
 
10.11.16
16:49
(6) А зачем мне это нужно я в самом первом посте написал

В конечном счете мне нужно иметь возможность установить поле флажка в форме динамического списка
10 Мойдодыр
 
10.11.16
16:52
Делай здесь выразить
11 Мойдодыр
 
10.11.16
16:52
МАКСИМУМ(ЗаказКлиентаДополнительныеРеквизиты.Значение)
12 ssalikoff
 
10.11.16
16:52
(10) ПРобовал. 1С ругается, пишет ошибка запроса
13 DrShad
 
10.11.16
16:54
так у тебя максимум не обязательно будет булево, может и NULL быть
14 DrShad
 
10.11.16
16:54
тем более что соединение левое
15 ssalikoff
 
10.11.16
16:57
(13) Да, это так
То есть NULL с помощью ВЫРАЗИТЬ к Булеву Ложь не преобразуется?
16 DrShad
 
10.11.16
16:58
(15) нет конечно
при любых операциях с NULL получается только NULL и ничего более, хотя есть исключения
17 ssalikoff
 
10.11.16
16:59
(6) ЛефМихалыч был прав, конструкция с ВЫБОР
и сравнением ВложенныйЗапрос.Значение=Истина нормально работает. Первый раз я где-то накосячил и сообщил ложную информацию, что это не работает.
То есть проблема в принципе решена.

Спасибо всем откликнувшимся
18 Лефмихалыч
 
10.11.16
17:00
(9) какое может быть поле флажка, если у тебя там ссылка по твоим же собственнывм словам?
19 DrShad
 
10.11.16
17:01
(18) там NULL
20 ssalikoff
 
10.11.16
17:03
(18) В ДополнительныеРеквизитыИСведения добавлено в пользовательском интерфейсе поле «ДобавленоНаКарту». Для него указан тип Булево.
Все эти дополнительные реквизиты хранятся в ПВХ

Где я ошибся в описании задачи?
21 Лефмихалыч
 
10.11.16
17:04
убери наиух вложенный запрос
22 ssalikoff
 
10.11.16
17:04
(19) у меня может быть NULL, а может быть Истина, если это допсвойство назначено
23 ssalikoff
 
10.11.16
17:05
(21) Вложенный запрос для того, чтобы обезопаситься от того, что несколько значений будет введено.
В принципе через пользовательский интерфейс невозможно, но я подстраховался на всякий случай
24 Лефмихалыч
 
10.11.16
17:07
ВЫБРАТЬ
    Док.Ссылка КАК Ссылка,
    ЕСТЬNULL(ДС.Значение, ЛОЖЬ) КАК НаКарте
ИЗ
   Документ.ЗаказКлиента КАК Док
   ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты как ДС
   ПО Док.Ссылка = ДС.Ссылка
   и ДС.Свойство=&Свойство
25 Лефмихалыч
 
10.11.16
17:07
(23) вот это (24) точно так же можно сгруппировать. А соединения с вложенными запросами редко бывают эффективными
26 Лефмихалыч
 
10.11.16
17:08
ну и, если это часто будет использоваться, то надо подкинуть индекс по свойству. Иначе это тэйбл скан.
27 ssalikoff
 
10.11.16
17:10
(25) Понял. Спасибо за науку. Но пока провала в производительности не заметил. Отрабатывает каждый раз при открытии формы списка документов.
Позже переделаю по совету.
28 h-sp
 
10.11.16
17:13
ВЫБРАТЬ

    ДС.Ссылка КАК Ссылка,
    ЕСТЬNULL(ДС.Значение, ЛОЖЬ) КАК НаКарте
ИЗ

   Документ.ЗаказКлиента.ДополнительныеРеквизиты как ДС

ГДЕ
   ДС.Свойство=&Свойство
29 Лефмихалыч
 
10.11.16
17:17
(28) во-первых, зачем здесь ЕСТЬNULL()? Во-вторых, что вернет запрос, если из всех 100500 документов своство установлено только у трех штук?
30 DrShad
 
10.11.16
17:21
(29) вернет три документа ))))
31 h-sp
 
10.11.16
17:38
(29) всё оно нормально вернет. Эти два запроса (24) и (28) идентичны, только более короткая запись.
32 DrShad
 
10.11.16
17:40
(31) а ты попробуй
33 Лефмихалыч
 
10.11.16
17:40
(31) садись, два
34 Лефмихалыч
 
10.11.16
17:41
запрос (28) вернет те и только те документы, у которых свойство = истина, либо те, ук оторых оно когда-то быо истина, но потом его руками установили в ложь. Для всех остальных документов таких записей в ТЧ просто нет.
35 h-sp
 
10.11.16
17:45
(33) понял
Основная теорема систематики: Новые системы плодят новые проблемы.