|
СКД, отборы и несколько схем... | ☑ | ||
---|---|---|---|---|
0
ДенисЧ
05.06.13
✎
11:30
|
Картинка такая...
Есть отчёт с основной схемой СКД. В ней можно наложиьт отборы по нескольким справочникам, например по Подразделению и Номенклатуре. Далее. Перед формиррванием отчёта мне нужно сделать запрос к внешней базе с применением наложенных фильтров, чтобы не тянуть 100500 записей. Делаю так: СхемаОтборПодр = ПолучитьМакет("Отбор_Подразделения"); НастройкиОтборПодр = СхемаОтборПодр.НастройкиПоУмолчанию; Для каждого эл Из ЭтотОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл Если СокрЛП(эл.ЛевоеЗначение) = "Подразделение" Тогда новЭл = НастройкиОтборПодр.Отбор.Элементы.Добавить(ТипЗнч(эл)); ЗаполнитьЗначенияСвойств(новЭл, эл); КонецЕсли; КонецЦикла; Если НастройкиОтборПодр.Отбор.Элементы.Количество() > 0 Тогда КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновкиПодр= КомпоновщикМакета.Выполнить(СхемаОтборПодрНастройкиОтборПодр,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиАптеки); вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; тзПодр = вывод.Вывести(ПроцессорКомпоновкиДанных); Иначе тзПодр= Новый ТаблицаЗначений; КонецЕсли; Так что, если юзверб указал в отборе прямо подразделение, то всё прекрасно. Но если он указал в отборе Подразделение.Реквизит, то естественно в тз отбирается всё, ибо отбор не применяется... Если же копировать все отборы, то можем наткнуться на ситуацию, когда в запрос по подразделениям лезут фильтры, например, по номенклатуре и имеем ошибку. Вопрос. Как из доп схемы получить возможные накладываемые отборы? В доп схеме запрос элементарный Выбрать Ссылка КАК Подразделение Из справочник.Подразделения. |
|||
1
ДенисЧ
05.06.13
✎
11:56
|
уп.
Или я непонятно написал? |
|||
2
assasu
05.06.13
✎
12:57
|
ЭтотОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы тут не должно быть "левых" отборов. для этого нужно связать компоновщик со схемой. У меня это делается вот так:
скд = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); Настройки = скд.НастройкиПоУмолчанию; КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(скд)); |
|||
3
ДенисЧ
05.06.13
✎
13:29
|
мне нельзя портить настройки основного отчёта...
|
|||
4
Nexux
05.06.13
✎
13:33
|
программно добавлять отобры к основной СКД, если они применимы %)
|
|||
5
ДенисЧ
05.06.13
✎
13:34
|
(4) в основной у меня всё нормально.
Мне нужно добавить к дополнительной :-) |
|||
6
Nexux
05.06.13
✎
13:38
|
но через точку проваливаться можно рекурсивнобесконечно, мне кажется надо искать где-то в КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора
|
|||
7
Defender aka LINN
05.06.13
✎
13:46
|
(0) А как СКД применит твой отбор к внешней базе?
|
|||
8
ДенисЧ
05.06.13
✎
14:07
|
(7) А я сам его применю. Мне главное - получить из справочника значения, которые попадают под отбор
(6) там пусто... |
|||
9
toypaul
гуру
05.06.13
✎
14:12
|
чот я не понял нифига, но у меня вроде похожая была сиутация. лишние отборы я отключал через Использование.
|
|||
10
ДенисЧ
05.06.13
✎
14:16
|
(9) они не лишние... Мне просто нужно отобрать те, что применимы к допсхеме.
В основной - они вполне себе нужные |
|||
11
ssh2006
05.06.13
✎
14:20
|
(0) можно скопировать все отборы, обойти коллекцию и сотавить только те, имя поля которых содержит "Подразделение"
|
|||
12
ДенисЧ
05.06.13
✎
14:28
|
(11) А если я выберу Подразделение.ВидЦФО? Какое имя поля будет?
|
|||
13
ssh2006
05.06.13
✎
14:29
|
(12) можно в имени поля подстроку "Подразделение" искать
|
|||
14
Nexux
05.06.13
✎
15:24
|
(12) .ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Подразделение.ВидЦФО")
|
|||
15
ДенисЧ
05.06.13
✎
15:25
|
(14) Нене.... Оно уже выбрано... Мне его опознать....
|
|||
16
Nexux
05.06.13
✎
15:31
|
есть вариант тогда инициализировать компоновщик настроек на основе НастройкиОтборПодр, скопировать нужные отборы в его настройки, потом метод Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность)
|
|||
17
assasu
06.06.13
✎
07:33
|
(3)сделай настройку доп. компоновки по нажатию кнопки. под кнопкой переопредели компоновщик и вызови форму настройки, где задашь отборы. после того как форма закрылась - обратно инициализируй компоновщик основной схемой.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |