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

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

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

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

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

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

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

    База знаний 1С