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

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: Изменил логотип, почитав про авторские права.

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

См. также

INFOSTART TECH EVENT 2023, 11-13 октября, Санкт-Петербург

Инструментарий разработчика Мобильная разработка DevOps и автоматизация разработки Администрирование СУБД Мероприятия Россия Платные (руб)

XIII конференция по управлению и технологиям автоматизации учета на платформе 1С:Предприятие, которая пройдет в Санкт-Петербурге и соберет 1500 участников из разных регионов России и мира.

5100 руб.

09.12.2022    30068    5    0    

406

Онлайн-интенсив "DevOps для 1С". с 4 сентября по 17 октября 2023 г.

Инструментарий разработчика DevOps и автоматизация разработки DevOps для 1С Платные (руб)

Данный онлайн-курс (интенсив) предусматривает изучение процессов, инструментов и методик DevOps, их применение при разработке на платформе 1С. 

20.06.2023    9640    0    Infostart    2    

120

SALE! %

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

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

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

12000 10000 руб.

02.09.2020    93036    474    379    

530

SALE! 25%

PowerTools

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

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

3600 2700 руб.

14.01.2013    170002    1049    0    

789

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

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

Программист - это человек, непрерывно принимающий решения. Написание кода не является процессом принятия решения - это всего лишь трансляция ваших желаний. Если вас периодически тяготит написание сотен строк кода ради решения задач, то прошу обратить внимание. Данный продукт позволит существенно сократить время на рутинные операции при разработке. За счет библиотечной реализации сокращается объём кода, а его читаемость повышается. К библиотеке прилагается документация API и шаблоны кода для наиболее популярных методов.

4200 руб.

16.04.2021    12402    3    9    

9

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

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

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

5000 руб.

07.02.2018    96397    233    97    

283

Менеджер конфигураций 1С

Инструментарий разработчика Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1439 руб.

21.02.2023    5187    1    33    

14

Программное формирование существующих печатных форм

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

Получение списка печатных форм, формирование выбранной печатной формы и сохранение ее в файл.

1 стартмани

17.12.2021    14030    39    RocKeR_13    5    

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

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