Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Отбор в справочнике по составному условию (число прочтений - 1647 )
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Отбор в справочнике по составному условию
20. Июля 2011 :: 06:46
Печать  
Помогите пожалуйста

Есть справочник "Номенклатура". и подчинённый ему "коды поставщиков". Задача - сделать фильтр по справочнику "Номенклатура" по составному условию. Поясню - кроме фильтра по значению кода поставщика надо реализовать фильтр по группе+фильтр по значению определённого поля справочника "Номенклатура"

Так вот - составной фильтр по полям справочника Номенклатура я сделал. А как туда прикрутить фильтр по коду справочника "Коды поставщиков" сообразить не получается.

Вот пример составного фильтра по реквизитам справочника "Номенклатура"

Текст="SELECT
           |code AS Код,
           |id AS [Товар $Справочник.Номенклатура],
           |ParentID as Parent
           |FROM $Справочник.Номенклатура as Спр WHERE isfolder=2";
           Если СписокГрупп.ТекущаяСтрока()<>1 Тогда
                 ТекГруппа=СписокГрупп.ПолучитьЗначение(СписокГрупп.ТекущаяСтрока()); 
                 ТекГруппа=_IdToStr(Лев(Прав(ЗначениеВСтрокуВнутр(ТекГруппа),15),13));
                 Текст=Текст+"
                       |AND ParentID='"+ТекГруппа+"'";
           КонецЕсли;            
           Если СокрЛП(РазбиваемаяСтрокаПоИмени)<>"" Тогда
                 Для Ном=1 По СтрКоличествоСтрок(РазбиваемаяСтрокаПоИмени) Цикл
                       Слово=СтрПолучитьСтроку(РазбиваемаяСтрокаПоИмени,Ном);
                       Если ПустоеЗначение(Слово)=0 Тогда
                             Текст=Текст+"
                             |AND LOWER(descr) LIKE '"+Слово+"'";
                       КонецЕсли;
                 КонецЦикла; 
           КонецЕсли;
           Если СокрЛП(РазбиваемаяСтрокаПоКоду)<>"" Тогда
                 Для Ном=1 По СтрКоличествоСтрок(РазбиваемаяСтрокаПоКоду) Цикл
                       Слово=СтрПолучитьСтроку(РазбиваемаяСтрокаПоКоду,Ном);
                       Если ПустоеЗначение(Слово)=0 Тогда
                             Текст=Текст+"
                             |AND LOWER(Code) LIKE '"+Слово+"'";
                       КонецЕсли;
                 КонецЦикла; 
           КонецЕсли;
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Отбор в справочнике по составному условию
Ответ #1 - 20. Июля 2011 :: 08:13
Печать  
1.Весьма странный способ получения id справочника,
достаточно УстановитьТекстовыйПараметр

2. в условии на Like неплохо бы в начале  и в конце добавить %

3. Для фильтра по подчиненному справочнику - inner join с табличкой этого справочника с нужными условиями.

  
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Отбор в справочнике по составному условию
Ответ #2 - 21. Июля 2011 :: 08:31
Печать  
Привет коллега. Пишу как научился читая хелпы и смотря примеры. Ты мне аську не светанёшь свою? а то так иногда не хватает знаний по прямым запросам а спросить негде. Помнится на мисте мы вроде общались.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Отбор в справочнике по составному условию
Ответ #3 - 22. Июля 2011 :: 04:07
Печать  
Стрелок писал(а) 21. Июля 2011 :: 08:31:
Привет коллега. Пишу как научился читая хелпы и смотря примеры. Ты мне аську не светанёшь свою? а то так иногда не хватает знаний по прямым запросам а спросить негде. Помнится на мисте мы вроде общались.


Салют.
Да нет аси у меня..
Улыбка
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Отбор в справочнике по составному условию
Ответ #4 - 22. Июля 2011 :: 05:02
Печать  
Стрелок писал(а) 20. Июля 2011 :: 06:46:
Помогите пожалуйста

Есть справочник "Номенклатура". и подчинённый ему "коды поставщиков". Задача - сделать фильтр по справочнику "Номенклатура" по составному условию. Поясню - кроме фильтра по значению кода поставщика надо реализовать фильтр по группе+фильтр по значению определённого поля справочника "Номенклатура"

Так вот - составной фильтр по полям справочника Номенклатура я сделал. А как туда прикрутить фильтр по коду справочника "Коды поставщиков" сообразить не получается.

Вот пример составного фильтра по реквизитам справочника "Номенклатура"

Текст="SELECT
           |code AS Код,
           |id AS [Товар $Справочник.Номенклатура],
           |ParentID as Parent
           |FROM $Справочник.Номенклатура as Спр WHERE isfolder=2";
           Если СписокГрупп.ТекущаяСтрока()<>1 Тогда
                 ТекГруппа=СписокГрупп.ПолучитьЗначение(СписокГрупп.ТекущаяСтрока());  
                 ТекГруппа=_IdToStr(Лев(Прав(ЗначениеВСтрокуВнутр(ТекГруппа),15),13));
                 Текст=Текст+"
                       |AND ParentID='"+ТекГруппа+"'";
           КонецЕсли;            
           Если СокрЛП(РазбиваемаяСтрокаПоИмени)<>"" Тогда
                 Для Ном=1 По СтрКоличествоСтрок(РазбиваемаяСтрокаПоИмени) Цикл
                       Слово=СтрПолучитьСтроку(РазбиваемаяСтрокаПоИмени,Ном);
                       Если ПустоеЗначение(Слово)=0 Тогда
                             Текст=Текст+"
                             |AND LOWER(descr) LIKE '"+Слово+"'";
                       КонецЕсли;
                 КонецЦикла;  
           КонецЕсли;
           Если СокрЛП(РазбиваемаяСтрокаПоКоду)<>"" Тогда
                 Для Ном=1 По СтрКоличествоСтрок(РазбиваемаяСтрокаПоКоду) Цикл
                       Слово=СтрПолучитьСтроку(РазбиваемаяСтрокаПоКоду,Ном);
                       Если ПустоеЗначение(Слово)=0 Тогда
                             Текст=Текст+"
                             |AND LOWER(Code) LIKE '"+Слово+"'";
                       КонецЕсли;
                 КонецЦикла;  
           КонецЕсли;

1. Вместо
Код
Выбрать все
Если СписокГрупп.ТекущаяСтрока()<>1 Тогда
			ТекГруппа=СписокГрупп.ПолучитьЗначение(СписокГрупп.ТекущаяСтрока());  
			ТекГруппа=_IdToStr(Лев(Прав(ЗначениеВСтрокуВнутр(ТекГруппа),15),13));
			Текст=Текст+"
				|AND ParentID='"+ТекГруппа+"'";
		КонецЕсли; 


рекомендую писать так:
Код
Выбрать все
Если СписокГрупп.ТекущаяСтрока()<>1 Тогда
			Текст=Текст+"
				|AND ParentID=:ВыбТовар";
пп.ТекущаяСтрока()));
		КонецЕсли; 


2. Рекомендую уложить проверяемые поля в ТЗ и воспользоваться этой процедурой http://www.1cpp.ru/forum/YaBB.pl?num=1170322440/7#7 (спс trad)
и далее в запросе добавляешь что-то типа
Код
Выбрать все
AND DESCR in (SELECT Наименование FROM #ТаблицаНаименований)
AND Code in (SELECT Код FROM #ТаблицаКодов) 


3. Надо знать, как коды поставщиков связаны с номенклатурой (например, если коды поставщиков подчинены Номенклатуре)
Код
Выбрать все
FROM $Справочник.Номенклатура as Спр
LEFT JOIN $Справочник.КодыПоставщиков СпК ON Спр.ID=СпК.ParentExt
---
AND СпК.ID in (SELECT Код FROM #ТаблицаКодовПоставщиков) 



  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать