Версия для печати темы (https://pro1c.org.ua/index.php?s=bfe91482148d8766a9527d444ab488e5&showtopic=40252)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Система компоновки данных _ Программно установить значение параметра СКД в отчете

Автор: Constantus 14.09.17, 9:17

Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

Имеется отчет на СКД. Один из параметров отчета "Регион"

ГДЕ
    ЗаказПокупателя.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
    И ЗаказПокупателя.Контрагент.Регион = &Регион


Имеется форма отчета (зачем-то я ее сделал когда-то управляемой формой)

Как можно установить значение параметра "Регион" в отчете, взяв его из Констант, чтобы он каждый раз отображался при открытии?

Регион = Константы.ТекущийРегион.Получить();


Автор: Vidocq05 14.09.17, 10:32

Constantus @ Сегодня, 10:17 * ,
попробуйте так:

Процедура ПриОткрытии()

    ПараметрДанных= КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Регион");    

    ПараметрДанных.Значение = Константы.ТекущийРегион.Получить();

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

КонецПроцедуры

Автор: Constantus 14.09.17, 10:39

Vidocq05 @ Сегодня, 13:32 * ,

Проблема заключается в том, что сама форма отчета - управляемая форма...

Приведенный код срабатывает на обычной форме отчета...

Пробовал аналогичный код вставить для управляемой формы - не работает, выдает естественно кучу ошибок...

Автор: sava1 14.09.17, 10:41

В параметрах Скд Выражение - прям так и пишите % Константы.....Получить()

Автор: Constantus 14.09.17, 10:49

sava1 @ Сегодня, 13:41 * ,

Хитро... Но либо не понял, либо не получилось, либо комплексно затупил...

С другой стороны, суть в том, что код будет более ветвистый, типа если не в константе не прописано значение, то бери из настроек пользователя, иначе бери предустановленный...

Код для обычной формы отчета сработал на ура...

Настройки = КомпоновщикНастроек.Настройки;
Значен = Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных("Регион"));
Значен.Значение = Константы.ТекущийРегион.Получить();
Значен.Использование = Истина;


Но для управляемой судя по всему требуется другой код обращения к настройкам

Автор: Vidocq05 14.09.17, 11:26

Цитата(Constantus @ 14.09.17, 11:39) *
Проблема заключается в том, что сама форма отчета - управляемая форма...

Приведенный код срабатывает на обычной форме отчета...

Сори. Не обратил внимания.
Я в упровляемых формах не силен, но все таки, а если так:

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

&НаСервереБезКонтекста
Процедура УстановитьПараметрСервер()

   Настройки = КомпоновщикНастроек.Настройки;
   Значен = Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных("Регион"));
   Значен.Значение = Константы.ТекущийРегион.Получить();
   Значен.Использование = Истина;

КонецПроцедуры

Ну или может так:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

   Настройки = КомпоновщикНастроек.Настройки;
   Значен = Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных("Регион"));
   Значен.Значение = Константы.ТекущийРегион.Получить();
   Значен.Использование = Истина;

КонецПроцедуры

Автор: Constantus 14.09.17, 11:32

Vidocq05 @ Сегодня, 14:26 * ,

Эти методы тоже пробовал... Не работают, даже при отладке в первом случае не обращается... во втором ничего не меняет

Автор: podcast 14.09.17, 13:10

Constantus @ Сегодня, 12:32 * ,
А почему вы не получите значение константы в запросе?

Автор: info230a02 14.11.17, 10:12

Constantus @ 14.09.17, 11:32 * ,
Наверное уже неактуально, но все же:
Нужен контекст формы (почему: пока не знаю)
Посему

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

и
&НаСервереБезКонтекста
Процедура УстановитьПараметрСервер()

ничего не меняют
А если
&НаСервере
Процедура УстановитьПараметрСервер()

и вместо
   Настройки = КомпоновщикНастроек.Настройки;
   Значен = Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных("Регион"));
   Значен.Значение = Константы.ТекущийРегион.Получить();
   Значен.Использование = Истина;;

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

Тогда все работает

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua