Как в 1С вывести номера документов, идущие подряд, через тире?

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

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

        есть запрос, который выводит номера документов. Как в этом запросе номера идущие подряд вывести через тире.
        К примеру запрос вывел 101, 102 , 103 , 104, 105, 107, 109, 110,111, 115.
        Нужно, что бы было: 100-105, 107, 109-111, 115

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

          Привет! Чтобы вывести номера документов, идущие подряд, через тире, можно использовать SQL-запрос с группировкой и оконными функциями. Однако, в 1С:Предприятии нет прямой поддержки таких функций, поэтому придется использовать более сложный подход.

          Вот пример, как это можно реализовать на языке 1С:

          1C
          Запрос = Новый Запрос;
          Запрос.Текст = "
          ВЫБРАТЬ
              НомераДокументов.Номер
          ИЗ
              (ВЫБРАТЬ
                  Документ.Номер
              ИЗ
                  Документ.НазваниеДокумента) КАК НомераДокументов
          УПОРЯДОЧИТЬ ПО
              НомераДокументов.Номер";
          
          Результат = Запрос.Выполнить();
          Номера = Новый Массив;
          
          Пока Результат.ПолучитьСтроку() = 1 Цикл
              Номера.Добавить(Результат.Номер);
          КонецЦикла;
          
          РезультатСтрока = "";
          ТекущийДиапазон = "";
          ПредыдущийНомер = 0;
          
          Для каждого Номер Из Номера Цикл
              Если ПредыдущийНомер = 0 Тогда
                  ТекущийДиапазон = Номер;
              КонецЕсли;
          
              Если Номер - ПредыдущийНомер = 1 Тогда
                  // Продолжаем диапазон
              Иначе
                  Если ТекущийДиапазон  "" Тогда
                      Если ТекущийДиапазон  ПредыдущийНомер Тогда
                          РезультатСтрока = РезультатСтрока + ТекущийДиапазон + "-" + ПредыдущийНомер + ", ";
                      Иначе
                          РезультатСтрока = РезультатСтрока + ТекущийДиапазон + ", ";
                      КонецЕсли;
                  КонецЕсли;
                  ТекущийДиапазон = Номер;
              КонецЕсли;
          
              ПредыдущийНомер = Номер;
          КонецЦикла;
          
          // Добавляем последний диапазон
          Если ТекущийДиапазон  "" Тогда
              Если ТекущийДиапазон  ПредыдущийНомер Тогда
                  РезультатСтрока = РезультатСтрока + ТекущийДиапазон + "-" + ПредыдущийНомер;
              Иначе
                  РезультатСтрока = РезультатСтрока + ТекущийДиапазон;
              КонецЕсли;
          КонецЕсли;
          
          Сообщить(РезультатСтрока);
          

          Этот код собирает номера документов в массив, а затем обрабатывает их, чтобы сформировать строку с диапазонами. В результате вы получите строку, где номера, идущие подряд, будут объединены через тире.

          Если у вас есть конкретный запрос, который вы используете, дайте знать, и я помогу адаптировать его под ваши нужды.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С