Как убрать лишние пробелы в номере документа при сохранении печатной формы в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе в системе «1С:Предприятие» пользователи часто сталкиваются с досадной проблемой: при сохранении печатной формы документа (например, счета на оплату или акта) в файл формата PDF или Excel, в имени файла после номера документа появляется длинный ряд пробелов. Это выглядит неопрятно и может мешать автоматизированной обработке файлов. Проанализируем, почему это происходит и как программно исправить данную ситуацию.

Выясняем причину появления лишних пробелов

Для начала разберем природу возникновения этих символов. В метаданных конфигурации 1С тип данных Номер у документов чаще всего представлен как строка фиксированной длины. Например, если в конфигураторе для документа «Счет на оплату» установлена длина номера 11 символов, а реальный номер документа — «1332», то платформа автоматически дополняет оставшиеся 7 позиций пробелами справа. При формировании печатной формы или программной генерации имени файла эти «хвостовые» пробелы попадают в результирующую строку, если разработчик не предусмотрел их очистку.

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

Самый простой и быстрый способ избавиться от пробелов в начале и в конце строки — использование встроенной функции языка СокрЛП() (Сократить Левые и Правые пробелы). Рассмотрим пример кода, который часто встречается в модулях менеджера документов или внешних печатных формах (ВПФ):


// Неправильно:
ИмяФайла = "Счет на оплату № " + Объект.Номер + " от " + Формат(Объект.Дата, "ДФ=dd.MM.yyyy");

// Правильно:
ИмяФайла = "Счет на оплату № " + СокрЛП(Объект.Номер) + " от " + Формат(Объект.Дата, "ДФ=dd.MM.yyyy");

Функция СокрЛП гарантированно отсечет все невидимые символы, которые платформа добавила для соблюдения фиксированной длины реквизита.

Способ 2. Применение механизмов БСП (Библиотека стандартных подсистем)

В современных конфигурациях (таких как ERP 2.5, УТ 11, Бухгалтерия 3.0) для формирования представления номера лучше использовать типовые функции. Это позволит не только убрать пробелы, но и корректно удалить лидирующие нули и префиксы организации. Рассмотрим использование функции НомерНаПечать из модуля ПрефиксацияОбъектов:


// Пример получения чистого номера без префиксов и лишних пробелов
ЧистыйНомер = ПрефиксацияОбъектов.НомерНаПечать(Объект.Номер, Истина, Истина);
ИмяФайла = СтрШаблон("Счет № %1 от %2", ЧистыйНомер, Формат(Объект.Дата, "ДЛФ=Д"));

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

Способ 3. Глобальная очистка строки от двойных пробелов

Иногда лишние пробелы возникают не только из номера, но и в результате конкатенации (сложения) нескольких строк, часть из которых оказалась пустой. Чтобы не угадывать количество вызовов СтрЗаменить, проанализируем профессиональный подход к «сжатию» пробелов внутри строки.

Если в вашей конфигурации есть БСП, воспользуйтесь готовым методом:

СтроковыеФункцииКлиентСервер.СократитьПробелы(ВашаСтрока)

Если же вы пишете решение «с нуля», разберем алгоритм через разделение строки в массив, что гораздо эффективнее множественных замен:


Функция УбратьЛишниеПробелы(Знач ВходнаяСтрока) Экспорт
    МассивСлов = СтрРазделить(ВходнаяСтрока, " ", Ложь); // Ложь - удалит пустые элементы (лишние пробелы)
    Возврат СтрСоединить(МассивСлов, " ");
КонецФункции

Способ 4. Корректировка формирования имени в ВПФ через расширение

Если проблема наблюдается в типовой печатной форме, рекомендуется использовать механизм расширений с аннотацией &ИзменениеИКонтроль. Это позволит внести правки в логику формирования заголовка, не снимая документ с поддержки. Рассмотрим ситуацию, когда заголовок формируется функцией СформироватьЗаголовокДокумента:


&ИзменениеИКонтроль("СформироватьЗаголовокДокумента")
Функция Расш1_СформироватьЗаголовокДокумента(Параметры)
    // ... какой-то типовой код ...
    #Вставка
    // Очищаем номер от пробелов перед возвратом значения
    Результат = СокрЛП(Параметры.Номер); 
    #КонецВставки
    Возврат Результат;
КонецФункции

Способ 5. Управление свойством Табличного Документа

Когда пользователь нажимает кнопку сохранения, 1С берет имя файла из свойства ИспользуемоеИмяФайла табличного документа. Если вы разрабатываете свою печатную форму, обязательно проверьте, как заполняется это свойство. Также при использовании подсистемы печати БСП обратите внимание на процедуру ВывестиТабличныйДокументВКоллекцию. Проанализируем её параметры:


УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
    КоллекцияПечатныхФорм, 
    "СчетНаОплату", 
    "Счет на оплату", 
    ТабДок, 
    , 
    , 
    "Счет № " + СокрЛП(Объект.Номер) // Параметр ИмяФайлаПечатнойФормы
);

Передавая в последний параметр уже очищенную строку, вы гарантируете, что при нажатии кнопки «Сохранить» в диалоговом окне Windows сразу появится корректное имя без лишних отступов.

Дополнительная защита: недопустимые символы

Помимо пробелов, важно помнить, что номера документов могут содержать символы, запрещенные в именах файлов (например, косая черта «/» в дробных номерах). Чтобы предотвратить ошибки сохранения, рекомендуем прогонять итоговое имя через функцию очистки:

ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла, "-")

Подведем итог: для решения проблемы с пробелами всегда используйте СокрЛП() при обращении к номеру документа, а для получения идеального результата в крупных конфигурациях задействуйте функции БСП НомерНаПечать и СократитьПробелы. Это обеспечит чистоту имен файлов и удобство работы пользователей.

← На главную