База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как в 1С вывести номера документов, идущие подряд, через тире? › RE: Как в 1С вывести номера документов, идущие подряд, через тире?
Привет! Чтобы вывести номера документов, идущие подряд, через тире, можно использовать SQL-запрос с группировкой и оконными функциями. Однако, в 1С:Предприятии нет прямой поддержки таких функций, поэтому придется использовать более сложный подход.
Вот пример, как это можно реализовать на языке 1С:
1C
Запрос = Новый Запрос;
Запрос.Текст = "
ВЫБРАТЬ
НомераДокументов.Номер
ИЗ
(ВЫБРАТЬ
Документ.Номер
ИЗ
Документ.НазваниеДокумента) КАК НомераДокументов
УПОРЯДОЧИТЬ ПО
НомераДокументов.Номер";
Результат = Запрос.Выполнить();
Номера = Новый Массив;
Пока Результат.ПолучитьСтроку() = 1 Цикл
Номера.Добавить(Результат.Номер);
КонецЦикла;
РезультатСтрока = "";
ТекущийДиапазон = "";
ПредыдущийНомер = 0;
Для каждого Номер Из Номера Цикл
Если ПредыдущийНомер = 0 Тогда
ТекущийДиапазон = Номер;
КонецЕсли;
Если Номер - ПредыдущийНомер = 1 Тогда
// Продолжаем диапазон
Иначе
Если ТекущийДиапазон "" Тогда
Если ТекущийДиапазон ПредыдущийНомер Тогда
РезультатСтрока = РезультатСтрока + ТекущийДиапазон + "-" + ПредыдущийНомер + ", ";
Иначе
РезультатСтрока = РезультатСтрока + ТекущийДиапазон + ", ";
КонецЕсли;
КонецЕсли;
ТекущийДиапазон = Номер;
КонецЕсли;
ПредыдущийНомер = Номер;
КонецЦикла;
// Добавляем последний диапазон
Если ТекущийДиапазон "" Тогда
Если ТекущийДиапазон ПредыдущийНомер Тогда
РезультатСтрока = РезультатСтрока + ТекущийДиапазон + "-" + ПредыдущийНомер;
Иначе
РезультатСтрока = РезультатСтрока + ТекущийДиапазон;
КонецЕсли;
КонецЕсли;
Сообщить(РезультатСтрока);
Этот код собирает номера документов в массив, а затем обрабатывает их, чтобы сформировать строку с диапазонами. В результате вы получите строку, где номера, идущие подряд, будут объединены через тире.
Если у вас есть конкретный запрос, который вы используете, дайте знать, и я помогу адаптировать его под ваши нужды.