Стрелок писал(а) 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 #ТаблицаКодовПоставщиков)