|
Использование таблицы значений в СКД, связь наборов данных |
☑ |
0
Deryni
11.03.15
✎
18:49
|
Есть такая задача. Нужно в отчёте вывести ценовой сегмент для номенклатуры. Ценовой сегмент задаётся градацией от цены. Например цена до 100 долларов - Сегмент 1, от 100 до 300 - Сегмент 2 и так далее. Задаваться это будет в виде таблицы значений в форме с порогами, например так:
100 - Сегмент 1
300 - Сегмент 2
1000 - Сегмент 3
99999999999999.99 - Сегмент 4
Теперь хочу в запросе СКД получить сегмент
В обычно запросе я бы передал таблицу параметров, а потом написал так:
ВЫБРАТЬ
Т.Порог,
Т.Сегмент
ПОМЕСТИТЬ ВТСегменты
ИЗ
&ТСегментов КАК Т
;
ВЫБРАТЬ
Рег.Номенклатура Товар,
Рег.Цена
ПОМЕСТИТЬ ВТТовары
ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПослдених(&Дата, ТипЦен = &ТипЦен) Рег
ВЫБРАТЬ
ТоварыСПорогом.Товар,
ВТСегменты.Сегмент
ИЗ
(ВЫБРАТЬ
ВТТовары.Товар,
МАКСИМУМ(ВТСегменты.Порог) Порог
ИЗ
ВТТовары
ЛЕВОЕ СОЕДИНЕНИЕ ВТСегменты ПО ВТСегменты.Порог <= ВТТовары.Цена
СГРУППИРОВАТЬ ПО
ВТТовары.Товар
) ТоварыСПорогом
ЛЕВОЕ СОЕДИНЕНИЕ ВТСегменты ПО ВТСегменты.Порог = ТоварыСПорогом.Порог
Но в СКД нельзя вставить таблицу значений параметром, а если я делаю набор данных Таблицу значений, то я не могу с ней соединиться по вот такому хитрому условию.
Можно, конечно сделать набор данных ТЗ, по нему рассчитать сегменты для товаров и потом присоединить по соединению наборов данных. Но это ж лишний запрос, а его делать не хочется.
|
|
1
Bober
11.03.15
✎
21:40
|
сделать вычисляемое поле, в котором программно генерировать выражение по данным в тз перед компоновкой.
|
|
2
Necessitudo
11.03.15
✎
21:54
|
В СКД ж есть условия связей. Могу предложить альтернативу - ты в зависимости от числа записей в своей ТЗ с порогами правишь текст запроса компоновки, добавляя туда параметры и соответственно заполняя их значения в компоновщике настроек.
|
|
3
eklmn
гуру
11.03.15
✎
22:13
|
а сегменты в ТЗ откуда получаешь? правильней будет в запросе сразу дернуть
|
|
4
eklmn
гуру
11.03.15
✎
22:14
|
первым пакетом считай, зачем это тз?
|
|
5
Deryni
12.03.15
✎
14:09
|
(1) Ну в принципе такая мысль была. Вначале посчитать сегментацию, потом загнать в ТЗ и уже тогда присоединять. Наверное это единственный вариант.
(2) Есть, но я нигде не нашёл вменяемого описания и примеров использования этих условий. Рыл форумы, смотрел Хрусталёву и ещё другие примеры, но не нашёл нигде. Если подскажите, буду благодарен. Кроме того, я так подозреваю, что через условия это не получится сделать.
(3) Пользователь задаёт таблицу сегментации руками. Каждый раз перед формированием отчёта. Ну или сохраняет в сохранённой настройке.
(4) Что первым пакетом считать? У меня пользователь сам определяет какой сегмент соответствует какому порогу. В отчёте я должен взять цену на товар и по таблице порогов определить к какому сегменту она относится.
В итоге я реализовал через ТЧ, привязанную к справочнику типов цен. Пользователя такой вариант устроил.
|
|
6
fisher
12.03.15
✎
14:13
|
Вообще, ценовые сегменты напрашивается в базе хранить. Тогда и сабжевой проблемы нет и вообще решение с человеческим лицом.
|
|
7
fisher
12.03.15
✎
14:14
|
А, ты в итоге так и сделал. Ну и молодец.
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший