Допустим, мы создали отчёт в конструкторе СКД, и нам нужно передать в него какой-то параметр.
Сделать это можно из формы отчёта. То есть, пользователь задаёт значение в форме отчёта, например какую-то дату, и это значение должно передаваться в систему компоновки данных.
Первым делом создаём форму отчёта. Добавляем реквизит формы, назовём его «НашаДата». Тип реквизита укажем – «Дата». Вынесем реквизит на форму.
Откроем свойства созданного поля на форме. Создадим обработчик события «ПриИзменении».
Теперь в модуле формы организуем передачу параметра в СКД.
Для случая, когда параметры уже созданы в СКД, и нам нужно передать только значения, код будет таким:
&НаКлиенте Процедура ДатаПриИзменении(Элемент) ДатаПриИзмененииНаСервере(); КонецПроцедуры &НаСервере Процедура ДатаПриИзмененииНаСервере() ЭтаФорма.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Дата", ЭтаФорма.НашаДата); КонецПроцедуры
В случае, когда параметры заданы в тексте запроса СКД, но не на вкладке «Параметры» конструктора, тогда код нужно настроить в соответствии со следующим примером:
Параметры = КомпоновщикНастроек.Настройки.ПараметрыДанных; Параметр = Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПараметрУказанныйВЗапросе")); Если Параметр <> Неопределено Тогда Параметр.Значение = ЗначениеКотороеМыХотимУстановить; Параметр.Использование = Истина; КонецЕсли;
- Информация о материале
- Категория: Программирование 1С
-
Опубликовано: 14 сентября 2016
Функция ПолучитьЗначениеПараметра (НазваниеПараметра) Экспорт
Для Каждого Элемент ИЗ КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл
Если Строка(Элемент.Параметр) = НазваниеПараметра Тогда
Возврат Элемент.Значение;
КонецЕсли;
КонецЦикла;
КонецФункции
Функция ПолучитьЗначениеОтбора (НазваниеОтбора) Экспорт
Для Каждого Элемент ИЗ КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
Если Строка(Элемент.ЛевоеЗначение) = НазваниеОтбора Тогда
Если Элемент.Использование Тогда
ВидСравненияСтрока = «»;
Если Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда
ВидСравненияСтрока = «=»;
ИначеЕсли Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше Тогда
ВидСравненияСтрока = «<«;
ИначеЕсли Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно Тогда
ВидСравненияСтрока = «<=»;
ИначеЕсли Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше Тогда
ВидСравненияСтрока = «>»;
ИначеЕсли Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно Тогда
ВидСравненияСтрока = «>=»;
КонецЕсли;
СтруктураОтбора = Новый Структура («ВидСравнения, ВидСравненияСтрока, ЗначениеОтбора», Элемент.ВидСравнения, ВидСравненияСтрока, Элемент.ПравоеЗначение) ;
Возврат СтруктураОтбора;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецФункции
Процедура УстановитьЗначениеПараметра (НазваниеПараметра, ЗначениеПараметра) Экспорт
Для Каждого Элемент ИЗ КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл
Если Строка(Элемент.Параметр) = НазваниеПараметра Тогда
Элемент.Значение = ЗначениеПараметра ;
Элемент.Использование = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура УстановитьЗначениеОтбора (НазваниеОтбора, ЗначениеОтбора, ВидСравнения, Использование = ИСТИНА) Экспорт
Для Каждого Элемент ИЗ КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
Если Строка(Элемент.ЛевоеЗначение) = НазваниеОтбора Тогда
Элемент.ВидСравнения = ВидСравнения;
Элемент.ПравоеЗначение = ЗначениеОтбора ;
Элемент.Использование = Использование;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ВернутьЗначениеПараметраНастройкиСКД(ИмяНастройки, ЗначениеПоУмолчанию = Неопределено) Экспорт
Настройка = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяНастройки);
Если Настройка = Неопределено Тогда
Возврат
ЗначениеПоУмолчанию;
КонецЕсли;
НастройкаПоИД = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Настройка.ИдентификаторПользовательскойНастройки);
Если НастройкаПоИД = Неопределено Тогда
Возврат
ЗначениеПоУмолчанию;
КонецЕсли;
Если Не ЗначениеЗаполнено(НастройкаПоИД.Значение) Тогда
Если Не ЗначениеПоУмолчанию = Неопределено Тогда
НастройкаПоИД.Значение = ЗначениеПоУмолчанию;
КонецЕсли;
КонецЕсли;
Возврат ?(НастройкаПоИД.Использование, НастройкаПоИД.Значение, ЗначениеПоУмолчанию);
КонецФункции
Реквизит формы в СКД |
Я |
31.08.20 — 12:36
БП 3.0
Реально ли вообще запихнуть в СКД реквизит формы документа? Подскажите пожалуйста, если сталкивались с подобным.
1 — 31.08.20 — 12:48
что значит «запихнуть»?
2 — 31.08.20 — 12:51
(1) Ну воспользоваться реквизитом формы в условии отчета на СКД например.
3 — 31.08.20 — 12:51
через параметры можно
4 — 31.08.20 — 12:52
(3) А где и как передать этот реквизит в параметр?
5 — 31.08.20 — 13:00
А зачем? Что сделать-то хочешь?
6 — 31.08.20 — 13:05
(5) Нужен отчет по Счетам от поставщиков, в который попадают не оплаченные или просроченные счета. А реквизиты СтатусДокумента и СрокОплаты являются реквизитами формы.
7 — 31.08.20 — 13:42
(6) Ну так если это отчет, то в настройке параметров можно поставить отображение на форме.
8 — 31.08.20 — 13:48
(0) Брать данные из документов для отчетов плохой тон и презрение архитекторов 1С
9 — 31.08.20 — 13:48
(0) Данные надо брать из регистров
10 — 31.08.20 — 13:50
(6) Реквизиты формы, скорее всего берутся из реквизитов документов, поищи куда ссылается реквизит формы и его уже выводи в СКД
11 — 31.08.20 — 13:57
(6) тебе камрад дал верный ответ в (10), скорее всего «Статус оплаты» — это реквизит документа (я не думаю, что по нему ведется история изменения, хотя кто знает, и тогда это запись регистра сведений), оттуда и надо брать данные для твоего отчета
12 — 31.08.20 — 14:15
(9) (11) В документе не установлены движения ни по каким регистрам и реквизит формы также ни к чему не отсылается, это реально просто поле, созданное на форме. Ну и дичь.
13 — 31.08.20 — 14:23
(12) Нажми правой кнопкой мыши на реквизит формы и посмотри Свойство «Данные», там прописывается откуда он берет данные
14 — 31.08.20 — 14:24
Нет.
Копай откуда эти реквизиты формы заполняются
15 — 31.08.20 — 14:24
(13) В пути к данным просто имя реквизита.
16 — 31.08.20 — 14:26
(15) А ниже в «Тип значения»? и там троеточие на «Данных» туда тоже щелкай
17 — 31.08.20 — 14:28
(14) Я так понял, значение реквизита меняется просто при создании документа оплаты типа Списание с расчетного счета. Ниоткуда он данные не берёт.
18 — 31.08.20 — 14:30
(16) Ничего нет, троеточие неактивно даже.
19 — 31.08.20 — 14:31
(18) В поле «Тип значения» тоже пусто?
20 — 31.08.20 — 14:34
(19) Я вот тоже недопираю куда ты его подводишь…
Вся эта нужная инфа в регистрах сведений хранится, в свойствах реквизитов формы ничего не найдет
21 — 31.08.20 — 14:37
(20) Кроме регистра сведений есть еще 3 регистра, и бывает такое что реквизита нет ни в одном регистре сведений, как его тогда вывести в СКД?
22 — 31.08.20 — 14:39
(21) Я хз о чем вы тут.
Человеку нужен статус и срок оплаты
И както странно сложилось, что в БП есть РегистрСведений.СтатусыДокументов и РегистрСведений.СрокиОплатыДокументов
23 — 31.08.20 — 14:39
(19) Нет такого. Покопался в коде формы, само по себе поле всё таки видимо создано тупо на форме, а данные берёт из РегистрыСведений.СтатусыДокументов.ПолучитьСтатусыДокумента(Ссылка, Организация).Статус
Там он, насколько я понимаю, в зависимости от документа подбирает статусы из некой Коллекции Статусов ну и видимо проверяет наличие связанных документов оплаты для определения статуса.
24 — 31.08.20 — 14:41
В общем, всем спасибо за наводки, дальше наверное сам разберусь =)
25 — 31.08.20 — 14:42
(23) Найдите в РегистрыСведений.СтатусыДокументов нужный Вам реквизит и присоединяйте в запросе СКД этот регистр с реквизитом левым соединением и будет Вам счастье
Pro-tone
26 — 31.08.20 — 16:45
(24) зайди в модуль формы документа «Счет», вбей в строку поиска по тексту кода имя твоего реквизита формы и увидишь где он заполняется в коде и откуда берутся данные заполнения
При создании отчетов с помощью системы компоновки данных (СКД) удобно выводить параметры отчета (хотя бы наиболее часто используемые) на форму, чтобы не заставлять пользователя копаться в стандартном окне настроек СКД.
Рассмотрим как это можно сделать на обычных формах 1С. Сразу оговоримся, что в этой статье будет рассматриваться именно вывод параметров на форму, т.е. сами параметры в СКД уже должны быть созданы.
Существует два способа вывода параметров СКД на обычную форму:
- вывод таблицы настроек параметров целиком
- вывод отдельных параметров в виде полей ввода.
Таблица настройки параметров, выводимая на форму, аналогична таблице настройки параметров, генерируемой средствами СКД. Для ее вывода на форму нужно создать элемент управления ТабличноеПоле, у которого в свойстве Данные указать КомпоновщикНастроек.Настройки.ПараметрыДанных
При этом пользователю будут показаны все параметры СКД, у которых не установлено ограничение доступности.

- Создадим реквизиты отчета, соответствующие параметрам. В нашем примере это будут реквизиты ДатаНачала, ДатаОкончания, Организация. Установим у них соответствующие типы данных.
- Создадим на форме поля ввода для каждого из параметров и свяжем их через свойство Данные с реквизитами отчета. Для каждого поля ввода хорошо бы рядом создать надпись с названием параметра, чтобы пользователь понимал, какой параметр он редактирует.
- Для каждого поля ввода нужно создать процедуру для обработчика событий ПриИзменении, которая будет устанавливать выбранное пользователем значение в параметры СКД. Я в примере создал одну процедуру и назначил ее на события изменения всех трех полей ввода. То есть при изменении одного параметра происходит переустановка всех трех. С точки зрения быстродействия это, скорее всего, не эффективно, но, т.к. параметров не много, разница не заметна. При большом количестве параметров стоит выводить установку каждого в отдельную процедуру. Итак, код процедуры для обработчика ПриИзменении будет выглядеть следующим образом:
Процедура ПараметрыПриИзменении(Элемент)ПараметрДатаНач = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(«НачалоПериода»); //Поиск производится по имени параметра СКД
ПараметрДатаНач.Использование = Истина; //Параметр будет использоваться при отборе
ПараметрДатаНач.Значение = ДатаНачала; //Параметру присваивается значение реквизита отчетаПараметрДатаКон = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(«КонецПериода»);
ПараметрДатаКон.Использование = Истина;
ПараметрДатаКон.Значение = КонецДня(ДатаОкончания);ПараметрОрг = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(«Организация»);
ПараметрОрг.Использование = Истина;
ПараметрОрг.Значение = Организация;КонецПроцедуры
как получить значение реквизита
Автор mashencev_anton, 29 мая 2015, 15:33
0 Пользователей и 1 гость просматривают эту тему.
в модуле объекта(внешняя обработка) программно вывожу отчет СКД. в качестве параметра СКД необходимо использовать значение реквизита формы. как мне его получить в модуле объекта?
его можно туда передать из модуля формы
Помогли — Скажи спасибо! Решил сам — поделись решением!
Цитата: Rasty от 29 мая 2015, 15:54
его можно туда передать из модуля формы
делаю вот так
в модуле формы:
&НаСервере
Процедура ТипЦенНаСервере()
ТипЦены=Объект.ТипЦен;
ОбъектОбъекта = РеквизитФормыВЗначение("Объект");
ОбъектОбъекта.ТипЦен(ТипЦены);
КонецПроцедуры
потом в модуле объекта
Перем пТипЦен;
Функция ТипЦен(ТипЦены) Экспорт
пТипЦен=ТипЦены;
КонецФункции
но не срабатывает
А что у вас в переменной ТипЦены? И почему бы ее не сделать Объектом Формы?
Помогли — Скажи спасибо! Решил сам — поделись решением!
вы сможете его получить из модуля объект обратившись по имени «ТипЦены» и из ссылки на документ
Помогли — Скажи спасибо! Решил сам — поделись решением!
да хоть отчет, сути не меняет
Помогли — Скажи спасибо! Решил сам — поделись решением!
и еще разок
сделайте ТипЦены не реквизитом формы, а реквизитом обработки, и вы сможете получить к ней прямой доступ!!!!!!!!!!!!!!! 
Помогли — Скажи спасибо! Решил сам — поделись решением!



