Версия для печати темы (https://pro1c.org.ua/index.php?s=6b3ba0883c85e367239c03d87aad22c5&showtopic=66983)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ выбрать период по месяцу

Автор: 4andriy 26.05.22, 16:47

на форме 2 значения:
ВыбНачПериода - я выбираю 22.01.2022
ВыбКонПериода - я выбираю 18.02.2022

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

Запрос = СоздатьОбъект("Запрос");
.........................
|Условие(отпуск > ВыбНачПериода);
|Условие(отпуск < ВыбКонПериода);
.........................


все работает. но мне нужно что-бы в запросе учитывались все значения где месяц с 01 по 02, и что-бы дату и год не учитывались
тоесть если я выбрал 22.01.2022 до 18.02.2022 в результате я хочу увидеть

01-02 - 2020 года
01-02 - 2021 года
01-02 - 2022 года

Автор: volodya1122 26.05.22, 17:30

В 1с8 я б зробив так: Текст умови програмно сформував.
В циклі
1. Перевів введені дати на початок і кінець місяця. На кожній ітерації циклу добавляти рік до кожної з дат (в обидві сторони)
2. умови обєднати приблизно так: ГДЕ (Отпуск>Д1 и Отпуск<Д2) Или (Отпуск>Д1 и Отпуск<Д2) Или (Отпуск>Д1 и Отпуск<Д2) - цей текст звичайно формується програмно в циклі . Де Д1 і Д2 на кожній ітерації вже конкретні визначені в циклі значення

3. В 1с7 незнаю чи подібним методом можна сформувати умову.
Тут скоріше потрібно формувати в циклі на кожен період повнісю текст запросу і обєднати ці запроси

p.s.
Ще можливо дуже спростити, якщо в запросі можна використати функцію (Месяц(Дата1). Поді просто порівняти номера місяців

Автор: 4andriy 27.05.22, 13:47

volodya1122 @ Вчера, 18:30 * ,
в версії 7.7 якраз треба

Автор: Profi_1C77 03.06.22, 12:32

4andriy @ 26.05.22, 16:47 * ,

ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)
    
    |ДатаДок = Документ.НалоговаяНакладная.ДатаДок;
    |НалоговаяНакладная = Документ.НалоговаяНакладная.ТекущийДокумент;
    |Функция Счётчик = Счётчик();
    |Группировка Месяц;
    
    |"//}}ЗАПРОС
;
    МаскаОтбораНачало= ДатаМесяц(ВыбНачПериода);
    МаскаОтбораКонец= ДатаМесяц(ВыбКонПериода);
    
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
        Если (ДатаМесяц(Запрос.ДатаДок) = МаскаОтбораНачало)  или (ДатаМесяц(Запрос.ДатаДок) = МаскаОтбораКонец) Тогда
            
        Таб.ВывестиСекцию("Месяц");
    КонецЕсли;
        
        // Заполнение полей Месяц
        
    КонецЦикла;


это хотели ?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua