Имя: Пароль:
1C
1С v8
Почему не работает условие ПустаяСсылка в иерархии ПустаяССылка?
🠗 (Волшебник 03.04.2018 11:38)
,
0 Куникулус
 
02.04.18
18:37
Если в запросе есть, допустим, Контрагент, то условие Контрагент В ИЕРАРХИИ (ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяССылка)) - Истина.


ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяССылка) В ИЕРАРХИИ (ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяССылка)) - Ложь


Почему так?




ВЫБРАТЬ
    ВЫБОР
        КОГДА ВложенныйЗапрос.Ссылка В ИЕРАРХИИ (ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяССылка))
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК Поле1,
    NULL КАК Поле2
ИЗ
    (ВЫБРАТЬ ПЕРВЫЕ 10
        Контрагенты.Ссылка КАК Ссылка
    ИЗ
        Справочник.Контрагенты КАК Контрагенты) КАК ВложенныйЗапрос

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    NULL,
    ВЫБОР
        КОГДА ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяССылка) В ИЕРАРХИИ (ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяССылка))
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ
1 RomanYS
 
02.04.18
18:42
Можно порассуждать: типа у ссылки берется рекурсивно родитель и в итоге для верхнего уровня придем к пустой ссылке. Поэтому (контрагент в иерархии (&ПустаяСсылка)) = Истина.

Для пустой ссылки это не работает потому что у нее нет родителя.

Но все рассуждения эти - фигн.
2 Куникулус
 
02.04.18
18:44
(1) Однако
контрагент в иерархии (&контрагент ) - истина
3 Волшебник
 
02.04.18
18:47
Никогда, слышите, никогда не используйте В ИЕРАРХИИ (&ПустаяСсылка)
4 RomanYS
 
02.04.18
18:48
(2) Ну допустим проверяется запись таблице, нет записи - ложь.

Зачем вопрос "почему", прими как факт. Считай "по определению", только не проси найти ссылки на документацию))
5 Куникулус
 
02.04.18
18:55
(3) Почему?
6 Куникулус
 
02.04.18
18:56
(4) а где написано, что

контрагент не в иерархии (&контрагент )
не контрагент в иерархии (&контрагент )

Это одно и то же?
7 RomanYS
 
02.04.18
18:58
(6) "Ненавижу 1С" твой ник?
8 Волшебник
 
02.04.18
18:59
(5) Потому что это сгенерирует целую хуеву тучу НЕНУЖНЫХ запросов к базе.
9 Куникулус
 
02.04.18
18:59
(7) нет
10 Куникулус
 
02.04.18
19:00
(8) Ни чё, сервер мощный.
11 Волшебник
 
02.04.18
19:00
(10) Эта конструкция может завалить самый мощный сервер. Хотя чего это я волнуюсь... Вам ебаться....
12 Куникулус
 
02.04.18
19:02
(8) О.к. Есть два списка контрагентов. Нудно сделать отчет по 4м варинтам
1. В первом списке
2. не в первом списке
3. во втором списке
4. все

Как лучше управиться с условиями?
13 RomanYS
 
02.04.18
19:03
(12) В списках группы? Иначе непонятно откуда вообще иерархия
14 Волшебник
 
02.04.18
19:04
(12) Сделай 4 варианта отчёта.
1. В первом списке В (&Список1)
2. не в первом списке НЕ В (&Список1)
3. во втором списке В (&Список2)
4. все ГДЕ &ЕстьОтбор И условие (1-3)

Запрос.УстановитьПараметр("ЕстьОтбор", Истина);
15 Куникулус
 
02.04.18
19:10
(14)

Это ты хорошо придумал.

Проблема в том. Что есть полтора десятка запросов, и в запросах обращение 1-10(или даже больше) обращений к талицам.

И в каждой таблице нужно условие.

СубконтоДт1,СубконтоДт2,Субконто1, Контрагент

Поэтому пишу простое условие:
Субконто1 = &ТекстТиповогоУсловия

А потом делаю:
    Если ОтборкКонтрагентовДляАнализа = 2 Тогда //НЕ ХХХ
        ТекстУсловияКонтрагентов =   " НЕ В ИЕРАРХИИ (&спХолдинга)";
        ТекстУсловияКонтрагентовРаб =   " НЕ В ИЕРАРХИИ (&спХолдинга)";
    ИНачеЕсли ОтборкКонтрагентовДляАнализа = 3 Тогда //УУУУ
        ТекстУсловияКонтрагентов =   "  В ИЕРАРХИИ (&спУУУУ)";
        ТекстУсловияКонтрагентовРаб =   "  В ИЕРАРХИИ (&спУУУУ)";
    ИНачеЕсли ОтборкКонтрагентовДляАнализа = 4 Тогда //Все
        ТекстУсловияКонтрагентов =   "  В ИЕРАРХИИ (Значение(Справочник.Контрагенты.ПустаяСсылка))";
        ТекстУсловияКонтрагентовРаб =   "  В ИЕРАРХИИ (Значение(Справочник.ФизическиеЛица.ПустаяСсылка))";
    ИНаче //ХХХХ
        ТекстУсловияКонтрагентов =   " В ИЕРАРХИИ (&спХолдинга)";
        ТекстУсловияКонтрагентовРаб =   " В ИЕРАРХИИ (&спХолдинга)";
    КонецЕсли;
    
    Текст = СтрЗаменить(Текст, "= &ТекстТиповогоУсловия", ТекстУсловияКонтрагентов+ " и ВЫБОР    КОГДА &ЕстьОрганизация ТОГДА Организация = &Организация ИНАЧЕ ИСТИНА КОНЕЦ ");
    Текст = СтрЗаменить(Текст, "= &БезОргТекстТиповогоУсловия", ТекстУсловияКонтрагентов);    
    Текст = СтрЗаменить(Текст, "= &РабТекстТиповогоУсловия", ТекстУсловияКонтрагентовРаб+ " и ВЫБОР    КОГДА &ЕстьОрганизация ТОГДА Организация = &Организация ИНАЧЕ ИСТИНА КОНЕЦ ");
    Текст = СтрЗаменить(Текст, "= &РабБезОргТекстТиповогоУсловия", ТекстУсловияКонтрагентовРаб);
16 Волшебник
 
02.04.18
19:37
(15) Это же тебе платят деньги за эту работу, так что давай работай.
Независимо от того, куда вы едете — это в гору и против ветра!