Программная работа с параметрами СКД

1. SantiouS 16.05.19 09:16 Сейчас в теме
Подскажите пожалуйста как происходит добавление поля параметра на форму отчёта сделанного с помощью СКД? (в конфигураторе данного поля нет).
Я знаю что установил галочку возле "Включать в пользовательские настройки", но вот интересует на каком этапе эта галочка при открытии формы проверяется...Надеюсь суть вопроса понятна :)
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
2. dandykry 10 16.05.19 09:23 Сейчас в теме
10. dandykry 10 16.05.19 09:55 Сейчас в теме
(9)

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

СтандартнаяОбработка = Ложь;
	
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();


И потом в НастройкиОтчета.ПараметрыДанных.Элементы

http://prntscr.com/np832y
SantiouS; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dandykry 10 16.05.19 09:23 Сейчас в теме
5. SantiouS 16.05.19 09:35 Сейчас в теме
(2) Да, именно.
Допустим у меня есть параметр строковый (он представляется стандартно в форме отчёта как галочка и поле ввода строки). Я нашел что при открытии, к примеру, строка вписывается в элемент формы:
ЭтаФорма.Элементы.КомпоновщикНастроекПользовательскиеНастройкиЭлемент0Значение

Как потом с этого элемента формы значение передается в Настройки СКД? В процедуре "ПриКомпоновкеРезультата" в:
Настройки=КомпоновщикНастроек.Настройки;
пустые настройки, как это значение с поля формы попадает в СКД?
7. dandykry 10 16.05.19 09:43 Сейчас в теме
(5) Не совсем. Элементы формы, которые генерирует платформа в этой группе сразу ссылаются на Отчет.КомпоновщикНастроек.ПользовательскиеНастройки
9. SantiouS 16.05.19 09:53 Сейчас в теме
(7) Если они сразу ссылаются на Компоновщик настроек, то почему в процедуре "ПриКомпоновкеРезультата" в "КомпоновщикНастроек.ПараметрыДанных.Элементы" значение возле параметра пустое, хотя в форме оно задано?
Где искать значение параметра в процедуре "ПриКомпоновкеРезультата"?
10. dandykry 10 16.05.19 09:55 Сейчас в теме
(9)

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

СтандартнаяОбработка = Ложь;
	
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();


И потом в НастройкиОтчета.ПараметрыДанных.Элементы

http://prntscr.com/np832y
SantiouS; +1 Ответить
11. dandykry 10 16.05.19 09:57 Сейчас в теме
(9) Вы можете мне сказать, какую задачу решаете, я вам подскажу как это сделать правильнее, или соглашусь с вашим вариантом.
12. SantiouS 16.05.19 10:03 Сейчас в теме
(11) Я хочу разобраться с тем, как работают параметры в СКД. Сейчас я изучаю набор данных "Объект" и столкнулся с тем что у в процедуре "ПриКомпоновкеРезультата" я делаю свой запрос, после передавая его в СКД - все работает, но запрос без параметров.
Теперь я хочу добавить параметр в СКД (период к примеру) - после чего у меня добавиться в форму Отчёта поле ввода периода - Я нажму сформировать и в процедуре "ПриКомпоновкеРезультата" мне нужно получить параметры с компоновки данных что бы передать в свой запрос, написанный вне СКД.
Если я вообще не понятно объяснил - то пишите об этом. Буду думать как изложить грамотнее, просто когда не особо понимаешь механизм, то тяжело донести свою цель и как ты к ней идешь...
14. dandykry 10 16.05.19 10:11 Сейчас в теме
(12) Так понятнее)

Вместо
Настройки=КомпоновщикНастроек.Настройки
напиши
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();

Потому что ты получаешь настройки как раз без пользовательских настроек.

Двигаешься в верную сторону.
Если конфигурация типовая на БСП то привыкай использовать общие модули КомпоновкаДанныхСервер и КомпоновкаДанныхКлиентСервер. Там есть все нужное для работы с настройками( отборами, параметрами, структурой) и самой СКД.

Если есть доступ к ИТС, то не мешало бы прочитать https://its.1c.ru/db/v8314doc#bookmark:dev:TI000000543
Поможет понять внутреннюю кухню СКД
SantiouS; +1 Ответить
17. SantiouS 16.05.19 10:22 Сейчас в теме
(14) Протестировал
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки(); 

Почему "Настройки=КомпоновщикНастроек.Настройки" - пустые данные, а "КомпоновщикНастроек.ПолучитьНастройки()" - данные заполнены.
Получается в свойстве "Настройки" хранится просто шаблон настроек, а метод ПолучитьНастройки() отображает значения в данный шаблон?
Спасибо за ссылку. Опять регистрироваться на 7 дней :)
18. dandykry 10 16.05.19 10:26 Сейчас в теме
(17) Вот тут вам присылал http://prntscr.com/np832y.
Если по простому, то КомпоновщикНастроек.Настройки еще не получил настройки из КомпоновщикНастроек.ПользовательскиеНастройки.

В СтандартнаяОбработка = истина это произойдет само собой. Если вы программно это делаете, то нужно выполнить КомпоновщикНастроек.ПолучитьНастройки(), чтобы пользовательские настройки сопоставились с настройками.
user717534; SantiouS; +2 Ответить
20. SantiouS 16.05.19 10:43 Сейчас в теме
(18)
ще не получил настройки из КомпоновщикНастроек.ПользовательскиеНастройки.

В СтандартнаяОбработка = истина это произойдет само собой. Если вы программно это делаете, то нужно выполнить КомпоновщикНастроек.ПолучитьНастройки(), чтобы пользовательские настройки сопоставились с настройками.


То есть пользовательские настройки уже как бы есть в компоновке, но к ним напрямую я "заглянуть" не могу и для этого что бы посмотреть на них мне нужно сделать себе копию настроек с помощью метода ПолучитьНастройки(), а потом если я наделаю делов в этой копии, то загрузить их обратно в настройки методом ЗагрузитьНастройки(). http://prntscr.com/np8kj7

Теперь ближе к тому что я хочу сделать проясню. А именно задача моя:
есть справочник "ИменаСотрудников" с ревизитами "Дата" и "Имя" в котором присутствуют данные и мне необходимо в СКД с помощью набора данных объект вывести имена сотрудников из справочника за период указанный пользователем.
Для решения данной задачи я напишу запрос, в который нужно передать дату начала и дату окончания. Получается данные параметры мне нужно, как я понимаю, вручную добавить в форму отчёта, а не прописать в СКД или мне лучше задать их в СКД, а после они автоматически отобразятся в форме и я методом ПолучитьНастрокйки() вытяну значения, которые ввел пользователь и подсуну в свой запрос?
(не обращайте внимание на то что я работаю со справочником и настолько тупо все звучит, делаю просто понятный-простой пример для себя).

PS: хорошая программа для скриншотов - сам пользуюсь :)
21. dandykry 10 16.05.19 11:02 Сейчас в теме
(20) Заглянуть можно, но как по мне - неудобно.
Если использовать СКД, то на форму вручную ничего добавлять не нужно. Просто параметры. Та же параметры можно добавлять производные, которые никак не относятся к запросу http://prntscr.com/np8wcu

ЗагрузитьНастройки() - необязательно. Настройки вы передаете Компоновщику макета

ЗагрузитьНастройки можно использовать для модификации настроек в самом компоновщике (если нужно программно заполнить и чтобы на форме параметры тоже изменились)

например:

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

КомпоновщикНастроек.ЗагрузитьНастройки(СобственныеНастройкиКомпоновкиДанных);


P.S без конфигуратора мог что-то пропустить
SantiouS; +1 Ответить
22. SantiouS 16.05.19 11:23 Сейчас в теме
(21)
ЗагрузитьНастройки можно использовать для модификации настроек в самом компоновщике (если нужно программно заполнить и чтобы на форме параметры тоже изменились)


То есть я могу с другого документа, к примеру перед открытием формы отчёта таким образом загрузить в отчёт другие настройки и после открытия формы тем самым поменяются поля параметров из СКД?

В остальном все понял, спасибо. Уже написал примерчик для себя даже рабочий.
23. dandykry 10 16.05.19 12:00 Сейчас в теме
(22) Для этого используют опять же ПолучитьНастройки(). Эти настройки заполняются и передаются в КомпоновщикМакета. Не нужно ничего загружать.

Если есть желание открывать форму отчета из документа, то можно в параметры формы передать заполненные ФиксированныеНастройки или ПользовательскиеНастройки. Различие в том, что фиксированные настройки пользователь не изменит, а пользовательские настройки использовать опять же неудобно на мой взгляд, но иногда приходится.

И те и другие настройки автоматически заполнят компановщик своими настройками, и не нужно будет прописывать в модуле отчета обработку заполнения настроек(кроме случаев, когда это реально нужно, например внешний источник заполнить).
Полезно еще использовать параметр СформироватьПриОткрытии

ФиксированныеНастройки = Новый НастройкиКомпоновкиДанных;
Отбор = ФиксированныеНастройки.Отбор.Элементы.добавить();
..........................................
Параметр = ФиксированныеНастройки.ПараметрыДанных.Элементы.добавить();
..............................
УО = ФиксированныеНастройки.УсловноеОформление.Элементы.добавить();
..............................

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

или если нужен простой отбор, то

ПараметрыФормы  = Новый Структура("Отбор", Новый Структура("Ссылка, Номенклатура", Документ, МассивЭлементов)); 
//ссылка - поле по которому добавиться отбор Ссылка Равно Документ 
//номенклатура -  поле по которому добавиться отбор Номенклатура В Списке МассивЭлементов
ОткрытьФорму("Отчет.МойОтчет.Форма.Форма", ПараметрыФормы, ЭтаФорма);
SantiouS; +1 Ответить
24. SantiouS 16.05.19 13:12 Сейчас в теме
(23)
этого используют опять же ПолучитьНастройки(). Эти настройки заполняются и передаются в КомпоновщикМакета. Не нужно ничего загружать.

Если есть желание открывать форму отчета из документа, то можно в параметры


Спасибо, немного осознал. Буду разбираться дальше!
Вы очень помогли
dandykry; +1 Ответить
15. toypaul 63 16.05.19 10:14 Сейчас в теме
(12)
мне нужно получить параметры с компоновки данных что бы передать в свой запрос, написанный вне СКД.


вот в этом курсе решается ваша задача http://learn.programstore.ru/video_kurs_skd

там есть отчет Сверка данных - в этом примере делается прям то, что вам нужно

а вообще правильный ответ в (10)
SantiouS; +1 Ответить
13. SantiouS 16.05.19 10:05 Сейчас в теме
(11) Хочу доработать данный запрос и добавить в него параметры, которые заданы в СКД.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	//получение макета компоновки данных из других модулей
	//Схема=Отчеты.ТестовыОтчёт.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	
	//шаг 1
	СтандартнаяОбработка=Ложь; //отключаем стандартную обработку
	
	//шаг 2
	//получение схемы компоновки данных
	//СхемаКомпоновкиДанных
	
	//шаг3
	//получение настроек компоновки данных
	Настройки=КомпоновщикНастроек.Настройки;//Прикладные объекты-Отчеты-ОтчетОбъект.<Имя отчета>-Свойства-КомпоновщикНастроек(сдесь лежат настройки выполненые пользователем)
	//Для задания параметров в отчёт СКД
	//Параметр=Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НазваниеПараметра"));//Настройки.ПараметрыДанных.Элементы (задаются параметры формирования отчёта)
	//Если Параметр<>Неопределено Тогда
	//Параметр.Значение="Значение";
	//Параметр.Использование=Истина;
	//КонецЕсли;
	
	//шаг4
	//создание компоновщика макета и получение макета компоновки
	КомпоновщикМакета=Новый  КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки);	
	
	//шаг5
	//заполнение и создание внешнего набора данных 
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ИменаСотрудников.Наименование КАК Наименование
		|ИЗ
		|	Справочник.ИменаСотрудников КАК ИменаСотрудников";	
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	ВнешнийНабор=Новый Структура("ТестовыйОбъектКомпоновкиДанных",РезультатЗапроса);
	
	//шаг6
	//создание процессора компоновки данных и получение результата компоновки
	ПроцессорКомпоновки=Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешнийНабор);
	
	//шаг7
	//создание процессора вывода и вывод результирующего документа
	ПроцессорВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);	
КонецПроцедуры
Показать
16. toypaul 63 16.05.19 10:15 Сейчас в теме
(13) на 3м шаге надо получать не

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

а

Настройки=КомпоновщикНастроек.ПолучитьНастройки()

это вообще базовая ошибка новичков
8. dandykry 10 16.05.19 09:51 Сейчас в теме
(5) Я не совсем понимаю, что вам хотите узнать. Я могу на пальцах объяснить как работает механизм Настройки СКД и Пользовательские настройки СКД. Могу ссылку на документацию дать, где в картинках описан механизм.
3. Jen1978 19 16.05.19 09:30 Сейчас в теме
на скрине обведена кнопка, там галочку поставьте "Быстрый доступ". Тогда Ваш отбор попадет автоматически на форму.
Прикрепленные файлы:
6. SantiouS 16.05.19 09:36 Сейчас в теме
(3) Я это знаю (галочка ""Включать в пользовательские настройки"). Сейчас я разбираюсь с внутренним механизмом работы отчёта.
4. Jen1978 19 16.05.19 09:31 Сейчас в теме
с параметрами тоже самое.
19. Jimbo 9 16.05.19 10:35 Сейчас в теме
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
Оставьте свое сообщение

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