|
Запрос в СКД. | ☑ | ||
---|---|---|---|---|
0
YHVVH
12.07.12
✎
15:02
|
Есть запрос
ВЫБРАТЬ РАЗЛИЧНЫЕ НоменклатураСегмента.Номенклатура ПОМЕСТИТЬ ВтНоменклатураСегмента ИЗ РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента ГДЕ &ОтборПоСегменту {ГДЕ НоменклатураСегмента.Номенклатура.*, НоменклатураСегмента.Сегмент.*} Если позиция числится в разных сегментах то отбор НЕ РАВНО по сегменту не выдает ожидаемого результата. Допустим товар числится в Сегменте1 и в Сегменте2. отбор ставим НЕ Равно Сегмент1 то товар попадет в результат из за сегмента2. Вроде все логично, но как переписать запрос чтоб все таки исключить такой товар? Изящного решения найти не могу, направьте на истинный путь. |
|||
1
Defender aka LINN
12.07.12
✎
15:06
|
Это что за пердимонокль? |
|||
2
YHVVH
12.07.12
✎
15:07
|
(1) это если включен отбор, если не включен то запрос не имеет смысл выполнять.
|
|||
3
Defender aka LINN
12.07.12
✎
15:11
|
(2) Гм... Интересная фигня.
Ну, кроме как получить таблицу, попавшую под отбор и соединить с таблицей из (0) я особо вариантов не вижу. Придется повозиться, факт |
|||
4
YHVVH
12.07.12
✎
15:15
|
Придется повозиться, факт. - это очень грустно. подожду может напишут еще.
|
|||
5
GANR
12.07.12
✎
15:42
|
Вариант 1:
ВЫБРАТЬ Номенклатура ИЗ РегистрСведений.НоменклатураСегмента СГРУППИРОВАТЬ ПО Номенклатура ИМЕЮЩИЕ МАКСИМУМ(ВЫБОР Когда Сегмент = &Сегмент1 Тогда 1 ИНАЧЕ 0 КОНЕЦ) = 0 Вариант 2: ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура ИЗ РегистрСведений.НоменклатураСегмента ГДЕ Номенклатура НЕ В (ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура ИЗ РегистрСведений.НоменклатураСегмента ГДЕ Сегмент = &Сегмент1) Вариант 3: см. (3) |
|||
6
YHVVH
12.07.12
✎
16:02
|
(5) спасибо
|
|||
7
YHVVH
12.07.12
✎
16:03
|
допиливать придется модуль объекта ПриКомпоновкеРезультата в зависимости от условия отбора который задал пользователь.
|
|||
8
GANR
12.07.12
✎
16:13
|
(7) Почему? Можно перепилить ТОЛЬКО запрос.
ВЫБРАТЬ Номенклатура ИЗ РегистрСведений.НоменклатураСегмента СГРУППИРОВАТЬ ПО Номенклатура ИМЕЮЩИЕ МАКСИМУМ(ВЫБОР Когда Сегмент = &Сегмент1 И &Сегмент1 <> ЗНАЧЕНИЕ(Справочник.Сегменты.ПустаяСсылка) Тогда 1 ИНАЧЕ 0 КОНЕЦ) = 0 Тогда этот отбор будет работать только если "Сегмент1" не равен пустой ссылке. |
|||
9
YHVVH
12.07.12
✎
16:21
|
(8) может я не понимаю, но отбор пользователь как будет задавать в отчете?
двумя полями? одно для включить второе исключить? |
|||
10
YHVVH
12.07.12
✎
16:22
|
хотелось бы чтоб одним полем, для этого придется анализировать условие отбора которое он задал и подключать запрос твой.
|
|||
11
GANR
12.07.12
✎
16:34
|
(9) ОДНИМ, если пользователь НЕ заполнит параметр "Сегмент1", то отбор в запросе (8) де-факто производится не будет - будет только группировка по номенклатуре..
|
|||
12
YHVVH
12.07.12
✎
16:36
|
(11) Сегмент1 будет на форме и просто Cегмент , почему один то?
|
|||
13
GANR
12.07.12
✎
16:41
|
(12) Пусть будет "Сегмент", чтоб не путаться
ВЫБРАТЬ Номенклатура ИЗ РегистрСведений.НоменклатураСегмента СГРУППИРОВАТЬ ПО Номенклатура ИМЕЮЩИЕ МАКСИМУМ(ВЫБОР Когда Сегмент = &Сегмент И &Сегмент <> ЗНАЧЕНИЕ(Справочник.Сегменты.ПустаяСсылка) Тогда 1 ИНАЧЕ 0 КОНЕЦ) = 0 Если отчет на компоновке и форма не самопальная - будет панелька с параметрами и, если в ней задать параметр "Сегмент" - отбор будет, если не задать - не будет). |
|||
14
YHVVH
12.07.12
✎
16:46
|
(13) что делать если он задал отбор на равно?
|
|||
15
YHVVH
12.07.12
✎
16:49
|
не надо ни каких дополнительных параметров, на форме стоит отбор по сегменту, он может там поставить условие какое он хочет выбрать и сегмент.
|
|||
16
YHVVH
12.07.12
✎
16:49
|
для этого и надо (10) делать
|
|||
17
GANR
12.07.12
✎
16:51
|
(16) тогда кодирование.
|
|||
18
YHVVH
12.07.12
✎
16:57
|
(17) вот, а по сколько отчетов много где используется отбор по сегменту, придется по трудится так как не только править сам запрос но и код тоже.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |