Как реализовать автоматический перевод наименований контрагентов в 1С:Управление торговлей

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Анализ подходов к автоматизации перевода

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

  1. Машинный перевод через API (Google Translate, Яндекс.Переводчик, DeepL). Это универсальный способ, подходящий для любых названий, но требующий контроля за корректностью имен собственных.
  2. Использование государственных реестров (Opendatabot, YouScore). Это самый надежный метод для юридических лиц, так как данные подтягиваются напрямую из официальных источников, где названия уже зафиксированы на государственном языке.
  3. Словарный метод и транслитерация. Подходит для преобразования организационно-правовых форм (например, "ООО" в "ТОВ") и типовых имен.

Проанализируем наиболее гибкий вариант — интеграцию с сервисами машинного перевода.

Настройка интеграции с API переводчика

Для реализации автоматического перевода в 1С:Управление торговлей нам потребуется написать процедуру, которая будет отправлять HTTP-запрос к выбранному сервису. Рассмотрим пример работы с API, где основным механизмом выступает объект HTTPСоединение.

Важным нюансом является доступность сервисов. Если сервер 1С находится в регионе, где доступ к ресурсам (например, Яндекса) ограничен, нам необходимо настроить соединение через прокси-сервер. Разберем программный код для выполнения такого запроса:


&НаСервере
Функция ПолучитьПереводТекста(ИсходныйТекст, ЦелевойЯзык = "uk")
    
    // Параметры API (пример для Яндекс.Переводчика)
    КлючAPI = "ВАШ_КЛЮЧ_API";
    АдресРесурса = "translate.api.cloud.yandex.net";
    ПутьКРесурсу = "/translate/v2/translate";
    
    // Настройка прокси, если сервер 1С находится в заблокированной зоне
    Прокси = Новый ИнтернетПрокси;
    Прокси.Установить("https", "192.168.1.100", 8080, "ЛогинПрокси", "ПарольПрокси");
    
    // Формируем тело запроса в формате JSON
    ПараметрыЗапроса = Новый Структура;
    ПараметрыЗапроса.Вставить("targetLanguageCode", ЦелевойЯзык);
    ПараметрыЗапроса.Вставить("texts", ИсходныйТекст);
    ПараметрыЗапроса.Вставить("folderId", "ID_ВАШЕГО_КАТАЛОГА");
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапроса);
    ТелоЗапроса = ЗаписьJSON.Закрыть();
    
    // Создаем HTTP-соединение
    HTTPСоединение = Новый HTTPСоединение(АдресРесурса, 443,,,,, Новый ЗащищенноеСоединениеOpenSSL(), Прокси);
    
    // Подготовка заголовков
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "application/json");
    Заголовки.Вставить("Authorization", "Bearer " + КлючAPI);
    
    Запрос = Новый HTTPЗапрос(ПутьКРесурсу, Заголовки);
    Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);
    
    Попытка
        Ответ = HTTPСоединение.ОтправитьДляОбработки(Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            ЧтениеJSON = Новый ЧтениеJSON;
            ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
            РезультатСтруктура = ПрочитатьJSON(ЧтениеJSON);
            Возврат РезультатСтруктура.translations[0].text;
        Иначе
            ЗаписатьЛогОшибки("Ошибка API: " + Ответ.ПолучитьТелоКакСтроку());
            Возврат "";
        КонецЕсли;
    Исключение
        ЗаписатьЛогОшибки("Ошибка связи: " + ОписаниеОшибки());
        Возврат "";
    КонецПопытки;
    
КонецФункции

В данном примере мы проанализируем структуру ответа и извлечем переведенную строку. Обратите внимание на использование ЗащищенноеСоединениеOpenSSL, так как современные API требуют работы по протоколу HTTPS.

Использование государственных реестров (Opendatabot)

Для юридических лиц в Украине наиболее правильным решением будет не перевод, а получение данных по коду ЕГРПОУ. Сервисы типа Opendatabot позволяют по API получить точное название организации на государственном языке. Это исключает риск некорректного перевода собственных имен компаний.

Принцип работы схож с обычным переводчиком: мы отправляем запрос, содержащий ИНН или код предприятия, и получаем в ответ структуру с официальным наименованием. Рассмотрим, почему это лучше:

Обработка имен собственных и организационных форм

При использовании классических переводчиков часто возникает проблема перевода аббревиатур (ООО, ЧП, АО). Для корректной работы в 1С мы рекомендуем создать вспомогательный Регистр сведений или просто таблицу соответствий.

Перед отправкой текста в API или сразу после получения результата, выполним программную замену:


Функция СкорректироватьОрганизационнуюФорму(ТекстНаименования)
    Результат = ТекстНаименования;
    // Заменяем русские сокращения на украинские аналоги
    Результат = СтрЗаменить(Результат, "ООО ", "ТОВ ");
    Результат = СтрЗаменить(Результат, "ЧП ", "ПП ");
    Результат = СтрЗаменить(Результат, "ОАО ", "ВАТ ");
    // Имена собственные
    Результат = СтрЗаменить(Результат, "Владимир", "Володимир");
    Результат = СтрЗаменить(Результат, "Николай", "Микола");
    
    Возврат Результат;
КонецФункции

Такой подход позволяет совместить мощь машинного перевода с жестким соблюдением лингвистических правил конкретной страны. Выясним причину, по которой этот метод важен: API переводчика обучается на больших массивах данных и может предложить "литературный" вариант там, где требуется строгий "канцелярский" термин.

Интеграция в интерфейс пользователя

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

  1. Оператор вводит "Рабочее наименование" на русском языке.
  2. В обработчике события ПриИзменении программа предлагает: "Заполнить юридическое наименование на украинском?".
  3. При согласии вызывается функция ПолучитьПереводТекста.
  4. Результат помещается в поле "Юридическое наименование", и фокус ввода передается туда для визуального контроля оператором.

Посмотрим на пример настройки в форме элемента справочника Контрагенты:


&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
    Если ЗначениеЗаполнено(Объект.Наименование) И ПустаяСтрока(Объект.НаименованиеПолное) Тогда
        ТекстПеревода = ПолучитьПереводНаСервере(Объект.Наименование);
        Если Не ПустаяСтрока(ТекстПеревода) Тогда
            Объект.НаименованиеПолное = ТекстПеревода;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Заключение

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

← На главную