Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Не работает условие "ГДЕ" в запросе.

Не работает условие "ГДЕ" в запросе.
Я
   Беата Смит
 
16.04.19 - 18:33
Добрый вечер! Задача вроде простейшая, но, видимо, не для моего мозга.
Короче, мне нужно получить список всех пятых дней недели за определенный период: дата пятого понедельника в месяце, дата пятого вторника в месяце и так далее...
Я написала запрос, который выводит весь список дат за период с названием дня недели (ДеньНедели) и его порядковым номером в месяце (НомерДняВМесяце).

                Запрос = Новый Запрос;
                Запрос.Текст = ("ВЫБРАТЬ
                |    КалендарныеГрафики.ДатаГрафика как ДатаГрафика,
                |     ДЕНЬНЕДЕЛИ(КалендарныеГрафики.ДатаГрафика) КАК ДеньНедели,
                |     (ВЫРАЗИТЬ((РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(КалендарныеГрафики.ДатаГрафика, МЕСЯЦ), КалендарныеГрафики.ДатаГрафика, ДЕНЬ) + 1) / 7 - 0.6 КАК ЧИСЛО(15, 0))) + 1 КАК НомерДняВМесяце
                |ИЗ
                |    РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики
                |ГДЕ
                |   КалендарныеГрафики.ДатаГрафика МЕЖДУ &НачДата И &КонДата
                |УПОРЯДОЧИТЬ ПО
                |    КалендарныеГрафики.ДатаГрафика ");    
                
                Запрос.УстановитьПараметр("НачДата", НачДата);
                Запрос.УстановитьПараметр("КонДата", КонДата);    
                Результат = Запрос.Выполнить().Выгрузить();
                для каждого строчки из результат цикл
                    сообщить(строчки.НомерДняВМесяце);
                конеццикла;

Я прогоняла проверку, считает он правильно. И в получающейся на выходе структуре есть поле НомерДняВМесяце, в котором попадаются цифры 5.
Но когда я дописываю условие

                |ГДЕ
                |   (КалендарныеГрафики.ДатаГрафика МЕЖДУ &НачДата И &КонДата) И (НомерДняВМесяце = 5)

Запрос тупо перестает работать. Я и скобки по-разному расставляла, и какие абсурдные идеи, типа той, где приводила НомерДняВМесяце к строке и писала

                |ГДЕ
                |   (КалендарныеГрафики.ДатаГрафика МЕЖДУ &НачДата И &КонДата) И (Представление(НомерДняВМесяце) = ""5"")

Не работает это условие. И все тут. Просто скажите, что я делаю не так?((( Я чувствую, что какой-то глупый косяк в моей голове и ответ совсем на поверхности. Но я уже сдалась. Хэлп!
 
 
   azernot
 
1 - 16.04.19 - 18:37
|ГДЕ 
|   (КалендарныеГрафики.ДатаГрафика МЕЖДУ &НачДата И &КонДата) И ( (ВЫРАЗИТЬ((РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(КалендарныеГрафики.ДатаГрафика, МЕСЯЦ), КалендарныеГрафики.ДатаГрафика, ДЕНЬ) + 1) / 7 - 0.6 КАК ЧИСЛО(15, 0))) + 1 = 5)
   Rie
 
2 - 16.04.19 - 18:38
(0) Зачем так сложно вычислять номер дня, если в языке запросов есть функция ДЕНЬ?
И тогда
ГДЕ (......) И (ДЕНЬ(КалендарныеГрафики.ДатаГрафика)=5)
   Черный маклер
 
3 - 16.04.19 - 18:45
как-то сложно
ГДЕ ... ДЕНЬ(КалендарныеГрафики.ДатаГрафика)-28 > 0
   Черный маклер
 
4 - 16.04.19 - 18:47
или
ГДЕ ... НЕДЕЛЯ(КалендарныеГрафики.ДатаГрафика)>4
   Черный маклер
 
5 - 16.04.19 - 18:47
+4 ошибочно
   Жан Пердежон
 
6 - 16.04.19 - 18:53
ГДЕ
   ...ДЕНЬ(КалендарныеГрафики.ДатаГрафика) > 28
   Sapiens_bru
 
7 - 16.04.19 - 19:04
(0) Условие в ГДЕ накладывается по тем же полям, которые могут быть получены в выборке, в секции ВЫРАЗИТЬ. Поэтому если вы в выборке пишите

(ВЫРАЗИТЬ((РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(КалендарныеГрафики.ДатаГрафика, МЕСЯЦ), КалендарныеГрафики.ДатаГрафика, ДЕНЬ) + 1) / 7 - 0.6 КАК ЧИСЛО(15, 0))) + 1 КАК НомерДняВМесяце 

То и в ГДЕ пишите
(ВЫРАЗИТЬ((РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(КалендарныеГрафики.ДатаГрафика, МЕСЯЦ), КалендарныеГрафики.ДатаГрафика, ДЕНЬ) + 1) / 7 - 0.6 КАК ЧИСЛО(15, 0))) + 1 = 5
   Беата Смит
 
8 - 16.04.19 - 19:22
(2) Ваш пример найдет 5 день в месяце, то есть 5 января, 5 февраля... а не 5ый понедельник, вторник и так далее в месяце)
   Беата Смит
 
9 - 16.04.19 - 19:27
(3) (6) Ну да, согласна, в случае с конкретно 5-м днем не было нужды вычислять все номера дней недели)
   Беата Смит
 
10 - 16.04.19 - 19:29
(1) (7) Да, мой косяк. Спасибо!

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.