Реквизит формы в параметр скд

Допустим, мы создали отчёт в конструкторе СКД, и нам нужно передать в него какой-то параметр.

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

Первым делом создаём форму отчёта. Добавляем реквизит формы, назовём его «НашаДата». Тип реквизита укажем – «Дата». Вынесем реквизит на форму.

Откроем свойства созданного поля на форме. Создадим обработчик события «ПриИзменении».

Теперь в модуле формы организуем передачу параметра в СКД.

Для случая, когда параметры уже созданы в СКД, и нам нужно передать только значения, код будет таким:

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
	ДатаПриИзмененииНаСервере();
КонецПроцедуры

&НаСервере
Процедура ДатаПриИзмененииНаСервере()
	
	ЭтаФорма.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Дата", ЭтаФорма.НашаДата);
	
КонецПроцедуры

В случае, когда параметры заданы в тексте запроса СКД, но не на вкладке «Параметры» конструктора, тогда код нужно настроить в соответствии со следующим примером:

Параметры = КомпоновщикНастроек.Настройки.ПараметрыДанных;
Параметр = Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПараметрУказанныйВЗапросе"));

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

    Параметр.Значение = ЗначениеКотороеМыХотимУстановить;
	Параметр.Использование = Истина;

КонецЕсли;
Информация о материале
Категория: Программирование 1С

Опубликовано: 14 сентября 2016

Функция ПолучитьЗначениеПараметра (НазваниеПараметра)  Экспорт

Для  Каждого Элемент ИЗ КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл

Если  Строка(Элемент.Параметр) = НазваниеПараметра Тогда

Возврат Элемент.Значение;

КонецЕсли;

КонецЦикла;

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

Функция ПолучитьЗначениеОтбора (НазваниеОтбора)  Экспорт

Для  Каждого Элемент ИЗ   КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл

Если  Строка(Элемент.ЛевоеЗначение) = НазваниеОтбора Тогда

Если Элемент.Использование Тогда

ВидСравненияСтрока = «»;

Если  Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда

ВидСравненияСтрока = «=»;

ИначеЕсли  Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше Тогда

ВидСравненияСтрока = «<«;

ИначеЕсли  Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно Тогда

ВидСравненияСтрока = «<=»;

ИначеЕсли  Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше Тогда

ВидСравненияСтрока = «>»;

ИначеЕсли  Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно Тогда

ВидСравненияСтрока = «>=»;

КонецЕсли; 

СтруктураОтбора = Новый Структура  («ВидСравнения, ВидСравненияСтрока, ЗначениеОтбора», Элемент.ВидСравнения, ВидСравненияСтрока, Элемент.ПравоеЗначение) ; 

Возврат СтруктураОтбора;

КонецЕсли;

КонецЕсли;

КонецЦикла;

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

Процедура УстановитьЗначениеПараметра (НазваниеПараметра, ЗначениеПараметра) Экспорт

Для  Каждого Элемент ИЗ КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл

Если  Строка(Элемент.Параметр) = НазваниеПараметра Тогда

Элемент.Значение = ЗначениеПараметра ;

Элемент.Использование = Истина;

КонецЕсли;

КонецЦикла;

КонецПроцедуры

Процедура УстановитьЗначениеОтбора (НазваниеОтбора, ЗначениеОтбора, ВидСравнения, Использование = ИСТИНА) Экспорт 

Для  Каждого Элемент ИЗ   КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл

Если  Строка(Элемент.ЛевоеЗначение) = НазваниеОтбора Тогда

Элемент.ВидСравнения = ВидСравнения;

Элемент.ПравоеЗначение = ЗначениеОтбора ;

Элемент.Использование = Использование;

КонецЕсли;

КонецЦикла;

КонецПроцедуры

Функция ВернутьЗначениеПараметраНастройкиСКД(ИмяНастройки, ЗначениеПоУмолчанию = Неопределено) Экспорт

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

Если Настройка = Неопределено Тогда 

Возврат 

ЗначениеПоУмолчанию; 

КонецЕсли;

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

Если НастройкаПоИД = Неопределено Тогда 

Возврат 

ЗначениеПоУмолчанию; 

КонецЕсли;

Если Не ЗначениеЗаполнено(НастройкаПоИД.Значение) Тогда 

Если Не ЗначениеПоУмолчанию = Неопределено Тогда

НастройкаПоИД.Значение = ЗначениеПоУмолчанию;

КонецЕсли;

КонецЕсли;

Возврат ?(НастройкаПоИД.Использование, НастройкаПоИД.Значение, ЗначениеПоУмолчанию); 

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

Реквизит формы в СКД

Я
   Filkkore

31.08.20 — 12:36

БП 3.0

Реально ли вообще запихнуть в СКД реквизит формы документа? Подскажите пожалуйста, если сталкивались с подобным.

   butterbean

1 — 31.08.20 — 12:48

что значит «запихнуть»?

   Filkkore

2 — 31.08.20 — 12:51

(1) Ну воспользоваться реквизитом формы в условии отчета на СКД например.

   butterbean

3 — 31.08.20 — 12:51

через параметры можно

   Filkkore

4 — 31.08.20 — 12:52

(3) А где и как передать этот реквизит в параметр?

   Pro-tone

5 — 31.08.20 — 13:00

А зачем? Что сделать-то хочешь?

   Filkkore

6 — 31.08.20 — 13:05

(5) Нужен отчет по Счетам от поставщиков, в который попадают не оплаченные или просроченные счета. А реквизиты СтатусДокумента и СрокОплаты являются реквизитами формы.

   D_E_S_131

7 — 31.08.20 — 13:42

(6) Ну так если это отчет, то в настройке параметров можно поставить отображение на форме.

   Энштейн 1С

8 — 31.08.20 — 13:48

(0) Брать данные из документов для отчетов плохой тон и презрение архитекторов 1С

   Энштейн 1С

9 — 31.08.20 — 13:48

(0) Данные надо брать из регистров

   Энштейн 1С

10 — 31.08.20 — 13:50

(6) Реквизиты формы, скорее всего берутся из реквизитов документов, поищи куда ссылается реквизит формы и его уже выводи в СКД

   Pro-tone

11 — 31.08.20 — 13:57

(6) тебе камрад дал верный ответ в (10), скорее всего «Статус оплаты» — это реквизит документа (я не думаю, что по нему ведется история изменения, хотя кто знает, и тогда это запись регистра сведений), оттуда и надо брать данные для твоего отчета

   Filkkore

12 — 31.08.20 — 14:15

(9) (11) В документе не установлены движения ни по каким регистрам и реквизит формы также ни к чему не отсылается, это реально просто поле, созданное на форме. Ну и дичь.

   Энштейн 1С

13 — 31.08.20 — 14:23

(12) Нажми правой кнопкой мыши на реквизит формы и посмотри Свойство «Данные», там прописывается откуда он берет данные

   s_newbi

14 — 31.08.20 — 14:24

Нет.

Копай откуда эти реквизиты формы заполняются

   Filkkore

15 — 31.08.20 — 14:24

(13) В пути к данным просто имя реквизита.

   Энштейн 1С

16 — 31.08.20 — 14:26

(15) А ниже в «Тип значения»? и там троеточие на «Данных» туда тоже щелкай

   Filkkore

17 — 31.08.20 — 14:28

(14) Я так понял, значение реквизита меняется просто при создании документа оплаты типа Списание с расчетного счета. Ниоткуда он данные не берёт.

   Filkkore

18 — 31.08.20 — 14:30

(16) Ничего нет, троеточие неактивно даже.

   Энштейн 1С

19 — 31.08.20 — 14:31

(18) В поле «Тип значения» тоже пусто?

   s_newbi

20 — 31.08.20 — 14:34

(19) Я вот тоже недопираю куда ты его подводишь…

Вся эта нужная инфа в регистрах сведений хранится, в свойствах реквизитов формы ничего не найдет

   Энштейн 1С

21 — 31.08.20 — 14:37

(20) Кроме регистра сведений есть еще 3 регистра, и бывает такое что реквизита нет ни в одном регистре сведений, как его тогда вывести в СКД?

   s_newbi

22 — 31.08.20 — 14:39

(21) Я хз о чем вы тут.

Человеку нужен статус и срок оплаты

И както странно сложилось, что в БП есть РегистрСведений.СтатусыДокументов и РегистрСведений.СрокиОплатыДокументов

   Filkkore

23 — 31.08.20 — 14:39

(19) Нет такого. Покопался в коде формы, само по себе поле всё таки видимо создано тупо на форме, а данные берёт из РегистрыСведений.СтатусыДокументов.ПолучитьСтатусыДокумента(Ссылка, Организация).Статус

Там он, насколько я понимаю, в зависимости от документа подбирает статусы из некой Коллекции Статусов ну и видимо проверяет наличие связанных документов оплаты для определения статуса.

   Filkkore

24 — 31.08.20 — 14:41

В общем, всем спасибо за наводки, дальше наверное сам разберусь =)

   Энштейн 1С

25 — 31.08.20 — 14:42

(23) Найдите в РегистрыСведений.СтатусыДокументов нужный Вам реквизит и присоединяйте в запросе СКД этот регистр с реквизитом левым соединением и будет Вам счастье

  

Pro-tone

26 — 31.08.20 — 16:45

(24) зайди в модуль формы документа «Счет», вбей в строку поиска по тексту кода имя твоего реквизита формы и увидишь где он заполняется в коде и откуда берутся данные заполнения

При создании отчетов с помощью системы компоновки данных (СКД) удобно выводить параметры отчета (хотя бы наиболее часто используемые) на форму, чтобы не заставлять пользователя копаться в стандартном окне настроек СКД.

Рассмотрим как это можно сделать на обычных формах 1С. Сразу оговоримся, что в этой статье будет рассматриваться именно вывод параметров на форму, т.е. сами параметры в СКД уже должны быть созданы.

Существует два способа вывода параметров СКД на обычную форму:

  • вывод таблицы настроек параметров целиком
  • вывод отдельных параметров в виде полей ввода.

Таблица настройки параметров, выводимая на форму, аналогична таблице настройки параметров, генерируемой средствами СКД. Для ее вывода на форму нужно создать элемент управления ТабличноеПоле, у которого в свойстве Данные указать КомпоновщикНастроек.Настройки.ПараметрыДанных 

Вывод параметров отчета на СКД на обычную форму 1С

При этом пользователю будут показаны все параметры СКД, у которых не установлено ограничение доступности.

Вывод параметров отчета на СКД на обычную форму 1СОднако, в ряде случаев этот способ может показаться не столь красивым и не очень удобным для пользователя. Рассмотрим, как вывести на форму параметры СКД по отдельности в виде обычных полей ввода.

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

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

    ПараметрДатаКон = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(«КонецПериода»);
    ПараметрДатаКон.Использование = Истина;
    ПараметрДатаКон.Значение  = КонецДня(ДатаОкончания);

    ПараметрОрг = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(«Организация»);
    ПараметрОрг.Использование = Истина;
    ПараметрОрг.Значение  = Организация;

    КонецПроцедуры

как получить значение реквизита

Автор mashencev_anton, 29 мая 2015, 15:33

0 Пользователей и 1 гость просматривают эту тему.

  в модуле объекта(внешняя обработка)  программно вывожу отчет СКД. в качестве параметра СКД необходимо использовать значение реквизита формы. как мне его получить в модуле объекта?


его можно туда передать из модуля формы

Помогли — Скажи спасибо! Решил сам — поделись решением!
:)


Цитата: Rasty от 29 мая 2015, 15:54
его можно туда передать из модуля формы

делаю вот так
в модуле формы:

&НаСервере
Процедура  ТипЦенНаСервере() 
ТипЦены=Объект.ТипЦен;
ОбъектОбъекта = РеквизитФормыВЗначение("Объект");
ОбъектОбъекта.ТипЦен(ТипЦены);
КонецПроцедуры

потом в модуле объекта


Перем пТипЦен;

Функция   ТипЦен(ТипЦены)   Экспорт

пТипЦен=ТипЦены;
         
КонецФункции


но не срабатывает


А что у вас в переменной ТипЦены? И почему бы ее не сделать Объектом Формы?

Помогли — Скажи спасибо! Решил сам — поделись решением!
:)



вы сможете его получить из модуля объект обратившись по имени «ТипЦены» и из ссылки на документ

Помогли — Скажи спасибо! Решил сам — поделись решением!
:)



да хоть отчет, сути не меняет

Помогли — Скажи спасибо! Решил сам — поделись решением!
:)



и еще разок
сделайте ТипЦены не реквизитом формы, а реквизитом обработки, и вы сможете получить к ней прямой доступ!!!!!!!!!!!!!!! ui;;t;

Помогли — Скажи спасибо! Решил сам — поделись решением!
:)


Понравилась статья? Поделить с друзьями:

Вот еще несколько интересных статей нашего сайта:

  • Монгольские компании в москве
  • Мондиал бизнес консорциум ооо
  • Монетка реквизиты организации
  • Монополия на большую компанию
  • Монопольные компании в россии

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии