Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Хитрое условие в запросе
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
SergXP
Реквизит регистра имеет тип Плана видов характеристик (т.е. составной тип). Реквизит отчета имеет аналогичный реквизит для установки параметра запроса к регистру для получения результата в различных разрезах (все, по типу, по конкретному значению). Когда тип реквизита имеет определенное значение условие запроса пишу так -
(ГСМ.БалансовыйСчет В ИЕРАРХИИ (&БалансовыйСчет)
    ИЛИ &БалансовыйСчет = ЗНАЧЕНИЕ(ПланСчетов.Бухгалтерский.ПустаяСсылка))

Тут все просто. Реквизит имеет всего два значения - ПустаяСсылка или конкретное значение. В моем же случае - 3:
1. Неопределено
2. Определенный тип
3. Определенное значение

Как составить условие, чтобы работали все 3 значения реквизита?
Petre
Добавьте третье условие.
SergXP
Цитата(Petre @ 05.08.15, 9:38) необходимо зарегистрироваться для просмотра ссылки
Добавьте третье условие.

А как мне тогда в условии указать на равенство &Параметр = НЕОПРЕДЕЛЕНО. Вычитал и попытался через ПРЕДСТАВЛЕНИЕССЫЛКИ И ПРЕДСТАВЛЕНИЕ - ругаецо.
Petre
Так чем не устраивает "&Параметр = НЕОПРЕДЕЛЕНО"?
SergXP
Цитата(Petre @ 05.08.15, 11:02) необходимо зарегистрироваться для просмотра ссылки
Так чем не устраивает "&Параметр = НЕОПРЕДЕЛЕНО"?

Уже попробовал так:
И (&МОЛ = НЕОПРЕДЕЛЕНО ИЛИ ТИПЗНАЧЕНИЯ(МОЛ) = ТИПЗНАЧЕНИЯ(&МОЛ))
        И (&МОЛ = ЗНАЧЕНИЕ(ПланВидовХарактеристик.МестаХраненияГСМ.ПустаяСсылка)  ИЛИ МОЛ = &МОЛ)

но результат не удовлетворяет - выводит абсолютно все записи, а не указанные в &МОЛ. Как-то что-то нужно по другому сформулировать условие...

Опытным путем определил, что строка запроса &МОЛ = НЕОПРЕДЕЛЕНО не ловит значение МОЛ=Неопределено
vadim007
Покажите полный текст запроса.
Petre
Цитата(SergXP @ 05.08.15, 11:29) необходимо зарегистрироваться для просмотра ссылки
Опытным путем определил, что строка запроса &МОЛ = НЕОПРЕДЕЛЕНО не ловит значение МОЛ=Неопределено

Почему должно "ловить"? &МОЛ и МОЛ это разные вещи, как я понимаю.
SergXP
Цитата(Petre @ 05.08.15, 12:26) необходимо зарегистрироваться для просмотра ссылки
Почему должно "ловить"? &МОЛ и МОЛ это разные вещи, как я понимаю.

Совершенно верно. МОЛ - измерение регистра, &МОЛ - параметр для условия по измерению регистра

Цитата(vadim007 @ 05.08.15, 11:32) необходимо зарегистрироваться для просмотра ссылки
Покажите полный текст запроса.

ВЫБРАТЬ
    ДвижениеГСМОстаткиИОбороты.ГСМ.БалансовыйСчет КАК ГСМБалансовыйСчет,
    ДвижениеГСМОстаткиИОбороты.МОЛ КАК МОЛ,
    ВЫБОР
        КОГДА ДвижениеГСМОстаткиИОбороты.КоличествоОборот > 0
            ТОГДА "Прибуток"
        ИНАЧЕ "Видаток"
    КОНЕЦ КАК ПриходРасход,
    ДвижениеГСМОстаткиИОбороты.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток,
    ДвижениеГСМОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
    ТИПЗНАЧЕНИЯ(ДвижениеГСМОстаткиИОбороты.МОЛ) КАК ТипМОЛ,
    ВЫБОР
        КОГДА ДвижениеГСМОстаткиИОбороты.СуммаОборот > 0
            ТОГДА Бухгалтерский.СчетКт
        ИНАЧЕ Бухгалтерский.СчетДт
    КОНЕЦ КАК КорСчет,
    ДвижениеГСМОстаткиИОбороты.СуммаПриход КАК СуммаПриход,
    ДвижениеГСМОстаткиИОбороты.СуммаРасход КАК СуммаРасход
ИЗ
    РегистрБухгалтерии.Бухгалтерский КАК Бухгалтерский
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ДвижениеГСМ.ОстаткиИОбороты(
                &ДатаНачала,
                &ДатаОкончания,
                Запись,
                ,
                (ГСМ.БалансовыйСчет В ИЕРАРХИИ (&БалансовыйСчет)
                    ИЛИ &БалансовыйСчет = ЗНАЧЕНИЕ(ПланСчетов.Бухгалтерский.ПустаяСсылка))
                    И (&МОЛ = ЗНАЧЕНИЕ(ПланВидовХарактеристик.МестаХраненияГСМ.ПустаяСсылка)
                        ИЛИ МОЛ = &МОЛ)
                    И (&МОЛ = НЕОПРЕДЕЛЕНО
                        ИЛИ ТИПЗНАЧЕНИЯ(МОЛ) = ТИПЗНАЧЕНИЯ(&МОЛ))) КАК ДвижениеГСМОстаткиИОбороты
        ПО Бухгалтерский.Регистратор = ДвижениеГСМОстаткиИОбороты.Регистратор
            И Бухгалтерский.НомерСтроки = ДвижениеГСМОстаткиИОбороты.НомерСтроки

УПОРЯДОЧИТЬ ПО
    ГСМБалансовыйСчет,
    ПриходРасход УБЫВ,
    ТипМОЛ,
    МОЛ
ИТОГИ
    СУММА(СуммаНачальныйОстаток),
    СУММА(СуммаКонечныйОстаток),
    СУММА(СуммаПриход),
    СУММА(СуммаРасход)
ПО
    ГСМБалансовыйСчет,
    ПриходРасход,
    МОЛ,
    КорСче


В этом варианте запроса:
1. МОЛ = Неопределено - результат пустой
2. МОЛ = справочник - результат пустой
3. МОЛ = элемент справочника - правильный результат

есть подозрение в адекватности работы выражения
ЗНАЧЕНИЕ(ПланВидовХарактеристик.МестаХраненияГСМ.ПустаяСсылка)
Petre
Последнее "И" считаю лишним. А какой тип у реквизита отчета? ПланВидовХарактеристик или составной из типов, входящих в ПланВидовХарактеристик?
vadim007
Цитата(SergXP @ 05.08.15, 15:02) необходимо зарегистрироваться для просмотра ссылки
(ГСМ.БалансовыйСчет В ИЕРАРХИИ (&БалансовыйСчет)
                    ИЛИ &БалансовыйСчет = ЗНАЧЕНИЕ(ПланСчетов.Бухгалтерский.ПустаяСсылка))
                    И (&МОЛ = ЗНАЧЕНИЕ(ПланВидовХарактеристик.МестаХраненияГСМ.ПустаяСсылка)
                        ИЛИ МОЛ = &МОЛ)
                    И (&МОЛ = НЕОПРЕДЕЛЕНО
                        ИЛИ ТИПЗНАЧЕНИЯ(МОЛ) = ТИПЗНАЧЕНИЯ(&МОЛ))

Я бы добавил в этом фрагменте скобки:
((ГСМ.БалансовыйСчет В ИЕРАРХИИ (&БалансовыйСчет))
                    ИЛИ (&БалансовыйСчет = ЗНАЧЕНИЕ(ПланСчетов.Бухгалтерский.ПустаяСсылка)))
                    И (&МОЛ = ЗНАЧЕНИЕ(ПланВидовХарактеристик.МестаХраненияГСМ.ПустаяСсылка)
                        ИЛИ (МОЛ = &МОЛ))
                    И ((&МОЛ = НЕОПРЕДЕЛЕНО)
                        ИЛИ (ТИПЗНАЧЕНИЯ(МОЛ) = ТИПЗНАЧЕНИЯ(&МОЛ)))
SergXP
Цитата(Petre @ 05.08.15, 15:29) необходимо зарегистрироваться для просмотра ссылки
Последнее "И" считаю лишним. А какой тип у реквизита отчета? ПланВидовХарактеристик или составной из типов, входящих в ПланВидовХарактеристик?

Все и везде - ПланВидовХарактеристик
А как это так - выкинуть последнее "И"?
Petre
(ГСМ.БалансовыйСчет В ИЕРАРХИИ (&БалансовыйСчет)
                    ИЛИ &БалансовыйСчет = ЗНАЧЕНИЕ(ПланСчетов.Бухгалтерский.ПустаяСсылка))
                    И (&МОЛ = ЗНАЧЕНИЕ(ПланВидовХарактеристик.МестаХраненияГСМ.ПустаяСсылка)
                        ИЛИ МОЛ = &МОЛ))

Если везде ПланВидовХарактеристик, то, как мне кажется, "НЕОПРЕДЕЛЕНО" не будет - только заполненное значение или пустая ссылка.
SergXP
Цитата(vadim007 @ 05.08.15, 15:33) необходимо зарегистрироваться для просмотра ссылки
(ГСМ.БалансовыйСчет В ИЕРАРХИИ (&БалансовыйСчет)
                    ИЛИ &БалансовыйСчет = ЗНАЧЕНИЕ(ПланСчетов.Бухгалтерский.ПустаяСсылка))

Этот участок кода у меня работает отлично и не только тут. Главное, что ИЛИ заключено в скобки и не мешается с остальными И и ИЛИ.

Цитата(Petre @ 05.08.15, 15:41) необходимо зарегистрироваться для просмотра ссылки
(ГСМ.БалансовыйСчет В ИЕРАРХИИ (&БалансовыйСчет)
                    ИЛИ &БалансовыйСчет = ЗНАЧЕНИЕ(ПланСчетов.Бухгалтерский.ПустаяСсылка))
                    И (&МОЛ = ЗНАЧЕНИЕ(ПланВидовХарактеристик.МестаХраненияГСМ.ПустаяСсылка)
                        ИЛИ МОЛ = &МОЛ))

Если везде ПланВидовХарактеристик, то, как мне кажется, "НЕОПРЕДЕЛЕНО" не будет - только заполненное значение или пустая ссылка.

Я на значение "НЕОПРЕДЕЛЕНО" проверяю на измерение МОЛ, а "Параметр" МОЛ, т.е. если в форме отчета не указан ни один справочник из ПланаХарактеристик. При трассировке значение МОЛ = Неопределено.
Petre
Значит "МОЛ" имеет тип не "ПВХ", а "Характеристика".
SergXP
Цитата(Petre @ 05.08.15, 15:51) необходимо зарегистрироваться для просмотра ссылки
Значит "МОЛ" имеет тип не "ПВХ", а "Характеристика".

Я пытался в запросе вместо "ПланВидовХарактеристик" написать "Характеристика" - ругается...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.