Мультиязычность данных в конфигурации

10.01.17

Разработка - Инструментарий разработчика

Использование разделения данных для работы с данными на нескольких языках.

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

Наименование Файл Версия Размер
Файл конфигурации версия 1.0.2
.cf 40,75Kb
10
.cf 1.0.2 40,75Kb 10 Скачать

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

Для реализации идеи используется механизма разделения данных, подробнее http://v8.1c.ru/overview/Term_000000788.htm и http://howknow1c.ru/programmirovanie-1c/razdelenie-dannyh-1s.html. При этом по общему реквизиту идет разделение данных в режиме использования разделяемых данных - независимо. При этом у нас появляется возможность хранить в базе объекты для разных языков с общей ссылкой. Эту ссылку можно использовать для остальной конфигурации, даже если остальная часть конфигурации не будет разделена по этому общему реквизиту, и данные будут отображены на определенном языке в зависимости от параметра сеанса.

В статье и тестовой конфигурации не будет рассмотрен механизмы локализации прикладных решений через объект конфигурации "Язык", подробнее http://v8.1c.ru/overview/Term_000000293.htm

Идею разработки можно применить к типовым конфигурациям с минимальными изменениями типовых объектов.

1. Создаем справочник "ЯзыкиДанных". В нем для удобства сразу создадим предопределенные элементы - русский и английский.

2. Создаем общий реквизит "ЯзыкДанных". Устанавливаем свойства: Тип данных - СправочникСсылка.ЯзыкиДанных; Разделение данных - Разделять; автоматически создаем параметры сеанса для свойств Значение разделения данных - ЯзыкДанныхЗначение, Использования разделения данных - ЯзыкДанныхИспользование. В составе указываем объекты конфигурации для разделения, в примере добавлены справочник Номенклатура и документ Поступление.

3. Создаем общий модуль для создания процедуры подписки на событие и подписку на событие ПриЗаписи для объектов, данные которых необходимо разделить по языкам заполнения.

4. В общем модуле сеанса прописываем заполнение параметров сеанса для разделения данных по общему реквизиту ЯзыкДанных

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

Основной идея заключается в обработке события ПриЗаписи объектов, данные которых необходимо разделить по языкам.


Процедура ИзменениеОбъектовНаДругихЯзыкахПриЗаписи(Источник, Отказ) Экспорт
	
	// проверка обработки события
	Если Источник.ДополнительныеСвойства.Свойство("ЗаписьЯзыковойКопии") Тогда
		Возврат;
	КонецЕсли;	
	
	ПользователиИнформационнойБазы.ТекущийПользователь().Язык = ТекущийЯзык();
	
	// сохраняем текущий язык данных
	ТекущийЯзыкДанных = ПараметрыСеанса.ЯзыкДанныхЗначение;
	
	ВыборкаЯзыковДанных = Справочники.ЯзыкиДанных.Выбрать();
	
	Пока ВыборкаЯзыковДанных.Следующий() Цикл
		
		Если ВыборкаЯзыковДанных.Ссылка = ТекущийЯзыкДанных Тогда
			Продолжить;
		КонецЕсли;
		
		ТипИсточника = ТипЗнч(Источник);
		
		// временно изменяем параметр сеанса
		ПараметрыСеанса.ЯзыкДанныхЗначение = ВыборкаЯзыковДанных.Ссылка;
		
		ЯзыковаяКопия = Источник.Ссылка.ПолучитьОбъект();
		НовыйОбъект = ЯзыковаяКопия = Неопределено;
		
		// обновляем языковую копию объекта
		Если ТипИсточника = Тип("СправочникОбъект.Номенклатура") Тогда
			
			// реквизит Наименование будет на разных языках
			Если НовыйОбъект Тогда
				ЯзыковаяКопия = Справочники.Номенклатура.СоздатьЭлемент();
				ЯзыковаяКопия.УстановитьСсылкуНового(Источник.Ссылка);
				
				СписокПолей = "Код, Наименование";
			Иначе
				СписокПолей = "Код";
			КонецЕсли;
			
			ЗаполнитьЗначенияСвойств(ЯзыковаяКопия, Источник, СписокПолей);
			ЯзыковаяКопия.ОбменДанными.Загрузка = Истина;
			ЯзыковаяКопия.ДополнительныеСвойства.Вставить("ЗаписьЯзыковойКопии");
			ЯзыковаяКопия.Записать();
		
		КонецЕсли;
		
		Если ТипИсточника = Тип("ДокументОбъект.Поступление") Тогда
			
			// реквизит Комментарий будет на разных языках
			Если НовыйОбъект Тогда
				ЯзыковаяКопия = Документы.Поступление.СоздатьДокумент();
				ЯзыковаяКопия.УстановитьСсылкуНового(Источник.Ссылка);
				
				СписокПолей = "Номер, Дата, Номенклатура, Количество, Проведен, ПометкаУдаления, Комментарий";
			Иначе
				СписокПолей = "Номер, Дата, Номенклатура, Количество, Проведен, ПометкаУдаления";
			КонецЕсли;
			
			ЗаполнитьЗначенияСвойств(ЯзыковаяКопия, Источник, СписокПолей);
			ЯзыковаяКопия.ОбменДанными.Загрузка = Истина;
			ЯзыковаяКопия.ДополнительныеСвойства.Вставить("ЗаписьЯзыковойКопии");
			ЯзыковаяКопия.Записать();
		
		КонецЕсли;
		
	КонецЦикла;
	
	ПараметрыСеанса.ЯзыкДанныхЗначение = ТекущийЯзыкДанных;
	
КонецПроцедуры

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

Пример конфигурации разработан на платформе 1С:Предприятие 8.3 (8.3.6.1999)

Update: Изменил логотип, почитав про авторские права.

Мультиязычность данных разделение данных области данных язык разные языки данных

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122231    673    389    

715

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 15300 руб.

06.10.2023    7310    22    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8000 руб.

10.11.2023    3560    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 2520 руб.

14.01.2013    177767    1074    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99359    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18122    6    8    

40

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28114    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23605    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ekaruk 4897 29.12.16 01:05 Сейчас в теме
Т.е. получается, что в одной базе хранятся несколько ее копий с небольшими измененими.
А кто занимается переводом и синхронизацией данных, раз уж мы говорим про многоязычность?
Идальго; +1 Ответить
2. yghmd 11 29.12.16 07:10 Сейчас в теме
По факту будут копии только нужных справочников (справочники не должны меняться часто), даже если вдруг надо будет копии документов, то движения будут общие. Это одна из идей для хранения этой многоязычности с использованием механизма разделения данных. В конкретных задачах надо рассматривать и производительность и прочие факты, эта идея мне просто показалась элегантной.
Переводом кто-то должен заниматься, тут можно организовать какой то регистр сведений для записи изменений по важным полям.
Если глубже посмотреть, то можно и гугл переводчик прикрутить.
3. ardn 622 29.12.16 08:18 Сейчас в теме
Перевод требуется только для текстовых полей. Мне кажется, использование разделения данных избыточно и даже вредно. Можно же хранить тексты в том же регистре сведений.
o4karek; BigB; +2 Ответить
4. yghmd 11 29.12.16 08:23 Сейчас в теме
(3) имеете право на свое мнение, я не готов провести анализ избыточно это или нет.
но при хранении в регистре сведений переводов полей, необходимо придумать механизм их отображения, у Вас есть идея ее реализации?
5. Steelvan 302 29.12.16 10:00 Сейчас в теме
Минус за то, что в списке флагов нет России, Украины или других нам близких, зато есть американский.
6. yghmd 11 29.12.16 10:14 Сейчас в теме
(5) серьезно? :) глянул мельком ваши публикации, там вообще нету флага России :)
7. Steelvan 302 29.12.16 11:50 Сейчас в теме
И вражеских флагов тоже :)
8. vpaoli 26 01.06.18 17:05 Сейчас в теме
в вашей конфигурации есть обработка СменаЯзыкаДанных. Каким образом пользователь должен ее использовать ?
9. vpaoli 26 01.06.18 17:43 Сейчас в теме
При разделении данных в ранее загруженном справочнике все его элементы (за исключением предопределенных) удаляются. Остаются битые ссылки. Поэтому, внедрение данного решения в уже работающей БД невозможно. Вы не рассматривали. какие существуют выходы из данной ситуации ?
10. vpaoli 26 04.06.18 07:55 Сейчас в теме
Вы пишете "Например, есть конфигурация, в которой работают сотрудники из разных стран, не знающие несколько языков". Тогда совершенно не понятно как эти разные сотрудники будут работать с вашей конфигурацией, которая выложена для загрузки. Я попытался добавить код , который вы предлагаете в свою рабочую БД при разделении значений только одного справочника. В результате пользователь, у которого выставлен русский язык и пользователь , у которого выставлен немецкий язык, видят одни и те же элементы справочника и как работает разделение по языкам не понятно.

Думаю никто из пользователей инфостарта вашу конфигурацию "не кровырял" иначе бы были вопросы. Считаю вашу публикацию сырой и содержащей больше вопросов, чем ответов. Если я ошибаюсь , то поправьте и расскажите как реально все это применять.
Оставьте свое сообщение