← Назад к вопросам
Генерация ряда чисел в запросе
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