Имя: Пароль:
1C
 
Сравнение многозначного поля регистра с параметром в запросе
0 YurAnt
 
28.03.17
09:50
Доброго времени суток, господа-форумчане.
Собственно сабж.
Платформа 8.3 (8.3.9.2170), Конфа: Итилиум, редакция 4.1 (4.1.01), переписанная.
Имеется регистр где измерения документ1 и Документ2 имеют составной тип

ДокументСсылка.Релиз,
ДокументСсылка.Событие,
ДокументСсылка.Инцидент,
ДокументСсылка.Проблема,
ДокументСсылка.Наряд,
ДокументСсылка.Изменение

пытаюсь выполнить запрос по регистру и проверить есть ли запись из 2х связанных документов 1-2 или 2-1

т.е. когда документ1 = &СсылкаНаИнцидент1 И Документ2 = &СсылкаНаИнцидент2
ну или наоборот
документ2 = &СсылкаНаИнцидент1 И Документ1 = &СсылкаНаИнцидент2

Ошибка при вызове метода контекста (Выполнить)
    РезультатЗапроса = Запрос.Выполнить();
по причине:
{(22, 57)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
(ВЫРАЗИТЬ(ВТТипизация.Документ1 КАК Документ.Инцидент) <<?>>= &СсылкаНаИнцидент1

http://savepic.ru/13410684.png
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ВЫРАЗИТЬ(ЕСТЬNULL(СвязанныеДокументы.Документ1, ЗНАЧЕНИЕ(Документ.Инцидент.ПустаяСсылка)) КАК Документ.Инцидент) КАК Документ1,
        |    ВЫРАЗИТЬ(ЕСТЬNULL(СвязанныеДокументы.Документ2, ЗНАЧЕНИЕ(Документ.Инцидент.ПустаяСсылка)) КАК Документ.Инцидент) КАК Документ2
        |ПОМЕСТИТЬ ВТТипизация
        |ИЗ
        |    РегистрСведений.СвязанныеДокументы КАК СвязанныеДокументы
        |ГДЕ
        |    СвязанныеДокументы.ВидДокумента1 = ""Инцидент""
        |    И СвязанныеДокументы.ВидДокумента2 = ""Инцидент""
        |    И СвязанныеДокументы.ВидСвязи = &Основной
        |    И ТИПЗНАЧЕНИЯ(СвязанныеДокументы.Документ1) = ТИП(Документ.Инцидент)
        |    И ТИПЗНАЧЕНИЯ(СвязанныеДокументы.Документ2) = ТИП(Документ.Инцидент)
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВЫРАЗИТЬ(ЕСТЬNULL(ВТТипизация.Документ1, ЗНАЧЕНИЕ(Документ.Инцидент.ПустаяСсылка)) КАК Документ.Инцидент),
        |    ВЫРАЗИТЬ(ЕСТЬNULL(ВТТипизация.Документ2, ЗНАЧЕНИЕ(Документ.Инцидент.ПустаяСсылка)) КАК Документ.Инцидент)
        |ИЗ
        |    ВТТипизация КАК ВТТипизация
        |ГДЕ
        |    (ВЫРАЗИТЬ(ЕСТЬNULL(ВТТипизация.Документ1, ЗНАЧЕНИЕ(Документ.Инцидент.ПустаяСсылка)) КАК Документ.Инцидент) = &СсылкаНаИнцидент1
        |                И ВЫРАЗИТЬ(ЕСТЬNULL(ВТТипизация.Документ2, ЗНАЧЕНИЕ(Документ.Инцидент.ПустаяСсылка)) КАК Документ.Инцидент) = &СсылкаНаИнцидент2)
        |            ИЛИ (ВЫРАЗИТЬ(ЕСТЬNULL(ВТТипизация.Документ2, ЗНАЧЕНИЕ(Документ.Инцидент.ПустаяСсылка)) КАК Документ.Инцидент) = &СсылкаНаИнцидент1
        |                И ВЫРАЗИТЬ(ЕСТЬNULL(ВТТипизация.Документ1, ЗНАЧЕНИЕ(Документ.Инцидент.ПустаяСсылка)) КАК Документ.Инцидент) = &СсылкаНаИнцидент2)";
        
    Запрос.УстановитьПараметр("Основной", Перечисления.ВидыСвязей.Основной);
    Запрос.УстановитьПараметр("СсылкаНаИнцидент1", СсылкаНаИнцидент1);
    Запрос.УстановитьПараметр("СсылкаНаИнцидент2", СсылкаНаИнцидент2);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

http://savepic.ru/13427069.png
Собственно скрин с бряком, ставлю перед запросом.
Параметры и Типы параметров вынес в табло.
док объект Обращение - он же инцидент(см чёрный кружок на скрине).
То ли я уже перегрелся, то ли что-то упускаю...
В момент перед исполнением запроса оба Инцидента существуют.
Записи в регистре нет (предположительно по крайней мере сейчас).
ну а после запроса начинает отрабатывать уже механизм.

Но вот упёрся в ошибку. Типизировал уже вроде всё что мог.
В консоли выполняется нормально. В конфигураторе валится в ошибку.
В чем может быть проблема?

Заранее благодарен,
С уважеинем, YurAnt.
1 YurAnt
 
28.03.17
09:55
В первом запросе уже отбираются только доки нужного типа "инцидент". Там же проверяю их на NULL (а по идее они и должны вернуть нуль - ибо записей нет), т.е. должны вернуть пустую ссылку.
Ну а во второй идет тот же отбор (по хорошему изначально пытался запихать в 1 запрос без ВТ), но уже перерыл достаточно, и натыкался на то что фиксили это типизацией с помещением в ВТ
2 YurAnt
 
28.03.17
09:59
PS: приведенный код запроса + скрин запроса
отличаются от второй картинки... (во второй я более упрощенный вариант тестил)
3 Naf2017
 
28.03.17
10:10
у тебя там не ссылки в параметрах, а объекты
4 YurAnt
 
28.03.17
10:14
(3) тьфу блин)
Спасибо большущее, слона то я и не заметил) :)