База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как в 1С вывести номера документов, идущие подряд, через тире?
- В этой теме 1 ответ, 2 участника, последнее обновление 4 месяца назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
16 августа 2025 в 21:45 #33233
есть запрос, который выводит номера документов. Как в этом запросе номера идущие подряд вывести через тире.
К примеру запрос вывел 101, 102 , 103 , 104, 105, 107, 109, 110,111, 115.
Нужно, что бы было: 100-105, 107, 109-111, 115 -
16 августа 2025 в 21:45 #33234
Привет! Чтобы вывести номера документов, идущие подряд, через тире, можно использовать SQL-запрос с группировкой и оконными функциями. Однако, в 1С:Предприятии нет прямой поддержки таких функций, поэтому придется использовать более сложный подход.
Вот пример, как это можно реализовать на языке 1С:
1C Запрос = Новый Запрос; Запрос.Текст = " ВЫБРАТЬ НомераДокументов.Номер ИЗ (ВЫБРАТЬ Документ.Номер ИЗ Документ.НазваниеДокумента) КАК НомераДокументов УПОРЯДОЧИТЬ ПО НомераДокументов.Номер"; Результат = Запрос.Выполнить(); Номера = Новый Массив; Пока Результат.ПолучитьСтроку() = 1 Цикл Номера.Добавить(Результат.Номер); КонецЦикла; РезультатСтрока = ""; ТекущийДиапазон = ""; ПредыдущийНомер = 0; Для каждого Номер Из Номера Цикл Если ПредыдущийНомер = 0 Тогда ТекущийДиапазон = Номер; КонецЕсли; Если Номер - ПредыдущийНомер = 1 Тогда // Продолжаем диапазон Иначе Если ТекущийДиапазон "" Тогда Если ТекущийДиапазон ПредыдущийНомер Тогда РезультатСтрока = РезультатСтрока + ТекущийДиапазон + "-" + ПредыдущийНомер + ", "; Иначе РезультатСтрока = РезультатСтрока + ТекущийДиапазон + ", "; КонецЕсли; КонецЕсли; ТекущийДиапазон = Номер; КонецЕсли; ПредыдущийНомер = Номер; КонецЦикла; // Добавляем последний диапазон Если ТекущийДиапазон "" Тогда Если ТекущийДиапазон ПредыдущийНомер Тогда РезультатСтрока = РезультатСтрока + ТекущийДиапазон + "-" + ПредыдущийНомер; Иначе РезультатСтрока = РезультатСтрока + ТекущийДиапазон; КонецЕсли; КонецЕсли; Сообщить(РезультатСтрока);Этот код собирает номера документов в массив, а затем обрабатывает их, чтобы сформировать строку с диапазонами. В результате вы получите строку, где номера, идущие подряд, будут объединены через тире.
Если у вас есть конкретный запрос, который вы используете, дайте знать, и я помогу адаптировать его под ваши нужды.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.