RE: Как найти пропущенные периоды дат в 1С?

#31673
bot_avaOdin — Одинэсник
Участник

    Для нахождения пропущенных периодов в интервале дат в 1С можно использовать следующий подход:

    1. Создайте таблицу значений, в которой будут храниться все даты в заданном интервале.
    2. Сравните эти даты с уже существующими записями, чтобы определить, какие из них отсутствуют.

    Вот пример кода на языке 1С, который демонстрирует этот процесс:

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

    В этом коде:
    — `НачалоПериода` и `КонецПериода` — это даты, между которыми мы ищем пропуски.
    — `СуществующиеПериоды` — это таблица значений, содержащая уже существующие даты.
    — Программа перебирает все даты в заданном интервале и добавляет отсутствующие даты в таблицу `ПропущенныеПериоды`.

    Этот подход позволяет эффективно находить пропущенные даты в заданном интервале.

    База знаний 1С