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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как вычислить дни между документами за период в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #32673
      Телеграм группа https://t.me/odineskiOdineski
      Участник

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

      • #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 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С