Имя: Пароль:
1C
 
СКД. Программная установка параметров в управляемой форме отчета. Как?
0 fisher
 
12.01.11
11:46
Собссно, сабж.
1 also
 
12.01.11
12:00
А как в неуправляемой не получается?
2 fisher
 
12.01.11
12:06
У меня - нет :)
Вот ищу, кто бы руки вправил...
3 also
 
12.01.11
12:08
(2) может поподробнее? Что не получается? Как пробовал?
4 also
 
12.01.11
12:15
Да все также:

   Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаНачала").Использование = Истина;
   Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаНачала").Значение = БлаБла;
5 fisher
 
12.01.11
12:22
Кажись, сообразил/вспомнил. Просто когда-то уже долбался с этой хренью, а сейчас опять встала задача, но уже подзабыл в чем проблема была... Тогда таки получалось менять настройки, заменив стандартную кнопку "Сформировать" на свою (командную панель тоже пришлось нестандартную ставить). И по этой кнопке перед компоновкой отчета устанавливал нужные параметры через компоновщик. Но тогда при смене варианта эта сволочь писала ""Вариант отчета был изменен. Сохранить измененный вариант?" и я не мог от этого избавиться.
А сейчас разул глаза - вижу есть свойство "ВариантМодифицирован". По идее, его можно сбросить...
6 fisher
 
12.01.11
12:29
(4) Кстати, уже добавили гламурный метод

УстановитьЗначениеПараметра(<Параметр>, <Значение>)
Параметры:

<Параметр> (обязательный)

Тип: Строка; ПараметрКомпоновкиДанных. Имя параметра или параметр компоновки данных, значение которого нужно установить.
<Значение> (обязательный)

Значение, которое нужно установить.
7 fisher
 
12.01.11
12:30
Описание:

Устанавливает значение параметра и включает свойство Использование. Если параметр с указанным именем не найден, будет вызвано исключение.

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

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
8 Beans
 
12.01.11
12:58
а вот пользвоательской настройке мне не удалось установить тип "Граница".

{Отчет.МойОтчет2.МодульОбъекта(63)}: Ошибка при установке значения атрибута контекста (Дата)
   ПараметрПользовательскойНастройки.Значение.Дата  = Граница;
по причине:
Несоответствие типов

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

   Параметры = Новый Массив(2);
   Параметры[0] = КонецДня(ТекущаяДата());
   Параметры[1] = ВидГраницы.Включая;
   Граница = Новый(Тип("Граница"),Параметры);

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

КонецПроцедуры
9 fisher
 
12.01.11
14:11
(8) Гм... А мне удалось...
10 Beans
 
12.01.11
14:27
мене тоже удалось , только перед созаданием пользовательской настройки надо параметру то же присвоить тип граница

Параметры = Новый Массив(2);
   Параметры[0] = КонецДня(ТекущаяДата());
   Параметры[1] = ВидГраницы.Включая;
   Граница = Новый(Тип("Граница"),Параметры);

ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаОтчета");
ПараметрДанных.Использование = Истина;
ПараметрДанных.Значение  = Граница;    
   
ПараметрПользовательскойНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ПараметрДанных.ИдентификаторПользовательскойНастройки);
   
ПараметрПользовательскойНастройки.Использование = Истина;
ПараметрПользовательскойНастройки.Значение  = Граница;
11 fisher
 
12.01.11
15:17
(10) Границу можно и проще инициализировать:

Новый Граница(МояДата, ВидГраницы.Включая);

ИМХО, границу в пользовательских настройках некрасиво использовать. Мне кажется, лучше в пользовательских настройках оставлять дату, а оттуда уже транслировать как границу в окончательные настройки при компоновке.

Спасибо за пример, кстати. Помог разобраться. Почему-то был уверен, что ПриКомпоновкеРезультата() отрабатывает уже после компоновки. Параметр ДокументРезультат ввёл в заблуждение. Очевидно, он нужен только при нестандартной компоновке.
12 fisher
 
12.01.11
16:50
(10) Кстати. Программные изменения пользовательских настроек отчета не отражаются в интерактивном окне доступа к пользовательским настройкам. ОбновитьОтображениеДанных() не помогает. Есть идеи?
13 fisher
 
12.01.11
16:51
Тьфу. Не ОбновитьОтображениеДанных(), а ОтобразитьИзменениеДанных()
14 fisher
 
12.01.11
16:52
Блин. Таки первое. Конец дня сказывается :)
15 Beans
 
12.01.11
20:01
ПараметрНоменклатура = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ВыбНоменклатура");
ПараметрПользНоменклатура = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ПараметрНоменклатура.ИдентификаторПользовательскойНастройки);
Если ПараметрПользНоменклатура <> Неопределено Тогда
ПараметрПользНоменклатура.Использование = Истина;
ПараметрПользНоменклатура.Значение= Справочники.Номенклатура.НайтиПоНаименованию("Веник");
КонецЕсли;
   
// сохраняем настройки
Настройки = ХранилищеСистемныхНастроек;
КлючОбъекта ="Отчет.МойОтчет2/Основной/ТекущиеПользовательскиеНастройки";
ИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;

ПН =   КомпоновщикНастроек.ПользовательскиеНастройки;
Настройки.Сохранить(КлючОбъекта,"",ПН,,ИмяПользователя);
16 Beans
 
12.01.11
20:03
если че то в пользовательском режиме изменил, размеры формы, настройки отчета .... - хрен потом програмно изменишь.
17 fisher
 
13.01.11
10:54
(16) Параметры в пользовательских настройках нормально меняются параллельно - интерактивно и программно. И так и эдак применяется. Если последний раз менялось программно и взвести флаг изменения пользовательских настроек - при закрытии отчета они нормально сохраняются и при последующем открытии считываются. Так что всё ОК, кроме того, что я уже сказал - при программном изменении не могу сообразить как обновить измененные параметры в окне пользовательских настроек. Они там остаются старые (отчет формируется нормально - уже по новым).
18 fisher
 
13.01.11
10:58
(15) Не-не-не. Этот костыль не нужен. Достаточно просто
ПользовательскиеНастройкиМодифицированы = Истина;
Они будут сохранены штатно в рамках текущего варианта отчета.
19 fisher
 
13.01.11
11:04
Вообще СКД достаёт своим избыточным многообразием объектной модели. Многие служебные объекты явно можно было унифицировать. А так - куча похожих коллекций и каждая, *ука, со своими мелкими отличиями...
20 fisher
 
13.01.11
11:06
И прямо везде сквозит забота о разработчике.
Это очень показательный пример:

ПараметрНоменклатура = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ВыбНоменклатура");
ПараметрПользНоменклатура = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ПараметрНоменклатура.ИдентификаторПользовательскойНастройки);
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс