7.7 Помогите с условием в запросе.

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем alp, 24 июн 2009.

  1. TopicStarter Overlay
    alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    Код:
    Запрос = СоздатьОбъект("Запрос");
    Месяц = "апрель";
    Год   = ДатаГод(НаДату);
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)
    |Номенклатура = Справочник.Номенклатура.ТекущийЭлемент;
    |Наименование = Справочник.Номенклатура.Наименование;
    |Условие (Найти(НРег(Наименование),""апрель"")>0);
    |Группировка Номенклатура все ВошедшиеВЗапрос;
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    Пока Запрос.Группировка()=1 Цикл
    Сообщить("да");
    КонецЦикла;
    
    
    так находит номенклатуру с наименование "апрель";
    Код:
    
    Запрос = СоздатьОбъект("Запрос");
    Месяц = ДатаМесяц(НаДату);
    Год   = ДатаГод(НаДату);
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)
    |Номенклатура = Справочник.Номенклатура.ТекущийЭлемент;
    |Наименование = Справочник.Номенклатура.Наименование;
    |Условие (Найти(НРег(Наименование),Месяц)>0);
    |Группировка Номенклатура все ВошедшиеВЗапрос;
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    Пока Запрос.Группировка()=1 Цикл
    Сообщить("да");
    КонецЦикла;
    
    
    а так нет , не пойму почему пишет :

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    {D:\RABOTA\БАЗЫ_77\ЦЕНТУРИОН\ТАКПРОСТО1.ERT(15)}: Условие (Найти(НРег(Наименование), <<?>> Месяц)>1);
    Запрос[4] : Ошибка в выражении 'Месяц'
    Помогите пожалуйся .
  2. smm
    Offline

    smm Опытный в 1С

    Регистрация:
    19 дек 2008
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    Во втором случае значение переменной Месяц-Число (в данном случае ДатаМесяц(НаДату)=4), а в запросе стоит проверка переменной, значение которой д.б. Строка
  3. TopicStarter Overlay
    alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    Проблема не в Этом , тут запрос ругается на синтаксис , а я не пойму почему )
  4. TopicStarter Overlay
    alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    Добавил функцию

    Код:
    Функция Найти2(Наим,Мес)
    Возврат Найти(Наим,Мес);
    КонецФункции
    
    ....
    
    
    |Условие (Найти2(Наименование,Месяц)>0);  // где в переменная Месяц  ="апрель";
    
    
    
    опять рурается на переменную месяц, хотя Если убрать 2-й параметр в функции и написать в ней просто :
    Мес ="апрель" , то все работает :unsure:
  5. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Может быть дело в том, что "Месяц" является служебным словом для запросов (используется для группировок). Попробуйте имя переменной заменить.
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Настоятельно не рекомендую применять вышеизложенный способ (вызов функции из условия запроса). Очень сильно замедляет формирование отчета. Альтернатива - выгрузить отчет в ТаблицуЗначений и там производить дейсвия по фильтрации
  7. TopicStarter Overlay
    alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    Изменил имя переменной , все заработало.
  8. TopicStarter Overlay
    alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    разницы я ни какой не увидел в быстроте формирования отчета, пробовал и так и так. Абсолютно одинако формирует.
  9. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Наверно монопольно, на локальной машине, на слегка заполненной базе :)
    Это идеальные условия, так, да еще и "на глаз" и не заметишь.
    Попробуй изменить эти условия, а для замера используй отладчик. Скорость изменяется в десятки раз (а иногда и в сотни).

Поделиться этой страницей