Имя: Пароль:
1C
1С v8
Необязательный параметр.
,
0 wade25
 
16.10.11
13:07
Допустим есть запрос

ВЫБРАТЬ
   ОстаткиТоваров.Номенклатура,
   ОстаткиТоваров.Партия,
   ОстаткиТоваров.Количество
ИЗ
   РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров
ГДЕ
   ОстаткиТоваров.Номенклатура = &Номенклатура
   И ОстаткиТоваров.Партия = &Партия

 Например, я хочу, чтобы выводило всю Номенклатуру т.е. убрать условие Где Номенклатура = &Номенклатура.
 Сейчас делаю либо 2 запроса с условием перед или +Функция()+, а есть способ просто сделать необязательный параметр, т.е. если он задан, то передаем, если нет так нет или по умолчанию, что то типа как в C# "условный параметр" =)
1 zak555
 
16.10.11
13:07
где виртуальная таблица ?
2 wade25
 
16.10.11
13:08
(1) Ну я так набросал =)
3 zak555
 
16.10.11
13:08
> всю Номенклатуру

по котором есть остатки или по всей имеющийся ?
4 zak555
 
16.10.11
13:09
(2) фигню набросал
5 zak555
 
16.10.11
13:09
это ты к спецу так готовишься ?
6 wade25
 
16.10.11
13:11
(5) Нет конечно =)
(4) Вот допустим.
ВЫБРАТЬ
   ОстаткиТоваровОстатки.Номенклатура,
   ОстаткиТоваровОстатки.Партия,
   ОстаткиТоваровОстатки.КоличествоОстаток
ИЗ
   РегистрНакопления.ОстаткиТоваров.Остатки(, Номенклатура = &Номенклатура) КАК ОстаткиТоваровОстатки

Не хочу передавать параметр "номенклатура", пускай выводит мне всю которая есть, как сделать необязательным? =)
7 zak555
 
16.10.11
13:13
(6) убери Номенклатура = &Номенклатура
8 wade25
 
16.10.11
13:15
(7) =))) Я про что и говорю, допустим отчет. Если пользовательно говорит хочу по всей номенклатуре вывести отчет, то выводит, а если по определенной задал, то по ней. Чтобы не писать 2 запроса как сделать?
9 ДенисЧ
 
16.10.11
13:17
(8) открой для себя СтрЗаменить()...
10 zak555
 
16.10.11
13:17
(8) левое соединение спр номенклатуры и виртуальной таблицы остатки регистра ОстаткиТоваров
11 Jolly Roger
 
16.10.11
13:26
(0) кури построитель запроса...
12 kuza2000
 
16.10.11
13:41
Все есть в СКД и построителе, смотри выражения с {}
13 DrShad
 
16.10.11
14:17
(9) +100500
если не задан, то меняешь на Истина, если задан то подставляешь в текст условие
14 Amiralnar
 
16.10.11
14:35
Я знаю особое кунгфу!

ВЫБОР КОГДА &Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА ИСТИНА
ИНАЧЕ Номенклатура = &Номенклатура  
КОНЕЦ
15 Зеленый Кот
 
16.10.11
15:10
да твое кунгфу - лучшее...
16 kuza2000
 
17.10.11
01:34
(14) А вот так писать крайне не желательно. Оптимизатор БД не сможет использовать индексы и другие полезные вещи, и будет сканировать всю таблицу номенклатуры и прогонять ее через это выражение. Независимо от того, что в параметре - такой трюк выше его понимания. Проверено неоднократно.
17 guitar_player
 
17.10.11
06:43
(0) Пользуйся построителем запроса, будь мужиком.
18 guitar_player
 
17.10.11
06:47
ПостроительЗапроса = Новый ПостроительЗапроса;
   
   ПостроительЗапроса.Текст = "    
   |ВЫБРАТЬ
   |ОстаткиТоваровОстатки.Номенклатура,
   |ОстаткиТоваровОстатки.Партия,
   |ОстаткиТоваровОстатки.КоличествоОстаток
   |ИЗ
   |РегистрНакопления.ОстаткиТоваров.Остатки(, {(Номенклатура = &Номенклатура) КАК Номенклатура}) КАК ОстаткиТоваровОстатки";

   Если НуженОтборПоНоменклатуре Тогда
   
       Отбор = ПостроительЗапроса.Отбор.Добавить("Номенклатура");
       
       Отбор.Использование = Истина;
       Отбор.ВидСравнения  = ВидСравнения.Равно;
       Отбор.Значение      = Номенклатура;
       
   КонецЕсли;
19 guitar_player
 
17.10.11
06:48
(18) ну и дальше...
20 guitar_player
 
17.10.11
06:48
Запрос = ПостроительЗапроса.ПолучитьЗапрос();
   Результат = Запрос.Выполнить();
   Если Результат.Пустой() Тогда
       Возврат;
   КонецЕсли;