|
Прошу помощи: вывод таблицы значений через СКД | ☑ | ||
---|---|---|---|---|
0
Eugene_life
18.02.15
✎
15:01
|
Прочитал множество ссылок, сделал простой пример - ТЗ из одной колонки, типизированной, нужно вывести в отчет на СКД. С помощью описаний, я смог это сделать, но, увы, не работают отборы в полученном отчете.
Для совсем горячих голов, повторюсь - отчет выводит мою ТЗ, но отборы, установленные через настройки СКД не работают в принципе. Сам я подозреваю, что это связано с тем, что в процедуре «ПриКомпоновкеРезультата» установлено «СтандартнаяОбработка = ЛОЖЬ;» Кто сталкивался с этим и знает решение, прошу оказать помощь. |
|||
1
Timon1405
18.02.15
✎
15:09
|
(0) а в ролях полей измерения прописаны?
|
|||
2
Eugene_life
18.02.15
✎
15:12
|
(1) Нет, не прописаны
А там что можно прописать? У меня тип поля - строка |
|||
3
Teresa
18.02.15
✎
15:14
|
(0) так отчет программно выводится?
|
|||
4
Eugene_life
18.02.15
✎
15:15
|
(3) Отчет выводится. Но через настройки СКД делаю отбор - он не применяется.
|
|||
5
Timon1405
18.02.15
✎
15:16
|
(4) код вывода-то покажете?
|
|||
6
Teresa
18.02.15
✎
15:16
|
(4) я имею ввиду отчет выводится _программно_?
|
|||
7
Eugene_life
18.02.15
✎
15:17
|
(5)
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = ЛОЖЬ; ВнешниеНаборыДанных = Новый Структура; ВнешниеНаборыДанных.Вставить("ТЗ",ТЗ); СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); КонецПроцедуры |
|||
8
Eugene_life
18.02.15
✎
15:19
|
(6) Да, отчет выводится программно. При открытии формы отчета заполняется ТЗ (реквизит отчета), по кнопке "Сформировать" выводится моя ТЗ в поле результата. Но отборы мне не победить
|
|||
9
Timon1405
18.02.15
✎
15:20
|
(7) >>Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
не настораживает?? попробуйте МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ); |
|||
10
Alexaha
18.02.15
✎
15:20
|
(7) МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
проверь в отладчие что у тебя с отбором в Настройки |
|||
11
Eugene_life
18.02.15
✎
15:24
|
(10) в Настройки в отборе такое:
ДоступныеПоляОтбора - Элементы вообще пусто |
|||
12
Teresa
18.02.15
✎
15:47
|
имеет смысл покопать в сторону программного отбора
v8: Как в СКД программно установить отбор? |
|||
13
Timon1405
18.02.15
✎
15:50
|
автор, куда пропал, ответь на (9)
|
|||
14
Eugene_life
18.02.15
✎
15:52
|
(12), (13) По ходу, дело в том, что настройки отбора надо формировать также программно. Сейчас подсказали умные люди, как это в принципе можно реализовать. Пока пробую через программный отбор.
|
|||
15
Teresa
18.02.15
✎
15:52
|
(13) если стандартная обработка отключена, не будет его отбор работать по умолчанию
|
|||
16
Eugene_life
18.02.15
✎
15:55
|
(15) + 1, согласен. Хотя.. возможно ведь, что мой код перезаписывает отбор принудительно. Сейчас проверю.
|
|||
17
Alexaha
18.02.15
✎
16:01
|
(11) его отбор находится в КомпоновщикНастроек.ПользовательскиеНастройки
|
|||
18
Eugene_life
18.02.15
✎
16:06
|
(17) Действительно.. А их можно просто "загрузить" в настройки отчета?
|
|||
19
Teresa
18.02.15
✎
16:06
|
(17) в любом случае, придется отбор программно делать.
|
|||
20
Alexaha
18.02.15
✎
16:11
|
(18) как то я это делал, пытаюсь вспомнить...
|
|||
21
Teresa
18.02.15
✎
16:21
|
КомпоновщикНастроек.ЗагрузитьНастройки(ТвоиПользовательскиеНастройки);
|
|||
22
Eugene_life
18.02.15
✎
16:22
|
На данный момент у меня вот так:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = ЛОЖЬ; ВнешниеНаборыДанных = Новый Структура; ВнешниеНаборыДанных.Вставить("ТЗ",ТЗ); СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); Настройки = КомпоновщикНастроек.Настройки; Если Настройки.Отбор.Элементы.Количество()=0 Тогда Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; Иначе ЭлементОтбора = Настройки.Отбор.Элементы.Получить(0); ЭлементОтбора.ПравоеЗначение = "6"; ЭлементОтбора.Использование = Истина; ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит; КонецЕсли; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); КонецПроцедуры |
|||
23
Eugene_life
18.02.15
✎
16:23
|
(22) + В принципе, работает, но буду пытаться установить то, что прописал пользователь, я не я в коде. Попробую (21)
|
|||
24
Alexaha
18.02.15
✎
16:23
|
(21) ошибку даст - несовпадение типов
|
|||
25
Eugene_life
18.02.15
✎
16:27
|
(24) Да, дает такую ошибку. Может, удастся обойти коллекцию пользовательских настроек и как-то их протащить..
|
|||
26
Alexaha
18.02.15
✎
16:30
|
(25) в пользовательский настройках все в куче и параметры данных и элементы отбора, но я без переборов это делал, блин давно это было очень и один раз, вылетело из головы напрочь, считай с нуля разбираюсь
|
|||
27
Teresa
18.02.15
✎
16:32
|
(26) я тоже очень давно это делала, не помню уже, как. По-моему программно.
|
|||
28
Eugene_life
18.02.15
✎
16:34
|
Всем спасибо, проблема решена наилучшим образом )))
СКД просто не надо мешать делать свою работу. Код: Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = ЛОЖЬ; ВнешниеНаборыДанных = Новый Структура; ВнешниеНаборыДанных.Вставить("ТЗ",ТЗ); СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); Настройки = КомпоновщикНастроек.Настройки; Если Настройки.Отбор.Элементы.Количество()=0 Тогда Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; КонецЕсли; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); КонецПроцедуры |
|||
29
Eugene_life
18.02.15
✎
16:34
|
(28) + При первом открытии - без настроек, а при выборе настроек пользователем, они сами применяются.
Спасибо за моральную поддержку и хорошие советы. |
|||
30
Teresa
18.02.15
✎
16:35
|
(28) Зачетно) ларчик просто открывался значит)
|
|||
31
Eugene_life
18.02.15
✎
16:37
|
(30) Да... не потребовалось его ломать. Хотя я уже готовился копировать выбор пользователя в Массив и его программно прописывать.
|
|||
32
Alexaha
18.02.15
✎
16:46
|
(29) а ты проверил, точно работает?
|
|||
33
Eugene_life
18.02.15
✎
16:48
|
(32) Проверил. У меня работает )
|
|||
34
Alexaha
18.02.15
✎
17:07
|
(33) так еще проще, проверь
Настройки = КомпоновщикНастроек.ПолучитьНастройки(); МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки); |
|||
35
Eugene_life
18.02.15
✎
17:11
|
(34) Проверил - работает :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |