СКД. Установить параметр из формы отчета

1. MikhailDr 18.05.23 14:40 Сейчас в теме
Здравствуйте форумчане. Платформа 8.3.22.1709. Создан простой отчет. Мне надо чтобы пользователь мог устанавливать отборы из типовой формы отчета. Для этого при изменении реквизита вызывается следующая процедура.

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


Но отчет формируется пустым. Если тоже самое сделать в процедуре "ПриКомпоновкеРезультата" то все работает, а в форме нет.
По теме из базы знаний
Найденные решения
14. user1312100 200 19.05.23 16:51 Сейчас в теме
(13)По моему не получится. Я же Вам код отправлял для обычных форм. А у Вас управляшки...
Для учебы, предлагаю создать свой отчет, максимально простой, в котором видны параметры, на нем научиться заполнять параметры и только затем переходить к нужному...
И не забывайте, что параметры могут быть включены в пользовательские настройки, причем пользовательские в этом случае имеют приоритет, поэтому их заполнять тоже надо.
&НаСервере
Процедура ПолеВыбораПриИзмененииНаСервере()
	//установим параметр
	Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Параметр1");
	//тут можно проверить, а найден ли параметр, но на Ваше усмотрение
	Параметр.Значение = ПолеВыбора;
	Параметр.Использование = Истина;
	//отобразим его в пользовательских настройках
	//можно проверить перед этим что установка  была успешна: Если ЗначениеЗаполнено(Параметр.ИдентификаторПользовательскойНастройки) Тогда, но это на Ваше усмотрение
	ПользовательскийПараметр = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Параметр.ИдентификаторПользовательскойНастройки);
	//можно проверить: на ТипЗнч(ПользовательскийПараметр) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных"), но это на Ваше усмотрение
	ПользовательскийПараметр.Значение = Параметр.Значение;
	ПользовательскийПараметр.Использование = Истина;
КонецПроцедуры

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

Пример прикрепляю...
Прикрепленные файлы:
Простой отчет.erf
dudmax; MikhailDr; +2 Ответить
4. user-z99999 67 18.05.23 15:29 Сейчас в теме
(3)
можно это посмотреть
https://infostart.ru/1c/articles/403586/

И ещё

Допустим есть отчет на СКД с параметрами «Начало», «Окончание», формат — дата. Программно зададим значения данных параметров.

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

Обновляем программу, открываем режим 1С предприятие, проверяем результат.
Также можно в настройках СКД, на вкладке «Другие настройки» отметить галочку «Выводить параметры». Заданные параметры будут отображаться под заголовком отчета, что облегчит тестирование.

В большинстве случаем при установке значения параметра достаточно стандартного интерфейса схемы компоновки данных. Но иногда возникают нестандартные случаи, когда необходимо установить параметр по условию, или возникла ситуация, когда отчет был сформирован программно.
user_2010; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user-z99999 67 18.05.23 15:14 Сейчас в теме
(1)
А так, в настройках, не подходит?
Прикрепленные файлы:
3. MikhailDr 18.05.23 15:18 Сейчас в теме
(2) Мне надо устанавливать настройки именно из формы. Там в последствии будут отдельные вызываемые формы для отборов. Короче много нюансов, но пока я столкнулся на первом шаге.
4. user-z99999 67 18.05.23 15:29 Сейчас в теме
(3)
можно это посмотреть
https://infostart.ru/1c/articles/403586/

И ещё

Допустим есть отчет на СКД с параметрами «Начало», «Окончание», формат — дата. Программно зададим значения данных параметров.

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

Обновляем программу, открываем режим 1С предприятие, проверяем результат.
Также можно в настройках СКД, на вкладке «Другие настройки» отметить галочку «Выводить параметры». Заданные параметры будут отображаться под заголовком отчета, что облегчит тестирование.

В большинстве случаем при установке значения параметра достаточно стандартного интерфейса схемы компоновки данных. Но иногда возникают нестандартные случаи, когда необходимо установить параметр по условию, или возникла ситуация, когда отчет был сформирован программно.
user_2010; +1 Ответить
5. MikhailDr 18.05.23 15:43 Сейчас в теме
(4) Да, это работает.

Но странно, почему в типовой форме отчета тогда есть "КомпоновщикНастроек". Зачем он вообще нужен, если все параметры можно установить только в процедуре "При ПриКомпоновкеРезультата"
6. user1312100 200 19.05.23 11:18 Сейчас в теме
(1)То что Вы пытаетесь сделать, это установка параметров. На форме это делается так, например перед открытием занесем в параметр "Параметр1" число 111:
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
	Настройки = КомпоновщикНастроек.Настройки;
	Параметр = Настройки.ПараметрыДанных.Элементы.Найти("Параметр1");
	Параметр.Значение = "111";
	Параметр.Использование = Истина;
КонецПроцедуры

Но Вы просили отборы...А это несколько иное...Вот пример отбора по иерархии:
	Включено = Новый СписокЗначений;
	Включено.Добавить(Справочники.Номенклатура.НайтиПоКоду("00000003428"));//сырье
	Включено.Добавить(Справочники.Номенклатура.НайтиПоКоду("00000004867"));//Тушка кур 1 сорт фас. (зам.)		
	ПолеОтбора = Новый ПолеКомпоновкиДанных("Номенклатура");
	Отбор = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии;
	Отбор.ЛевоеЗначение = ПолеОтбора;
	Отбор.ПравоеЗначение = Включено;
Показать
Прикрепленные файлы:
ВнешнийОтчет1.erf
7. MikhailDr 19.05.23 12:24 Сейчас в теме
(6) Я как раз и пытался поставить параметр по первой процедуре и ничего не получалось. СКД игнорировал то что было установлено.
8. user1312100 200 19.05.23 12:40 Сейчас в теме
(7)Нажав настройки, можно увидеть установился ли параметр или нет
Прикрепленные файлы:
9. MikhailDr 19.05.23 13:56 Сейчас в теме
(8) У меня в режиме пользователя параметры недоступны. Ну т.е. отборы, условное оформление и прочее я вижу, а параметров нет.
Прикрепленные файлы:
10. user1312100 200 19.05.23 15:08 Сейчас в теме
(9)Ой ёй, у Вас еще и управляшки...С этого и нужно было начинать...Там же весь код надо писать на сервере...
...покопайтесь в кнопке "Еще"! И на крайняк, параметры, можно увидеть отладчиком...

И Вы хоть отпишитесь, у Вас получилось задуманное или нет?
11. MikhailDr 19.05.23 15:18 Сейчас в теме
(10) Да, получилось, я отметил правильный ответ в теме. Там суть в том, что на клиенте ты сохраняешь параметры, а потом обращаешься к ним при компоновке результата.
12. user1312100 200 19.05.23 15:27 Сейчас в теме
(11)Не хочу Вас разочаровывать, но не у каждого отчета есть процедура компоновки.... Что в таком случае собираетесь делать? Желательно научиться параметры менять до нажатия кнопки сформировать, а не во время выполнения.
13. MikhailDr 19.05.23 15:43 Сейчас в теме
(12) Я так и хотел, но вот пока не получается. В пн попробую по вашему способу.
14. user1312100 200 19.05.23 16:51 Сейчас в теме
(13)По моему не получится. Я же Вам код отправлял для обычных форм. А у Вас управляшки...
Для учебы, предлагаю создать свой отчет, максимально простой, в котором видны параметры, на нем научиться заполнять параметры и только затем переходить к нужному...
И не забывайте, что параметры могут быть включены в пользовательские настройки, причем пользовательские в этом случае имеют приоритет, поэтому их заполнять тоже надо.
&НаСервере
Процедура ПолеВыбораПриИзмененииНаСервере()
	//установим параметр
	Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Параметр1");
	//тут можно проверить, а найден ли параметр, но на Ваше усмотрение
	Параметр.Значение = ПолеВыбора;
	Параметр.Использование = Истина;
	//отобразим его в пользовательских настройках
	//можно проверить перед этим что установка  была успешна: Если ЗначениеЗаполнено(Параметр.ИдентификаторПользовательскойНастройки) Тогда, но это на Ваше усмотрение
	ПользовательскийПараметр = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Параметр.ИдентификаторПользовательскойНастройки);
	//можно проверить: на ТипЗнч(ПользовательскийПараметр) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных"), но это на Ваше усмотрение
	ПользовательскийПараметр.Значение = Параметр.Значение;
	ПользовательскийПараметр.Использование = Истина;
КонецПроцедуры

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

Пример прикрепляю...
Прикрепленные файлы:
Простой отчет.erf
dudmax; MikhailDr; +2 Ответить
15. MikhailDr 22.05.23 07:46 Сейчас в теме
(14) Спасибо за помощь. Это все действительно работает. Моя ошибка была в том, что я устанавливал параметры, но не дублировал их в пользовательские настройки.

Добавлю один момент для тех кто потом будет читать. Для того, чтобы установить параметры при открытии отчета, надо поставить процедуру установки параметров не в событие "ПриСозданииНаСервере", а в событии "ПриОткрытии".
16. user1312100 200 22.05.23 07:53 Сейчас в теме
(15)Можно ответ отметить, как решение...
А я то думал, Вы при изменении реквизита параметры меняете...
Да, между ПриСозданииНаСервере и ПриОткрытии выполняется восстановление пользовательских настроек...
Удачи!
17. MikhailDr 22.05.23 07:58 Сейчас в теме
(16) Я и при создании меняю и при изменении настроек на самой форме.

Три параметра у меня фиксированы, их пользователь менять не сможет, а вот остальные два пусть меняет сам.
18. MikhailDr 22.05.23 15:43 Сейчас в теме
(16) Может вы еще подскажете. Мне надо вывести диаграмму со средним значением по количеству командировок. В консоле запросов я это делаю очень легко, а вот в СКД у меня не получается. Отчет игнорирует то, что я указываю в ресурсе формулу "среднее" и считает только сумму. Не могу понять, что я делаю не так.

Отчет вы у себя вряд ли откроете, там у меня самописный регистр используется. Но сам текст запроса простой, главное я не могу понять, почему система игнорирует формулу в ресурсах.
Прикрепленные файлы:
ТестСКД.erf
19. user1312100 200 22.05.23 16:07 Сейчас в теме
(18)И правда, с диаграммой не помогу. Могу посоветовать вывести сначала в таблицу и убедиться, что данные присутствуют и они верны, и только затем пытаться сделать диаграмму
20. MikhailDr 23.05.23 07:16 Сейчас в теме
(19) Так они и в таблице не верны. Тут суть даже не в самой диаграмме. Я не могу посчитать среднее даже в таблице. Даже если делаю группировку в запросе, СКД игнорирует ее и считает сумму.
21. user1312100 200 23.05.23 07:43 Сейчас в теме
(20)Жаль нет Вашей базы попробовать. Возможно следует у ресурса поиграться с полем "рассчитывать по"
22. MikhailDr 23.05.23 08:03 Сейчас в теме
(21) Я попробовал все возможные варианты с рассчитывать по. Там все таки конечное количество комбинаций)))

Сейчас сделал через костыль. В отдельном пакете запроса рассчитываю максимальный номер автозаписи по всем месяцам и делю сумму командировок на это значение.

Меня даже посещали мысли что тут глюк платформы. Первый раз вижу, чтобы СКД сам пересчитывал данные. В запросе все считается правильно, а вставляешь в СКД и получаешь совсем другие данные.
23. MikhailDr 23.05.23 10:09 Сейчас в теме
(21) Погуглил еще. Есть такая проблема - при компоновке результат СКД может изменить итоговый запрос для оптимизации. Это может приводить к ошибкам, как произошло у меня. Есть несколько костыльных вариантов решения проблемы, но самый надежный способ это создание внешнего источника данных.

Собственно с ним у меня данные встали корректно.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот