Имя: Пароль:
1C
1С v8
Необязательные параметры в запросе
,
0 Pasha12312
 
22.01.13
13:58
Прочитал похожие темы по данному вопросу , ответа не нашел..
В запросе нужно сделать параметры не обязательными, то есть если их ввести - отбирает по ним , если не ввести - отбирает все подряд..
Подскажите вариант решения.
1 Fragster
 
гуру
22.01.13
13:59
построительзапроса
2 Fragster
 
гуру
22.01.13
13:59
СКД
3 DrShad
 
22.01.13
13:59
Построитель? СКД?
4 Fragster
 
гуру
22.01.13
13:59
демонический текст запроса в конце концов...
5 Pasha12312
 
22.01.13
14:00
это не отчет... запрос заполняет табчасть в обработке
6 Reset
 
22.01.13
14:00
"похожие темы по данному вопросу , ответа не нашел"
tt
7 DrShad
 
22.01.13
14:00
(4) только правильный текст должен быть с заменой подстрок, а не через ++++++
8 Нуф-Нуф
 
22.01.13
14:01
(5) какая разница. и скд и построитель умеют возвращать таблицы значений
9 saaken
 
22.01.13
14:01
Выбор
    когда &Мойпараметр = "" Тогда
   истина
Иначе
    МойЗапрос.Клиент = &Мойпараметр1
Конец
10 Нуф-Нуф
 
22.01.13
14:01
(7) +100500
11 DrShad
 
22.01.13
14:01
(5) ну так получи результат построителя и пихай его куда угодно, в чем проблема?
12 Нуф-Нуф
 
22.01.13
14:01
(9) тоже тема, но вот в серьезных запросах это может боком выйти
13 Fragster
 
гуру
22.01.13
14:02
(9) такая конструкция зачастую убивает производительность
14 mikecool
 
22.01.13
14:02
(7) абсолютно пох для оптимизатора - все равно это будет новый запрос каждый раз
15 DrShad
 
22.01.13
14:02
(9) и это ты хочешь вставлять в условия?
16 DrShad
 
22.01.13
14:02
(14) тем кто будет читать его после ТС будет проще
17 Fragster
 
гуру
22.01.13
14:03
(14) индекс сик vs тэйбл скан, не?
18 Pasha12312
 
22.01.13
14:03
9 , я делал так на закладке "Условие" - все равно выдавал ошибку  что "Контрагент "- не заполнен
19 vmv
 
22.01.13
14:04
(0) вариант решения - пары параметров c ИЛИ

например

ГДЕ &БезОтбораГрупп ИЛИ ТаблицаБД.Группа = &Группа

все
20 Fragster
 
гуру
22.01.13
14:04
(19)->(17)
21 saaken
 
22.01.13
14:04
(15) да
22 Нуф-Нуф
 
22.01.13
14:04
(19) см (20)
23 vmv
 
22.01.13
14:05
все кто предлагает динамический текст запроса - нехорошие и продали лукавому душу
24 DrShad
 
22.01.13
14:05
(23) а те кто за построитель или СКД?
25 saaken
 
22.01.13
14:05
(18) запрос покажи
26 vmv
 
22.01.13
14:06
(24) чудовища
27 Fragster
 
гуру
22.01.13
14:07
(23)

ТЗ = "Выбрать * Из Таблица Где &_Условие";
Запрос.УстановитьПараметр("_Условие", Истина);
Если ЗначениеЗаполнено(Контрагент) Тогда
 Запрос.Текст = СтрЗаменить(ТЗ, "&_Условие", "Таблица.Контрагент = &Контрагент");
 Запрос.УстановитьПараметр("Контрагент", Контрагент);
КонецЕсли;
28 rs_trade
 
22.01.13
14:07
(23) Неудобно, да. Но иногда все таки надо.
29 mikecool
 
22.01.13
14:08
(17) ну это надо детально смотреть на план, но - парсеру все равно придется каждый раз работать
30 Fragster
 
гуру
22.01.13
14:08
(27)+ когда надо внешнюю прокинуть таблицу в запрос - тогда выручает
31 DrShad
 
22.01.13
14:08
(28) пример необходимости в студию!
32 rs_trade
 
22.01.13
14:08
(27) Синтаксическая ошибка в запросе ))
33 vmv
 
22.01.13
14:08
(28) не надо!
34 Fragster
 
гуру
22.01.13
14:08
(31) -> (30). В СКД внешние источники есть, но многобукв слишком писать надо
35 Нуф-Нуф
 
22.01.13
14:08
юзайте СКД, будьте мужиками, блеать!
36 Fragster
 
гуру
22.01.13
14:08
(33)->(30)
37 Нуф-Нуф
 
22.01.13
14:09
(34) 10 строк кода + макет и у тебя на выходе Таблица Значений
38 rs_trade
 
22.01.13
14:09
(32) Хотя нет. Вру.
39 Fragster
 
гуру
22.01.13
14:09
или выбрать данные из таблицы, а какой - заранее не известно. тут и СКД не поможет...
40 Нуф-Нуф
 
22.01.13
14:10
(39) а программное формирование СКД уже отменили?
41 Fragster
 
гуру
22.01.13
14:10
(37) сильно больше 10
42 Fragster
 
гуру
22.01.13
14:11
(40) нет, но все равно проще типа "выбрать * из &_Таблица" Заменить &Таблица на метаданные.ПолноеИмя()
43 vmv
 
22.01.13
14:11
вас текстовка модуля пугает? так ее тожже нужно правильно структурировать, да и не пихать тексты запросов в одну кучу, я счас модули менеджеров объектов юзаю для текстов запросов и методов на запросах.

Так все яйца по своим корзинам - все четко, логично и понятно и без монтсроидальности общаков
44 Нуф-Нуф
 
22.01.13
14:12
(41) ну 15.


   СхемаКомпоновкиДанных = Макет;    
   КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
   КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
   КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
   
   Результат = Новый ТаблицаЗначений;
   ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
   ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
   ПроцессорВывода.УстановитьОбъект(Результат);
   ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
45 vmv
 
22.01.13
14:12
(39) не ври мне, читай (43).

просто въелась привычка г-кодишь шаблонами запросов, правда
46 Нуф-Нуф
 
22.01.13
14:13
+(44) и то это копипаст. остается только написать запрос в макете и вывести поля. а можно обойтись вообще без макета и описать скд программно
47 Сергей Д
 
22.01.13
14:13
где &Параметр В (Поле, "")
При передае пустой строки - игнорируется
48 Fragster
 
гуру
22.01.13
14:14
(44) а подготовка макета к неизвестному имени основной таблицы?

кстати, кто знает, как СКД работает с источниками-объектами? Запрос-то нормально с индексами и прочим, а вот за СКД - я не знаю.
49 Нуф-Нуф
 
22.01.13
14:16
(48) перебор колонок в цикле и добавление полей в скд.
для таких вещей у меня есть шаблон процедуры, куда можно передать ТЗ и получить набор данных для скд.
50 Нуф-Нуф
 
22.01.13
14:32
заморочился как-то сделать вывод временных таблиц в консоли запросов в макет через скд. освоил программное формирование СКД :)
зачетная штука :)