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

запрос выдает непонятную ошибку

Автор Dimon07, 04 фев 2019, 17:06

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

Dimon07

     Запрос = Новый Запрос; 

   Запрос.Текст = "ВЫБРАТЬ *
   | Из Документ.DМаршрутныеЛисты КАК ML
   | ГДЕ ( ML.Дата МЕЖДУ ДАТАВРЕМЯ( ГОД(&ДатаМЛ_), МЕСЯЦ(&ДатаМЛ_), ДЕНЬ(&ДатаМЛ_), 0, 0, 0 ) И
   |      ДАТАВРЕМЯ( ГОД(&ДатаМЛ_), МЕСЯЦ(&ДатаМЛ_), ДЕНЬ(&ДатаМЛ_), 23, 59, 59 ) )";
   
        dml_ = ТекущаяДата();
   Запрос.УстановитьПараметр( "ДатаМЛ_", dml_ );
   rq_ = Запрос.Выполнить().Выгрузить();

        при вызовее возникает ошибка:
{Обработка.JМаршрутныеЛисты.Форма.ФормаОбработкаУчетМЛ.Форма(2050)}: Ошибка при вызове метода контекста (Выполнить)
   rq_ = Запрос.Выполнить().Выгрузить();
по причине:
{(3, 33)}: Неверные параметры "ДАТАВРЕМЯ"
ГДЕ ( ML.Дата МЕЖДУ ДАТАВРЕМЯ( <<?>>ГОД(&ДатаМЛ_), МЕСЯЦ(&ДатаМЛ_), ДЕНЬ(&ДатаМЛ_), 0, 0, 0 ) И

Не пойму в чем ошибка!!!
Помогите, плиз...

alex0402

Используйте лучше НачалоПериода(,День) И КонецПериода(,День), а еще лучше подставляйте в параметры запроса "готовые" начало и конец дня...
Спасибо за Сказать спасибо

Dimon07

Цитата: alex0402 от 04 фев 2019, 17:10
Используйте лучше НачалоПериода(,День) И КонецПериода(,День), а еще лучше подставляйте в параметры запроса "готовые" начало и конец дня...

А ошибка то в чем?? Что функция ДАТАВРЕМЯ не может принять никакие параметры, кроме констант??
Все другие  - могут, а она не может...?? )))

antoneus

Да, не может. Она предназначена для явного задания даты в тексте запроса.

Dimon07

Цитата: antoneus от 04 фев 2019, 17:31
Да, не может. Она предназначена для явного задания даты в тексте запроса.
В таком случае, где ее можно вменяемо применять??
Ведь задание даты и времени в запросе константно
возможно может быть применимо ТОЛЬКО для консольной работы-отладки разработчика....
Почему этот нюанс нигде не раскрыт в мануалах и примерах??

antoneus

Ну, в основном применяется для получения значения пустой даты, чтобы не пулить в запрос лишние параметры (вроде функции ЗНАЧЕНИЕ).

LexaK

:D :D
вопрос на внимательность,
Какой запрос понятнее?

Запрос.Текст = "ВЫБРАТЬ *
   | Из Документ.DМаршрутныеЛисты КАК ML
   | ГДЕ ( ML.Дата МЕЖДУ ДАТАВРЕМЯ( ГОД(&ДатаМЛ_), МЕСЯЦ(&ДатаМЛ_), ДЕНЬ(&ДатаМЛ_), 0, 0, 0 ) И
   |      ДАТАВРЕМЯ( ГОД(&ДатаМЛ_), МЕСЯЦ(&ДатаМЛ_), ДЕНЬ(&ДатаМЛ_), 23, 59, 59 ) )";

или

Запрос.Текст = "ВЫБРАТЬ *
   | Из Документ.DМаршрутныеЛисты КАК ML
   | ГДЕ
   | ML.Дата МЕЖДУ &Дата1 и &Дата2";


если помогло нажмите: Спасибо!

antoneus

Ну и да, есть же НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА, зачем таких монстров громоздить?

Dimon07

Цитата: antoneus от 04 фев 2019, 17:52
Ну и да, есть же НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА, зачем таких монстров громоздить?

Решил проблему так:
     Запрос = Новый Запрос;     
   Запрос.Текст = "ВЫБРАТЬ *
   | Из Документ.DМаршрутныеЛисты КАК ML
   | ГДЕ ( ML.Дата МЕЖДУ &ds_ И &dp_ )";   
   Запрос.УстановитьПараметр( "ds_", Дата( Год( dml_ ), Месяц( dml_ ),День( dml_ ), 0, 0, 0 ) );
   Запрос.УстановитьПараметр( "dp_", Дата( Год( dml_ ), Месяц( dml_ ),День( dml_ ), 23, 59, 59 ) );   
   rq_ = Запрос.Выполнить().Выгрузить();

Как видно, кода меньше не стало. Просто он перенесен из запроса в модуль.

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

Ну да ладно. Может поправят в следующей версии...))

Спасибо всем за ответы.

LexaK

блин, да откуда вы (в смысле из какой среды программирования) ?

    Запрос.УстановитьПараметр( "ds_", Дата( Год( dml_ ), Месяц( dml_ ),День( dml_ ), 0, 0, 0 ) );
    Запрос.УстановитьПараметр( "dp_", Дата( Год( dml_ ), Месяц( dml_ ),День( dml_ ), 23, 59, 59 ) );   


так надо


    Запрос.УстановитьПараметр( "ds_", НачалоДня(dml_) );
    Запрос.УстановитьПараметр( "dp_", КонецДня(dml_) );   

если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск