Как выровнять строку по правому краю с фиксированной шириной в 1С 7.7?

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

При выводе текстовых данных в служебные сообщения или текстовые отчеты часто возникает задача отформатировать строку так, чтобы она имела строго фиксированную длину (например, 40 символов) и была выровнена по правому краю, то есть дополнялась недостающими пробелами слева. Рассмотрим, почему стандартная функция Формат для строк работает иначе, чем ожидается, и разберем практические способы решения этой задачи на платформе 1С 7.7.

Особенность работы функции Формат со строковыми данными

В платформе 1С 7.7 функция Формат имеет параметр С для задания длины строкового значения. Однако если применить конструкцию Формат(Стр, "С40"), то недостающие пробелы будут добавлены справа, а текст окажется прижат к левому краю. Выравнивание вправо штатным спецификатором С платформа не поддерживает. Поэтому для получения выравнивания по правому краю приходится комбинировать строковые функции.

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

Самый простой и быстрый с точки зрения производительности вариант — заранее соединить строку с блоком пробелов нужной длины и взять правые символы. Проанализируем пример:


СтрВывода = Прав("                                        " + Стр, 40);
Сообщить(СтрВывода);

В данном выражении к строке из 40 пробелов прибавляется исходная строка, а затем функция Прав отсекает ровно 40 символов с правого конца. Если исходная строка имела длину 5 символов, к ней слева останутся присоединены 35 пробелов.

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

Чтобы не отсчитывать количество пробелов вручную и не загромождать программный код длинными литералами, сформируем строку пробелов программно через пустую строку:


СтрВывода = Прав(Формат("", "С40") + Стр, 40);
Сообщить(СтрВывода);

Разберем по шагам, как работает эта конструкция:

  1. Выражение Формат("", "С40") берет пустую строку и дополняет ее пробелами до длины 40 символов. В результате получается строка строго из 40 пробелов.
  2. К этой подложке из пробелов справа прибавляется исходное значение Стр.
  3. Функция Прав берет последние 40 символов полученного текста.

Этот способ удобен тем, что позволяет легко задавать динамическую длину поля, подставляя переменную ширину:


Ширина = 40;
СтрВывода = Прав(Формат("", "С" + Ширина) + Стр, Ширина);

Защита от усечения данных при превышении длины

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

Чтобы избежать случайной потери информации, добавим проверку длины перед форматированием:


Если СтрДлина(Стр) < 40 Тогда
    СтрВывода = Прав(Формат("", "С40") + Стр, 40);
Иначе
    СтрВывода = Стр;
КонецЕсли;
Сообщить(СтрВывода);

Форматирование числовых значений

Если задача состоит в выводе не произвольного текста, а числа (например, суммы или количества), использовать строковые манипуляции с функцией Прав не требуется. В 1С 7.7 спецификатор Ч функции Формат по умолчанию выполняет выравнивание по правому краю с заполнением пробелами слева:


// Число шириной 40 знаков без дробной части
Сообщить(Формат(МоеЧисло, "Ч40"));

// Число шириной 40 знаков с двумя знаками после запятой
Сообщить(Формат(МоеЧисло, "Ч(0)40.2"));

Особенности отображения в окне сообщений

При выводе отформатированных строк через команду Сообщить важно учитывать поведение окна служебных сообщений в платформе 1С 7.7:

  1. Окно сообщений использует пропорциональный шрифт операционной системы (обычно Tahoma или MS Sans Serif). В таких шрифтах ширина букв и ширина символа пробела не одинаковы.
  2. Даже если две строки имеют абсолютно одинаковое количество символов, визуально их правые края в окне сообщений могут не совпадать.

Если требуется идеальное колоночное выравнивание текста по правому краю, рекомендуется использовать альтернативные способы вывода:

  1. Объект Таблица (табличный документ), в котором для ячеек можно штатно настроить горизонтальное выравнивание по правому краю.
  2. Объект Текст, использующий моноширинный шрифт (например, Courier New), где каждый символ и пробел имеют строго одинаковую ширину.
  3. Внешние компоненты (например, FormEx), позволяющие переопределить свойства шрифта в штатном окне сообщений 1С 7.7.
← На главную