Имя: Пароль:
1C
1С v8
Подкиньте мысль как менять текст запроса в зависимости от вида отбора?
,
0 Cerera
 
27.07.12
09:25
В отчете без использования СКД, использую объект типа "Отбор". Потом при формировании отчета получаю значения полей отбора и ВидСравнения

Для Индекс = 0 По ПолеОтбора.Количество()-1 Цикл
 Поле = ПолеОтбора[Индекс];
 Если Поле.Использование=Истина Тогда
   Если Поле.ПутьКДанным="НоменклатурнаяГруппа" Тогда
     НоменклатурнаяГруппа=Поле.Значение;
     ВидСравненияНоменклатурнаяГруппа=Поле.ВидСравнения;
   КонецЕсли;
 КонецЕсли;
КонецЦикла;

Как мне по умному в зависимости ВидаСравнения менять запрос? Пока только такой вариант напрашивается - создать текст запроса и разрезать запрос на куски снабдив условиями типа

Если ВидСравнения=Равно Тогда
Запрос.Текст=Запрос.Текст+"Где НоменклатурнаяГруппа=....."
ИначеЕсли ВидСравнения="Не равно" Тогда ....

но мне кажется это неудобный способ. ведь так кучу вариантов перебирать придется. как то это реализуется по другому.
1 rasswet
 
27.07.12
09:26
СтрЗаменить
2 х86
 
27.07.12
09:26
Построитель используй
3 Cerera
 
27.07.12
09:29
(1)а стрзаменить для каких целей?
4 Zero on a dice
 
27.07.12
09:32
либо построитель, либо пару функций для генерирования условия от переданного массива структур/отбора
5 Cerera
 
27.07.12
09:35
(4)а где эти функции есть?
6 Лефмихалыч
 
27.07.12
09:36
(0) Будь мужиком уже, юзай СКД, блеать
7 Zero on a dice
 
27.07.12
09:38
(5) напиши сам - делов на 20 минут
8 Cerera
 
27.07.12
09:43
(6)не получится. я а скд отчеты пишу. но здесь обработка. она многочего делает помимо вывода отчета.
9 GoldenCalf
 
27.07.12
09:45
(8) Да хоть в документе используй СКД, кто тебе мешает
10 Cerera
 
27.07.12
09:47
(9)да мне нужно в цикле построчно обходить группировки и выводить секции отчета
11 Cerera
 
27.07.12
09:48
и ещё заполнять документ и т.п. обрабатывать строки
12 Cerera
 
27.07.12
09:55
наверняка где-нибудь можно нарыть функций подобных
13 Zero on a dice
 
27.07.12
10:07
Дарю, но здесь не все учтено:

Процедура ОтборВУсловиеЗапроса(ОтборДонор, Построитель)  Экспорт
   Если ОтборДонор = Неопределено Тогда
       Возврат;
   КонецЕсли;
   Для Каждого ЭлементОтбора Из ОтборДонор Цикл
       Если ЗначениеЗаполнено(ЭлементОтбора.ПутьКДанным) Тогда
           Построитель.Текст = Построитель.Текст + "
           | И Объект."+ ЭлементОтбора.ПутьКДанным+ " " + ВидСравненияДляЗапроса(ЭлементОтбора.ВидСравнения) + " (&" + ЭлементОтбора.ПутьКДанным+")";
           
           Построитель.Параметры.Вставить(ЭлементОтбора.ПутьКДанным, ЭлементОтбора.Значение);
       КонецЕсли;
   КонецЦикла;

   
КонецПроцедуры

Функция ВидСравненияДляЗапроса(ТекВидСравнения)
   Если ТекВидСравнения = ВидСравнения.Равно Тогда
       Возврат "=";
   ИначеЕсли ТекВидСравнения = ВидСравнения.Больше Тогда
       Возврат ">";
   ИначеЕсли ТекВидСравнения = ВидСравнения.БольшеИлиРавно Тогда
       Возврат ">=";
   ИначеЕсли ТекВидСравнения = ВидСравнения.Меньше Тогда
       Возврат "<";
   ИначеЕсли ТекВидСравнения = ВидСравнения.МеньшеИлиРавно Тогда
       Возврат "<=";
   ИначеЕсли ТекВидСравнения = ВидСравнения.НеРавно Тогда
       Возврат "<>";
   ИначеЕсли ТекВидСравнения = ВидСравнения.ВСписке Тогда
       Возврат "В";
   ИначеЕсли ТекВидСравнения = ВидСравнения.ВИерархии Тогда
       Возврат "В Иерархии";
   Иначе
       Возврат "=";
   КонецЕсли;
КонецФункции
14 Лефмихалыч
 
27.07.12
10:10
(8) в обработке тоже можно юзать СКД. СКД можно юзать где угодно, даже в СКД.
15 Cerera
 
27.07.12
10:25
(14)ну я одного не понял. скд это хорошо. но мне надо чтобы я видел в цикле как выводятся строчки запроса. а так же анализировать выборку. и вручную некоторые показатели просчитывать