Добрый день!
Только начала изучать СКД, и запнулась на таком вопросе:
Есть таблица значений, которая заполняется при обходе запроса, эта таблица значений = набор данных объект.
Подскажите, как передать параметр даты в запрос, из которого образуется таблица значений? Это можно сделать как-то средствами СКД без добавления реквизитов объекта и добавления формы отчета?
---
было бы хорошо, а то что-то я запуталась)
Неудивительно. Работа с пользовательскими настройками не совсем тривиальна.

```1c
    // возвращается объект ЗначениеПараметраКомпоновкиДанных, т.е. для доступа к самому значению нужно еще обратиться к свойству Значение
    Функция ПолучитьПользовательскийПараметр(ИмяПараметра, КомпоновщикНастроек) Экспорт

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

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

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

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

    КонецЕсли;

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

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

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

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

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

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

    КонецЕсли;

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

    КонецФункции
```
---
Запрос.УстановитьПараметр("Параметр",ЗначениеПараметра);
---
Это понятно. Само значение как получить, если я не создаю реквизиты объекта?
---
параметры отрабатывают на уровне запроса
можете наложить отбор по дате в скд
---
я наверное, не так объяснила. мне нужно чтобы на генерируемой форме СКД были параметры типа Дата начала, дата конца, куда пользователь сможет ввести необходимый период. Эти параметры должны передаться в параметры запроса, который находится в модуле объекта, и из этого запроса формируется таблица значений, которая передается в набор данных объект.
Так вот, как мне установить параметр для этого запроса, который находится в модуле объекта?
---
Так вот, как мне установить параметр для этого запроса, который находится в модуле объекта?
сделайте эти параметры реквизитами объекта
---
Добавьте этот параметр в набор параметров вручную.
---
Эти параметры должны передаться в параметры запроса, который находится в модуле объекта
Какого еще объекта? Может, стоит все-таки нормально описать задачу?
---
если принципиально не хотите создавать реквизиты объекта , можно создать собственную команду формирования отчета и передать значения реквизитов формы или вовсе сделать все на форме объекта
---
Может речь идет о совсем другом... (ключевая фраза в вопросе "Только начала изучать СКД")...
Вы хотите сделать отчет СКД, где пользователь задет период начала и конца?

1) заходим в параметры. Там добавляем два параметра ДатаНачала и ДатаКонца, типа Дата (лучше еще один параметр типа СтандартныйПериод, но пока так). И галочку снимите "ограничение доступности".
2)Переходим в Настройки, там в параметрах. Выбираем каждый параметр и там справа есть кнопочка "Свойство элементов пользовательских настроек" выставляем галочку "Включать в пользовательские настройки"
---
Если речь только об отчете СКД (и под объектом подразумевается именно он), то тогда все просто:
1) добавляете в схему параметры СКД для выбора периода и делаете их доступными в пользовательских настройках
2) в ПриКомпоновкеРезультата получаете их из пользовательских настроек, формируете запрос, получаете результат, засовываете его в таблицу набора данных
3) выполняете компоновку
Если я все понял правильно и сложности только с п.2 (получение значений параметров из пользовательских настроек), то кину пример кода.
---
Если речь только об отчете СКД (и под объектом подразумевается именно он)
да, это сКД, внешний отчет.

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

(10) то кину пример кода.
было бы хорошо, а то что-то я запуталась)
---
было бы хорошо, а то что-то я запуталась)
Неудивительно. Работа с пользовательскими настройками не совсем тривиальна.

```1c
    // возвращается объект ЗначениеПараметраКомпоновкиДанных, т.е. для доступа к самому значению нужно еще обратиться к свойству Значение
    Функция ПолучитьПользовательскийПараметр(ИмяПараметра, КомпоновщикНастроек) Экспорт

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

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

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

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

    КонецЕсли;

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

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

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

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

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

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

    КонецЕсли;

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

    КонецФункции
```
---
спасибо, помогло! Сделала так:

```1c
    ЗначениеПараметраДатаН = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаН");
    ДатаН = ЗначениеПараметраДатаН.Значение;
    ЗначениеПараметраДатаН.Использование = Истина;
    ЗначениеПараметраДатаК = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаК");
    ДатаК = ЗначениеПараметраДатаК.Значение;
    ЗначениеПараметраДатаК.Использование = Истина;
```
---
Странно. У тебя обычные формы, а не управляемые? Потому что в управляемых формах отчетов пользователь работает через "ПользовательскиеНастройки", а не через "Настройки" объекта "КомпоновщикНастроек".
---
нет, управляемые формы. но, однако, работает....

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

(19) И именно поэтому если пользователь у вас редактирует пользовательские настройки, то код из (12) не может получать правильные даты.
все разобралась с этим, спасибо) просто общая форма не стандартная, назвала параметры по примеру, как у них в других отчетах сделано. Заработало)
---
пожелание клиента выводить полное наименование контрагента
Еще раз. Просто в колонке "Выражение представления" таблицы описания полей пишешь для поля контрагента "Контрагент.ПолноеНаименование". И все.
Будет и полное наименование выводиться и стандартная расшифровка работать.
---
да, действительно, помогло, спасибо) не знала, что так можно)

не подскажете в еще одном вопросе: в отчете вывела отборы, задала им представления. Всего два отбора: Департамент и Дилерский центр. Дилерский центр - это реквизит Департамента. Так вот, в представлении Дилерского центра в скобках выводится Департамент. Как бы это убрать?
---
Не подскажу, не сталкивался.
---
ладно, в любом случае, спасибо за помощь=)
---
(12)
---
я для своих наработок так решил задачу получения параметров СКД

```1c
    //
    // В модуле объекта-отчета или в общем модуле
    // Определяет значение параметра СКД (в том числе включенного в пользовательские настройки)
    //
    Функция ПолучитьПараметрКомпоновки(ПараметрИмя, Компоновщик, ПроверятьИспользование = Истина, ВызыватьИсключение = Истина) Экспорт

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

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

    Для каждого ЗнчПараметраНастроекКд Из НастройкиКомпоновки.ПараметрыДанных.Элементы Цикл
    Если ЗнчПараметраНастроекКд.Параметр = ПараметрПоле
    И ТипЗнч(ЗнчПараметраНастроекКд) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
    Если ПроверятьИспользование Тогда
    Если ЗнчПараметраНастроекКд.Использование Тогда
    ПараметрКд = ЗнчПараметраНастроекКд;
    КонецЕсли;
    Иначе
    ПараметрКд = ЗнчПараметраНастроекКд;
    КонецЕсли;
    Прервать;
    КонецЕсли;
    КонецЦикла;

    Если ПараметрКд = Неопределено И ВызыватьИсключение Тогда
    ТекстИсключения =
    Символы.ПС + "В настройки выбранного варианта отчета не включен параметр " +""+ПараметрИмя+""+
    Символы.ПС + "Включите указанный параметр в настройках или обратитесь к разработчику!";
    ВызватьИсключение ТекстИсключения;
    КонецЕсли;

    Возврат ПараметрКд;

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

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

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

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

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

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

    // Пример: получаем Параметр СКД в клиентском методе формы
    &НаКлиенте
    Процедура СформироватьОтчет()

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

    //....

    КонецПроцедуры
```
---
Вот, кстати, да - КомпоновщикНастроек.ПолучитьНастройки() возвращает итоговый комплект настроек с учетом всех видов настроек - фиксированных, варианта и пользовательских. При программной компоновке подсовывают именно его.