← Назад к вопросам

Генерация ряда чисел в запросе

3.0 Senior🔥 131 комментариев
#Запросы и оптимизация

Условие

С помощью запроса получите таблицу с одной колонкой, в которой будет содержаться ряд чисел от 1 до 1000.

Ограничения:

  • Использовать только конструкции языка запросов 1С
  • Не использовать внешние таблицы с данными

Подсказка

Используйте конструкцию ОБЪЕДИНИТЬ ВСЕ для генерации базовых чисел, а затем декартово произведение для умножения.

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение

Основной запрос (1С 8.3.10+)

Выбрать
    ЧислаОсновные.Число + Числа10.Число * 10 + Числа100.Число * 100 + Числа1000.Число * 1000 Как Число
Из
    (
        Выбрать 0 Как Число
        Объединить Все
        Выбрать 1
        Объединить Все
        Выбрать 2
        Объединить Все
        Выбрать 3
        Объединить Все
        Выбрать 4
        Объединить Все
        Выбрать 5
        Объединить Все
        Выбрать 6
        Объединить Все
        Выбрать 7
        Объединить Все
        Выбрать 8
        Объединить Все
        Выбрать 9
    ) Как ЧислаОсновные
    Декартово Соединение
    (
        Выбрать 0 Как Число
        Объединить Все
        Выбрать 1
        Объединить Все
        Выбрать 2
        Объединить Все
        Выбрать 3
        Объединить Все
        Выбрать 4
        Объединить Все
        Выбрать 5
        Объединить Все
        Выбрать 6
        Объединить Все
        Выбрать 7
        Объединить Все
        Выбрать 8
        Объединить Все
        Выбрать 9
    ) Как Числа10
    Декартово Соединение
    (
        Выбрать 0 Как Число
        Объединить Все
        Выбрать 1
        Объединить Все
        Выбрать 2
        Объединить Все
        Выбрать 3
        Объединить Все
        Выбрать 4
        Объединить Все
        Выбрать 5
        Объединить Все
        Выбрать 6
        Объединить Все
        Выбрать 7
        Объединить Все
        Выбрать 8
        Объединить Все
        Выбрать 9
    ) Как Числа100
    Декартово Соединение
    (
        Выбрать 0 Как Число
        Объединить Все
        Выбрать 1
    ) Как Числа1000
Где
    ЧислаОсновные.Число + Числа10.Число * 10 + Числа100.Число * 100 + Числа1000.Число * 1000 >= 1
    И ЧислаОсновные.Число + Числа10.Число * 10 + Числа100.Число * 100 + Числа1000.Число * 1000 <= 1000
Упорядочить По Число

Альтернатива: компактный запрос с максимум 255 записей

Выбрать
    Таб1.Число + Таб2.Число * 16 Как Число
Из
    (
        Выбрать 0 Как Число Объединить Все
        Выбрать 1 Объединить Все
        Выбрать 2 Объединить Все
        Выбрать 3 Объединить Все
        Выбрать 4 Объединить Все
        Выбрать 5 Объединить Все
        Выбрать 6 Объединить Все
        Выбрать 7 Объединить Все
        Выбрать 8 Объединить Все
        Выбрать 9 Объединить Все
        Выбрать 10 Объединить Все
        Выбрать 11 Объединить Все
        Выбрать 12 Объединить Все
        Выбрать 13 Объединить Все
        Выбрать 14 Объединить Все
        Выбрать 15
    ) Как Таб1
    Декартово Соединение
    (
        Выбрать 0 Как Число Объединить Все
        Выбрать 1 Объединить Все
        Выбрать 2 Объединить Все
        Выбрать 3 Объединить Все
        Выбрать 4 Объединить Все
        Выбрать 5 Объединить Все
        Выбрать 6 Объединить Все
        Выбрать 7 Объединить Все
        Выбрать 8 Объединить Все
        Выбрать 9 Объединить Все
        Выбрать 10 Объединить Все
        Выбрать 11 Объединить Все
        Выбрать 12 Объединить Все
        Выбрать 13 Объединить Все
        Выбрать 14 Объединить Все
        Выбрать 15
    ) Как Таб2
Упорядочить По Число

Использование в 1С

Процедура ПолучитьРядЧисел()
    
    ТекстЗапроса = "Выбрать
        |    ЧислаОсновные.Число + Числа10.Число * 10 + Числа100.Число * 100 + Числа1000.Число * 1000 Как Число
        |Из
        |    (
        |        Выбрать 0 Как Число
        |        Объединить Все
        |        Выбрать 1
        |        Объединить Все
        |        Выбрать 2
        |        Объединить Все
        |        Выбрать 3
        |        Объединить Все
        |        Выбрать 4
        |        Объединить Все
        |        Выбрать 5
        |        Объединить Все
        |        Выбрать 6
        |        Объединить Все
        |        Выбрать 7
        |        Объединить Все
        |        Выбрать 8
        |        Объединить Все
        |        Выбрать 9
        |    ) Как ЧислаОсновные
        |    Декартово Соединение
        |    (
        |        Выбрать 0 Как Число
        |        Объединить Все
        |        Выбрать 1
        |        Объединить Все
        |        Выбрать 2
        |        Объединить Все
        |        Выбрать 3
        |        Объединить Все
        |        Выбрать 4
        |        Объединить Все
        |        Выбрать 5
        |        Объединить Все
        |        Выбрать 6
        |        Объединить Все
        |        Выбрать 7
        |        Объединить Все
        |        Выбрать 8
        |        Объединить Все
        |        Выбрать 9
        |    ) Как Числа10
        |    Декартово Соединение
        |    (
        |        Выбрать 0 Как Число
        |        Объединить Все
        |        Выбрать 1
        |        Объединить Все
        |        Выбрать 2
        |        Объединить Все
        |        Выбрать 3
        |        Объединить Все
        |        Выбрать 4
        |        Объединить Все
        |        Выбрать 5
        |        Объединить Все
        |        Выбрать 6
        |        Объединить Все
        |        Выбрать 7
        |        Объединить Все
        |        Выбрать 8
        |        Объединить Все
        |        Выбрать 9
        |    ) Как Числа100
        |    Декартово Соединение
        |    (
        |        Выбрать 0 Как Число
        |        Объединить Все
        |        Выбрать 1
        |    ) Как Числа1000
        |Где
        |    ЧислаОсновные.Число + Числа10.Число * 10 + Числа100.Число * 100 + Числа1000.Число * 1000 >= 1
        |    И ЧислаОсновные.Число + Числа10.Число * 10 + Числа100.Число * 100 + Числа1000.Число * 1000 <= 1000";
    
    Запрос = Новый Запрос(ТекстЗапроса);
    РезультатЗапроса = Запрос.Выполнить();
    ТаблицаЧисел = РезультатЗапроса.Выгрузить();
    
    Сообщить("Получено " + ТаблицаЧисел.Количество() + " чисел");
    
КонецПроцедуры

Объяснение

  • ОБЪЕДИНИТЬ ВСЕ — создаёт базовые наборы 0-9
  • ДЕКАРТОВО СОЕДИНЕНИЕ — перемножает наборы
  • Вычисление — число = единицы + десятки10 + сотни100 + тысячи*1000
  • ФИЛЬТРующее условие — отбираем от 1 до 1000
  • Результат — 1000 записей с числами от 1 до 1000