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

10.01.17

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Файл конфигурации версия 1.0.2
.cf 40,75Kb ver:1.0.2
10 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

Для реализации идеи используется механизма разделения данных, подробнее 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: Изменил логотип, почитав про авторские права.

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

24900 руб.

20.08.2024    59259    316    158    

286

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

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

16500 руб.

02.09.2020    243252    1328    419    

1118

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

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

15250 руб.

25.08.2025    39207    77    19    

91

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22570 руб.

06.10.2023    34796    88    35    

112

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

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

9500 руб.

17.05.2024    48756    166    63    

205

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

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

17000 руб.

10.11.2023    23404    84    42    

99

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

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

36600 руб.

28.08.2025    5814    2    2    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ekaruk 5051 29.12.16 01:05 Сейчас в теме
Т.е. получается, что в одной базе хранятся несколько ее копий с небольшими измененими.
А кто занимается переводом и синхронизацией данных, раз уж мы говорим про многоязычность?
SergeySemendyaev; Идальго; +2 Ответить
2. yghmd 12 29.12.16 07:10 Сейчас в теме
По факту будут копии только нужных справочников (справочники не должны меняться часто), даже если вдруг надо будет копии документов, то движения будут общие. Это одна из идей для хранения этой многоязычности с использованием механизма разделения данных. В конкретных задачах надо рассматривать и производительность и прочие факты, эта идея мне просто показалась элегантной.
Переводом кто-то должен заниматься, тут можно организовать какой то регистр сведений для записи изменений по важным полям.
Если глубже посмотреть, то можно и гугл переводчик прикрутить.
3. ardn 747 29.12.16 08:18 Сейчас в теме
Перевод требуется только для текстовых полей. Мне кажется, использование разделения данных избыточно и даже вредно. Можно же хранить тексты в том же регистре сведений.
o4karek; BigB; +2 Ответить
4. yghmd 12 29.12.16 08:23 Сейчас в теме
(3) имеете право на свое мнение, я не готов провести анализ избыточно это или нет.
но при хранении в регистре сведений переводов полей, необходимо придумать механизм их отображения, у Вас есть идея ее реализации?
5. Steelvan 315 29.12.16 10:00 Сейчас в теме
Минус за то, что в списке флагов нет России, Украины или других нам близких, зато есть американский.
6. yghmd 12 29.12.16 10:14 Сейчас в теме
(5) серьезно? :) глянул мельком ваши публикации, там вообще нету флага России :)
7. Steelvan 315 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 Сейчас в теме
Вы пишете "Например, есть конфигурация, в которой работают сотрудники из разных стран, не знающие несколько языков". Тогда совершенно не понятно как эти разные сотрудники будут работать с вашей конфигурацией, которая выложена для загрузки. Я попытался добавить код , который вы предлагаете в свою рабочую БД при разделении значений только одного справочника. В результате пользователь, у которого выставлен русский язык и пользователь , у которого выставлен немецкий язык, видят одни и те же элементы справочника и как работает разделение по языкам не понятно.

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