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

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

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

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

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

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

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

    // Возвращаем таблицу пропущенных периодов
    Возврат ПропущенныеПериоды;
КонецПроцедуры

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

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

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