Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 16:42

установка параметра запроса в управляемом приложении

Автор anonim1, 07 июл 2016, 13:14

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

anonim1

Добрый день.Помогите пожалуйста установить параметр запроса в управляемом приложении. На форме имеется 2 поля типа дата: начало периода и конец периода,для того, чтобы запрос осуществлялся между этими датами. В обычном приложении я обычно пишу ИмяПеременной=ЭлементыФормы.ИмяЭлементаФормы,  но в управляемом возникает ошибка, переменная Элементы формы не определена. Пробовал писать вместо ЭлементыФормы Объект, результат тот же, подскажите пожалуйста, как задать параметр запроса элемент формы поле дата в управляемом приложении,  ниже приведен код, где знак вопроса стоит там, где , как я полагаю, необходимо вставить ссылку на элемент формы тип дата,   
&НаСервереБезКонтекста
Процедура ВыгрузитьОтчетНаСервере()
   Попытка Эксель=Новый COMОбъект("Excel.Application")
      Исключение Сообщить(ОписаниеОшибки());
      КонецПопытки;
      Книга=Эксель.WorkBooks.Add();
      Лист=Книга.WorkSheets(1);
      
Запрос=Новый Запрос;
НачалоПериода=?;
КонецПериода=?;
Запрос.УстановитьПараметр("НачалоПериода",?НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода",?КонецПериода);

      Запрос.Текст="ВЫБРАТЬ
                   |   ЗаказКлиента.Номер,
                   |   ЗаказКлиента.Дата,
                   |   Номенклатура.Артикул,
                   |   Номенклатура.Код,
                   |   Номенклатура.Наименование,
                   |   ВидыЦенПоставщиков.ЦенаВключаетНДС КАК ЦенаВключаетНДС1,
                   |   ЗаказКлиента.СуммаДокумента
                   |ИЗ
                   |   Документ.ЗаказКлиента КАК ЗаказКлиента,
                   |   Справочник.Номенклатура КАК Номенклатура,
                   |   Справочник.ВидыЦенПоставщиков КАК ВидыЦенПоставщиков
                   |ГДЕ
                   |   ЗаказКлиента.Дата МЕЖДУ &НачалоПериода И &КонецПериода";
Выборка = Запрос.Выполнить().Выбрать(?,?);
НомерСтроки=1;   
ВсегоВыборка = Выборка.Количество();
Пока Выборка.Следующий() Цикл
//Состояние(Строка(НомерСтроки) + "/" + Строка(ВсегоВыборка));
Лист.Cells(НомерСтроки, 1).Value =Выборка.Номер;
Лист.Cells(НомерСтроки, 2).Value =Выборка.Дата;
Лист.Cells(НомерСтроки, 3).Value =Выборка.Код;
Лист.Cells(НомерСтроки, 4).Value =Выборка.Артикул;
//Лист.Cells(НомерСтроки, 5).Value = Выборка.Бренд;
Лист.Cells(НомерСтроки, 6).Value =Выборка.Наименование;
Лист.Cells(НомерСтроки, 7).Value =Выборка.ЦенаВключаетНДС1;
Лист.Cells(НомерСтроки, 8).Value =Выборка.СуммаДокумента;
//Лист.Cells(НомерСтроки, 9).Value = Выборка.Доставка;
//Лист.Cells(НомерСтроки, 10).Value = Выборка.ИтогоСебестоимость;
НомерСтроки=НомерСтроки+1;
КонецЦикла;                  
   ИмяФайла=Запрос.Выполнить().Выгрузить();
КонецПроцедуры

&НаКлиенте
Процедура ВыгрузитьОтчет(Команда)
       
   ВыгрузитьОтчетНаСервере();
    Попытка Эксель=Новый COMОбъект("Excel.Application")
      Исключение Сообщить(ОписаниеОшибки());
      КонецПопытки;
      Книга=Эксель.WorkBooks.Add();

    диалог= новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);

если диалог.Выбрать() тогда
               Попытка               
   Книга.SaveAs(диалог.ПолноеИмяФайла);
Исключение
   Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
КонецПопытки;
Эксель.Application.Quit();
КонецЕсли;
КонецПроцедуры

vitasw

Через основной реквизит формы, как правило "Объект"-> Объект.Дата

cska-fanat-kz

отдельную тему обязательно было создавать? :^454^:
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

anonim1

Благодарю  vitasw за помощь, но у меня неожиданно возникла новая проблема,  появляется ошибка <{Форма.Форма.Форма(34)}: Ошибка при вызове метода контекста (Выполнить)
Выборка = Запрос.Выполнить().Выбрать(НачалоПериода,КонецПериода);
по причине:
{(14, 20)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ЗаказКлиента.Дата <<?>>МЕЖДУ &НачалоПериода И &КонецПериода>

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

НачалоПериода= РеквизитФормыВЗначение("Объект",НачалоПериода);
КонецПериода=  РеквизитФормыВЗначение("Объект",КонецПериода);
Запрос.УстановитьПараметр("НачалоПериода",НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода",КонецПериода);

      Запрос.Текст="ВЫБРАТЬ
                   |   ЗаказКлиента.Номер,
                   |   Номенклатура.Артикул,
                   |   Номенклатура.Код,
                   |   Номенклатура.Наименование,
                   |   ВидыЦенПоставщиков.ЦенаВключаетНДС КАК ЦенаВключаетНДС1,
                   |   ЗаказКлиента.СуммаДокумента,
                   |   ЗаказКлиента.Дата
                   |ИЗ
                   |   Документ.ЗаказКлиента КАК ЗаказКлиента,
                   |   Справочник.Номенклатура КАК Номенклатура,
                   |   Справочник.ВидыЦенПоставщиков КАК ВидыЦенПоставщиков
                   |ГДЕ
                   |   ЗаказКлиента.Дата МЕЖДУ &НачалоПериода И &КонецПериода";

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

ilnur75

при работе с запросами есть функции работы с датами, в том числе
  начало периода(),
  конец(периода).

попробуйте сделать по аналогии
                ...
                |ГДЕ
      |   СформированныеБригадыСрезПоследних.Период >= &Дата
      |   И СформированныеБригадыСрезПоследних.Период < &ОкончаниеДня";
       
   Дата = НачалоДня(Объект.Дата);   
   ОкончаниеДня = КонецДня(Объект.Дата);
   
   Запрос.УстановитьПараметр("Дата", Дата);
   Запрос.УстановитьПараметр("ОкончаниеДня", ОкончаниеДня);
        ...

Добавлено: 11 июл 2016, 21:57


Цитата: anonim1 от 11 июл 2016, 21:02НачалоПериода= РеквизитФормыВЗначение("Объект",НачалоПериода);
КонецПериода=  РеквизитФормыВЗначение("Объект",КонецПериода);

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

по методике, пишут (передают) параметры запроса после текста запроса, а не до него, как у Вас,
может это ошибка? или без разницы , система сама догадывается?


cska-fanat-kz

Цитата: anonim1 от 11 июл 2016, 21:02почему то  появляется сообщение "Нельзя сравнивать поля неограниченной длины и поля несовместимых типов"
потому что...
Цитата: anonim1 от 11 июл 2016, 21:02НачалоПериода= РеквизитФормыВЗначение("Объект",НачалоПериода);
КонецПериода=  РеквизитФормыВЗначение("Объект",КонецПериода);

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск