Передать параметры даты в Набор данных - объект (СКД)

1. VickWood 20.02.18 11:54 Сейчас в теме
Добрый день!
Только начала изучать СКД, и запнулась на таком вопросе:
Есть таблица значений, которая заполняется при обходе запроса, эта таблица значений = набор данных объект.
Подскажите, как передать параметр даты в запрос, из которого образуется таблица значений? Это можно сделать как-то средствами СКД без добавления реквизитов объекта и добавления формы отчета?
По теме из базы знаний
Найденные решения
12. herfis 513 20.02.18 13:57 Сейчас в теме
(11)
было бы хорошо, а то что-то я запуталась)

Неудивительно. Работа с пользовательскими настройками не совсем тривиальна.

// возвращается объект ЗначениеПараметраКомпоновкиДанных, т.е. для доступа к самому значению нужно еще обратиться к свойству Значение
Функция ПолучитьПользовательскийПараметр(ИмяПараметра, КомпоновщикНастроек) Экспорт
	
	НайденныйПараметр = Неопределено;
	
	НайденныйПараметрВарианта = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
	
	Если НайденныйПараметрВарианта <> Неопределено Тогда
		
		НайденныйПараметр = ПолучитьПредопределенныйЭлементПользовательскихНастроек(НайденныйПараметрВарианта, КомпоновщикНастроек.ПользовательскиеНастройки);
		
	КонецЕсли;
	
	Возврат НайденныйПараметр;
	
КонецФункции

Функция ПолучитьПредопределенныйЭлементПользовательскихНастроек(ЭлементНастроекВарианта, ПользовательскиеНастройки) Экспорт
	
	НайденныйЭлемент = Неопределено;
	
	Если ЭлементНастроекВарианта <> Неопределено Тогда
		
		НайденныйЭлемент = ПользовательскиеНастройки.Элементы.Найти(ЭлементНастроекВарианта.ИдентификаторПользовательскойНастройки);
		
	КонецЕсли;
		
	Возврат НайденныйЭлемент;
	
КонецФункции
Показать
user1725319; VickWood; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. pm74 203 20.02.18 11:58 Сейчас в теме
(1) Запрос.УстановитьПараметр("Параметр",ЗначениеПараметра);
3. VickWood 20.02.18 12:21 Сейчас в теме
(2) Это понятно. Само значение как получить, если я не создаю реквизиты объекта?
4. pm74 203 20.02.18 12:27 Сейчас в теме
(1) параметры отрабатывают на уровне запроса
можете наложить отбор по дате в скд
5. VickWood 20.02.18 12:41 Сейчас в теме
(4) я наверное, не так объяснила. мне нужно чтобы на генерируемой форме СКД были параметры типа Дата начала, дата конца, куда пользователь сможет ввести необходимый период. Эти параметры должны передаться в параметры запроса, который находится в модуле объекта, и из этого запроса формируется таблица значений, которая передается в набор данных объект.
Так вот, как мне установить параметр для этого запроса, который находится в модуле объекта?
6. pm74 203 20.02.18 12:45 Сейчас в теме
(5)
Так вот, как мне установить параметр для этого запроса, который находится в модуле объекта?

сделайте эти параметры реквизитами объекта
7. catena 110 20.02.18 12:55 Сейчас в теме
(5)Добавьте этот параметр в набор параметров вручную.
8. herfis 513 20.02.18 12:55 Сейчас в теме
(5)
Эти параметры должны передаться в параметры запроса, который находится в модуле объекта

Какого еще объекта? Может, стоит все-таки нормально описать задачу?
9. pm74 203 20.02.18 12:55 Сейчас в теме
(5) если принципиально не хотите создавать реквизиты объекта , можно создать собственную команду формирования отчета и передать значения реквизитов формы или вовсе сделать все на форме объекта
13. user657734_YGREEN 20.02.18 15:43 Сейчас в теме
Может речь идет о совсем другом... (ключевая фраза в вопросе "Только начала изучать СКД")...
Вы хотите сделать отчет СКД, где пользователь задет период начала и конца?

1) заходим в параметры. Там добавляем два параметра ДатаНачала и ДатаКонца, типа Дата (лучше еще один параметр типа СтандартныйПериод, но пока так). И галочку снимите "ограничение доступности".
2)Переходим в Настройки, там в параметрах. Выбираем каждый параметр и там справа есть кнопочка "Свойство элементов пользовательских настроек" выставляем галочку "Включать в пользовательские настройки"
Прикрепленные файлы:
qwertyalla; +1 Ответить
10. herfis 513 20.02.18 13:00 Сейчас в теме
Если речь только об отчете СКД (и под объектом подразумевается именно он), то тогда все просто:
1) добавляете в схему параметры СКД для выбора периода и делаете их доступными в пользовательских настройках
2) в ПриКомпоновкеРезультата получаете их из пользовательских настроек, формируете запрос, получаете результат, засовываете его в таблицу набора данных
3) выполняете компоновку
Если я все понял правильно и сложности только с п.2 (получение значений параметров из пользовательских настроек), то кину пример кода.
11. VickWood 20.02.18 13:49 Сейчас в теме
(10)
Если речь только об отчете СКД (и под объектом подразумевается именно он)

да, это сКД, внешний отчет.

(10)
правильно и сложности только с п.2 (получение значений параметров из пользовательских настроек),

да, именно с получением значений параметров из пользовательских настроек.

(10)
то кину пример кода.

было бы хорошо, а то что-то я запуталась)
12. herfis 513 20.02.18 13:57 Сейчас в теме
(11)
было бы хорошо, а то что-то я запуталась)

Неудивительно. Работа с пользовательскими настройками не совсем тривиальна.

// возвращается объект ЗначениеПараметраКомпоновкиДанных, т.е. для доступа к самому значению нужно еще обратиться к свойству Значение
Функция ПолучитьПользовательскийПараметр(ИмяПараметра, КомпоновщикНастроек) Экспорт
	
	НайденныйПараметр = Неопределено;
	
	НайденныйПараметрВарианта = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
	
	Если НайденныйПараметрВарианта <> Неопределено Тогда
		
		НайденныйПараметр = ПолучитьПредопределенныйЭлементПользовательскихНастроек(НайденныйПараметрВарианта, КомпоновщикНастроек.ПользовательскиеНастройки);
		
	КонецЕсли;
	
	Возврат НайденныйПараметр;
	
КонецФункции

Функция ПолучитьПредопределенныйЭлементПользовательскихНастроек(ЭлементНастроекВарианта, ПользовательскиеНастройки) Экспорт
	
	НайденныйЭлемент = Неопределено;
	
	Если ЭлементНастроекВарианта <> Неопределено Тогда
		
		НайденныйЭлемент = ПользовательскиеНастройки.Элементы.Найти(ЭлементНастроекВарианта.ИдентификаторПользовательскойНастройки);
		
	КонецЕсли;
		
	Возврат НайденныйЭлемент;
	
КонецФункции
Показать
user1725319; VickWood; +2 Ответить
14. VickWood 21.02.18 01:24 Сейчас в теме
(12) спасибо, помогло! Сделала так:
ЗначениеПараметраДатаН = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаН");
		ДатаН = ЗначениеПараметраДатаН.Значение;
		ЗначениеПараметраДатаН.Использование = Истина;
		ЗначениеПараметраДатаК = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаК");
		ДатаК = ЗначениеПараметраДатаК.Значение;
		ЗначениеПараметраДатаК.Использование = Истина;
15. herfis 513 21.02.18 10:34 Сейчас в теме
(14) Странно. У тебя обычные формы, а не управляемые? Потому что в управляемых формах отчетов пользователь работает через "ПользовательскиеНастройки", а не через "Настройки" объекта "КомпоновщикНастроек".
16. VickWood 21.02.18 11:02 Сейчас в теме
(15) нет, управляемые формы. но, однако, работает....

А не подскажите, как сделать расшифровку строкового поля в отчет? типа нажимаешь на ячейку с наименованием клиента, и открывается карточка контрагента?
17. herfis 513 21.02.18 11:40 Сейчас в теме
(16) Если работает, значит либо эти параметры пользователю вообще недоступны, либо вы дали пользователю доступ к ним не через пользовательские настройки (как происходит по-дефолту в отчетах СКД на УФ) а напрямую через обычные настройки, либо плохо протестировали и попросту получаете не те даты, что выбрал пользователь :)
Так, как вам нужно, отрабатывает стандартная расшифровка СКД. Одно из доступных действий стандартной расшифровки - как раз открыть форму объекта по ссылке. Если стандартная расшифровка не работает, значит вы как-то не так создали отчет. При создании нового отчета на УФ все работает "из коробки", достаточно только схему создать.
18. VickWood 21.02.18 11:58 Сейчас в теме
(17)
Так, как вам нужно, отрабатывает стандартная расшифровка СКД.

стандартная расшифровка не отрабатывала, потому что нужна была расшифровка строкового поля. В общем то нашла как это сделать, сделала через макет поля.
(17)
Если работает, значит либо эти параметры пользователю вообще недоступны, либо вы дали пользователю доступ к ним не через пользовательские настройки (как происходит по-дефолту в отчетах СКД на УФ) а напрямую через обычные настройки, либо плохо протестировали и попросту получаете не те даты, что выбрал пользователь :)

настройки доступны, отбор работает, добавляла эти параметры в пользовательские настройки, вроде бы...
хотя есть одна странность, обирает все верно, за указанный период, но даты в шапку отчета выводит другие, которые указаны "Варианты настроек - Настройки" это я так понимаю общие настройки. и такое чувство, что они никак не связаны с пользовательскими, т.к. когда меняешь значение в пользовательских, в "Варианты настроек - Настройки" значения не меняются.
19. herfis 513 21.02.18 12:42 Сейчас в теме
(18)
потому что нужна была расшифровка строкового поля

А зачем оно строковое? Если для ссылочного поля в отчете требуется нестандартное представление, то для этого в СКД специально придумано выражение представления.
и такое чувство, что они никак не связаны с пользовательскими, т.к. когда меняешь значение в пользовательских, в "Варианты настроек - Настройки" значения не меняются.

Правильное чувство, потому что так и есть. Если используются пользовательские настройки и пользователь работает с ними, то в компоновку идут именно они. Данные из обычных настроек используются разве что для начального заполнения пользовательских настроек и в дальнейшей работе фактически игнорируются.
И именно поэтому если пользователь у вас редактирует пользовательские настройки, то код из (14) не может получать правильные даты.
22. VickWood 21.02.18 14:02 Сейчас в теме
(19)
А зачем оно строковое?

пожелание клиента выводить полное наименование контрагента

(19)
И именно поэтому если пользователь у вас редактирует пользовательские настройки, то код из (12) не может получать правильные даты.

все разобралась с этим, спасибо) просто общая форма не стандартная, назвала параметры по примеру, как у них в других отчетах сделано. Заработало)
23. herfis 513 21.02.18 14:16 Сейчас в теме
(22)
пожелание клиента выводить полное наименование контрагента

Еще раз. Просто в колонке "Выражение представления" таблицы описания полей пишешь для поля контрагента "Контрагент.ПолноеНаименование". И все.
Будет и полное наименование выводиться и стандартная расшифровка работать.
VickWood; +1 Ответить
24. VickWood 21.02.18 22:16 Сейчас в теме
(23) да, действительно, помогло, спасибо) не знала, что так можно)

не подскажете в еще одном вопросе: в отчете вывела отборы, задала им представления. Всего два отбора: Департамент и Дилерский центр. Дилерский центр - это реквизит Департамента. Так вот, в представлении Дилерского центра в скобках выводится Департамент. Как бы это убрать?
Прикрепленные файлы:
25. herfis 513 22.02.18 10:05 Сейчас в теме
(24) Не подскажу, не сталкивался.
26. VickWood 22.02.18 10:30 Сейчас в теме
(25) ладно, в любом случае, спасибо за помощь=)
27. user1725319 31.08.23 11:59 Сейчас в теме
(12)
// возвращается объект ЗначениеПараметраКомпоновкиДанных, т.е. для доступа к самому значению нужно еще обратиться к свойству Значение
Функция ПолучитьПользовательскийПараметр(ИмяПараметра, КомпоновщикНастроек) Экспорт

НайденныйПараметр = Неопределено;

НайденныйПараметрВарианта = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);

Если НайденныйПараметрВарианта <> Неопределено Тогда

НайденныйПараметр = ПолучитьПредопределенныйЭлементПользовательскихНастроек(НайденныйПараметрВарианта, КомпоновщикНастроек.ПользовательскиеНастройки);

КонецЕсли;

Возврат НайденныйПараметр;

КонецФункции

Функция ПолучитьПредопределенныйЭлементПользовательскихНастроек(ЭлементНастроекВарианта, ПользовательскиеНастройки) Экспорт

НайденныйЭлемент = Неопределено;

Если ЭлементНастроекВарианта <> Неопределено Тогда

НайденныйЭлемент = ПользовательскиеНастройки.Элементы.Найти(ЭлементНастроекВарианта.ИдентификаторПользовательскойНастройки);

КонецЕсли;

Возврат НайденныйЭлемент;

КонецФункции
Показать

(12)
20. VmvLer 21.02.18 13:54 Сейчас в теме
я для своих наработок так решил задачу получения параметров СКД

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

// Примеры вызова в модуле объекта-отчета
ПараметрКд = ПолучитьПараметрКомпоновки("ТестовыйРежим", КомпоновщикНастроек, Ложь, Ложь); // ПроверятьИспользование, ВызыватьИсключение
Если НЕ ПараметрКд = Неопределено Тогда
	ТестовыйРежим = ПараметрКд.Значение;
Иначе
	ТестовыйРежим = Ложь;
КонецЕсли;

ПараметрКд = ПолучитьПараметрКомпоновки("СкладыНаценки", КомпоновщикНастроек, Истина, Ложь); // ПроверятьИспользование, ВызыватьИсключение
СкладыНаценкиЕсть = ?(ПараметрКд = Неопределено, Ложь, ЗначениеЗаполнено(ПараметрКд.Значение));



// Примеры вызова в модулях форм отчета
// В модуль формы отчета(настроек отчета) вставляем функцию 
&НаСервере
Функция ПолучитьПараметрКомпоновки(ПараметрИмя, ПроверятьИспользование = Истина, ВызыватьИсключение = Истина)
	
	Возврат РеквизитФормыВЗначение("Отчет").ПолучитьПараметрКомпоновки(ПараметрИмя, Отчет.КомпоновщикНастроек, ПроверятьИспользование, ВызыватьИсключение);
	
КонецФункции

// Пример: получаем Параметр СКД в клиентском методе формы
&НаКлиенте
Процедура СформироватьОтчет()
	
	ПараметрКд = ПолучитьПараметрКомпоновки("СкладыНаценки", Истина, Ложь); // ПроверятьИспользование, ВызыватьИсключение
	СкладыНаценкиЕсть = ?(ПараметрКд = Неопределено, Ложь, ЗначениеЗаполнено(ПараметрКд.Значение));
	
	//....
	
КонецПроцедуры

Показать
VickWood; +1 Ответить
21. herfis 513 21.02.18 14:01 Сейчас в теме
Вот, кстати, да - КомпоновщикНастроек.ПолучитьНастройки() возвращает итоговый комплект настроек с учетом всех видов настроек - фиксированных, варианта и пользовательских. При программной компоновке подсовывают именно его.
VickWood; +1 Ответить
Оставьте свое сообщение

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