Как реализовать хранение наименований и реквизитов номенклатуры на нескольких языках в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке и адаптации конфигураций 1С часто возникает задача хранения текстовых данных (наименований, описаний товаров, параметров и характеристик) на нескольких языках — например, для выгрузки в интернет-магазины, работы с зарубежными контрагентами или передачи в сторонние сервисы по API. Разберем, какие подходы существуют в платформе 1С:Предприятие 8.3, чем отличается перевод интерфейса от перевода данных и как правильно организовать структуру хранения.

Различие между переводом интерфейса и мультиязычностью данных

Важно четко разделять две принципиально разные задачи платформы:

  1. Интернационализация интерфейса: штатные объекты метаданных ветки Языки, многоязычные синонимы объектов и функция НСтр() в коде предназначены исключительно для перевода элементов управления, заголовков форм, отчетов и системных сообщений. Данный механизм не предназначен для хранения пользовательских данных в таблицах базы.
  2. Мультиязычность данных (контента): хранение переводов реквизитов конкретных элементов справочников (например, наименование одной и той же позиции на русском, английском и немецком языках). Платформа не предоставляет автоматической подмены пользовательских строковых данных «из коробки», поэтому эту логику необходимо проектировать на уровне метаданных конфигурации.

Вариант 1. Хранение переводов в непериодическом регистре сведений (EAV-модель)

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

Создадим непериодический независимый регистр сведений со следующей структурой:

  1. Измерение Объект: составной тип (например, СправочникСсылка.Номенклатура, СправочникСсылка.ХарактеристикиНоменклатуры, ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения).
  2. Измерение ИмяРеквизита: тип Строка (длина 50–100) либо ПеречислениеСсылка со списком переводимых полей (например: Наименование, НаименованиеПолное, ОписаниеДляСайта).
  3. Измерение КодЯзыка: тип Строка (длина 10) или ссылка на справочник языков. Рекомендуется использовать стандартные коды стандарта ISO-639-1 (ru, en, de), что существенно упростит сериализацию данных при выгрузке в XML или JSON.
  4. Ресурс Значение: тип Строка (длина неограниченная или максимальная требуемая).

Преимущества подхода:

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

Ограничения подхода: выборка большого массива данных в отчетах или динамических списках потребует соединений с таблицей регистра сведений, что при миллионных объемах записей может создавать нагрузку на СУБД. Также полнотекстовый поиск платформы по справочнику номенклатуры по умолчанию не видит строки из отдельного регистра.

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

Если список дополнительных языков фиксирован (например, только английский и немецкий) и расширение не планируется, целесообразно рассмотреть вариант создания выделенных реквизитов непосредственно в справочнике или через механизм ОбщиеРеквизиты:

  1. Реквизиты НаименованиеЯзык1 (EN), НаименованиеЯзык2 (DE);
  2. Реквизиты ОписаниеЯзык1 (EN), ОписаниеЯзык2 (DE).

Такой подход обеспечивает максимальную скорость выборки данных без соединений таблиц, корректно индексируется СУБД и напрямую отдается через стандартный протокол OData без написания дополнительных запросов.

Организация пакетной выгрузки данных на сайт

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Номенклатура.Ссылка КАК Ссылка,
    |	Номенклатура.Наименование КАК НаименованиеRU,
    |	Переводы.ИмяРеквизита КАК ИмяРеквизита,
    |	Переводы.КодЯзыка КАК КодЯзыка,
    |	Переводы.Значение КАК Значение
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МультиязычныеЗначения КАК Переводы
    |		ПО (Переводы.Объект = Номенклатура.Ссылка)
    |ГДЕ
    |	НЕ Номенклатура.ЭтоГруппа
    |ИТОГИ ПО
    |	Ссылка";

РезультатЗапроса = Запрос.Выполнить();
ВыборкаОбъектов = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

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

Подмена представлений и поиск внутри 1С при необходимости

Если в дальнейшем потребуется, чтобы пользователи в интерфейсе 1С видели наименования на выбранном языке сеанса или могли осуществлять ввод по строке на иностранном языке, разберем переопределение обработчиков в модуле менеджера справочника:

  1. ОбработкаПолученияПолейПредставления — позволяет включить дополнительные языковые реквизиты в список полей, считываемых платформой при формировании стандартного представления ссылки.
  2. ОбработкаПолученияПредставления — подменяет итоговую отображаемую строку в зависимости от текущих настроек пользователя или переданных параметров.
  3. ОбработкаПолученияДанныхВыбора — позволяет реализовать поиск и автоподбор элементов по строке с учетом иноязычных переводов.
← На главную