Передать параметры даты в Набор данных - объект (СКД)
Добрый день!
Только начала изучать СКД, и запнулась на таком вопросе:
Есть таблица значений, которая заполняется при обходе запроса, эта таблица значений = набор данных объект.
Подскажите, как передать параметр даты в запрос, из которого образуется таблица значений? Это можно сделать как-то средствами СКД без добавления реквизитов объекта и добавления формы отчета?
Только начала изучать СКД, и запнулась на таком вопросе:
Есть таблица значений, которая заполняется при обходе запроса, эта таблица значений = набор данных объект.
Подскажите, как передать параметр даты в запрос, из которого образуется таблица значений? Это можно сделать как-то средствами СКД без добавления реквизитов объекта и добавления формы отчета?
По теме из базы знаний
- 115 полезностей по курсу СКД Евгения Гилёва
- Передача объекта ТаблицаЗначений в СКД в качестве параметра
- СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты
- Работа с СКД в продукте "Infostart Toolkit"
- Простой отчет СКД с дополнительным набором данных, получаемых по com соединению из другой базы
Найденные решения
(11)
Неудивительно. Работа с пользовательскими настройками не совсем тривиальна.
было бы хорошо, а то что-то я запуталась)
Неудивительно. Работа с пользовательскими настройками не совсем тривиальна.
// возвращается объект ЗначениеПараметраКомпоновкиДанных, т.е. для доступа к самому значению нужно еще обратиться к свойству Значение
Функция ПолучитьПользовательскийПараметр(ИмяПараметра, КомпоновщикНастроек) Экспорт
НайденныйПараметр = Неопределено;
НайденныйПараметрВарианта = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
Если НайденныйПараметрВарианта <> Неопределено Тогда
НайденныйПараметр = ПолучитьПредопределенныйЭлементПользовательскихНастроек(НайденныйПараметрВарианта, КомпоновщикНастроек.ПользовательскиеНастройки);
КонецЕсли;
Возврат НайденныйПараметр;
КонецФункции
Функция ПолучитьПредопределенныйЭлементПользовательскихНастроек(ЭлементНастроекВарианта, ПользовательскиеНастройки) Экспорт
НайденныйЭлемент = Неопределено;
Если ЭлементНастроекВарианта <> Неопределено Тогда
НайденныйЭлемент = ПользовательскиеНастройки.Элементы.Найти(ЭлементНастроекВарианта.ИдентификаторПользовательскойНастройки);
КонецЕсли;
Возврат НайденныйЭлемент;
КонецФункции
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(4) я наверное, не так объяснила. мне нужно чтобы на генерируемой форме СКД были параметры типа Дата начала, дата конца, куда пользователь сможет ввести необходимый период. Эти параметры должны передаться в параметры запроса, который находится в модуле объекта, и из этого запроса формируется таблица значений, которая передается в набор данных объект.
Так вот, как мне установить параметр для этого запроса, который находится в модуле объекта?
Так вот, как мне установить параметр для этого запроса, который находится в модуле объекта?
Может речь идет о совсем другом... (ключевая фраза в вопросе "Только начала изучать СКД")...
Вы хотите сделать отчет СКД, где пользователь задет период начала и конца?
1) заходим в параметры. Там добавляем два параметра ДатаНачала и ДатаКонца, типа Дата (лучше еще один параметр типа СтандартныйПериод, но пока так). И галочку снимите "ограничение доступности".
2)Переходим в Настройки, там в параметрах. Выбираем каждый параметр и там справа есть кнопочка "Свойство элементов пользовательских настроек" выставляем галочку "Включать в пользовательские настройки"
Вы хотите сделать отчет СКД, где пользователь задет период начала и конца?
1) заходим в параметры. Там добавляем два параметра ДатаНачала и ДатаКонца, типа Дата (лучше еще один параметр типа СтандартныйПериод, но пока так). И галочку снимите "ограничение доступности".
2)Переходим в Настройки, там в параметрах. Выбираем каждый параметр и там справа есть кнопочка "Свойство элементов пользовательских настроек" выставляем галочку "Включать в пользовательские настройки"
Прикрепленные файлы:
Если речь только об отчете СКД (и под объектом подразумевается именно он), то тогда все просто:
1) добавляете в схему параметры СКД для выбора периода и делаете их доступными в пользовательских настройках
2) в ПриКомпоновкеРезультата получаете их из пользовательских настроек, формируете запрос, получаете результат, засовываете его в таблицу набора данных
3) выполняете компоновку
Если я все понял правильно и сложности только с п.2 (получение значений параметров из пользовательских настроек), то кину пример кода.
1) добавляете в схему параметры СКД для выбора периода и делаете их доступными в пользовательских настройках
2) в ПриКомпоновкеРезультата получаете их из пользовательских настроек, формируете запрос, получаете результат, засовываете его в таблицу набора данных
3) выполняете компоновку
Если я все понял правильно и сложности только с п.2 (получение значений параметров из пользовательских настроек), то кину пример кода.
(10)
да, это сКД, внешний отчет.
(10)
да, именно с получением значений параметров из пользовательских настроек.
(10)
было бы хорошо, а то что-то я запуталась)
Если речь только об отчете СКД (и под объектом подразумевается именно он)
да, это сКД, внешний отчет.
(10)
правильно и сложности только с п.2 (получение значений параметров из пользовательских настроек),
да, именно с получением значений параметров из пользовательских настроек.
(10)
то кину пример кода.
было бы хорошо, а то что-то я запуталась)
(11)
Неудивительно. Работа с пользовательскими настройками не совсем тривиальна.
было бы хорошо, а то что-то я запуталась)
Неудивительно. Работа с пользовательскими настройками не совсем тривиальна.
// возвращается объект ЗначениеПараметраКомпоновкиДанных, т.е. для доступа к самому значению нужно еще обратиться к свойству Значение
Функция ПолучитьПользовательскийПараметр(ИмяПараметра, КомпоновщикНастроек) Экспорт
НайденныйПараметр = Неопределено;
НайденныйПараметрВарианта = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
Если НайденныйПараметрВарианта <> Неопределено Тогда
НайденныйПараметр = ПолучитьПредопределенныйЭлементПользовательскихНастроек(НайденныйПараметрВарианта, КомпоновщикНастроек.ПользовательскиеНастройки);
КонецЕсли;
Возврат НайденныйПараметр;
КонецФункции
Функция ПолучитьПредопределенныйЭлементПользовательскихНастроек(ЭлементНастроекВарианта, ПользовательскиеНастройки) Экспорт
НайденныйЭлемент = Неопределено;
Если ЭлементНастроекВарианта <> Неопределено Тогда
НайденныйЭлемент = ПользовательскиеНастройки.Элементы.Найти(ЭлементНастроекВарианта.ИдентификаторПользовательскойНастройки);
КонецЕсли;
Возврат НайденныйЭлемент;
КонецФункции
Показать
(12) спасибо, помогло! Сделала так:
ЗначениеПараметраДатаН = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаН");
ДатаН = ЗначениеПараметраДатаН.Значение;
ЗначениеПараметраДатаН.Использование = Истина;
ЗначениеПараметраДатаК = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаК");
ДатаК = ЗначениеПараметраДатаК.Значение;
ЗначениеПараметраДатаК.Использование = Истина;
(16) Если работает, значит либо эти параметры пользователю вообще недоступны, либо вы дали пользователю доступ к ним не через пользовательские настройки (как происходит по-дефолту в отчетах СКД на УФ) а напрямую через обычные настройки, либо плохо протестировали и попросту получаете не те даты, что выбрал пользователь :)
Так, как вам нужно, отрабатывает стандартная расшифровка СКД. Одно из доступных действий стандартной расшифровки - как раз открыть форму объекта по ссылке. Если стандартная расшифровка не работает, значит вы как-то не так создали отчет. При создании нового отчета на УФ все работает "из коробки", достаточно только схему создать.
Так, как вам нужно, отрабатывает стандартная расшифровка СКД. Одно из доступных действий стандартной расшифровки - как раз открыть форму объекта по ссылке. Если стандартная расшифровка не работает, значит вы как-то не так создали отчет. При создании нового отчета на УФ все работает "из коробки", достаточно только схему создать.
(17)
стандартная расшифровка не отрабатывала, потому что нужна была расшифровка строкового поля. В общем то нашла как это сделать, сделала через макет поля.
(17)
настройки доступны, отбор работает, добавляла эти параметры в пользовательские настройки, вроде бы...
хотя есть одна странность, обирает все верно, за указанный период, но даты в шапку отчета выводит другие, которые указаны "Варианты настроек - Настройки" это я так понимаю общие настройки. и такое чувство, что они никак не связаны с пользовательскими, т.к. когда меняешь значение в пользовательских, в "Варианты настроек - Настройки" значения не меняются.
Так, как вам нужно, отрабатывает стандартная расшифровка СКД.
стандартная расшифровка не отрабатывала, потому что нужна была расшифровка строкового поля. В общем то нашла как это сделать, сделала через макет поля.
(17)
Если работает, значит либо эти параметры пользователю вообще недоступны, либо вы дали пользователю доступ к ним не через пользовательские настройки (как происходит по-дефолту в отчетах СКД на УФ) а напрямую через обычные настройки, либо плохо протестировали и попросту получаете не те даты, что выбрал пользователь :)
настройки доступны, отбор работает, добавляла эти параметры в пользовательские настройки, вроде бы...
хотя есть одна странность, обирает все верно, за указанный период, но даты в шапку отчета выводит другие, которые указаны "Варианты настроек - Настройки" это я так понимаю общие настройки. и такое чувство, что они никак не связаны с пользовательскими, т.к. когда меняешь значение в пользовательских, в "Варианты настроек - Настройки" значения не меняются.
(18)
А зачем оно строковое? Если для ссылочного поля в отчете требуется нестандартное представление, то для этого в СКД специально придумано выражение представления.
Правильное чувство, потому что так и есть. Если используются пользовательские настройки и пользователь работает с ними, то в компоновку идут именно они. Данные из обычных настроек используются разве что для начального заполнения пользовательских настроек и в дальнейшей работе фактически игнорируются.
И именно поэтому если пользователь у вас редактирует пользовательские настройки, то код из (14) не может получать правильные даты.
потому что нужна была расшифровка строкового поля
А зачем оно строковое? Если для ссылочного поля в отчете требуется нестандартное представление, то для этого в СКД специально придумано выражение представления.
и такое чувство, что они никак не связаны с пользовательскими, т.к. когда меняешь значение в пользовательских, в "Варианты настроек - Настройки" значения не меняются.
Правильное чувство, потому что так и есть. Если используются пользовательские настройки и пользователь работает с ними, то в компоновку идут именно они. Данные из обычных настроек используются разве что для начального заполнения пользовательских настроек и в дальнейшей работе фактически игнорируются.
И именно поэтому если пользователь у вас редактирует пользовательские настройки, то код из (14) не может получать правильные даты.
(19)
пожелание клиента выводить полное наименование контрагента
(19)
все разобралась с этим, спасибо) просто общая форма не стандартная, назвала параметры по примеру, как у них в других отчетах сделано. Заработало)
А зачем оно строковое?
пожелание клиента выводить полное наименование контрагента
(19)
И именно поэтому если пользователь у вас редактирует пользовательские настройки, то код из (12) не может получать правильные даты.
все разобралась с этим, спасибо) просто общая форма не стандартная, назвала параметры по примеру, как у них в других отчетах сделано. Заработало)
(22)
Еще раз. Просто в колонке "Выражение представления" таблицы описания полей пишешь для поля контрагента "Контрагент.ПолноеНаименование". И все.
Будет и полное наименование выводиться и стандартная расшифровка работать.
пожелание клиента выводить полное наименование контрагента
Еще раз. Просто в колонке "Выражение представления" таблицы описания полей пишешь для поля контрагента "Контрагент.ПолноеНаименование". И все.
Будет и полное наименование выводиться и стандартная расшифровка работать.
(23) да, действительно, помогло, спасибо) не знала, что так можно)
не подскажете в еще одном вопросе: в отчете вывела отборы, задала им представления. Всего два отбора: Департамент и Дилерский центр. Дилерский центр - это реквизит Департамента. Так вот, в представлении Дилерского центра в скобках выводится Департамент. Как бы это убрать?
не подскажете в еще одном вопросе: в отчете вывела отборы, задала им представления. Всего два отбора: Департамент и Дилерский центр. Дилерский центр - это реквизит Департамента. Так вот, в представлении Дилерского центра в скобках выводится Департамент. Как бы это убрать?
Прикрепленные файлы:
(12)
(12)
// возвращается объект ЗначениеПараметраКомпоновкиДанных, т.е. для доступа к самому значению нужно еще обратиться к свойству Значение
Функция ПолучитьПользовательскийПараметр(ИмяПараметра, КомпоновщикНастроек) Экспорт
НайденныйПараметр = Неопределено;
НайденныйПараметрВарианта = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
Если НайденныйПараметрВарианта <> Неопределено Тогда
НайденныйПараметр = ПолучитьПредопределенныйЭлементПользовательскихНастроек(НайденныйПараметрВарианта, КомпоновщикНастроек.ПользовательскиеНастройки);
КонецЕсли;
Возврат НайденныйПараметр;
КонецФункции
Функция ПолучитьПредопределенныйЭлементПользовательскихНастроек(ЭлементНастроекВарианта, ПользовательскиеНастройки) Экспорт
НайденныйЭлемент = Неопределено;
Если ЭлементНастроекВарианта <> Неопределено Тогда
НайденныйЭлемент = ПользовательскиеНастройки.Элементы.Найти(ЭлементНастроекВарианта.ИдентификаторПользовательскойНастройки);
КонецЕсли;
Возврат НайденныйЭлемент;
КонецФункции
ПоказатьФункция ПолучитьПользовательскийПараметр(ИмяПараметра, КомпоновщикНастроек) Экспорт
НайденныйПараметр = Неопределено;
НайденныйПараметрВарианта = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
Если НайденныйПараметрВарианта <> Неопределено Тогда
НайденныйПараметр = ПолучитьПредопределенныйЭлементПользовательскихНастроек(НайденныйПараметрВарианта, КомпоновщикНастроек.ПользовательскиеНастройки);
КонецЕсли;
Возврат НайденныйПараметр;
КонецФункции
Функция ПолучитьПредопределенныйЭлементПользовательскихНастроек(ЭлементНастроекВарианта, ПользовательскиеНастройки) Экспорт
НайденныйЭлемент = Неопределено;
Если ЭлементНастроекВарианта <> Неопределено Тогда
НайденныйЭлемент = ПользовательскиеНастройки.Элементы.Найти(ЭлементНастроекВарианта.ИдентификаторПользовательскойНастройки);
КонецЕсли;
Возврат НайденныйЭлемент;
КонецФункции
(12)
я для своих наработок так решил задачу получения параметров СКД
//
// В модуле объекта-отчета или в общем модуле
// Определяет значение параметра СКД (в том числе включенного в пользовательские настройки)
//
Функция ПолучитьПараметрКомпоновки(ПараметрИмя, Компоновщик, ПроверятьИспользование = Истина, ВызыватьИсключение = Истина) Экспорт
ПараметрПоле = Новый ПараметрКомпоновкиДанных(ПараметрИмя);
ПараметрКд = Неопределено;
НастройкиКомпоновки = Компоновщик.ПолучитьНастройки();
Для каждого ЗнчПараметраНастроекКд Из НастройкиКомпоновки.ПараметрыДанных.Элементы Цикл
Если ЗнчПараметраНастроекКд.Параметр = ПараметрПоле
И ТипЗнч(ЗнчПараметраНастроекКд) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
Если ПроверятьИспользование Тогда
Если ЗнчПараметраНастроекКд.Использование Тогда
ПараметрКд = ЗнчПараметраНастроекКд;
КонецЕсли;
Иначе
ПараметрКд = ЗнчПараметраНастроекКд;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Если ПараметрКд = Неопределено И ВызыватьИсключение Тогда
ТекстИсключения =
Символы.ПС + "В настройки выбранного варианта отчета не включен параметр " +""""+ПараметрИмя+""""+
Символы.ПС + "Включите указанный параметр в настройках или обратитесь к разработчику!";
ВызватьИсключение ТекстИсключения;
КонецЕсли;
Возврат ПараметрКд;
КонецФункции
// Примеры вызова в модуле объекта-отчета
ПараметрКд = ПолучитьПараметрКомпоновки("ТестовыйРежим", КомпоновщикНастроек, Ложь, Ложь); // ПроверятьИспользование, ВызыватьИсключение
Если НЕ ПараметрКд = Неопределено Тогда
ТестовыйРежим = ПараметрКд.Значение;
Иначе
ТестовыйРежим = Ложь;
КонецЕсли;
ПараметрКд = ПолучитьПараметрКомпоновки("СкладыНаценки", КомпоновщикНастроек, Истина, Ложь); // ПроверятьИспользование, ВызыватьИсключение
СкладыНаценкиЕсть = ?(ПараметрКд = Неопределено, Ложь, ЗначениеЗаполнено(ПараметрКд.Значение));
// Примеры вызова в модулях форм отчета
// В модуль формы отчета(настроек отчета) вставляем функцию
&НаСервере
Функция ПолучитьПараметрКомпоновки(ПараметрИмя, ПроверятьИспользование = Истина, ВызыватьИсключение = Истина)
Возврат РеквизитФормыВЗначение("Отчет").ПолучитьПараметрКомпоновки(ПараметрИмя, Отчет.КомпоновщикНастроек, ПроверятьИспользование, ВызыватьИсключение);
КонецФункции
// Пример: получаем Параметр СКД в клиентском методе формы
&НаКлиенте
Процедура СформироватьОтчет()
ПараметрКд = ПолучитьПараметрКомпоновки("СкладыНаценки", Истина, Ложь); // ПроверятьИспользование, ВызыватьИсключение
СкладыНаценкиЕсть = ?(ПараметрКд = Неопределено, Ложь, ЗначениеЗаполнено(ПараметрКд.Значение));
//....
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот