Имя: Пароль:
1C
 
Схема компоновки данных - отбор по условию в запросе
0 jq
 
14.04.10
16:46
Изучаю построение отчета в схеме компоновки данных, как мне отбор в запросе по уловию? Раньше я писал:

   Если ЗначениеЗаполнено(Склад) Тогда
       ТекстЗапроса = ТекстЗапроса + " И ПоступлениеТоваровУслуг.СкладОрдер = &Склад";
   КонецЕсли;
   
   Если ЗначениеЗаполнено(Подразделение) Тогда
       ТекстЗапроса = ТекстЗапроса + " И ПоступлениеТоваровУслуг.Подразделение = &Подразделение";
   КонецЕсли;
   
   Если ЗначениеЗаполнено(Номенклатура) Тогда
       ТекстЗапроса = ТекстЗапроса + " И ПоступлениеТоваровУслугТовары.Номенклатура = &Номенклатура";
   КонецЕсли;

А можно как-нибудь это сделать в схеме? Ведь явно текста запроса нет?
1 Живой Ископаемый
 
14.04.10
16:47
Как это нет явно текста запроса?
2 Stim
 
14.04.10
16:49
штатный отбор в настройках вывода результата СКД.
3 jq
 
14.04.10
17:07
Запрос то есть, а вот как в него вставить мое условие, чтобы отбор, например по номенклатуре осуществлялся только при заполненном параметре для отбора, если не заполнен, то по всей номенклатуре?
4 Andry888
 
14.04.10
17:08
И (ПоступлениеТоваровУслуг.СкладОрдер = &Склад ИЛИ &Склад=ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))
5 Defender aka LINN
 
14.04.10
17:09
(4) Про отборы что-нибудь слышали?
6 Andry888
 
14.04.10
17:13
(5) слышали, слышали... отборы в СКД не панацея в некоторых случаях, если уж на то пошло...
7 jq
 
14.04.10
17:17
отборы в СКД - по-моему это немножко не то, т.к. если есть отбор, то все отбирает, а вот если есть параметр отбора, но он не заполнен, то пишет ошибка исполнения отчета
8 jq
 
14.04.10
17:22
Вот этот фрагмент

ГДЕ
   ПоступлениеТоваровУслугТовары.Ссылка.Дата МЕЖДУ &НачПериода И &КонПериода
   И ПоступлениеТоваровУслугТовары.Ссылка.Проведен = ИСТИНА
   И (ПоступлениеТоваровУслугТовары.Ссылка.СкладОрдер = &Склад
           ИЛИ &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))

тоже выдает такую же ошибку:

Ошибка создания набора данных "НаборДанных1"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
{(19, 55)}: Не задано значение параметра "Склад"
И (ПоступлениеТоваровУслугТовары.Ссылка.СкладОрдер = <<?>>&Склад

хотя параметр Склад в СКД задан как Справочник.Склады
9 Defender aka LINN
 
14.04.10
17:23
(6) Для (4) - еще какая.
10 Макаров
 
14.04.10
17:37
В схем компановки если ты указываешь в запросе параметр то ты обязательно должен его задать иниче ошибка. А все отборы указываешь в пользовательском режиме, если задашь то отбор работает если не то и нет ни какого отбора.
11 jq
 
14.04.10
17:38
Т.е. отбор не через параметр, а именно через Отбор в настройках отчета в пользовательском режиме?
12 Макаров
 
14.04.10
17:42
Да. там ты можешь отборы задать как ко всему отчету так и отдельно по группировкам.
13 jq
 
14.04.10
17:56
Да это я уже понял, спасибо.

Интересно, а как это клиентам объяснить, раньше у них была возможность видеть что-то типа быстрых отборов, т.е. все явно, хочу отбор, ставлю флаг и отбираю, не хочу - снимаю флаг, и все формируется без выкидывания ошибок. А теперь снимаешь флаг с отбора по параметру, например НачалоПериода, у клиента ошибка, ладно, допустим объяснили, привыкли. Так ведь теперь, чтобы задать отбор надо лезть еще в настройки. Да плюс в самих настройках чувствую клиенты будут путаться в отборах по всему отчету или по группировке, зададут не в том месте, и скажут типа, есть отбор а не работает/работает не так. И, наконец, самая любимая их фраза, "а зачем мне этот новый вид, в старом все так хорошо и понятно, а это..."???
14 Garkin
 
14.04.10
18:07
"снимаешь флаг с отбора по параметру"  - Это в СКД где ???, на какой закладке???
15 jq
 
14.04.10
18:08
(14)Это уже на форме отчета
16 jq
 
14.04.10
18:11
Кстати, очень интересно, на диске ИТС есть типовой отчет ПродажиУТ, типа валовая прибыль на СКД, так вот там на форме отчета в пользовательском режиме есть два параметра - Начало и Конец Периода, и если у них не ставить галки, то отчет формируется за весь период, а в моем отчете вылетает ошибка, как в (8). Сравнил настройки отчетов, вроде все одинаково, ан нет. Как они это реализовали???
17 jq
 
15.04.10
09:30
up
18 luns
 
15.04.10
09:43
пример необязательных параметров:

(ВЫБРАТЬ
   |                д_ПланПродажПоСубдистрибьюторамОбороты.Дистрибьютор КАК Дистрибьютор,
   |                д_ПланПродажПоСубдистрибьюторамОбороты.Субдистрибьютор КАК Субдистрибьютор,
   |                СУММА(д_ПланПродажПоСубдистрибьюторамОбороты.СуммаОборот) КАК СуммаПлан
   |            ИЗ
   |                РегистрНакопления.д_ПланПродажПоСубдистрибьюторам.Обороты(
   |                        &НачалоПериода,
   |                        &КонецПериода,
   |                        Период,
   |                        ВЫБОР
   |                                КОГДА &ОтборОрганизация
   |                                    ТОГДА Организация = &Организация
   |                                ИНАЧЕ ИСТИНА
   |                            КОНЕЦ
   |                            И ВЫБОР
   |                                КОГДА &ОтборКонтрагент
   |                                    ТОГДА Дистрибьютор.Контрагент В ИЕРАРХИИ (&Контрагент)
   |                                ИНАЧЕ ИСТИНА
   |                            КОНЕЦ
   |                            И ВЫБОР
   |                                КОГДА &ОтборНоменклатура
   |                                    ТОГДА НаборГруппНоменклатуры = &НаборГруппНоменклатуры
   |                                ИНАЧЕ ИСТИНА
   |                            КОНЕЦ) КАК д_ПланПродажПоСубдистрибьюторамОбороты


а вот они устанавливаются:

   Запрос.УстановитьПараметр("Контрагент"                , СписокКонтрагентов);
   Запрос.УстановитьПараметр("ОтборКонтрагент"            , ЗначениеЗаполнено(СписокКонтрагентов));
19 jq
 
15.04.10
10:24
Так что-ли?

ВЫБРАТЬ
   ПоступлениеТоваровУслугТовары.Номенклатура,
   ПоступлениеТоваровУслугТовары.ХарактеристикаНоменклатуры,
   ПоступлениеТоваровУслугТовары.Количество,
   ПоступлениеТоваровУслугТовары.Цена,
   ПоступлениеТоваровУслугТовары.Сумма,
   ПоступлениеТоваровУслугТовары.Склад,
   
   (ВЫБОР
       КОГДА &Склад
           ТОГДА ПоступлениеТоваровУслугТовары.Ссылка.СкладОрдер = &Склад
       ИНАЧЕ ИСТИНА
       КОНЕЦ)

Выдает ошибку.
20 luns
 
15.04.10
10:25
(19) Какую?
21 jq
 
15.04.10
10:31
Ошибка в запросе набора данных
по причине:
{(11, 61)}: Неверные параметры "ВЫБОР"
ТОГДА ПоступлениеТоваровУслугТовары.Ссылка.СкладОрдер <<?>>= &Склад
22 jq
 
15.04.10
10:51
Не понимаю
23 Armando
 
15.04.10
10:59
мой пример необязательного параметра
ВЫБРАТЬ
   ФизическиеЛица.Наименование
ИЗ
   Справочник.ФизическиеЛица КАК ФизическиеЛица
{ГДЕ
   ФизическиеЛица.ДатаРождения > &ДатаРождения}
24 Defender aka LINN
 
15.04.10
10:59
Пипец...
25 Armando
 
15.04.10
11:01
(0) ну а вообще в СКД для этого есть отборы
26 jq
 
15.04.10
11:06
(25)Отборы понятно, но хочется именно через параметры отбирать...
27 Garkin
 
15.04.10
11:08
(26) Это религия такая?
28 jq
 
15.04.10
11:11
(27) См. (13)
29 Triruki
 
15.04.10
11:13
Эмм а в фигурные скобки взять не пробовали? тогда это условие будет отрабатываться толко если оно задано.
30 Armando
 
15.04.10
11:14
(26) необязательные параметры задаются в {}. см(23)
31 Triruki
 
15.04.10
11:16
+(30) Ну или в конструкторе запроса на вкладке "Компоновка Данных"-> вкладка "Условия"
32 jq
 
15.04.10
11:18
А, спасибо, а если надо одновременно и обязательные и необязательные, то как правильно скобки расставить

{ГДЕ
   (ПоступлениеТоваровУслугТовары.Ссылка.Дата МЕЖДУ &НачПериода И &КонПериода)}

Например, НачПериода - обязателный параметр, КонПериода - необязательный, или так нельзя?
33 Defender aka LINN
 
15.04.10
11:19
(28) Для этого есть ОТБОР.
http://s52.radikal.ru/i136/1004/0f/4d5d0052435f.jpg
34 jq
 
15.04.10
11:21
Ясно, а можно в СКД как-нибудь Отбор вынести из кнопки Настройки на форму отчета? Не параметры, а именно ОТБОР.
35 Defender aka LINN
 
15.04.10
11:22
(34) У меня с дикцией что-то?
36 Garkin
 
15.04.10
11:24
(28) на (13) без слез смотреть нельзя, пожалей мою психику.
37 jq
 
15.04.10
11:24
Извиняюсь, уже нашел
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший