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

Как вычислить дни м...
 

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


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

написать запрос или отработку которая считает за период документы - количество дней сколько прошло между двумя документами в данном периоде.(максимальное количество дней между документами, минимальное количество дней, среднее количество дней)



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

Привет, Andrey!

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

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

1C
// Параметры для периода
ДатаНачала = &ДатаНачала; // Установите дату начала периода
ДатаОкончания = &ДатаОкончания; // Установите дату окончания периода

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

Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Если Выборка.Найти() Тогда
    Сообщить("Максимальное количество дней: " + Выборка.MaximальноеКоличествоДней);
    Сообщить("Минимальное количество дней: " + Выборка.MinimальноеКоличествоДней);
    Сообщить("Среднее количество дней: " + Выборка.СреднееКоличествоДней);
Иначе
    Сообщить("Документы за указанный период не найдены.");
КонецЕсли;

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

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

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



   
ОтветитьЦитата