Иногда бывает нужно быстро получить готовый массив с последовательностью чисел от 0 до N-1. Например, чтобы пронумеровать строки таблицы значений путем загрузки в нее колонки с номерами строк. Это можно очень быстро сделать, используя "Порождающий запрос". Все необходимые функции очень компактны. Поэтому они приведены здесь.
Автор: ildarovich
// Возвращает текст запроса, формирующего таблицу чисел rN с одной колонкой X (eng), содержащую ряд: 0, 1, (N - 1).
function ProtoText(N, M = 1000000000) export
return ?(N > 2
, ProtoText(M - Int(M - Sqrt(N)))
+ strreplace(strreplace(";select top #2 a.X * #1 + b.X X into r#2 from r#1 a, r#1 b", "#2", format(N, "NG=")), "#1", format(M - Int(M - Sqrt(N)), "NG="))
, "select 0 X into r2 union select 1")
endfunction
// Возвращает таблицу, содержащую последовательность чисел: 0, 1, 2, ..., (ЧислоСтрок - 1)
Функция ПоследовательностьЧиселТаблицей(ЧислоСтрок) Экспорт
Запрос = Новый Запрос(СтрЗаменить(ProtoText(ЧислоСтрок), "into r" + format(ЧислоСтрок, "NG="), ""));
Возврат Запрос.Выполнить().Выгрузить()
КонецФункции
// Возвращает массив, содержащий последовательность чисел: 0, 1, 2, ..., (ЧислоЭлементов - 1)
Функция ПоследовательностьЧиселМассивом(ЧислоЭлементов) Экспорт
Возврат ПоследовательностьЧиселТаблицей(ЧислоЭлементов).ВыгрузитьКолонку(0)
КонецФункции
Орфографическая ошибка в ProtoText (найдено 3): Proto Орфографическая ошибка в strreplace (найдено 2): strreplace
Сжатое представление последовательности дат запросом
Определение пропусков в последовательности чисел
ЗаполнениеДанныхДляОграниченияДоступа (БСП)
ДополнитьТаблицуИзМассива (БСП)
Функция сравнения значений (рекурсивно)
ПриЗаполненииСправочниковЗаданий (БСП)