Имя: Пароль:
1C
1С v8
СКД Можно ли ВычислитьВыражение() применять в отборе
0 ildary
 
09.03.17
15:17
Уважаемые специалисты, подскажите пожалуйста, можно ли результат вычисления в ВычислитьВыражение() применять в отборе?

Вывожу документы изменения цены товара, и хочется сделать галку "выводить только с разной ценой", потому что часто бывают документы установки цен, в которых цена не меняется. Разницу цены с предыдущей я получаю как isNULL((ВЫЧИСЛИТЬВЫРАЖЕНИЕ("Цена", , , "Предыдущая", "Предыдущая") - Цена), 1 ).

Если я просто вывожу это поле (Дельта) - то все работает. Но стоит мне сделать по этому полю отбор "Дельта <> 0" - появляется ошибка Выражение не может быть вычислено "НаборДанных1.Цена".
1 dezss
 
09.03.17
15:43
Обычно для таких целей используют все же группировки и агрегатные функции.

Да и весь запрос было бы интересно глянуть.
2 ildary
 
09.03.17
16:11
(1) спасибо за подсказку, но я еще не научился подобному - в запросе получать предыдущее значение через группировку или агрегатную функцию. Текущий запрос - очень простой:

ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    УстановкаЦенНоменклатурыТовары.Номенклатура,
    УстановкаЦенНоменклатурыТовары.ВидЦены КАК ВидЦены,
    УстановкаЦенНоменклатурыТовары.Ссылка КАК Документ,
    УстановкаЦенНоменклатурыТовары.Цена КАК Цена,
    УстановкаЦенНоменклатуры.Ответственный КАК Ответственный,
    УстановкаЦенНоменклатурыТовары.Ссылка.Дата,
    ВЫРАЗИТЬ(УстановкаЦенНоменклатуры.Комментарий КАК СТРОКА(300)) КАК Комментарий,
    УстановкаЦенНоменклатуры.ДокументОснование,
    УстановкаЦенНоменклатуры.ДокументОснование.Партнер
ИЗ
    Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.УстановкаЦенНоменклатуры КАК УстановкаЦенНоменклатуры
        ПО УстановкаЦенНоменклатурыТовары.Ссылка = УстановкаЦенНоменклатуры.Ссылка
ГДЕ
    УстановкаЦенНоменклатурыТовары.Номенклатура В(&Номенклатура)
    И УстановкаЦенНоменклатуры.Проведен = ИСТИНА
    И УстановкаЦенНоменклатурыТовары.ВидЦены.ПометкаУдаления = ЛОЖЬ
    И УстановкаЦенНоменклатуры.Дата МЕЖДУ &ДатаНач И &ДатаКон

УПОРЯДОЧИТЬ ПО
    УстановкаЦенНоменклатурыТовары.Ссылка.Дата
3 ildary
 
09.03.17
16:14
Само вычисление разницы с предыдущей записью брал вот отсюда:
http://catalog.mista.ru/public/267055

Просто вывод работает без проблем, затруднение только с отбором.
4 dezss
 
09.03.17
16:27
(2) Зачем тебе все усложнять и брать предыдущее и следующее значение?

Почему не сделать, например, так?

...
Максимум(УстановкаЦенНоменклатурыТовары.Ссылка) КАК Документ,
Максимум(УстановкаЦенНоменклатурыТовары.Ссылка.Дата) КАК Дата,
...
А внизу группировка по всем остальным полям.
Ты же и так не получишь в запросе всех документов, так как будет отбор только по тем, у которых цена разная.
Так сгруппируй эту цену, а документы выводи по какой-нить агрегатной функции, например Максимум.

Или вообще выбирай из РС.МоиЦены.СрезПоследних() с ценами и оттуда выводи регистратор, если так уж нужна эта ссылка.
5 ildary
 
09.03.17
16:37
Спасибо за советы, я обязательно попробую. А это точно даст все различающиеся цены (а не максимальные или последние)?
6 dezss
 
09.03.17
16:38
УстановкаЦенНоменклатурыТовары.Ссылка.Дата,
ничего не смущает?
У тебя же есть УстановкаЦенНоменклатуры, а дату берешь из товаров)
7 dezss
 
09.03.17
16:39
Тьфу...не дочитал, что нужны именно все разные, а не последние...ну мало ли)
8 ildary
 
09.03.17
16:42
Да, интересуют именно разные. Последние проще было брать из СрезПоследних().
9 dezss
 
09.03.17
16:43
Кстати, ты так не получишь все разные цены.
Ведь может быть ситуация, когда была цена 100, потом 101, потом опять 100...и с этой дельтой ты получишь 2 раза цену по 100.
10 dezss
 
09.03.17
16:46
(5) При использовании максимума по документу и дате и группировке по цене не мы получим именно разные цены, а не максимальные и/или последние
(8) Ну ладно.
Еще один варант.
Не используем СрезПоследних, просто обращение к РС.МоиЦены с группировкой по цене.
11 dezss
 
09.03.17
16:48
(10) ...по цене не мы получим ...
Заменить на
...по цене мы получим...