powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / СКД параметры редактирования программно (8.2 УП)
21 сообщений из 21, страница 1 из 1
СКД параметры редактирования программно (8.2 УП)
    #38493556
_eldar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Есть отчет на СКД, в нем есть параметр с типом справочник. Хочу программно установить у этого параметра параметры редактирования, а в частности параметр выбора (отбор.наименование). Когда я устанавливаю отбор для параметра в СКД на вкладке параметры, все работает. Мне необходимо установить отбор по списку значений. Вбивать все необходимые значения долго и самое главное не гибко. Вот и решил установить отбор у параметра программно. Делаю так:
Создал форму отчета и в модуле формы следующий код:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    УстановитьПараметрВыбора(); 
    
КонецПроцедуры
 
&НаСервере
Процедура УстановитьПараметрВыбора()
    
    СКД = Отчеты.МойОтчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    
    ПараметрСОтбором = СКД.Параметры.Найти("ПараметрСОтбором");
    ПараметрВыбора = ПараметрСОтбором.ПараметрыРедактирования.Элементы.Найти("ПараметрыВыбора");
    ПараметрВыбора.Значение.Добавить();
    СписокДоступныхЗначений = СписокДоступныхЗначений();
    ПараметрВыбора.Значение[0].Имя = "Отбор.Наименование";  
    ПараметрВыбора.Значение[0].Значение = СписокДоступныхЗначений;
    ПараметрВыбора.Использование = Истина;
    
КонецПроцедуры


В данном случае отбор в параметре не работает. Смотрел отладчиком - все устанавливается правильно. Что я делаю не так? Такое ощущение что нужно внести сделанные мною изменения в переменной СКД в основную схему компоновки данных. Такого метода я не нашел. В синтаксис-помощнике написано:
ОбъектМетаданных: Отчет (MetadataObject: Report)
ОсновнаяСхемаКомпоновкиДанных (MainDataCompositionSchema)
Использование:Только чтение.
Вообще возможно установить параметры редактирования программно или я зря стараюсь. Если возможно, то что я делаю не так?
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38493739
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПараметрВыбора.Значение[0].Содержит = ВидСравнениякомпоновкиДанных.Содержит

ПараметрВыбора.Значение[0].ПравоеЗначение=СписокДоступныхЗначений

а вообще здесь возьми лучше процедуру - она не идеально, но описана существенно лучше.

http://1cskd.ru/2010/06/kak_izmenit_otbor_programmno/
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38497841
_eldar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист 1с,

Так не работает:
Код: pascal
1.
2.
ПараметрВыбора.Значение[0].Содержит = ВидСравнениякомпоновкиДанных.Содержит
ПараметрВыбора.Значение[0].ПравоеЗначение=СписокДоступныхЗначений


Т.к. в параметрах редактирования нет полей "Содержит" и "ПравоеЗначение".
А по ссылке, там описывается как изменить программно отбор у отчета, а мне надо изменить отбор в параметрах редактирования параметра отчета.
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38498052
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПараметрВыбора.Значение[0].Параметр=Новый ПараметрКомпоновкиДанных(??? Может "Отбор.Наименование")


Тип какой у ПараметрВыбора.Значение.Добавить()? И посмотри все его свойства.
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38499391
_eldar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист 1с,

Тип у "ПараметрВыбора.Значение.Добавить()" - ПараметрыВыбораКомпоновкиДанных. Конструктора нет. Создал 2 параметра редактирования, один программно, а другой нет и сравнил отладчиком. Все один в один. Такое ощущение, что все мои программные изменения остаются в переменной СКД, а ОсновнаяСхемаКомпоновкиДанных остается без изменений. При просмотре методов переменной СКД нашел метод "Записать()". Все компилиться, но при запуске пишет, что такой метод не обнаружен (Сильно не пинай, я нуб).
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38500411
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_eldar_, если они точно один в один то проблема в другом.

В модуле отчета процедура прикомпоновкерезультата()

Там можно устанавливать параметры в текущую схему компоновки.


ps Меня смущает ПараметрВыбора.Значение[0].Имя = "Отбор.Наименование"; Точно тип строка при ручном добавлении?


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

СтандартнаяОбработка = Ложь;

Настройки = КомпоновщикНастроек.Настройки;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

ДокументРезультат.Очистить();

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38501728
_eldar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист 1с,
В том то и дело, что мне необходимо изменить отбор у параметра при открытии отчета, а не при его компоновке. Т.е. пользователь открыв отчет, выбирает нужное значение параметра из списка значений, который(список значений) сделан программно и только затем запускает отчет.
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38501732
pail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_eldar_,
Значит,делать свою форму для отчета, где и рулить нужными параметрами.
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38501910
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется нашел.


НоваяСхема = ПолучитьМакет(<ИмяСхемы>);


//здесь ваши изменения.

Отчет.СхемаКомпоновкиДанных = НоваяСхема;
Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НоваяСхема.НастройкиПоУмолчанию);


Таким образом можно менять текущую схему компоновки отчета из формы.
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38502993
_eldar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист 1с,
авторНоваяСхема = ПолучитьМакет(<ИмяСхемы>);


//здесь ваши изменения.

Отчет.СхемаКомпоновкиДанных = НоваяСхема;
Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НоваяСхема.НастройкиПоУмолчанию);

Так не работает. По крайней мере в 8.2 Управляемом приложении.

Воспроизвел данную проблему в новой информационной базе с одним справочником и одним отчетом для примера и выгрузил в файл 1cv8.dt(15КБ). Параметр "Номенклатура" должен вываливать список из 2-ух наименований(Принтер и Клавиатура), но не работает(. Может на данном примере получится решить эту задачу.
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38503149
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вечером посмотрю.
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38504294
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТекОтчет=РеквизитФормыВЗначение("Отчет");
СКД=ТекОтчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

ПараметрСОтбором = СКД.Параметры.Найти("Номенклатура");
ПараметрВыбора = ПараметрСОтбором.ПараметрыРедактирования.Элементы.Найти("ПараметрыВыбора");

ПараметрВыбора.Использование = Ложь;

НовыйОтбор=ПараметрВыбора.Значение.Добавить();
СписокДоступныхЗначений = СписокДоступныхЗначений();
НовыйОтбор.Имя = "Отбор.Наименование";
НовыйОтбор.Значение = СписокДоступныхЗначений;

ПараметрВыбора.Использование = Истина;

ЗначениеВРеквизитФормы(ТекОтчет,"Отчет");

Все работает.

ps
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Номенклатура
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование В (""Принтер"", ""Клавиатура"")";

Выборка = Запрос.Выполнить().Выбрать();


Пока Выборка.Следующий() Цикл
СписокЗначений.Добавить(Выборка.Номенклатура);
КонецЦикла;

Возврат СписокЗначений;

Как пример - здесь обычно пишут по другому.
СЗ=Новый СписокЗначений;
СЗ.Загрузить(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номенклатура"))
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38504461
_eldar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист 1с, спасибо за ответ. Но у меня не работает...
Я добавил отладочные сообщения и выложил новый файл 1cv8.dt. Также добавил кнопку "Отладка", которая показывает текущие параметры выбора. Не пойму почему так, но отладчиком видно что СКД отчета при вызове процедуры "ЗначениеВРеквизитФормы" не изменяется.
А можно вашу dt-шку в которой все работает?
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38504481
_eldar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проверил еще так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
ТекОтчет = РеквизитФормыВЗначение("Отчет");

// изменения скд
.......

// переменная ТекОтчет содержит изменения СКД
ЗначениеВРеквизитФормы(ТекОтчет,"Отчет"); 

// Считываю занового реквизит "Отчет" и
// переменная ТекОтчет НЕ содержит изменения СКД
ТекОтчет = РеквизитФормыВЗначение("Отчет");
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38504527
_eldar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист 1с,
Такое ощущение что у нас платформы разные. У меня нет метода "Загрузить" в СпискеЗначений, только аналогичный метод "ЗагрузитьЗначения"
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38504630
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_eldar_Программист 1с,
Такое ощущение что у нас платформы разные. У меня нет метода "Загрузить" в СпискеЗначений, только аналогичный метод "ЗагрузитьЗначения"

это мелочи в данном случае... суть не меняется
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38504817
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_eldar_Программист 1с,
Такое ощущение что у нас платформы разные. У меня нет метода "Загрузить" в СпискеЗначений, только аналогичный метод "ЗагрузитьЗначения"Да - загрузитьзначения. Писал просто по памяти. Обычно набираешь пару первых символов - а "заг" - а дальше он сам ставит загрузитьзначения.
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38504822
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_eldar_Программист 1с, спасибо за ответ. Но у меня не работает...
Я добавил отладочные сообщения и выложил новый файл 1cv8.dt. Также добавил кнопку "Отладка", которая показывает текущие параметры выбора. Не пойму почему так, но отладчиком видно что СКД отчета при вызове процедуры "ЗначениеВРеквизитФормы" не изменяется.
А можно вашу dt-шку в которой все работает?Странно - сейчас проверю - выложу.
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38505383
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, за интересный вопрос. Разобрался с ним до конца.


&НаКлиенте
Процедура ПриОткрытии(Отказ)
УстановитьПараметрВыбора();
КонецПроцедуры

&НаСервере
Функция СписокДоступныхЗначений()
СписокЗначений = Новый СписокЗначений;

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование В (""Принтер"", ""Клавиатура"")";

СписокЗначений.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
Возврат СписокЗначений;
КонецФункции

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

ПараметрСОтбором = СКД.Параметры.Найти("Номенклатура");
ПараметрВыбора = ПараметрСОтбором.ПараметрыРедактирования.Элементы.Найти("ПараметрыВыбора");

НовыйОтбор=ПараметрВыбора.Значение.Добавить();
НовыйОтбор.Имя = "Отбор.Ссылка";
НовыйОтбор.Значение = СписокДоступныхЗначений();

ПараметрВыбора.Использование = Истина;

АдресСхемы = ПоместитьВоВременноеХранилище(СКД, УникальныйИдентификатор);

ТекОтчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
ТекОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);

ЗначениеВРеквизитФормы(ТекОтчет,"Отчет");
КонецПроцедуры
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38505386
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот код возволяет менять текущую схему компоновки данных в форме отчета, а не при компоновке результата.
...
Рейтинг: 0 / 0
СКД параметры редактирования программно (8.2 УП)
    #38505992
_eldar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист 1с , ОГРОМНОЕ СПАСИБО! Все работает. Буду разбираться с временным хранилицем.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / СКД параметры редактирования программно (8.2 УП)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]