Command disabled: recent


Обработка текстовых строк в отчете

Текущая ситуация

В данном статье рассматривается обработка текстовых строк в отчете на примере перевода выводимых в отчет системных названий. В качестве примера взята задача перевода значений перечислений с русского языка на украинский.

Внимание! Если говорить про задачу локализации в целом, то она в Business Studio решается иначе. Подробнее см. раздел раздел Локализация документа Руководство технического специалиста.

Постановка задачи

В отчете формата MS Word по процессу все упоминания статусов процессов (на русском языке) должны отображаться на украинском.

Исходные данные

Решение описывается с момента, когда в шаблоне отчета созданы привязка типа "Объект", которая показывает текущий статус процесса, а также привязка типа "Список", которая показывает подпроцессы и их текущие статусы.

Рисунок 1. Вид привязок в шаблоне отчета, которые выводят данные по статусам процессов
Рисунок 2. Вид сформированного отчета, в котором названия статусов даны на русском языке, а остальная часть регламента на украинском

Концепция решения

Для каждого русского слова должны быть зафиксированы слова перевода на украинский язык. Во всем документе находить такие русские слова и заменять их украинскими. Там где статус указан через привязку типа Объект делать изменение значения поля с последующим его обновлением.

Шаги решения

Определяем название привязки типа "Список", которая представляет нужную таблицу (см. Руководство пользователяПример определения названия привязки типа "Список").

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

Результат

Рисунок 3. Вид сформированного отчета полностью на украинском языке
« ПредыдущаяНа уровень вышеСледующая »
 
Driven by DokuWiki