При выводе текстовых данных в служебные сообщения или текстовые отчеты часто возникает задача отформатировать строку так, чтобы она имела строго фиксированную длину (например, 40 символов) и была выровнена по правому краю, то есть дополнялась недостающими пробелами слева. Рассмотрим, почему стандартная функция Формат для строк работает иначе, чем ожидается, и разберем практические способы решения этой задачи на платформе 1С 7.7.
В платформе 1С 7.7 функция Формат имеет параметр С для задания длины строкового значения. Однако если применить конструкцию Формат(Стр, "С40"), то недостающие пробелы будут добавлены справа, а текст окажется прижат к левому краю. Выравнивание вправо штатным спецификатором С платформа не поддерживает. Поэтому для получения выравнивания по правому краю приходится комбинировать строковые функции.
Самый простой и быстрый с точки зрения производительности вариант — заранее соединить строку с блоком пробелов нужной длины и взять правые символы. Проанализируем пример:
СтрВывода = Прав(" " + Стр, 40);
Сообщить(СтрВывода);
В данном выражении к строке из 40 пробелов прибавляется исходная строка, а затем функция Прав отсекает ровно 40 символов с правого конца. Если исходная строка имела длину 5 символов, к ней слева останутся присоединены 35 пробелов.
Чтобы не отсчитывать количество пробелов вручную и не загромождать программный код длинными литералами, сформируем строку пробелов программно через пустую строку:
СтрВывода = Прав(Формат("", "С40") + Стр, 40);
Сообщить(СтрВывода);
Разберем по шагам, как работает эта конструкция:
Формат("", "С40") берет пустую строку и дополняет ее пробелами до длины 40 символов. В результате получается строка строго из 40 пробелов.Стр.Прав берет последние 40 символов полученного текста.Этот способ удобен тем, что позволяет легко задавать динамическую длину поля, подставляя переменную ширину:
Ширина = 40;
СтрВывода = Прав(Формат("", "С" + Ширина) + Стр, Ширина);
При использовании функции Прав существует важная особенность: если длина исходной строки Стр окажется больше заданной ширины (например, 45 символов вместо 40), функция Прав безусловно отрежет первые символы строки, что приведет к искажению данных.
Чтобы избежать случайной потери информации, добавим проверку длины перед форматированием:
Если СтрДлина(Стр) < 40 Тогда
СтрВывода = Прав(Формат("", "С40") + Стр, 40);
Иначе
СтрВывода = Стр;
КонецЕсли;
Сообщить(СтрВывода);
Если задача состоит в выводе не произвольного текста, а числа (например, суммы или количества), использовать строковые манипуляции с функцией Прав не требуется. В 1С 7.7 спецификатор Ч функции Формат по умолчанию выполняет выравнивание по правому краю с заполнением пробелами слева:
// Число шириной 40 знаков без дробной части
Сообщить(Формат(МоеЧисло, "Ч40"));
// Число шириной 40 знаков с двумя знаками после запятой
Сообщить(Формат(МоеЧисло, "Ч(0)40.2"));
При выводе отформатированных строк через команду Сообщить важно учитывать поведение окна служебных сообщений в платформе 1С 7.7:
Если требуется идеальное колоночное выравнивание текста по правому краю, рекомендуется использовать альтернативные способы вывода:
Таблица (табличный документ), в котором для ячеек можно штатно настроить горизонтальное выравнивание по правому краю.Текст, использующий моноширинный шрифт (например, Courier New), где каждый символ и пробел имеют строго одинаковую ширину.