Имя: Пароль:
1C
1С v8
Как установить период отчета на УФ СКД с помощью ОткрытьФорму?
,
0 эцп
 
20.12.12
16:26
Как передать отбор в отчет СКД на УФ понятно:
   ПараметрыФормы = Новый Структура("Отбор,КлючНазначенияИспользования,СформироватьПриОткрытии", Новый Структура("Контрагент", Контрагент), "Остновной", Истина);
   ОткрытьФорму("Отчет.МойОтчет.Форма", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно);

А как установить период отчета?

Период отчета задан как параметр "ПериодОтчета"

http://i51.fastpic.ru/big/2012/1220/e7/3aa18d5cee48ddd0cdc0e1ddbda361e7.png

http://i51.fastpic.ru/big/2012/1220/91/329f04c6890fe4e6bd9e211cd5d36691.png
1 эцп
 
20.12.12
16:46
Все празднуют конец света?
2 Popkorm
 
20.12.12
16:55
(1)  Новый Структура("ПериодОтчета,ПериодОтчета)
3 эцп
 
20.12.12
16:59
А если с примером? Пока не понятно
4 Popkorm
 
20.12.12
17:01
(3) СП:
ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>)
где ПараметрыФормы = Новый Структура("Отбор,КлючНазначенияИспользования,СформироватьПриОткрытии", Новый Структура("Контрагент", Контрагент), "Остновной", Истина)

период отчета = это не параметр?!
5 Popkorm
 
20.12.12
17:02
+
П = Новый Структура("Ключ", Поставщик);
Форма = ПолучитьФорму("Справочник.Контрагенты.ФормаОбъекта", П);
Форма.Открыть();
6 эцп
 
20.12.12
17:07
(4) Не получилось, как параметр ПериодОтчета игнорируется
7 эцп
 
20.12.12
18:06
ПараметрыФормы = Новый Структура("КлючНазначенияИспользования,СформироватьПриОткрытии", "Основной", Истина);
       
       СхемаКомпоновкиДанных = Отчеты.МойОтчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
       КомпоновщикНастроекКомпоновкиДанных = Новый КомпоновщикНастроекКомпоновкиДанных;
       КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
       КомпоновщикНастроекКомпоновкиДанных.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
       ПН = КомпоновщикНастроекКомпоновкиДанных.ПользовательскиеНастройки;
       
       Если ЗначениеЗаполнено(Контрагент) Тогда
           ПолеКонтрагент = Новый ПолеКомпоновкиДанных("Контрагент"); ЭлементОтбора = Неопределено;
           
           Для Каждого Элемент Из КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор.Элементы Цикл
               Если Элемент.ЛевоеЗначение <> ПолеКонтрагент Тогда Продолжить; КонецЕсли;
               ЭлементОтбора = Элемент; Прервать;
           КонецЦикла;
           
           Элемент = ПН.Элементы.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки);
           
           Элемент.ВидСравнения     = ВидСравненияКомпоновкиДанных.Равно;
           Элемент.ПравоеЗначение   = Расшифровка.Контрагент;
           Элемент.Использование    = Истина;
       КонецЕсли;
       
       ЭлементОтбора = КомпоновщикНастроекКомпоновкиДанных.Настройки.ПараметрыДанных.Элементы.Найти("ПериодОтчета");
       Элемент = ПН.Элементы.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки);
       Элемент.Значение = Новый СтандартныйПериод(Расшифровка.НачДата, Расшифровка.КонДата);
       Элемент.Использование = Истина;
       ПараметрыФормы.Вставить("ПользовательскиеНастройки", ПН);
       ОткрытьФорму("Отчет.МойОтчет.Форма", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно);
8 эцп
 
20.12.12
18:06
(7) А проще никак нельзя? Выглядит, как большой костыль?
9 vmv
 
20.12.12
22:55
попробуй так, тут писал ляпы по-барабану

ФормаОтчета = ПолучитьФорму("Отчет.МойОтчет.Форма", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно);

// серверные обрабочики создания формы уже отработали клиент ждет что же дальше

ЭтотОбъект= ФормаОтчета.Объект;

СкдПараметрыКакЯХочу = Новый Структура;
СкдПараметрыКакЯХочу.Вставить("Период", ...);
СкдПараметрыКакЯХочу.Вставить("ПраметрЧегото", ...);

ОбщийМодульКакЯХочу.УстановитьПараметрыОтчета(ФормаОтчета.Объект, СкдПараметрыКакЯХочу, Неопределено);


....

Процедура УстановитьПараметрыОтчета(ЭтотОбъект, СкдПараметры, Настройки=Неопределено) Экспорт
   
   Если Настройки = Неопределено Тогда
       ЗначенияПараметровДанныхКД = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных;
   Иначе    
       ЗначенияПараметровДанныхКД = Настройки.ПараметрыДанных;
   КонецЕсли;
   
   Для каждого ЭлементСтруктуры Из СкдПараметры Цикл
       
       ЗначениеПараметраКД = ЗначенияПараметровДанныхКД.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ЭлементСтруктуры.Ключ));
       Если ЗначениеПараметраКД <> Неопределено Тогда
           ЗначениеПараметраКД.Значение      = ЭлементСтруктуры.Значение;
           ЗначениеПараметраКД.Использование = Истина;
       КонецЕсли;
       
   КонецЦикла;
   
КонецПроцедуры
10 sanja26
 
20.12.12
23:05
"Остновной"
11 sanja26
 
20.12.12
23:07
(0) пользовательские настройки компоновки данных не пробовал заполнять?
12 эцп
 
21.12.12
14:26
(9) А как сформировать отчет автоматически в данном случае?
Дело в том, что отчет открывается сформированный без отборов, при этом отборы установлены и висит надпись с предложением нажать кнопку "Сформировать". Нажмешь - отчет сформируется
13 эцп
 
21.12.12
14:57
(9) Убрал в ПараметрыФормы свойство "СформироватьАвтоматически" - теперь отчет открывается не сформированным и с установленными отборами. Осталось как-то программно нажать кнопку "Сформировать"
14 vmv
 
21.12.12
15:10
(12) открой палитру свойств УФ-форма

и свойство

АвтоОтображениеСостояния уствнови в "Отображать при выполнении" тогда не будет тупого сообщения "Сформировать" серым кругом

сформировать программно можно так

&НаСервере
Функция ОтчетОбновить(ОтчетИмя, СкдПараметры)
   
   // РФ_ТабДок                    - реквизит формы типа "табличный документ"
   // РФ_ТабДокДанныеРасшифровкиКд - реквизит формы типа "строка"
   // Это может быть форма отчета или любая другая где необходимы данные этого отчета на форме в табличном документе
   
   ОтчетОбъект = Отчеты[ОтчетИмя].Создать();
   Add_ComM_ТИССервер.УстановитьПараметрыОтчета(ОтчетОбъект, СкдПараметры);
       
   ДанныеРасшифровкиКд = Новый ДанныеРасшифровкиКомпоновкиДанных;
   ОтчетОбъект.СкомпоноватьРезультат(РФ_ТабДок, ДанныеРасшифровкиКд);
   РФ_ТабДокДанныеРасшифровкиКд = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиКд, ЭтаФорма.УникальныйИдентификатор);
   
   // Терминация объектных и коллекционных переменных
   ОтчетОбъект = 0;
   
   Возврат Истина;
   
КонецФункции

и никакие формы отчета не нужны, если точно не нужно какойто спецформы, а нужен результат компоновки с расшифровкой
15 vmv
 
21.12.12
15:13
"программно нажать кнопку "Сформировать"" - это

ОтчетОбъект.СкомпоноватьРезультат();

Читай СП, свободен, т.к уже можно считать тебя подаваном УФ-отчетов, если воткнул
16 эцп
 
21.12.12
15:55
(14) Нужно открыть управляемую форму отчета на СКД с установленными пользовательскими настройками (параметры СКД и отборы).
С твоими предложениями получился следующий вариант:


ПараметрыФормы = Новый Структура("КлючНазначенияИспользования", "Основной");
Форма = ПолучитьФорму("Отчет.МойОтчет.Форма", ПараметрыФормы);

КомпоновщикНастроекКомпоновкиДанных = Форма.Отчет.КомпоновщикНастроек;
ПН = КомпоновщикНастроекКомпоновкиДанных.ПользовательскиеНастройки;
//Могут быть и другие отборы. Их нужно отключить
Для Каждого Элемент Из ПН.Элементы Цикл Элемент.Использование = Ложь; КонецЦикла;

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

ЭлементОтбора = КомпоновщикНастроекКомпоновкиДанных.Настройки.ПараметрыДанных.Элементы.Найти("ПериодОтчета");
Элемент = ПН.Элементы.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки);
Элемент.Значение = Новый СтандартныйПериод(НачДата, КонДата);
Элемент.Использование = Истина;

Форма.СкомпоноватьРезультат(РежимКомпоновкиРезультата.Авто); ОткрытьФорму(Форма);