Получить уникальное имя путем. Получить уникальное имя файла в рабочем каталоге.
// Получить уникальное имя файла в рабочем каталоге.
// Если есть совпадения - будет имя подобное "A1\Приказ.doc".
//
Функция ПолучитьУникальноеИмяСПутем(ИмяКаталога, ИмяФайла) Экспорт
ИтоговыйПуть = "";
Счетчик = 0;
ЦиклНомер = 0;
Успешно = Ложь;
КодБукваA = КодСимвола("A", 1);
ГенераторСлучая = Неопределено;
#Если Не ВебКлиент Тогда
ГенераторСлучая = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());
#КонецЕсли
КоличествоСлучайныхВариантов = 26;
Пока НЕ Успешно И ЦиклНомер < 100 Цикл
НомерКаталога = 0;
#Если Не ВебКлиент Тогда
НомерКаталога = ГенераторСлучая.СлучайноеЧисло(0, КоличествоСлучайныхВариантов - 1);
#Иначе
НомерКаталога = ТекущаяУниверсальнаяДатаВМиллисекундах() % КоличествоСлучайныхВариантов;
#КонецЕсли
Если Счетчик > 1 И КоличествоСлучайныхВариантов < 26 * 26 * 26 * 26 * 26 Тогда
КоличествоСлучайныхВариантов = КоличествоСлучайныхВариантов * 26;
КонецЕсли;
БуквыКаталога = "";
КодБукваA = КодСимвола("A", 1);
Пока Истина Цикл
НомерБуквы = НомерКаталога % 26;
НомерКаталога = Цел(НомерКаталога / 26);
КодКаталога = КодБукваA + НомерБуквы;
БуквыКаталога = БуквыКаталога + Символ(КодКаталога);
Если НомерКаталога = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
ПодКаталог = ""; // Частичный путь.
// По умолчанию вначале используется корень, если возможности нет,
// то добавляется A, B, ... Z, .. ZZZZZ, .. AAAAA, .. AAAAAZ и т.д.
Если Счетчик = 0 Тогда
ПодКаталог = "";
Иначе
ПодКаталог = БуквыКаталога;
ЦиклНомер = Окр(Счетчик / 26);
Если ЦиклНомер <> 0 Тогда
ЦиклНомерСтрока = Строка(ЦиклНомер);
ПодКаталог = ПодКаталог + ЦиклНомерСтрока;
КонецЕсли;
Если ЭтоЗарезервированноеИмяКаталога(ПодКаталог) Тогда
Продолжить;
КонецЕсли;
ПодКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПодКаталог);
КонецЕсли;
ПолныйПодКаталог = ИмяКаталога + ПодКаталог;
// Создание каталога для файлов.
КаталогНаДиске = Новый Файл(ПолныйПодКаталог);
Если НЕ КаталогНаДиске.Существует() Тогда
Попытка
СоздатьКаталог(ПолныйПодКаталог);
Исключение
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка при создании каталога ""%1"":
|""%2"".'"),
ПолныйПодКаталог,
КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) );
КонецПопытки;
КонецЕсли;
ФайлПопытки = ПолныйПодКаталог + ИмяФайла;
Счетчик = Счетчик + 1;
// Проверка, есть ли файл с таким именем.
ФайлНаДиске = Новый Файл(ФайлПопытки);
Если НЕ ФайлНаДиске.Существует() Тогда // Нет такого файла.
ИтоговыйПуть = ПодКаталог + ИмяФайла;
Успешно = Истина;
КонецЕсли;
КонецЦикла;
Возврат ИтоговыйПуть;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ПолучитьПолноеИмяФайлаИзРегистра (БСП)
УникальноеИмяФайлаСообщенияОбмена (БСП)
Полный путь до предопределенного значения, включая имя самого значения
ЗанятьЛицензиюУникальнойУслуги (БСП)
КоличествоЛицензийУникальнойУслуги (БСП)