Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.
ru:creating_user_reports:use_macros_in_reports:examples:another_language [2020/07/17 15:16] 192.168.1.126 удалено |
— (текущий) | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Перевод системных названий на другие языки ====== | ||
- | |||
- | ===== Текущая ситуация ===== | ||
- | |||
- | Business Studio позволяет создавать бизнес-модель и формировать регламентирующую документацию на языках отличных от русского. При этом перечисления, значения которых предопределены в базе, предоставляются всегда на русском языке. В качестве примера рассматривается разработка отчета на украинском языке. | ||
- | |||
- | ===== Постановка задачи ===== | ||
- | |||
- | В отчете формата Word по процессу все упоминания статусов процессов (на русском языке) должны отображаться на украинском. | ||
- | |||
- | ===== Исходные данные ===== | ||
- | |||
- | Решение описывается с момента, когда в шаблоне отчета созданы привязка типа "Объект", которая показывает текущий статус процесса, а также привязка типа "Список", которая показывает подпроцессы и их текущие статусы. | ||
- | |||
- | [{{ ru:creating_user_reports:use_macros_in_reports:another_language:lang_translate1.png?nolink |Рисунок 1. Вид привязок в шаблоне отчета, которые выводят данные по статусам процессов}}] | ||
- | |||
- | [{{ ru:creating_user_reports:use_macros_in_reports:another_language:lang_translate2.png?nolink |Рисунок 2. Вид сформированного отчета, в котором названия статусов даны на русском языке, а остальная часть регламента на украинском}}] | ||
- | |||
- | ===== Концепция решения ===== | ||
- | |||
- | Для каждого русского слова должны быть зафиксированы слова перевода на украинский язык. Во всем документе находить такие русские слова и заменять их украинскими. Там где статус указан через привязку типа Объект делать изменение значения поля с последующим его обновлением. | ||
- | |||
- | ===== Шаги решения ===== | ||
- | |||
- | Определяем название привязки типа "Список", которая представляет нужную таблицу (см. [[ru/manual/manual]] -> [[ru/manual/report/insert_anchor?&#пример_определения_названия_привязки_типа_список|Пример определения названия привязки типа "Список"]]). | ||
- | |||
- | <code> | ||
- | |||
- | 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 | ||
- | </code> | ||
- | |||
- | ===== Результат ===== | ||
- | |||
- | [{{ ru:creating_user_reports:use_macros_in_reports:another_language:lang_translate3.png?nolink |Рисунок 3. Вид сформированного отчета полностью на украинском языке | ||
- | }}] | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | [<contextnavigator>] | ||
- | |||