Как дополнить номер документа нулями до 8 символов при формировании имени файла в 1С

Программист IT и автоматизация бизнеса
← На главную

При выгрузке данных в сторонние программы или файлы формата DBF часто возникает необходимость приводить имя файла к строго определенному формату. Например, если номер накладной равен 5 или 106, имя файла должно иметь вид 00000005.DBF и 00000106.DBF соответственно. Рассмотрим несколько проверенных способов решения этой задачи в платформе 1С.

Способ 1. Использование функции Прав

Проанализируем наиболее простой и компактный вариант решения задачи. Способ заключается в прибавлении к исходному номеру строки из нулей заведомо достаточной длины с последующим взятием правых 8 символов с помощью функции Прав.

Разберем пример кода:


НомерДокумента = "106";
ДлинныйНомер = "00000000" + НомерДокумента;
ИмяФайла = Прав(ДлинныйНомер, 8) + ".dbf";

Посмотрим, как работает данный алгоритм. К строке "00000000" прибавляется значение "106", в результате чего получается строка "00000000106". Функция Прав отсекает все символы слева и оставляет только 8 правых символов — "00000106".

Способ 2. Использование функции Формат

Рассмотрим штатный инструмент платформы 1С для форматирования значений — функцию Формат. Данный метод подходит, если номер документа представлен числовым типом или может быть приведен к числу с помощью функции Число.

Для получения строки длиной в 8 символов с лидирующими нулями используется следующая форматная строка:


ЧисловойНомер = Число(НомерДокумента);
СформированныйНомер = Формат(ЧисловойНомер, "ЧЦ=8; ЧВН=; ЧГ=0");
ИмяФайла = СформированныйНомер + ".dbf";

Выясним значение используемых параметров форматной строки:

  1. ЧЦ=8 — указывает общую длину числового поля в 8 символов.
  2. ЧВН= — включает отображение лидирующих (начальных) нулей.
  3. ЧГ=0 — отключает группировку разрядов. Это критически важно, иначе платформа вставит пробелы между тысячами (например, выведет "0 000 0106" вместо "00000106").

Способ 3. Заполнение нулями в цикле

Посмотрим на классический алгоритм дополнения строки нулями слева с помощью цикла Пока. Этот вариант удобен при работе со строковыми номерами, когда не требуется преобразование типов.


НомерСтрокой = СокрЛП(НомерДокумента);
Пока СтрДлина(НомерСтрокой) < 8 Цикл
    НомерСтрокой = "0" + НомерСтрокой;
КонецЦикла;
ИмяФайла = НомерСтрокой + ".dbf";

В этом примере функция СокрЛП предварительно удаляет лишние пробелы по краям, после чего цикл добавляет символ "0" слева до тех пор, пока общая длина строки не достигнет 8 символов.

Способ 4. Использование функции СтрЗаполнить

Разберем еще один эффективный способ без использования циклов. Можно вычислить количество недостающих нулей и сгенерировать их строкой нужной длины с помощью функции СтрЗаполнить.


НомерОчищенный = СокрЛП(НомерДокумента);
НедостаетНулей = 8 - СтрДлина(НомерОчищенный);

Если НедостаетНулей > 0 Тогда
    СтрокаНулей = "";
    СтрЗаполнить(СтрокаНулей, "0", НедостаетНулей);
    ИтоговыйНомер = СтрокаНулей + НомерОчищенный;
Иначе
    ИтоговыйНомер = НомерОчищенный;
КонецЕсли;

ИмяФайла = ИтоговыйНомер + ".dbf";

Способ 5. Использование функций Библиотеки Стандартных Подсистем (БСП)

Если разработка ведется в типовой конфигурации 1С, использующей БСП, мы можем применить готовые функции из общего модуля СтроковыеФункцииКлиентСервер.


НомерОчищенный = СокрЛП(НомерДокумента);
ИтоговыйНомер = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(НомерОчищенный, 8, "0", "Слева");
ИмяФайла = ИтоговыйНомер + ".dbf";

Важные нюансы при работе с именами файлов

  1. Наличие буквенных префиксов: Если номер документа содержит буквенный префикс организации или подразделения (например, "АБ-000005"), функция Число вернет ошибку. В таком случае номер следует обрабатывать исключительно как строку.
  2. Запрещенные символы в именах файлов: Перед формированием имени файла убедитесь, что в номере нет символов, запрещенных операционной системой (/, \, :, *, ?, ", <, >, |). Замените их с помощью функции СтрЗаменить.
  3. Требования к формату DBF: При работе со старыми системами убедитесь, что имя файла не содержит кириллических символов и соблюдает стандарт 8.3.
← На главную