Старался написать как можно более универсально. При желании Справочники.Номенклатура и Справочник.Номенклатура заменить на любой другой тип, можно даже на номер документа, но тогда не забудьте изменить "Код" на "Номер". Собственно код процедуры привожу ниже.
P.S. Файл с обработкой также прикладываю, но качать особого смысла нет, т.к. процедура будет полезна только в контексте какой-либо более глобальной задачи, например интеграции справочников и т.п.
ДлинаКода = Метаданные.Справочники.Номенклатура.ДлинаКода;
Префикс = "";
ДлПрефикса = СтрДлина(Префикс);
ДлЧЧ = ДлинаКода-СтрДлина(Префикс);
//получим последний элемент
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МАКСИМУМ(Номенклатура.Код) КАК Код
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
//если используется префикс БД тогда добавим отбор
Если ДлПрефикса > 0 Тогда
Запрос.Текст = Запрос.Текст + Символы.ПС +
"ГДЕ
| ПОДСТРОКА(Номенклатура.Код, 1, " + ДлПрефикса + ") = &Префикс";
Запрос.УстановитьПараметр("Префикс", Префикс);
КонецЕсли;
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Выборка.Следующий();
ПоследнийЭлемент = Число(Прав(Выборка.Код,ДлЧЧ));
//формируем все возможные комбинации
врТЗНумерация = Новый ТаблицаЗначений;
врТЗНумерация.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(ДлинаКода)));
Для Счетчик = 1 По ПоследнийЭлемент Цикл
стрТЗ = врТЗНумерация.Добавить();
стрТЗ.Код = Префикс + Формат(Счетчик, "ЧЦ=" + ДлЧЧ + "; ЧВН=; ЧГ=0");
КонецЦикла;
//сравним какие комбинации заняты
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ПОМЕСТИТЬ врТЗ ИЗ &врТЗ КАК врТЗ;" + Символы.ПС +
"ВЫБРАТЬ
| врТЗ.Код КАК Код
|ИЗ
| врТЗ КАК врТЗ
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
| ПО Номенклатура.Код = врТЗ.Код //условия для префикса
|ГДЕ
| Номенклатура.Ссылка ЕСТЬ NULL
|
|УПОРЯДОЧИТЬ ПО
| врТЗ.Код";
//условия для перфикса
//если используется префикс БД тогда добавим отбор
Если ДлПрефикса > 0 Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "//условия для префикса", "И ПОДСТРОКА(Номенклатура.Код, 1, " + ДлПрефикса + ") = &Префикс");
Запрос.УстановитьПараметр("Префикс", Префикс);
КонецЕсли;
Запрос.УстановитьПараметр("врТЗ", врТЗНумерация);
Результат = Запрос.Выполнить();
врТЗСвободные = Результат.Выгрузить();
#Если Клиент Тогда
Сообщить("Найдено " + врТЗСвободные.Количество() + " свободных кодов из " + врТЗНумерация.Количество());
#КонецЕсли;