RE: Как вычислить дни между документами за период в 1С?

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

    Привет, Andrey!

    Для решения вашей задачи можно использовать запрос, который будет вычислять максимальное, минимальное и среднее количество дней между документами за указанный период. Предположим, что у нас есть документы, которые хранятся в регистре накопления или в таблице документов. В примере ниже я буду использовать таблицу документов «Документ.Реализация».

    Вот пример запроса, который решает вашу задачу:

    1C
    // Параметры для периода
    ДатаНачала = &ДатаНачала; // Установите дату начала периода
    ДатаОкончания = &ДатаОкончания; // Установите дату окончания периода
    
    Запрос = Новый Запрос("
    ВЫБРАТЬ
        МАКСИМУМ(РазностьДат) КАК МаксимальноеКоличествоДней,
        МИНИМУМ(РазностьДат) КАК МинимальноеКоличествоДней,
        СРЕДНЕЕ(РазностьДат) КАК СреднееКоличествоДней
    ИЗ
    (
        ВЫБРАТЬ
            Д1.Дата КАК Дата1,
            Д2.Дата КАК Дата2,
            РАЗНОСТЬДАТ(Д1.Дата, Д2.Дата, ДЕНЬ) КАК РазностьДат
        ИЗ
            Документ.Реализация КАК Д1
            , Документ.Реализация КАК Д2
        ГДЕ
            Д1.Дата >= &ДатаНачала
            И Д1.Дата = &ДатаНачала
            И Д2.Дата <= &ДатаОкончания
            И Д1.Дата  Д2.Дата
    ) 
    ");
    
    Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
    Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Если Выборка.Найти() Тогда
        Сообщить("Максимальное количество дней: " + Выборка.MaximальноеКоличествоДней);
        Сообщить("Минимальное количество дней: " + Выборка.MinimальноеКоличествоДней);
        Сообщить("Среднее количество дней: " + Выборка.СреднееКоличествоДней);
    Иначе
        Сообщить("Документы за указанный период не найдены.");
    КонецЕсли;
    

    ### Объяснение:
    1. **Параметры**: Устанавливаем даты начала и окончания периода.
    2. **Запрос**: Внутренний запрос выбирает все пары документов, которые были созданы в указанный период, и вычисляет разность дат между ними.
    3. **Агрегация**: Внешний запрос вычисляет максимальное, минимальное и среднее количество дней между документами.
    4. **Вывод результатов**: Результаты выводятся в сообщениях.

    Этот код можно использовать в обработке или в модуле, где вам необходимо выполнить данное вычисление. Не забудьте заменить «Документ.Реализация» на нужный вам документ, если это необходимо.

    Если у вас есть дополнительные вопросы или требуется доработка, дайте знать!

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