При выгрузке данных в сторонние программы или файлы формата DBF часто возникает необходимость приводить имя файла к строго определенному формату. Например, если номер накладной равен 5 или 106, имя файла должно иметь вид 00000005.DBF и 00000106.DBF соответственно. Рассмотрим несколько проверенных способов решения этой задачи в платформе 1С.
Проанализируем наиболее простой и компактный вариант решения задачи. Способ заключается в прибавлении к исходному номеру строки из нулей заведомо достаточной длины с последующим взятием правых 8 символов с помощью функции Прав.
Разберем пример кода:
НомерДокумента = "106";
ДлинныйНомер = "00000000" + НомерДокумента;
ИмяФайла = Прав(ДлинныйНомер, 8) + ".dbf";
Посмотрим, как работает данный алгоритм. К строке "00000000" прибавляется значение "106", в результате чего получается строка "00000000106". Функция Прав отсекает все символы слева и оставляет только 8 правых символов — "00000106".
Рассмотрим штатный инструмент платформы 1С для форматирования значений — функцию Формат. Данный метод подходит, если номер документа представлен числовым типом или может быть приведен к числу с помощью функции Число.
Для получения строки длиной в 8 символов с лидирующими нулями используется следующая форматная строка:
ЧисловойНомер = Число(НомерДокумента);
СформированныйНомер = Формат(ЧисловойНомер, "ЧЦ=8; ЧВН=; ЧГ=0");
ИмяФайла = СформированныйНомер + ".dbf";
Выясним значение используемых параметров форматной строки:
"0 000 0106" вместо "00000106").Посмотрим на классический алгоритм дополнения строки нулями слева с помощью цикла Пока. Этот вариант удобен при работе со строковыми номерами, когда не требуется преобразование типов.
НомерСтрокой = СокрЛП(НомерДокумента);
Пока СтрДлина(НомерСтрокой) < 8 Цикл
НомерСтрокой = "0" + НомерСтрокой;
КонецЦикла;
ИмяФайла = НомерСтрокой + ".dbf";
В этом примере функция СокрЛП предварительно удаляет лишние пробелы по краям, после чего цикл добавляет символ "0" слева до тех пор, пока общая длина строки не достигнет 8 символов.
Разберем еще один эффективный способ без использования циклов. Можно вычислить количество недостающих нулей и сгенерировать их строкой нужной длины с помощью функции СтрЗаполнить.
НомерОчищенный = СокрЛП(НомерДокумента);
НедостаетНулей = 8 - СтрДлина(НомерОчищенный);
Если НедостаетНулей > 0 Тогда
СтрокаНулей = "";
СтрЗаполнить(СтрокаНулей, "0", НедостаетНулей);
ИтоговыйНомер = СтрокаНулей + НомерОчищенный;
Иначе
ИтоговыйНомер = НомерОчищенный;
КонецЕсли;
ИмяФайла = ИтоговыйНомер + ".dbf";
Если разработка ведется в типовой конфигурации 1С, использующей БСП, мы можем применить готовые функции из общего модуля СтроковыеФункцииКлиентСервер.
НомерОчищенный = СокрЛП(НомерДокумента);
ИтоговыйНомер = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(НомерОчищенный, 8, "0", "Слева");
ИмяФайла = ИтоговыйНомер + ".dbf";
"АБ-000005"), функция Число вернет ошибку. В таком случае номер следует обрабатывать исключительно как строку./, \, :, *, ?, ", <, >, |). Замените их с помощью функции СтрЗаменить.