PDA

Просмотр полной версии : УстановитьПараметр



Нина2013
15.02.2011, 13:05
Запрос.УстановитьПараметр("Исполнитель",Исполнитель );
Пользователь выбирает значения на форме, которые потом передаются в запрос.
В запросе у меня много параметров, а что делать, если пользователь выбрал не все параметры и какие-то в запросе оказались не нужны. Что делают в таких случаях? Неужели для каждого варианта писать новый запрос? ПОМОГИТЕИИИ:eek::confused:

avm3110
15.02.2011, 15:00
Запрос.УстановитьПараметр("Исполнитель",Исполнитель );
Пользователь выбирает значения на форме, которые потом передаются в запрос.
В запросе у меня много параметров, а что делать, если пользователь выбрал не все параметры и какие-то в запросе оказались не нужны. Что делают в таких случаях? Неужели для каждого варианта писать новый запрос? ПОМОГИТЕИИИ:eek::confused:

Безусловно запрос должен быть адекватен параметрам. :mad:

Т.е. если какие-то параметры "избыточны", то это вполне можно игнорировать (запрос просто данные параметры не будет использовать), но если каких-то параметров не хватает, то нужно либо "подсовывать" новый запрос, либо модифицировать существующий, что это это отвечало текущим параметрам....

ЗЫ.. а такой параметр как Пользователь можно брать из параметров сеанса (если речь идёт о текущем пользователе)

Нина2013
15.02.2011, 19:16
Если параметр не используется, ну пользователь его не выбрал, а в запросе он есть, то ошибка вылазит. Говорит что не задан параметр... И как?

avm3110
16.02.2011, 16:40
Если параметр не используется, ну пользователь его не выбрал, а в запросе он есть, то ошибка вылазит. Говорит что не задан параметр... И как?

Зависит от запроса. Тут нужно либо "инициализировать" такой параметр значением по умолчанию (например пустой ссылкой или пустой датой). Либо тогда модифицировать запрос, что бы он такой параметр (который пользователь не заполнил) не использовал...

ЗЫ.. это типичная информация и тут нет ничего экстремального или сверхневероятного:blush:

Maksy_G
20.02.2011, 21:44
выглядит это примерно так:



Запрос = новый запрос;
Если ЗначениеЗаполнено(Исполни� �ель) тогда
запрос.текст = "бла-бла-бла ГДЕ Исполнитель=&исполнитель";
Запрос.УстановитьПараметр("Исполнитель",Исполнитель );
иначе
запрос.текст = "бла-бла-бла";
конецесли;
//какие-то дальнейшие действия

Нина2013
21.02.2011, 06:33
Это же неудобно, а если переменных 7 и нужно реализовать условия я И/ИЛИ. Я сделала так:
1) запросом выбрала изначально все данные, которые требуются,
2) в цикле отбирала именно те, что удовлетворяют введенным данным.
И все, так оказалось проще, да и код сократился на большое кол строк:)

avm3110
22.02.2011, 08:30
Это же неудобно, а если переменных 7 и нужно реализовать условия я И/ИЛИ. Я сделала так:
1) запросом выбрала изначально все данные, которые требуются,
2) в цикле отбирала именно те, что удовлетворяют введенным данным.
И все, так оказалось проще, да и код сократился на большое кол строк:)

мдя-я-я... за подобное на экзамене у 1С сразу ставят двойку :-)

Делать выборку из десятков тысяч записей запросом, что бы затем "фильтровать" нужное перебором в цикле - еНто что-то безусловно :mad:

Нина2013
22.02.2011, 10:09
Ну а как тогда? 10 параметров и для каждого условия И/Или писать запрос, получается запросов ...куча... как вообще правильно поступить?

avm3110
22.02.2011, 10:19
Ну а как тогда? 10 параметров и для каждого условия И/Или писать запрос, получается запросов ...куча... как вообще правильно поступить?

дЫк у Вас какая задача? Либо облегчить себе труд (написав минимум кода, но который приведёт к неоправданому расходыванию выч.ресурсов), либо писать эффективный код, даже если для его написания понадобится "много думать" и писать дополнительный код?;)

Нина2013
22.02.2011, 10:58
Я писала, и с запросами все работало, но меня смущало большое кол запросов, в которых менялись только параметры.
Задача: пользователь на форме указывает, например, организация и/или исполнитель и/или заказчик. И это еще не все параметры, их много. Каждый раз в запросе я указывала для каждого конкретного поля и условий и/или параметры, очень длинный код вышел, аж путаться в нем начала,но все работала. Тогда я подумала, неужели нет команды, которая пропускает не заданный параметр, но не считает его по умолчанию пустым... Читала про команду НайтиПараметр, как ей пользоваться не поняла, может вы подскажете, что это?

avm3110
22.02.2011, 11:08
Я Тогда я подумала, неужели нет команды, которая пропускает не заданный параметр, но не считает его по умолчанию пустым... Читала про команду НайтиПараметр, как ей пользоваться не поняла, может вы подскажете, что это?

Ну как же.. безусловно есть и такое... в запросе вполне можите использовать конструктивы IS NULL и IS NOT NULL для определения что делать, когда указанный параметр пуст или не пуст

ЗЫ.. только не путайте NULL с "пустой ссылкой" ;)

Marks007
22.02.2011, 11:23
Господа, знакомо ли вам такое чудо как построитель отчета?
Скармливаете ему свой запрос полностью, а отбор по параметрам решаете с помощью отборов.

Нина2013
22.02.2011, 13:12
О нет, в моей задаче этот вариант не подходит.

Marks007
22.02.2011, 13:30
Почему не подходит? Построитель может вернуть точно такой-же результат выполнения запроса, как и сам запрос.

Maksy_G
22.02.2011, 16:37
давайте на примерах :)
я выше немного ошибся, правильнее будет написать так:



Запрос = новый запрос;
запрос.текст = "бла-бла-бла";
Если ЗначениеЗаполнено(Исполни� �ель) тогда
запрос.текст = запрос.текст + " ГДЕ Исполнитель=&исполнитель";
Запрос.УстановитьПараметр("Исполнитель",Исполнитель );
конецесли;

Nuks
23.02.2011, 15:32
Кому как удобнее. Так как при попытке установить значение несуществующего параметра ошибок не возникает, я так пишу :

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Склад", Объект.Склад);
Запрос.УстановитьПараметр("Номенклатура", СписокТоваров.ВыгрузитьКо� �онку("Номенклатура"));
Запрос.УстановитьПараметр("Характеристика", СписокТоваров.ВыгрузитьКо� �онку("Характеристика"));
Запрос.Текст = "ВЫБРАТЬ
| СвободныеОстаткиОстатки.Н� �менклатура КАК Номенклатура,
| СвободныеОстаткиОстатки.Х� �рактеристика КАК Характеристика,
| СвободныеОстаткиОстатки.В� �аличииОстаток - СвободныеОстаткиОстатки.В� �езервеОстаток КАК СвободныйОстаток
|ИЗ
| РегистрНакопления.Свободн� �еОстатки.Остатки(
| ,
| Номенклатура В (&Номенклатура)
| И Характеристика В (&Характеристика)"
+ ?(ЗначениеЗаполнено(Объект. Склад), " И Склад = &Склад" , "")
+ " ) КАК СвободныеОстаткиОстатки";

Нина2013
23.02.2011, 16:10
Спасибо, попробую)
А никто не знает как в табличном документе на форме сделать объемную ячейку?

Nuks
25.02.2011, 10:12
Спасибо, попробую)
А никто не знает как в табличном документе на форме сделать объемную ячейку?

Это ты что имеешь ввиду? :confused:

avm3110
25.02.2011, 10:52
Это ты что имеешь ввиду? :confused:

Ну как что?:) Ты разве не знаешь? Аватар - видел? Так и тут.. одеваешь 3D-очки и видишь ячейку в 3D измерениях:D

Нина2013
25.02.2011, 13:01
Нет:) Ну в смысле выпуклую, типа как в диаграмме Ганта...