Имя: Пароль:
1C
 
Запрос как условие запроса
0 tilek19
 
20.01.23
08:09
Доброго времени суток, имеется запрос

ВЫБРАТЬ
    МаршрутФактуры.Ссылка КАК Ссылка,
    KPIСборки.Автор КАК Автор,
    МаршрутФактуры.Ссылка.ТранспортноеСредство КАК ТранспортноеСредство
ПОМЕСТИТЬ ВТ_1
ИЗ
    Документ.Маршрут.Фактуры КАК МаршрутФактуры
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.KPIСборки КАК KPIСборки
        ПО МаршрутФактуры.Ссылка = KPIСборки.Документ
ГДЕ
    МаршрутФактуры.Ссылка.ВыгруженЭТТН = ЛОЖЬ
    И KPIСборки.Должность = ЗНАЧЕНИЕ(Справочник.Должности.Водитель)
    И KPIСборки.Автор = &Автор

СГРУППИРОВАТЬ ПО
    МаршрутФактуры.Ссылка,
    KPIСборки.Автор,
    МаршрутФактуры.Ссылка.ТранспортноеСредство
;

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



В "КОНЕЦ КАК Транспорт" это поле возвращяется булево хотя должен вернуться справочник не пойму в чем проблема.
подскажите где ошибка
1 Ryzeman
 
20.01.23
08:14
>>ТОГДА ВТ_1.ТранспортноеСредство В {}

Что по-твоему это должно вернуть?...
2 tilek19
 
20.01.23
08:15
(1) значение из справочника
3 Ryzeman
 
20.01.23
08:19
(2) у тебя тут аж две логических ошибки.

Во-первых, разумеется это вернёт булево. ты буквально проверяешь вхождение элемента в результат подзапроса.

Во-вторых, на кой чёрт ты проверяешь входит ли пустая ссылка в выборку? Обдумай логику своего запроса, тут явно косяк. У этого куска результат ВСЕГДА будет равен ЛОЖЬ

       КОГДА ВТ_1.ТранспортноеСредство = ЗНАЧЕНИЕ(Справочник.ТранспортныеСредства.Пустаяссылка)
            ТОГДА ВТ_1.ТранспортноеСредство В
                    (ВЫБРАТЬ
                        ТранспортныеСредства.Ссылка КАК Ссылка
                    ИЗ
                        Справочник.ТранспортныеСредства КАК ТранспортныеСредства
                    ГДЕ
                        ТранспортныеСредства.Водитель = ВТ_1.Автор)
4 hockeyist
 
20.01.23
08:20
(2) У GPT спроси. Вопрос элементарный
5 tilek19
 
20.01.23
08:31
(3) объясню по другому
есть документ с реквизитом и если этот реквизит пустой нужно взять значение из справочника
6 Ryzeman
 
20.01.23
08:43
(5) Ну, я тебе ошибки указал. Своим запросом ты получаешь совсем не это.

Вот этот блок
                    (ВЫБРАТЬ
                        ТранспортныеСредства.Ссылка КАК Ссылка
                    ИЗ
                        Справочник.ТранспортныеСредства КАК ТранспортныеСредства
                    ГДЕ
                        ТранспортныеСредства.Водитель = ВТ_1.Автор)

Тебе надо в соединение перенести, только не забудь там выбрать РАЗЛИЧНЫЕ, потому что как я понимаю у тебя там миллиард задвоений может быть.
А в блоке ВЫБОР уже по условию показывать либо результат подзапроса либо ВТ_1.ТранспортноеСредство
7 Ботаник Гарден Меран
 
20.01.23
08:45
Тогда ТранспортныеСредства.Ссылка
Конец

....
Левое Соединение Справочник.ТранспортныеСредства КАК ТранспортныеСредства
По ВТ_1.Автор = ТранспортныеСредства.Водитель
8 Ботаник Гарден Меран
 
20.01.23
08:46
Если водителей много, то...
условие ПО немного усложнится.
9 hockeyist
 
20.01.23
08:51
10 hockeyist
 
20.01.23
08:51
11 Ryzeman
 
20.01.23
08:53
(9) (10) Вот как только научишь 1с выполнять COALESCE, тогда можешь приходить и выёживаться со своим чат-ботом)
12 hockeyist
 
20.01.23
08:54
(11) Не придирайся. 1С умеет в COALESCE
13 Ryzeman
 
20.01.23
08:55
(12) не умеет, ЕСТЬNULL это IsNull, никак не COALESCE)
14 hockeyist
 
20.01.23
08:58
(13) В данном случае ЕСТЬNULL подходит. Языковая модель прямо об это говорит:
"Здесь, функция COALESCE используется для выбора не-NULL значения из двух полей"
15 tilek19
 
20.01.23
08:59
ок сделаю соеденением,спасибо всем
16 hockeyist
 
20.01.23
09:00
(15) Было бы правильным приходить на форум после GPT
17 hockeyist
 
20.01.23
09:01
(13) Так. И что же такое COALESCE?
18 Ryzeman
 
20.01.23
09:04
(17) Тебя на MSDN забанили?) Эта функция Transact-SQL, которая поочерёдно вычисляет все аргументы и возвращает первый не NULL. В 1с этого нет, и такой код на английском если вставишь никак 1с не прожуёт.
19 hockeyist
 
20.01.23
09:05
(18) И чем это отличается от ЕСТЬNULL в контексте данного вопроса?
20 Ryzeman
 
20.01.23
09:06
(19) В контексте данного вопроса, твой бот не помогает человеку, не знающему хотя бы на твёрдую четвёрку и SQL и 1с решить свою задачу, потому что оно оперирует сущностями, которые ТС не знает. Особенно учитывая логические ошибки которые допускает и  его запрос из (0).
21 Ryzeman
 
20.01.23
09:07
(20) Но это я режим душнилы включил. Сам юмор и идею отправлять с такими вопросами к боту я оценил :)
Ошибка? Это не ошибка, это системная функция.