В данном статье рассматривается обработка текстовых строк в отчете на примере перевода выводимых в отчет системных названий. В качестве примера взята задача перевода значений перечислений с русского языка на украинский.
Внимание! Если говорить про задачу локализации в целом, то она в Business Studio решается иначе. Подробнее см. раздел раздел Локализация документа Руководство технического специалиста.
В отчете формата MS Word по процессу все упоминания статусов процессов (на русском языке) должны отображаться на украинском.
Решение описывается с момента, когда в шаблоне отчета созданы привязка типа "Объект", которая показывает текущий статус процесса, а также привязка типа "Список", которая показывает подпроцессы и их текущие статусы.
Для каждого русского слова должны быть зафиксированы слова перевода на украинский язык. Во всем документе находить такие русские слова и заменять их украинскими. Там где статус указан через привязку типа Объект делать изменение значения поля с последующим его обновлением.
Определяем название привязки типа "Список", которая представляет нужную таблицу (см. Руководство пользователя → Пример определения названия привязки типа "Список").
Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) 'Вводная часть 'Название объектной привязки с текущим статусом процесса CurrentStatusName = "Статус_процесса_c9a10e8d" 'Проверка наличия указанной привязки в документе Dim CurrentStatusIs As Boolean 'сначала считаем, что привязки нет 'перебираем все переменные документа For Each aVar In ActiveDocument.Variables If aVar.Name = CurrentStatusName Then CurrentStatusIs = True 'если такая переменная есть - фиксируем End If Next aVar Const CountWords = 6 'кол-во русских слов для перевода Dim Slovo(1 To CountWords, 1 To 2) As String 'массив для хранения словаря 'Русско-украинский словарь Slovo(1, 1) = "Архивирован" Slovo(1, 2) = "Архівований" Slovo(2, 1) = "В работе" Slovo(2, 2) = "В роботі" Slovo(3, 1) = "Опубликован" Slovo(3, 2) = "Опублікований" Slovo(4, 1) = "Проект" Slovo(4, 2) = "Проект" Slovo(5, 1) = "Рекомендован" Slovo(5, 2) = "Рекомендований" Slovo(CountWords, 1) = "Черновик" Slovo(CountWords, 2) = "Чернетка" 'Процедурная часть 'очистка условий поиска Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting For i = 1 To CountWords 'поиск покаждому слову словаря 'Задание условий поиска и замены With Selection.Find .Text = Slovo(i, 1) 'ищется русское слово .Replacement.Text = Slovo(i, 2) 'будет заменяться украинским .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With 'Во всем документе меняем слова (кроме объектных привязок) Selection.Find.Execute Replace:=wdReplaceAll If CurrentStatusIs Then 'Перевод слов в поле со статусом процесса If Application.ActiveDocument.Variables.Item(CurrentStatusName).Value = Slovo(i, 1) Then Application.ActiveDocument.Variables.Item(CurrentStatusName).Value = Slovo(i, 2) End If End If Next i ActiveDocument.Fields.Update 'Обновление всех полей в документе End Sub