Имя: Пароль:
1C
1С v8
Использование таблицы значений в СКД, связь наборов данных
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
А, ты в итоге так и сделал. Ну и молодец.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.