Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Отбор по списку значений перечисления (число прочтений - 5972 )
jws
YaBB Newbies
*
Отсутствует



Сообщений: 8
Зарегистрирован: 08. Августа 2008
Отбор по списку значений перечисления
08. Августа 2008 :: 07:43
Печать  
Подскажите, как сделать отбор по списку значений перечислений.
Вкратце образец кода

СписокЗначений = СоздатьОбъект("СписокЗначений");
СписокЗначений.ДобавитьЗначение(Перечисление.Статусы.Статус1);
СписокЗначений.ДобавитьЗначение(Перечисление.Статусы.Статус2);
СписокЗначений.ДобавитьЗначение(Перечисление.Статусы.Статус6);

Запрос = СоздатьОбъект("ODBCRecordset");
ТекстЗапроса = "
|SELECT ПартииНаличиеОстатки.Фирма [Фирма $Справочник.Фирмы]
|      , ПартииНаличиеОстатки.МОЛ [МОЛ $Справочник.ФизЛица]
|      , ПартииНаличиеОстатки.Номенклатура [Номенклатура $Справочник.Номенклатура]
|      , ПартииНаличиеОстатки.СтатусПартии [СтатусПартии $Перечисление.СтатусыПартии]
|      , ПартииНаличиеОстатки.КоличествоОстаток
|FROM $РегистрОстатки.ПартииНаличие(:ВыбДата,,Фирма IN (SELECT Val FROM #Фирмы) AND
|                                                                    МОЛ = :МОЛ ,,) AS ПартииНаличиеОстатки"      ;

Запрос.УстановитьТекстовыйПараметр("ВыбДата", ТекущаяДата());
Запрос.УложитьСписокОбъектов(Фирма, "#Фирмы", "Фирмы");
Запрос.УстановитьТекстовыйПараметр("МОЛ", ВыбДокумент.Склад.МОЛ);

И тут непонятно как наложить на таблицу остаков доп. условие по статусам. конструкция типа

Запрос.УложитьСписокОбъектов(СписокЗначений, "#Статусы", "СтатусыПартий");

не проходят. Помогите новичку плиз  Нерешительный
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Отбор по списку значений перечисления
Ответ #1 - 08. Августа 2008 :: 08:07
Печать  
Я боюсь, что так не прокатит.
Нужно как обычно через Пер = $Перечисление.Такоето.Значение и т.д.
  
Наверх
 
IP записан
 
jws
YaBB Newbies
*
Отсутствует



Сообщений: 8
Зарегистрирован: 08. Августа 2008
Re: Отбор по списку значений перечисления
Ответ #2 - 08. Августа 2008 :: 08:13
Печать  
Т.е., если я правильно понял, при наличии переменного списка значений остается только динамически формировать текст запроса?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отбор по списку значений перечисления
Ответ #3 - 08. Августа 2008 :: 08:16
Печать  
А если не передавать в УложитьСписокОбъектов третий параметр?  Нерешительный
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
jws
YaBB Newbies
*
Отсутствует



Сообщений: 8
Зарегистрирован: 08. Августа 2008
Re: Отбор по списку значений перечисления
Ответ #4 - 08. Августа 2008 :: 08:24
Печать  
А тогда отбор вообще игнорируется  Печаль
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Отбор по списку значений перечисления
Ответ #5 - 08. Августа 2008 :: 08:35
Печать  
Тогда по старинке  Улыбка
Код
Выбрать все
СтатусПартии IN (" + Запрос.мд.ПолучитьСтрокуИзСЗ(СписокЗначений) + ") 

  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
jws
YaBB Newbies
*
Отсутствует



Сообщений: 8
Зарегистрирован: 08. Августа 2008
Re: Отбор по списку значений перечисления
Ответ #6 - 08. Августа 2008 :: 08:49
Печать  
Ура! Мы ломим - гнутся шведы!  Смех
Все получилось. Спасибо.

Коротенько, на пару строк, дам фрагметы кода.

MetaDataWork = СоздатьОбъект("MetaDataWork");
СтрокаСтатусов = MetaDataWork.ПолучитьСтрокуИзСЗ(ПолучитьНаборСтатусов());

//поскипано
//далее фрагмент текста запроса
     |FROM $РегистрОстатки.ПартииНаличие(:ВыбДата,,Фирма IN (SELECT Val FROM #Фирмы) AND
     |                                                                    МОЛ = :МОЛ AND
     |                                                                    Номенклатура = :Номенклатура AND
     |                                                                    СтатусПартии IN ("+СтрокаСтатусов+"),,) AS ПартииНаличиеОстатки

  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Отбор по списку значений перечисления
Ответ #7 - 08. Августа 2008 :: 09:08
Печать  
jws писал(а) 08. Августа 2008 :: 08:49:
Ура! Мы ломим - гнутся шведы!  Смех
Все получилось. Спасибо.

Коротенько, на пару строк, дам фрагметы кода.

MetaDataWork = СоздатьОбъект("MetaDataWork");
СтрокаСтатусов = MetaDataWork.ПолучитьСтрокуИзСЗ(ПолучитьНаборСтатусов());

//поскипано
//далее фрагмент текста запроса
     |FROM $РегистрОстатки.ПартииНаличие(:ВыбДата,,Фирма IN (SELECT Val FROM #Фирмы) AND
     |                                                                    МОЛ = :МОЛ AND
     |                                                                    Номенклатура = :Номенклатура AND
     |                                                                    СтатусПартии IN ("+СтрокаСтатусов+"),,) AS ПартииНаличиеОстатки




Хе, я конечно все понимаю, но у тебя это скорее всего упрощенно выглядит так:
1) Ты сначала формируешь как-то отдельный список из списка на форме или еще откуда.
2) Опять проход по списку, чтобы сформировать строку условия.

Почему нельзя сделать 1 проход по списку и сформировать строку условия сразу? Так же быстрее будет.
  
Наверх
 
IP записан
 
jws
YaBB Newbies
*
Отсутствует



Сообщений: 8
Зарегистрирован: 08. Августа 2008
Re: Отбор по списку значений перечисления
Ответ #8 - 08. Августа 2008 :: 09:21
Печать  
Не совсем понял мысль. А поразвернутее можно?
  
Наверх
 
IP записан
 
mvgfirst
Full Member
***
Отсутствует


В борьбе бобра с ослом
всегда побеждает бобро!

Сообщений: 152
Местоположение: Украина г. Кривой Рог
Зарегистрирован: 17. Августа 2007
Пол: Мужской
Re: Отбор по списку значений перечисления
Ответ #9 - 08. Августа 2008 :: 09:43
Печать  
А шо тут понимать...
Вместо того что бы значения перечислений для отбора запихивать в список значений, запихивай его с разу в строку которую используешь в условии отбора.
Некая оптимизация такая... не совсем уверен что почуствуешь разницу... но если придираццо - то так более оптимально  Язык
  
Наверх
ICQ  
IP записан
 
jws
YaBB Newbies
*
Отсутствует



Сообщений: 8
Зарегистрирован: 08. Августа 2008
Re: Отбор по списку значений перечисления
Ответ #10 - 08. Августа 2008 :: 09:51
Печать  
Ясно Улыбка тут во-первых используется уже имеющаяся функция, а во-вторых по отладчику эта функция использует только 0.3% процента времени. зачем усложнять себе жизнь за такую цену?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать