Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как передать данные из формы отчёта в параметры запроса?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Система компоновки данных
Powerman
Сделал отчёт, всё работает, но захотелось вынести настройки периода на форму отчёта.

На форму добавил поля ввода НачалоПериода и КонецПериода но вот как передать значения даты в параметры запроса и сформировать запрос из процедуры не могу разобраться (параметры в запросе так же называются НачалоПериода и КонецПериода) . Понял только что стандартной кнопкой «Сформировать» запрос с моими параметрами даты получить не получится, поэтому на стандартную кнопку повесил событие (процедуру) ДействияФормыОсновныеСформировать где и собирался передавать параметры в запрос.

Подскажите, пожалуйста, как реализовать задумку.

Заранее спасибо!
logist
Не надо никаких дополнительных кнопок.
Параметры передаются так же как и при обычной работе с запросом.
Запрос.УстановитьПараметр("ИмяПараметра", РеквизитФормыСодержащийПараметр);
Powerman
Цитата(logist @ 01.07.12, 20:13) необходимо зарегистрироваться для просмотра ссылки
Не надо никаких дополнительных кнопок.
Параметры передаются так же как и при обычной работе с запросом.
Запрос.УстановитьПараметр("ИмяПараметра", РеквизитФормыСодержащийПараметр);


Где это прописать?


 i 

Не надо писать большими буквами!
 
logist
Цитата(Powerman @ 01.07.12, 20:28) необходимо зарегистрироваться для просмотра ссылки
Где это прописать?

Там же где создаете запрос, текст запроса, перед Запрос.Выполнить()
Powerman
Цитата(logist @ 01.07.12, 22:40) необходимо зарегистрироваться для просмотра ссылки
Там же где создаете запрос, текст запроса, перед Запрос.Выполнить()


Я отчёт делал через СКД т.е. текста запроса я не вижу, форму отчёта я также делал ручками в модуле формы и объекта ничего не было. Отчёт при этом исправно работал.




 ! 

Правила, п. 13
 


Хотел написать, не вижу обработки запроса, ту часть, где подставляются параметры.
Batchir
Ну тогда прописывать установку параметров программно.
типа
СхемаКомпоновкиДанных.Параметры["НачалоПериода"].Значение =НачалоДня(НачалоПериода);


или вариант №2 - это поместить на форму таблицу значений, а у неё выбрать доступный тип, который будет содержать параметры компановки.
logist
Цитата(Powerman @ 02.07.12, 7:41) необходимо зарегистрироваться для просмотра ссылки
Я отчёт делал через СКД

А сразу об это написать было сложно? И у нас для этого специальный раздел есть необходимо зарегистрироваться для просмотра ссылки

Даже если Вы сами рисовали форму, то в ней должен быть объект "отчет" в котором есть Компоновщик настроек, который содержит "Пользовательские настройки" это и есть таблица настроек параметры из которой попадают в СКД как Параметры указанные в схеме на вкладке на вкладке параметры.
Если в запросе указать необходимые параметры то они автоматически попадут на эту вкладу, и станут доступными пользователю если на вкладке "Настройки" - > Параметры указать в их свойствах "Включать в пользовательские настройки"
Powerman
Цитата(Batchir @ 02.07.12, 8:15) необходимо зарегистрироваться для просмотра ссылки
Ну тогда прописывать установку параметров программно.
типа
СхемаКомпоновкиДанных.Параметры["НачалоПериода"].Значение =НачалоДня(НачалоПериода);

или вариант №2 - это поместить на форму таблицу значений, а у неё выбрать доступный тип, который будет содержать параметры компановки.


Написал первый вариант, но значения в СКД не записываются.

Что необходимо написать, что бы в СКД записались значения параметров? (для первого варианта решения)

Batchir
Цитата(Powerman @ 03.07.12, 7:39) необходимо зарегистрироваться для просмотра ссылки
Написал первый вариант, но значения в СКД не записываются.

Подробнее ... что и где написали.
Powerman
Цитата(Batchir @ 03.07.12, 8:25) необходимо зарегистрироваться для просмотра ссылки
Подробнее ... что и где написали.


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

Процедура СформироватьОтчет(Результат = Неопределено, ДанныеРасшифровки = Неопределено, ВыводВФормуОтчета = Истина, ВнешниеНаборыДанных = Неопределено) Экспорт
    
    // Проверим заполнение обязательных реквизитов
    Если ПроверитьЗаполнениеОбязательныхРеквизитов() Тогда
        Возврат;
    КонецЕсли;
    
    Результат.Очистить();
    
    СхемаКомпоновкиДанных.Параметры["НачалоПериода"].Значение =НачалоДня(НачалоПериода);
    СхемаКомпоновкиДанных.Параметры["КонецПериода"].Значение =НачалоДня(КонецПериода);
    
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    ДоработатьКомпоновщикПередВыводом(ВнешниеНаборыДанных);
    КомпоновщикНастроек.Восстановить();
    НастройкаКомпоновкиДанных = КомпоновщикНастроек.ПолучитьНастройки();
    КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
    СтандартныеОтчеты.ВывестиОтчет(ЭтотОбъект, Результат, ДанныеРасшифровки, ВыводВФормуОтчета, ВнешниеНаборыДанных, Истина, НастройкаКомпоновкиДанных);
    
    // Выполним дополнительную обработку Результата отчета
    //ОбработкаРезультатаОтчета(Результат);
КонецПроцедуры
logist
Синтаксис-помощник: ПользовательскиеНастройкиКомпоновкиДанных
Batchir
//Получаем схему из макета
    ТекущаяСхемаКомпоновкиДанных = ПолучитьМакет("МояСКД");
    
    //Устанавливаем параметры
    ТекущаяСхемаКомпоновкиДанных.Параметры["НачалоПериода"].Значение =НачалоДня(НачалоПериода);
    ТекущаяСхемаКомпоновкиДанных.Параметры["КонецПериода"].Значение =КонецДня(КонецПериода);
    
    //Из схемы возьмем настройки по умолчанию
    Настройки = ТекущаяСхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    
    //Помещаем в переменную данные о расшифровке данных
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    
    //Формируем макет, с помощью компоновщика макета
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    //Передаем в макет компоновки схему, настройки и данные расшифровки
    МакетКомпоновки = КомпоновщикМакета.Выполнить(ТекущаяСхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    
    //Выполним компоновку с помощью процессора компоновки
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    //Очищаем поле табличного документа
    Результат = ЭлементыФормы.Результат;
    Результат.Очистить();
    
    //Выводим результат в табличный документ
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Результат);
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

logist
Блин, ну зачем такие сложности?)) Можно же просто вывести на форму пользовательские настройки..
Vofka
Цитата(Powerman @ 03.07.12, 9:18) необходимо зарегистрироваться для просмотра ссылки
Дали кучу работы некогда умные книги почитать.

faceoff.gif

Цитата(logist @ 03.07.12, 9:46) необходимо зарегистрироваться для просмотра ссылки
Можно же просто вывести на форму пользовательские настройки..

Если интерфейс управляемый
Batchir
Цитата(logist @ 03.07.12, 9:46) необходимо зарегистрироваться для просмотра ссылки
Блин, ну зачем такие сложности?)) Можно же просто вывести на форму пользовательские настройки..

Можно, а юзабилити?

Цитата(Vofka @ 03.07.12, 9:47) необходимо зарегистрироваться для просмотра ссылки
Если интерфейс управляемый

Да можно и для обычного, но выглядеть это будет в виде таблицы
Vofka
Цитата(Batchir @ 03.07.12, 9:51) необходимо зарегистрироваться для просмотра ссылки
Да можно и для обычного, но выглядеть это будет в виде таблицы

Не, таблица - это вчерашний день.
Batchir
Цитата(Vofka @ 03.07.12, 9:53) необходимо зарегистрироваться для просмотра ссылки
Не, таблица - это вчерашний день.

я ж о том же, что если задача стоит "тупо сделать", тогда таблицу на форму с нужным типом и все параметры будут автоматом заполняться, нужно только значения выбрать.
Если нужна красота, то ручками всё писать.
Powerman
Цитата(Batchir @ 03.07.12, 9:44) необходимо зарегистрироваться для просмотра ссылки
//Получаем схему из макета
    ТекущаяСхемаКомпоновкиДанных = ПолучитьМакет("МояСКД");
    
    //Устанавливаем параметры
    ТекущаяСхемаКомпоновкиДанных.Параметры["НачалоПериода"].Значение =НачалоДня(НачалоПериода);
    ТекущаяСхемаКомпоновкиДанных.Параметры["КонецПериода"].Значение =КонецДня(КонецПериода);
    
    //Из схемы возьмем настройки по умолчанию
    Настройки = ТекущаяСхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    
    //Помещаем в переменную данные о расшифровке данных
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    
    //Формируем макет, с помощью компоновщика макета
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    //Передаем в макет компоновки схему, настройки и данные расшифровки
    МакетКомпоновки = КомпоновщикМакета.Выполнить(ТекущаяСхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    
    //Выполним компоновку с помощью процессора компоновки
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    //Очищаем поле табличного документа
    Результат = ЭлементыФормы.Результат;
    Результат.Очистить();
    
    //Выводим результат в табличный документ
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Результат);
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);




Эта процедура должна быть в модуле формы?

Моя процедура СформироватьОтчет в модуле объекта, при проверке синтаксиса выдаёт ошибку: {ВнешнийОтчет.КонтрольРНДоверНакл.МодульОбъекта(39,17)}: Переменная не определена (ЭлементыФормы)

Результат = <<?>>ЭлементыФормы.Результат; (Проверка: Толстый клиент (обычное приложение))
Batchir
1. Я привел пример реализации программного формирования и вывода отчета СКД, по которому Вы сможете написать то что Вам нужно

2. Что такое Результат в Вашей процедуре? В моем примере это поле табличного документа на форме.
logist
Цитата(Powerman @ 03.07.12, 10:06) необходимо зарегистрироваться для просмотра ссылки
Результат = <<?>>ЭлементыФормы.Результат; (Проверка: Толстый клиент (обычное приложение))

Нельзя в модуле объекта обращается к элементам формы.
Vofka
Цитата(logist @ 03.07.12, 10:37) необходимо зарегистрироваться для просмотра ссылки
Нельзя в модуле объекта обращается к элементам формы.

Более того, даже в модуле формы в УФ конструкция ЭлементыФормы будет выдавать ошибку. Ну а шо ж вы все хотели?
Цитата(Powerman @ 03.07.12, 9:18) необходимо зарегистрироваться для просмотра ссылки
некогда умные книги почитать.

Powerman
Цитата(Batchir @ 03.07.12, 10:29) необходимо зарегистрироваться для просмотра ссылки
1. Я привел пример реализации программного формирования и вывода отчета СКД, по которому Вы сможете написать то что Вам нужно

2. Что такое Результат в Вашей процедуре? В моем примере это поле табличного документа на форме.



В моём случае Результат это: ЭтаФорма.ЭлементыФормы.Результат

Если я правильно понял…




Процедура ОбновитьОтчет() Экспорт
      
      СформироватьОтчет(ЭтаФорма.ЭлементыФормы.Результат, ДанныеРасшифровки, Ложь);
      
  КонецПроцедуры


Batchir
Цитата(Powerman @ 03.07.12, 10:50) необходимо зарегистрироваться для просмотра ссылки
В моём случае Результат это: ЭтаФорма.ЭлементыФормы.Результат

Ну я так полагаю что это то что нужно, далее разгоняем процессор и модернизируем участок кода который выдавал ошибку
Powerman
Цитата(Batchir @ 03.07.12, 11:11) необходимо зарегистрироваться для просмотра ссылки
Ну я так полагаю что это то что нужно, далее разгоняем процессор и модернизируем участок кода который выдавал ошибку

Если бы ещё знать как это делать… why.gif

Запустить выполнение отчёта перехватить значения Результат проанализировать данные и добавить "НачалоПериода" "КонецПериода"?

Batchir
Попробуйте мой код поместить в Вашу процедуру , но
удалить строчку
Результат = ЭлементыФормы.Результат;

Виктор Фёдорович
Цитата(Batchir @ 03.07.12, 11:11) необходимо зарегистрироваться для просмотра ссылки
Ну я так полагаю что это то что нужно, далее разгоняем процессор и модернизируем участок кода который выдавал ошибку

И мне разгоните процессор, очень надо, тормозит просто жуть и ошибки постоянно лезут.
Николай Азаров
Цитата(Виктор Фёдорович @ 03.07.12, 13:14) необходимо зарегистрироваться для просмотра ссылки
И мне разгоните процессор, очень надо, тормозит просто жуть и ошибки постоянно лезут.

rulez.gif
alex_shkut
Можно немного проще: в 3 события добавить код
1. ВыборПериодаНажатие
2. НачалоПериодаПриИзменении
3. КонецПериодаПриИзменении

КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода", НачалоПериода);
КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода", КонецПериода);

и все...
Ну, соответственно в последние два события можно поместить по одной соответствующей строчке. Не обязательно обновлять оба параметра.


 ! 

Правила, п. 12
 
Powerman
Цитата(alex_shkut @ 05.07.12, 10:21) необходимо зарегистрироваться для просмотра ссылки
Можно немного проще: в 3 события добавить код
1. ВыборПериодаНажатие
2. НачалоПериодаПриИзменении
3. КонецПериодаПриИзменении

КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода", НачалоПериода);
КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода", КонецПериода);
и все...
Ну, соответственно в последние два события можно поместить по одной соответствующей строчке. Не обязательно обновлять оба параметра.




Огромное спасибо!

Заработало всё как я хотел. icon_beer17.gif




Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.