Имя: Пароль:
1C
1С v8
Программный вывод отчета на СКД в управляемых формах.
, ,
0 Andreyyy
 
11.05.12
08:57
Добавил команду на форму отчета, почитал мануалы и написал вот такой код:

&НаСервере
Процедура СформироватьОтчетНаСервере(ТабДок)
   
   ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
   
   Схема = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
   Настройки = Схема.НастройкиПоУмолчанию;
   
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   Макет = КомпоновщикМакета.Выполнить(Схема, Настройки);
   
   ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(Макет);
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(ТабДок);
   ПроцессорВывода.Вывести(ПроцессорКомпоновки);
   
КонецПроцедуры

&НаКлиенте
Процедура СформироватьОтчет(Команда)
   
   СформироватьОтчетНаСервере(Результат);
   
КонецПроцедуры


Результат не удовлетворил, пользовательский отбор не накладывается, работает тот, что по умолчанию в настройках варианта. И выводит надпись "Отчет не сформирован. Нажмите "Сформировать" для получения отчета.
Скрин:
http://clck.ru/d/arCifjmD1487b

Что я забыл дописать ?
1 Andreyyy
 
11.05.12
09:23
С отборами разобрался, добавил код по загрузке пользовательских настроек.
Вынлядит теперь так:

&НаСервере
Процедура СформироватьОтчетНаСервере(ТабДок)
   
   ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
   
   Схема = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
   Настройки = Схема.НастройкиПоУмолчанию;
   
   КомпоновщикНастроекДанных = Новый КомпоновщикНастроекКомпоновкиДанных;
   КомпоновщикНастроекДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
   КомпоновщикНастроекДанных.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
   КомпоновщикНастроекДанных.ЗагрузитьПользовательскиеНастройки(Отчет.КомпоновщикНастроек.ПользовательскиеНастройки);
   
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   Макет = КомпоновщикМакета.Выполнить(Схема, КомпоновщикНастроекДанных.ПолучитьНастройки());
   
   ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(Макет);
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(ТабДок);
   ПроцессорВывода.Вывести(ПроцессорКомпоновки);
   
КонецПроцедуры

&НаКлиенте
Процедура СформироватьОтчет(Команда)
   
   СформироватьОтчетНаСервере(Результат);
   
КонецПроцедуры

Отчет формируется, но остается надпись "Отчет не сформирован. Нажмите "Сформировать" для получения отчета". Что еще нужно дописать ?
2 vinogradъ
 
11.05.12
09:26
поиск? не, не слышал.
3 vinogradъ
 
11.05.12
09:27
4 Aprobator
 
11.05.12
09:27
где вы только такие мануалы берете (
5 Aprobator
 
11.05.12
09:29
+(4) выдержка из СП:

Расширение управляемой формы для отчета (Managed form extension for reports)
СкомпоноватьРезультат (ComposeResult)
Синтаксис:

СкомпоноватьРезультат(<РежимКомпоновки>)
Параметры:

<РежимКомпоновки> (необязательный)

Тип: РежимКомпоновкиРезультата.
Задает режим формирования результата.
Значение по умолчанию: Непосредственно
Описание:

Доступен только в форме отчета.
Выводит отчет с текущими настройками в элемент - результат.
Заполняет данные расшифровки.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.
6 Andreyyy
 
11.05.12
09:35
Избавился от надписи так:

Элементы.Результат.ОтображениеСостояния.Видимость = Ложь;
Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать;

(3) После такого метода надпись будет вновь появляться (а надо), если отбор изменили ?
(5) Нужно будет убирать/устанавливать поля в зависимости от установленных параметров (для этого программно и делаю), возможно будет при таком подходе это сделать ?
7 Aprobator
 
11.05.12
09:37
(6) ... Выводит отчет с текущими настройками в элемент результат... - а что помешает?
8 Aprobator
 
11.05.12
09:38
там же у формы отчета параметр формы - ПользовательскиеНастройки.
9 Andreyyy
 
11.05.12
09:39
(7) Мне нужно управлять видимостью полей.
Типа таким кодом в модуле отчета:

Процедура УстановитьУбратьПоля(Значение)
   
   ПолеБазиснаяСтанция  = Новый ПолеКомпоновкиДанных("ПараметрыДанных.БазиснаяСтанция");
   ПолеКилометраж  = Новый ПолеКомпоновкиДанных("Километраж");
   ПолеЖДТариф    = Новый ПолеКомпоновкиДанных("ЖДТариф");
   
   ВыбранныеПоля = КомпоновщикНастроек.Настройки.Выбор.Элементы;
   Для Каждого ЭлементВыбора Из ВыбранныеПоля Цикл
       Если ЭлементВыбора.Поле = ПолеБазиснаяСтанция
        Или ЭлементВыбора.Поле = ПолеКилометраж
        Или ЭлементВыбора.Поле = ПолеЖДТариф Тогда
       
           ЭлементВыбора.Использование = Значение;
       КонецЕсли;
   КонецЦикла;
   
КонецПроцедуры
10 Andreyyy
 
11.05.12
09:39
(9) Если флажок отбора есть у одного из параметров, то определенные поля выводятся, если нет флажка, то нет.
11 Aprobator
 
11.05.12
09:42
(9) ну так установи. Есть еще расширение формы отчета - ФиксированныеНастройки. Читай СП и пробуй (СП - Интерфейс (управляемый) - Управляемая форма - Отчет) . Просто в (0) уж совсем каменный век.
12 Andreyyy
 
11.05.12
09:48
(11) Информации лучше http://www.spec8.ru/kurs-po-skd-besplatno к сожалению не нашел, (0) оттуда.
Подскажите что актуальней почитать.
Спасибо.
13 Aprobator
 
11.05.12
09:49
(12) СП - ссылку дал. Второй вариант - открыть типовую конфу и в ней покопаться.
14 Aprobator
 
11.05.12
09:50
(12) фига се. Первый раз вижу этот курс. Надо будет самому при случае глянуть.
15 Andreyyy
 
11.05.12
10:02
(5) Вобщем при таком методе все работает как надо, спасибо.

Процедура УстановитьУбратьПоля(Значение)
   
   ПолеБазиснаяСтанция  = Новый ПолеКомпоновкиДанных("ПараметрыДанных.БазиснаяСтанция");
   ПолеКилометраж  = Новый ПолеКомпоновкиДанных("Километраж");
   ПолеЖДТариф    = Новый ПолеКомпоновкиДанных("ЖДТариф");
   
   ВыбранныеПоля = КомпоновщикНастроек.Настройки.Выбор.Элементы;
   Для Каждого ЭлементВыбора Из ВыбранныеПоля Цикл
       Если ЭлементВыбора.Поле = ПолеБазиснаяСтанция
        Или ЭлементВыбора.Поле = ПолеКилометраж
        Или ЭлементВыбора.Поле = ПолеЖДТариф Тогда
       
           ЭлементВыбора.Использование = Значение;
       КонецЕсли;
   КонецЦикла;
   
КонецПроцедуры

Функция СформироватьОтчетПоПредложениям(ТабДок) Экспорт
   
   БазиснаяСтанцияПараметр = Новый ПараметрКомпоновкиДанных("БазиснаяСтанция");
   ПолеБазиснаяСтанция  = Новый ПолеКомпоновкиДанных("ПараметрыДанных.БазиснаяСтанция");
   
   ПользовательскийОтбор = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
   Для Каждого ЭлементОтбора Из ПользовательскийОтбор Цикл
       Если ЭлементОтбора.Параметр = БазиснаяСтанцияПараметр Тогда
           УстановитьУбратьПоля(ЭлементОтбора.Использование);
           Прервать;
       КонецЕсли;
   КонецЦикла;
   
   СкомпоноватьРезультат(ТабДок);
   
КонецФункции
16 Aprobator
 
11.05.12
10:07
(15) во - можешь же когда хочешь )
17 Aprobator
 
11.05.12
10:30
+(16) хотя у СкомпоноватьРезультат для управляемых форм параметр (см (5) и СП внимательно)нефига не ТабличныйДокумент. Но 1Сы есть 1 Сы - тут ничего не поделаешь.