Увидев эту публикацию и комментарии к ней, я решил выложить свою функцию, так как варианта решения, учитывающего все нюансы, предложено не было. Данная функция преобразует строку без пробелов и других запрещенных в наименованиях символов в ее аналог-синоним. Примеры таких преобразований (проверено на программе):
ТипДокументовРасчета -> Тип документов расчета
Сумма -> Сумма
ДокументыДляЕНВД -> Документы для ЕНВД
СуммаСНДС -> Сумма с НДС
СуммаБезНДС -> Сумма без НДС
ДляФНСЗаКвартал -> Для ФНС за квартал
ПФРДляОтчетности -> ПФР для отчетности
Чаще всего такая функция может понадобится при работе с динамически формируемыми колонками таблиц значений, которые требуется вывести на форму или в табличный документ. Данную функцию можно поместить в общий модуль или в любое другое удобное место. Также можно заметить, что строчка СуммаСНДС преобразовывается корректно (в конфигураторе это не так). Для этого добавлено исключение, которое при необходимости можно доработать и под другие нестандартные ситуации
Код функции:
Функция Синоним(Знач Имя) Экспорт НовоеИмя = ""; Имя = СтрЗаменить(Имя, "СНДС", "_сНДС"); Длина = СтрДлина(Имя); Для Индекс = 1 По Длина Цикл Символ = Сред(Имя, Индекс, 1); Если Символ = НРег(Символ) И Найти("1234567890", Символ) = 0 Тогда НовоеИмя = НовоеИмя + Символ; Продолжить; КонецЕсли; Если Символ = ВРег(Символ) Тогда Если Индекс > 1 Тогда НовоеИмя = НовоеИмя + " " КонецЕсли; Аббревиатура = (Сред(Имя, Индекс, 3) = ВРег(Сред(Имя, Индекс, 3))) И (Длина - Индекс > 1); Предлог = (Сред(Имя, Индекс, 2) = ВРег(Сред(Имя, Индекс, 2))) И (Длина > Индекс); Если Аббревиатура Тогда ДлинаАббревиатуры = 3; Пока Сред(Имя, Индекс, ДлинаАббревиатуры) = ВРег(Сред(Имя, Индекс, ДлинаАббревиатуры)) И Индекс + ДлинаАббревиатуры <= Длина + 1 Цикл ДлинаАббревиатуры = ДлинаАббревиатуры + 1 КонецЦикла; ДлинаАббревиатуры = ДлинаАббревиатуры - 1; Если (Индекс + ДлинаАббревиатуры - 1) = Длина Тогда НовоеИмя = НовоеИмя + Сред(Имя, Индекс, ДлинаАббревиатуры); Иначе ДлинаАббревиатуры = ДлинаАббревиатуры - 1; НовоеИмя = НовоеИмя + Сред(Имя, Индекс, ДлинаАббревиатуры) + " " + НРег(Сред(Имя, Индекс + ДлинаАббревиатуры, 1)); КонецЕсли; Индекс = Индекс + ДлинаАббревиатуры; Продолжить; КонецЕсли; Если Предлог Тогда НовоеИмя = НовоеИмя + НРег(Символ) + " " + НРег(Сред(Имя, Индекс + 1, 1)) + " "; Индекс = Индекс + 1; Продолжить; КонецЕсли; НовоеИмя = НовоеИмя + НРег(Символ); КонецЕсли; КонецЦикла; НовоеИмя = СтрЗаменить(НовоеИмя, "_", " "); НовоеИмя = ВРег(Лев(НовоеИмя, 1)) + Прав(НовоеИмя, СтрДлина(НовоеИмя) - 1); Возврат НовоеИмя; КонецФункции