Однажды мне нужно было сделать несколько печатных форм на различных языках. Задача вроде нетривиальная: просто нарисовать несколько макетов на различных языках, и все.
Но не тут-то было...
Мне потребовалось перевести на разные языки элементы справочника контрагенты, номенклатуры и другие. То есть основные реквизиты документов, которые использовались у меня в печатных формах.
Встал вопрос: "Где хранить всю эту информацию?"
Мне не хотелось плодить в конфигурации ненужных регистров, и решение, которое я придумал, не требовало внесения дополнительных изменений в саму конфигурацию. Вы уже, наверное, поняли из заголовка статьи, какой справочник я использовал, чтобы хранить данную информацию.
Вся информация в базе введена на украинском языке. Поэтому в моем случае мне нужно было два языка: английский и русский для перевода элементов справочников на различные языки.
И так начнем:
- Для начала я создал с помощью обработки "Значения свойств объекта" несколько свойств для нужных справочников. Свойства назвал соответственно "Наименование ENG", "Наименование RU".
- На этом этапе нам нужно открыть справочник "Номенклатура" или другой в зависимости от того, для какого справочника мы создавали дополнительное свойство, и после в самом справочнике перейти на вкладку "Свойства", где мы увидим созданное нами новое свойство
- Дальше нужно указать значение для свойства справочника номенклатуры "Наименование ENG".
- Следующим шагом для нужного документа создаю внешнюю печатную форму, в которой добавляю соответствующие макеты на разных языках, чтобы не путаться. Практика показала, что так удобнее. Где в модуле объекта пишу примерно такой код:
//?(ЯзыкПечати = "Русский", ПолучитьСвойствоСправочника(Элемент, "Наименование RU"), Элемент);
//?(ЯзыкПечати = "Английский", ПолучитьСвойствоСправочника(Элемент, "Наименование EN"), Элемент);
// Процедура осуществляет печать документа.
//
// Параметры:
// НазваниеМакета - строка, название макета.
//
Функция Печать() Экспорт
Если Не СсылкаНаОбъект.Проведен Тогда
Предупреждение("Документ можно распечатать только после его проведения!");
Возврат Неопределено;
КонецЕсли;
//Открываем форму диалога, с настройками печати
Форма = ПолучитьФорму("НастройкиПечати");
форма.Дата = ТекущаяДата();
Форма.Сертификат = Истина;
Выбор = Форма.ОткрытьМодально();
Если Выбор <> КодВозвратаДиалога.ОК Тогда
Возврат Неопределено;
КонецЕсли;
// Получить экземпляр документа на печать
ТабДокумент = ПечатьИнвойс();
Возврат ТабДокумент;
КонецФункции // Печать
// Функция формирует табличный документ с печатной формой накладной,
// разработанной методистами
//
// Возвращаемое значение:
// Табличный документ - печатная форма накладной
//
Функция ПечатьИнвойс() Экспорт
Если ЯзыкПечати = "Русский" Тогда
КодЯзыкаПечать = "ru";
//Заполняю макеты
ИначеЕсли ЯзыкПечати = "Английский" Тогда
КодЯзыкаПечать = "en_US";
//Заполняю макеты
КонецЕсли;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетНаОплатуПокупателю_Инвойс";
Возврат ТабДокумент;
КонецФункции
- Также создаю дополнительную форму, которая будет вызываться перед самой печатью, где нужно указать действия, которые нужно выполнить перед печатью. Выбрать язык макета и т.д
- В модуле формы пишу такой код
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
ЭлементыФормы.ЯзыкПечати.СписокВыбора.Очистить();
ЭлементыФормы.ЯзыкПечати.СписокВыбора.Добавить("Русский");
ЭлементыФормы.ЯзыкПечати.СписокВыбора.Добавить("Английский");
КонецПроцедуры
Процедура ПриОткрытии()
ЭлементыФормы.ЯзыкПечати.Значение = ЭлементыФормы.ЯзыкПечати.СписокВыбора[0].значение;
КонецПроцедуры
Процедура КнопкаОКНажатие(Кнопка)
ПолучитьАдрес(СсылкаНаОбъект.Организация, "Адрес RU");
ЭтаФорма.Закрыть(КодВозвратаДиалога.ОК );
КонецПроцедуры
- Соответственно и все, сохраняю печатную форму и прикрепляю ее к нужному документу
Тестировал на конфигурации Управление торговым предприятием для Украины", редакция 1.2. (1.2.43.1)