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