Встроенные функции 1С по преобразованию строк предоставляют некоторые возможности для правильного форматирования строк, но все же их иногда не хватает.

Функции 1С. Расширенное форматирование строки.

Функции 1С. Расширенное форматирование строки.


(Эта статья относится к циклу статей " 1С с нуля " и " программирование 1с с нуля ")

Например, очень часто требуется использовать сложение (конкатенацию) строк для вывода какого-то сообщения на экран. И если выводимая строка формируется с учетом нескольких параметров, то получается визуально сложная конструкция, неудобная для дальнейших изменений.

Поэтому, среди функций 1С хотелось бы иметь некий аналог функции printf с подстановкой параметров-переменных в строку, на нужные места.
Например, вместо

Сообщение = "Всего документов: " + Строка(ИтогоДокументов) + " Обрабатывается  " + Строка(НомерТекущегоДокумента) + " документ";
Сообщить(Сообщение);

хочется иметь что-то наподобие:

...
Сообщение = ФорматСтроки("Всего документов: %1 Обрабатывается %2 документ", ИтогоДокументов, НомерТекущегоДокумента);
Сообщить(Сообщение);
...

Представляю вам такую функцию.

Первым параметром функции является строка-шаблон, используемая для вывода. Остальные параметры - это переменные, которые подставляются в строку-шаблон на нужные места, в порядке их нумерации. Место подстановки в строке-шаблоне задается набором символов: %1, %2, %3..%20 Число подстановочных параметров переменное - от 1 до 20 (если вам требуется больше, можно доработать по аналогии). Все параметры преобразовываются в строку автоматически. Если требуется нестандартное преобразование какого-то параметра, то можно его предварительно преобразовать требуемым образом.

// функция заменяет в исходной строке Т подстановочные литералы %1..%20 на значения переданных параметров. Похожее на С++
// Литерал "%!" заменяется на символ перевода строки.
// Пример: ФорматСтроки("Имя: %1 Фамилия: %2", "Иван", "Сидоров"); возвратит строку "Имя: Иван Фамилия: Сидоров"
Функция ФорматСтроки(Т, П1 = "", П2 = "", П3 = "", П4 = "", П5 = "", П6 = "", П7 = "", П8 = "", П9 = "", П10 = "",
                        П11 = "", П12 = "", П13 = "", П14 = "", П15 = "", П16 = "", П17 = "", П18 = "", П19 = "", П20 = "") Экспорт
  МассивПараметров = Новый Массив;
  Рез = Т;
  ПТек = "";
  Сч = 20; // счетчик нужен в обратную сторону, чтобы первыми корректно заменить двузначные подстановочные литералы, типа: %15, %14
  Для СчЦикла = 1 по 20 Цикл // цикл
    СчСтр = Строка(Сч);
    Выполнить("ПТек = Строка(П" + СчСтр+ ")");
    Рез = СтрЗаменить(Рез, "%" + СчСтр, ПТек);
    Сч = Сч - 1;
  КонецЦикла;
  Рез = СтрЗаменить(Рез, "%!", Символы.ПС);
  Возврат Рез;
КонецФункции

Встроенные функции 1С не предоставляют возможности такой удобной замены рутинного способа формирования строк для сообщений.

Из сказанного логически следует то, что можно создать для себя замену встроенных функций 1С, предназначенных для вывода сообщений

Например, следующая функция будет выводить строку, по новым правилам, в окно сообщений:

Процедура СообщитьФ(Т, П1 = "", П2 = "", П3 = "", П4 = "", П5 = "", П6 = "", П7 = "", П8 = "", П9 = "", П10 = "", П11 = "", П12 = "", П13 = "", П14 = "", П15 = "",
                                 П16 = "", П17 = "", П18 = "", П19 = "", П20 = "") Экспорт
  Сообщить(ФорматСтроки(Т, П1, П2, П3, П4, П5, П6, П7, П8, П9, П10, П11, П12, П13, П14, П15, П16, П11, П17, П18, П19, П20));
КонецПроцедуры

Далее, почти тоже самое, только вывод будет происходить в строку статуса 1С
Процедура СостояниеФ(Т, П1 = "", П2 = "", П3 = "", П4 = "", П5 = "", П6 = "", П7 = "", П8 = "", П9 = "", П10 = "", П11 = "", П12 = "", П13 = "", П14 = "", П15 = "",
                                 П16 = "", П17 = "", П18 = "", П19 = "", П20 = "") Экспорт
  Состояние(ФорматСтроки(Т, П1, П2, П3, П4, П5, П6, П7, П8, П9, П10, П11, П12, П13, П14, П15, П16, П11, П17, П18, П19, П20));
КонецПроцедуры

Жалко, что библиотека стандартных функций 1С не очень обширная, и приходится самому изобретать тот "велосипед", на котором ездят люди в других языках программирования. Но выход из положения всегда можно придумать, и это я продемонстрировал выше. Если вам понравилось, делитесь ссылкой на статью с друзьями. :)

Как научиться программировать в 1С с нуля?

Как работать программистом 1С и получать до 150 000 рублей в месяц?

ЗАПИШИСЬ НА БЕСПЛАТНЫЙ

2-НЕДЕЛЬНЫЙ КУРС

"ПРОГРАММИРОВАНИЕ в 1С ДЛЯ НОВИЧКОВ"

Курс придет на электронную почту. Стань программистом, выполняя пошаговые задания.

Для участия нужен только компьютер и интернет

Бесплатный доступ на курс:



Комментарии для тех, кто VKontakte


Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Интернет-курс "Программирование в 1С с нуля"

Учись программировать и зарабатывать до
150 000 руб. в месяц! ТОЛЬКО СЕГОДНЯ - БЕСПЛАТНЫЙ ДОСТУП К КУРСУ!

Присоединяйся, тут все свои!