Имя: Пароль:
1C
1С v8
Странная работа отбора в построителе или СКД
,
0 ShootNICK
 
28.11.14
18:10
Есть пакетный запрос. Собирает всякое в таблички, потом левым соединением сшивает в одну, и з которой делается финальная выборка. Условия ГДЕ для построителя заданы в последней финальной.
В запросе есть булевые поля.
Так вот, при установке отбора на = Истина все ОК, фильтрует нормально, при установке отбора на = Ложь  - как будто накладывает фильтр на результат ДО соединения. Однако условия то ставятся на результирующую таблицу. КУДЫБЕЧЬ ? =)
1 ShootNICK
 
28.11.14
18:11
что на 8.2 посл, что на 8.3 одинаковый результат.
2 ShootNICK
 
28.11.14
18:13
да, всех с пятницей =))
3 DS
 
28.11.14
18:21
В заголовке про отбор, в теме - про условие. Исходника нету, Гадалки - уже бухают.
4 ShootNICK
 
28.11.14
18:28
примерно так

ВЫБРАТЬ
    АЛЬТ_КонтейнерыВАрендеСрезПоследних.Контейнер КАК Контейнер,
    АЛЬТ_КонтейнерыВАрендеСрезПоследних.Арендатор,
    НАЧАЛОПЕРИОДА(АЛЬТ_КонтейнерыВАрендеСрезПоследних.ДатаНачала, ДЕНЬ) КАК ДатаНачала,
    АЛЬТ_КонтейнерыВАрендеСрезПоследних.Период,
    АЛЬТ_КонтейнерыВАрендеСрезПоследних.СтатусАренды
ПОМЕСТИТЬ врКонтАренда
ИЗ
    РегистрСведений.АЛЬТ_КонтейнерыВАренде.СрезПоследних(, НаправлениеАренды = 1) КАК АЛЬТ_КонтейнерыВАрендеСрезПоследних
ГДЕ
    АЛЬТ_КонтейнерыВАрендеСрезПоследних.СтатусАренды > 0
{ГДЕ
    АЛЬТ_КонтейнерыВАрендеСрезПоследних.Контейнер.*,
    АЛЬТ_КонтейнерыВАрендеСрезПоследних.Арендатор.*}

ИНДЕКСИРОВАТЬ ПО
    Контейнер
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    АЛЬТ_СостояниеПоКонтейнеруСрезПоследних.Контейнер КАК Контейнер,
    АЛЬТ_СостояниеПоКонтейнеруСрезПоследних.Терминал,
    АЛЬТ_СостояниеПоКонтейнеруСрезПоследних.Площадка,
    ВЫБОР
        КОГДА АЛЬТ_СостояниеПоКонтейнеруСрезПоследних.ТекущееСостояние = 1
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК НаТерминале
ПОМЕСТИТЬ врСостояние
ИЗ
    РегистрСведений.АЛЬТ_СостояниеПоКонтейнеру.СрезПоследних(
            ,
            Контейнер В
                (ВЫБРАТЬ
                    врКонтАренда.Контейнер
                ИЗ
                    врКонтАренда)) КАК АЛЬТ_СостояниеПоКонтейнеруСрезПоследних
{ГДЕ
    АЛЬТ_СостояниеПоКонтейнеруСрезПоследних.Терминал.*,
    АЛЬТ_СостояниеПоКонтейнеруСрезПоследних.Площадка.*}

ИНДЕКСИРОВАТЬ ПО
    Контейнер
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    врКонтАренда.Контейнер КАК Контейнер,
    врКонтАренда.Контейнер.ИСО_тип КАК ISO,
    врКонтАренда.Арендатор КАК Арендатор,
    ВЫБОР
        КОГДА врКонтАренда.СтатусАренды = 1
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК Свободен,
    ЕСТЬNULL(кодыКонт.КонтейнерКод, врКонтАренда.Контейнер.Код) КАК КонтейнерКод,
    врСостояние.Терминал КАК Терминал,
    врСостояние.Площадка КАК Площадка,
    ЕСТЬNULL(врСостояние.НаТерминале, ЛОЖЬ) КАК НаТерминале,
    ЕСТЬNULL(врГруз.Порожний, ИСТИНА) КАК Порожний,
    врГруз.Груз КАК Груз,
    врКонтАренда.ДатаНачала
ПОМЕСТИТЬ врВыборка
ИЗ
    врКонтАренда КАК врКонтАренда
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АЛЬТ_КодыКонтейнеров.СрезПервых КАК кодыКонт
        ПО врКонтАренда.Контейнер = кодыКонт.Контейнер
        ЛЕВОЕ СОЕДИНЕНИЕ врСостояние КАК врСостояние
        ПО врКонтАренда.Контейнер = врСостояние.Контейнер
        ЛЕВОЕ СОЕДИНЕНИЕ врГруз КАК врГруз
        ПО врКонтАренда.Контейнер = врГруз.Контейнер
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    врВыборка.Контейнер,
    врВыборка.ISO,
    врВыборка.Арендатор,
    врВыборка.Свободен,
    врВыборка.КонтейнерКод,
    врВыборка.Терминал,
    врВыборка.Площадка,
    врВыборка.НаТерминале,
    врВыборка.Порожний,
    врВыборка.Груз,
    врВыборка.ДатаНачала
ИЗ
    врВыборка КАК врВыборка
{ГДЕ
    врВыборка.Контейнер.*,
    врВыборка.ISO.*,
    врВыборка.Арендатор.*,
    врВыборка.Свободен,
    врВыборка.КонтейнерКод,
    врВыборка.Терминал.*,
    врВыборка.Площадка.*,
    врВыборка.НаТерминале,
    врВыборка.Порожний,
    врВыборка.Груз,
    врВыборка.ДатаНачала}
5 ShootNICK
 
28.11.14
18:29
условие где построителя имелось ввиду в теге {ГДЕ
6 DS
 
28.11.14
18:38
К какому полю ставится условие?
7 mehfk
 
28.11.14
18:46
Телепатирую: НаТерминале
8 ShootNICK
 
28.11.14
20:20
любое булево

    врВыборка.Свободен,
    врВыборка.НаТерминале,
    врВыборка.Порожний,
9 ShootNICK
 
01.12.14
12:48
снова понедельник, кто проспался и есть идеи ?
10 Defender aka LINN
 
01.12.14
13:17
(9) А че идеи. Смотри результирующий текст запроса, все и поймешь.
11 ShootNICK
 
01.12.14
14:47
(10) ну да, пихает параметр везде куда не указывали. выход пока увидел только в переобзывании параметра, тогда работает ожидаемо.
12 Defender aka LINN
 
01.12.14
14:51
(11) Небось ЗаполнитьНастройки() построителю говорил?
13 ShootNICK
 
01.12.14
15:20
(12) У меня вообще там СКД. но инициализация есть

мКомпоновщикНастроек.Инициализировать(ИсточникНастроек);
14 Defender aka LINN
 
01.12.14
15:23
(13) А че тогда про Построитель говоришь?
Флаг "Автозаполнение", значит, стоит.
15 ShootNICK
 
01.12.14
16:16
(14) у меня и про то и про то написано. тестил просто в консоли построителя.
16 ShootNICK
 
01.12.14
16:29
(14) спасибо !

... гадский флаг. =)