|
Знатокам СКД! Как в параметре для СКД сделать вид сравнения?? | ☑ | ||
---|---|---|---|---|
0
SerGa
18.02.14
✎
12:26
|
Есть СКД источником данных которой является не запрос а Набор данных.
Т.е. я с помощью запроса формирую таблицу значений (ТЗ), которую потом загружаю в набор данных СКД. Для корректного первоначального формирования ТЗ, для запроса который формирует эту ТЗ мне нужны параметры. Например Контрагент, для которого должна быть возможность задать в запросе не только Контрагент = &Контрагент, а и Не равно Не в списке и т.д. Если параметры передавать через Параметры СКД и потом их считывать через ПараметрыДанных.Элементы.Найти(НаименованиеПараметра) то в параметрах СКД нет возможности выбора вида сравнения А если попробовать считывать параметры,который я попробую передавать через закладку Отбор в СКД, то считать то их получится НО они будут потом опять накладываться на конечный набор данных, что не правильно, т.к. в конечном наборе таких полей нет вообще (например Контрагент). Как быть??? |
|||
1
Gr
18.02.14
✎
12:29
|
Используй не запрос для формирования ТЗ, а построитель запроса. Напиши функцию синхронизации отборов СКД с отборами построителя. Будет счастье.
|
|||
2
mikecool
18.02.14
✎
12:32
|
(1) сомнительное это счастье )) писал такую - строк 500 вышла
|
|||
3
SerGa
18.02.14
✎
12:32
|
(1) правильно я понял, что на форму нужно будет вывести форму отбора построителя???
|
|||
4
Gr
18.02.14
✎
12:33
|
(2) у меня универсальная около 30-40 строк
|
|||
5
Gr
18.02.14
✎
12:33
|
(3) нет, на форме используй настройки скд
|
|||
6
SerGa
18.02.14
✎
12:33
|
(2) что то типа этого??
Процедура ЗаполнитьОтборПоОтборуКомпоновщика(Отбор, ОтборКомпоновщика) Экспорт ЗаполнитьЗначенияСвойств(Отбор, ОтборКомпоновщика, "Использование, Представление"); Если ОтборКомпоновщика.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше Тогда Отбор.ВидСравнения = ВидСравнения.Больше; ИначеЕсли ОтборКомпоновщика.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно Тогда Отбор.ВидСравнения = ВидСравнения.БольшеИлиРавно; ИначеЕсли ОтборКомпоновщика.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии Тогда Отбор.ВидСравнения = ВидСравнения.ВИерархии; ИначеЕсли ОтборКомпоновщика.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда Отбор.ВидСравнения = ВидСравнения.ВСписке; ИначеЕсли ОтборКомпоновщика.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии Тогда Отбор.ВидСравнения = ВидСравнения.ВСпискеПоИерархии; ИначеЕсли ОтборКомпоновщика.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше Тогда Отбор.ВидСравнения = ВидСравнения.Меньше; ИначеЕсли ОтборКомпоновщика.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно Тогда Отбор.ВидСравнения = ВидСравнения.МеньшеИлиРавно; ИначеЕсли ОтборКомпоновщика.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда Отбор.ВидСравнения = ВидСравнения.НеВИерархии; ИначеЕсли ОтборКомпоновщика.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке Тогда Отбор.ВидСравнения = ВидСравнения.НеВСписке; ИначеЕсли ОтборКомпоновщика.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда Отбор.ВидСравнения = ВидСравнения.НеВСпискеПоИерархии; ИначеЕсли ОтборКомпоновщика.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно Тогда Отбор.ВидСравнения = ВидСравнения.НеРавно; ИначеЕсли ОтборКомпоновщика.ВидСравнения = ВидСравненияКомпоновкиДанных.НеСодержит Тогда Отбор.ВидСравнения = ВидСравнения.НеСодержит; ИначеЕсли ОтборКомпоновщика.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда Отбор.ВидСравнения = ВидСравнения.Равно; ИначеЕсли ОтборКомпоновщика.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит Тогда Отбор.ВидСравнения = ВидСравнения.Содержит; Иначе // Не нашли соответствие - не применяем отбор Отбор.Использование = Ложь; Возврат; КонецЕсли; Отбор.Значение = ОтборКомпоновщика.ПравоеЗначение; КонецПроцедуры |
|||
7
Gr
18.02.14
✎
12:34
|
(6) да
|
|||
8
SerGa
18.02.14
✎
12:35
|
(5) не понял тогда.. параметр контрагент мне в Параметры СКД выносить???
|
|||
9
Gr
18.02.14
✎
12:36
|
(8) в том то и дело, что не нужно
|
|||
10
SerGa
18.02.14
✎
12:37
|
вот.. а где тогда пользователь будет выбирать вид сравнения и задавать конкретного контрагента???
|
|||
11
Gr
18.02.14
✎
12:39
|
(10) перед выполнением запроса построителя, выполни синхронизацию отборов скд с отборами построителя. В отборах скд задай нужного тебе контрагента, список контрагентов и т.п.
|
|||
12
SerGa
18.02.14
✎
12:43
|
ага...НО тогда эти отборы будут потом опять накладываться на конечный набор данных, что не правильно, т.к. в конечном наборе таких полей нет вообще (например Контрагент).
например выбираю из регистра Продажи с отбором по контрагенту продажи по номенклатуре т.е. в конечной тз есть поля Номенклатура и Сумма а поля Контрагент Нет и быть не должно. В отборе же контрагент есть и этот отбор активен! т.е. несмотря на то что ТЗ не пустая, но отчет мне будет выдавать пустоту, т.к поверх будет наложен отбор Контрагент |
|||
13
Зойч
18.02.14
✎
12:44
|
Зачем построитель? Юзай еще одну скд для получения таблицы!!!
|
|||
14
Gr
18.02.14
✎
12:44
|
(12) что мешает включить в набор данных контрагента, но не выводить его потом для пользователя?
|
|||
15
Gr
18.02.14
✎
12:45
|
(13) тоже правильно, вообще все зависит от сложности выборки данных, нужно смотреть на конкретную задачу
|
|||
16
SerGa
18.02.14
✎
12:48
|
(14) не получиться т.е. запрос к продажам, является одним из десятка подзапросов ко многим регистрам как накопления так и бухгалтерии, из которых собираются а потом группируются много самых разнородных данных (для фин анализа) и соответственно контрагент в конечном наборе вообще не в тему
|
|||
17
Gr
18.02.14
✎
12:49
|
(16) тогда, придумай к параметру Контрагент, еще один параметр ВидСравненияДляКонтрагента, и выкручивайся как то так
|
|||
18
Gr
18.02.14
✎
12:51
|
лично я предпочитаю не использовать ТЗ в качестве набора данных, делаю это очень редко. Как по мне, то лучше в запросе СКД использовать временные таблицы
|
|||
19
SerGa
18.02.14
✎
12:55
|
(17) примерно так и думал сделать, но полагал есть более красивое решение...
(18) возможно я не вполне оцениваю возможности использования операторов {} , т.к. не вполне понимаю как сделать так, чтобы в зависимости от выбранных параметров сделать так, чтобы какие-то временные таблицы формировались а какие-то нет... |
|||
20
SerGa
18.02.14
✎
13:09
|
Придумал как избежать наложение отборов на конечный набор ...
перед МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, ТекНастройки, ДанныеРасшифровкиОтчета, ); в ТекНастройки отключаю использование необходимых Отборов |
|||
21
Gr
18.02.14
✎
13:12
|
(21) да, так тоже будет работать. Только не забудь после вывода данных на экран, опять включить отбор, а то пользователи будут дезориентированы
|
|||
22
SerGa
18.02.14
✎
13:16
|
(22) да, именно так и сделаю. спасибо за конструктивную беседу..
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |