Трудности международных конфигураций.
В международных компаниях, нужен не только интерфейс на нескольких языках, но и перевод справочников. И этот перевод должен показываться в отчетах, у каждого на своем языке. Тут недостаточно договорится о использовании о внутикорпоративного эсперанто, даже если это английский.
Возьмем справочник единиц измерений. Для российских пользователей счет фактур единицы измерения должны показываться на русском (для проверяющих), а для иностранцев на их языке в отчетах. Тоже с товарной номенклатурой.
У 1С есть в новых БСП подсистема «Мультиязычность»
По сути хранение двух дополнительных языков там организовано в двух общих реквизитах
( КомментарийЯзык1, НаименованиеЯзык1, КомментарийЯзык2, НаименованиеЯзык2 )
а вывод представления в разных отчетах на разных языках через предопределенные процедуры
#Область ОбработчикиСобытий Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) МультиязычностьКлиентСервер.ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка); КонецПроцедуры Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); КонецПроцедуры Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) МультиязычностьСервер.ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка, <Метаданные.ПланыВидовХарактеристик.ОбъектыАдресацииЗадач>); КонецПроцедуры #КонецОбласти
Эти предопределенные процедуры вызываются на каждую строку отчета или формы. Но код в них с моей точки зрения достаточно сложен. В более старых БСП ниже 3й версии этой подсистемы нет.
Простой способ возведения вавилонской башни.
Если стоит задача хранить переводы для представлений на разных языках, есть более простой выход.
-
Создаете для нужных справочников реквизит АльтернативноеПредставление (не общий, у каждого справочника)
-
Храните там строку , которая является аргументом для функции НСтр
-
И создайте наиболее простые варианты процедур ОбработкаПолученияПредставления()
Во всех формах и отчетах появится представление, соответствующее языку интерфейса пользователя. Кстати, если стоит вопрос о переводе реквизитов справочников, эта задача посложнее, но ее можно тоже решить через НСтр
Вот как все выглядит

Главное в этих предопределенных процедурах использовать самые простые конструкции на уровне (процессор – память) без сложных обращений к СУБД . Ведь этот код будет вызываться на каждую строку в форме или отчете. Когда данные процедуры находятся в модуле менеджера, они вызываются автоматом для каждого отчета или формы, поэтому модификации отчетов и форм не требуется.
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) СУУ_Представления.ОбработкаПолученияПредставленияСправочника(Данные, Представление, СтандартнаяОбработка); КонецПроцедуры Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) СУУ_Представления.ОбработкаПолученияПолейПредставленияСправочника(Поля, СтандартнаяОбработка); КонецПроцедуры Функция СформироватьАльтернативноеПредставлениеДокумента(Данные, Представление, СтандартнаяОбработка) Экспорт Попытка //Выводим представление если оно есть Если ПустаяСтрока(Данные.СУУ_АльтернативноеПредставление) Тогда Возврат Ложь; Иначе Представление = Данные.СУУ_АльтернативноеПредставление; СтандартнаяОбработка = Ложь; Возврат Истина; КонецЕсли; Исключение ЗаписьЖурналаРегистрации("Error", УровеньЖурналаРегистрации.Ошибка, , Данные.Ссылка, "There is an error "+ ОписаниеОшибки() +" during creating alternative representation for " + Представление); Возврат Ложь; КонецПопытки; КонецФункции Процедура ОбработкаПолученияПредставленияСправочника(Данные, Представление, СтандартнаяОбработка) Экспорт Если ЗначениеЗаполнено(Данные.СУУ_АльтернативноеПредставление) Тогда СтандартнаяОбработка = Ложь; Попытка Представление = НСтр(Данные.СУУ_АльтернативноеПредставление); Исключение Представление = Данные.СУУ_АльтернативноеПредставление; КонецПопытки; КонецЕсли; КонецПроцедуры
Возможно кто-то предложить еще более красивое решение, пишите на нашем канале. Лето будет жарким.
ссылка на оригинал статьи https://habr.com/ru/articles/814963/
Добавить комментарий