Использование справочника "Значения свойств объектов" для хранения информации на нескольких языках

Публикация № 703569

Программирование - Практика программирования

Печать Печатная форма хранения информации на нескольких языках Управление торговым предприятием для Украины" редакция 1.2. (1.2.43.1)

1
Хранение дополнительной информации об объекте с помощью справочника "Значения свойств объектов" с последующей целью дальнейшего использования для печати на различных языках.

Однажды мне нужно было сделать несколько печатных форм на различных языках. Задача вроде нетривиальная: просто нарисовать несколько макетов на различных языках, и все.

Но не тут-то было...

Мне потребовалось перевести на разные языки элементы справочника контрагенты, номенклатуры и другие. То есть основные реквизиты документов, которые использовались у меня в печатных формах.

Встал вопрос: "Где хранить всю эту информацию?"

Мне не хотелось плодить в конфигурации ненужных регистров, и решение, которое я придумал, не требовало внесения дополнительных изменений в саму конфигурацию. Вы уже, наверное, поняли из заголовка статьи, какой справочник я использовал, чтобы хранить данную информацию. 

Вся информация в базе введена на украинском языке. Поэтому в моем случае мне нужно было два языка: английский и русский для перевода элементов справочников на различные языки.

И так начнем:

  • Для начала я создал с помощью обработки "Значения свойств объекта" несколько свойств для нужных справочников. Свойства назвал соответственно "Наименование ENG", "Наименование RU".

           

           

  •  На этом этапе нам нужно открыть справочник "Номенклатура" или другой в зависимости от того, для какого справочника мы создавали дополнительное свойство, и после в самом справочнике перейти на вкладку  "Свойства", где мы увидим созданное нами новое свойство

           

  • Дальше нужно указать значение для свойства справочника номенклатуры "Наименование ENG".

           

  • Следующим шагом для нужного документа создаю внешнюю печатную форму, в которой добавляю соответствующие макеты на разных языках, чтобы не путаться. Практика показала, что так удобнее. Где в модуле объекта пишу примерно такой код:

//?(ЯзыкПечати = "Русский", ПолучитьСвойствоСправочника(Элемент, "Наименование RU"),  Элемент);
//?(ЯзыкПечати = "Английский", ПолучитьСвойствоСправочника(Элемент, "Наименование EN"),  Элемент);

// Процедура осуществляет печать документа. 
//
// Параметры:
//  НазваниеМакета - строка, название макета.
//
Функция Печать() Экспорт
	
	Если Не СсылкаНаОбъект.Проведен Тогда
		Предупреждение("Документ можно распечатать только после его проведения!");
		Возврат Неопределено;
	КонецЕсли;
	
	//Открываем форму диалога, с настройками печати
	Форма            = ПолучитьФорму("НастройкиПечати");
	форма.Дата       = ТекущаяДата();
	Форма.Сертификат = Истина;
	
	Выбор = Форма.ОткрытьМодально();
	Если Выбор <> КодВозвратаДиалога.ОК Тогда
		Возврат Неопределено;
	КонецЕсли;
		
	// Получить экземпляр документа на печать
	ТабДокумент = ПечатьИнвойс();
	
	Возврат ТабДокумент;
			
КонецФункции // Печать

// Функция формирует табличный документ с печатной формой накладной,
// разработанной методистами
//
// Возвращаемое значение:
//  Табличный документ - печатная форма накладной
//
Функция ПечатьИнвойс() Экспорт

	Если ЯзыкПечати = "Русский"    Тогда
		
		КодЯзыкаПечать = "ru";
        
        //Заполняю макеты
		
	ИначеЕсли   ЯзыкПечати = "Английский" Тогда
		
		КодЯзыкаПечать = "en_US";
        
        //Заполняю макеты

	КонецЕсли; 
		
	ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетНаОплатуПокупателю_Инвойс";
	
	Возврат ТабДокумент;	
		
КонецФункции

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

         

  • В модуле формы пишу такой код
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)	
	ЭлементыФормы.ЯзыкПечати.СписокВыбора.Очистить();
	ЭлементыФормы.ЯзыкПечати.СписокВыбора.Добавить("Русский");
	ЭлементыФормы.ЯзыкПечати.СписокВыбора.Добавить("Английский");	
КонецПроцедуры

Процедура ПриОткрытии()
	ЭлементыФормы.ЯзыкПечати.Значение = ЭлементыФормы.ЯзыкПечати.СписокВыбора[0].значение;
КонецПроцедуры

Процедура КнопкаОКНажатие(Кнопка)	
		ПолучитьАдрес(СсылкаНаОбъект.Организация, "Адрес RU");
	ЭтаФорма.Закрыть(КодВозвратаДиалога.ОК );
КонецПроцедуры
  • Соответственно и все, сохраняю печатную форму и прикрепляю ее к нужному документу

Тестировал на конфигурации Управление торговым предприятием для Украины", редакция 1.2. (1.2.43.1)

Достоинства

- Минимум затрат на внедрение

- Не нужно вносить изменения в конфигурацию

- Использование стандартных справочников для хранения информации на нескольких языках

1

Скачать файлы

Наименование Файл Версия Размер
Шаблон внешней печатной формы
.epf 19,77Kb
01.12.17
0
.epf 19,77Kb Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Alex_CheST 1 10.07.18 07:38 Сейчас в теме
Спасибо за интересную публикацию. Решал такую же задачу. В принципе все то же самое делал. Только вместо нескольких макетов сделал просто перевод на английский областей нужных и все.
Оставьте свое сообщение