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

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При ведении учета в 1С часто возникает задача работы с иностранными партнерами или отдельными англоязычными пользователями. Например, в справочник Контрагенты добавляется дополнительный реквизит НаименованиеНаАнглийском, и требуется, чтобы при выборе контрагента в документе отображалось именно это англоязычное название, а не стандартное русское Наименование.

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

Ограничения платформы при работе со ссылочными полями

Проанализируем, почему стандартное поле ввода ведет себя определенным образом:

  1. Отображение ссылки в элементе управления: Поле ввода, привязанное к реквизиту типа СправочникСсылка.Контрагенты, всегда отображает системное строковое представление выбранного объекта. Напрямую переопределить текст конкретного элемента управления встроенными свойствами формы нельзя.
  2. Путь к данным через точку: В обычных формах (на которых построена конфигурация 1С:Бухгалтерия предприятия 2.0) указание пути к данным через точку вроде Контрагент.НаименованиеНаАнглийском делает поле доступным только для чтения, так как реквизиты ссылочных данных нельзя изменять напрямую через реквизит-ссылку.
  3. Стандартный ввод по строке: Быстрый поиск при наборе текста с клавиатуры работает только по тем реквизитам, которые включены в свойство справочника «Ввод по строке» в дереве метаданных.

Способ 1. Использование вспомогательного строкового поля на форме документа

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

Разберем по шагам настройку формы документа:

  1. Настройка элементов формы:

    Для стандартного поля ввода Контрагент установим свойство Видимость = Ложь.

    Добавим на форму новое несвязанное строковое поле ввода (например, с именем ПолеКонтрагентАнгл) и включим для него свойства КнопкаВыбора = Истина, КнопкаОчистки = Истина, КнопкаОткрытия = Истина.

  2. Синхронизация при открытии документа:

    В процедуре-обработчике ПриОткрытии формы документа заполним строковое поле текущим значением английского наименования выбранного контрагента:

    
    Процедура ПриОткрытии()
        Если ЗначениеЗаполнено(ЭтотОбъект.Контрагент) Тогда
            ЭлементыФормы.ПолеКонтрагентАнгл.Значение = ЭтотОбъект.Контрагент.НаименованиеНаАнглийском;
        КонецЕсли;
    КонецПроцедуры
    
  3. Обработка интерактивного выбора контрагента:

    Для поля ПолеКонтрагентАнгл создадим обработчик события НачалоВыбора, в котором откроем форму выбора справочника и перехватим результат:

    
    Процедура ПолеКонтрагентАнглНачалоВыбора(Элемент, СтандартнаяОбработка)
        СтандартнаяОбработка = Ложь;
        
        ФормаВыбора = Справочники.Контрагенты.ПолучитьФормуВыбора(, Элемент);
        ВыбранноеЗначение = ФормаВыбора.ОткрытьМодально();
        
        Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
            ЭтотОбъект.Контрагент = ВыбранноеЗначение;
            Элемент.Значение = ВыбранноеЗначение.НаименованиеНаАнглийском;
        КонецЕсли;
    КонецПроцедуры
    
  4. Обработка открытия и очистки:

    Запрограммируем события открытия карточки контрагента и очистки поля:

    
    Процедура ПолеКонтрагентАнглОткрытие(Элемент, СтандартнаяОбработка)
        СтандартнаяОбработка = Ложь;
        Если ЗначениеЗаполнено(ЭтотОбъект.Контрагент) Тогда
            ЭтотОбъект.Контрагент.ПолучитьФорму().Открыть();
        КонецЕсли;
    КонецПроцедуры
    
    Процедура ПолеКонтрагентАнглОчистка(Элемент, СтандартнаяОбработка)
        ЭтотОбъект.Контрагент = Справочники.Контрагенты.ПустаяСсылка();
        Элемент.Значение = "";
    КонецПроцедуры
    
  5. Реализация ввода по строке:

    Чтобы пользователь мог подбирать контрагента по первым буквам английского названия, задействуем событие АвтоПодборТекста или ОкончаниеВводаТекста, где выполним поиск по реквизиту НаименованиеНаАнглийском.

Способ 2. Переопределение представления ссылки в Модуле менеджера

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

Рассмотрим реализацию в модуле менеджера справочника Контрагенты:

  1. В процедуре ОбработкаПолученияПолейПредставления добавим наш реквизит в список запрашиваемых полей:
    
    Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
        Поля.Добавить("Наименование");
        Поля.Добавить("НаименованиеНаАнглийском");
        СтандартнаяОбработка = Ложь;
    КонецПроцедуры
    
  2. В процедуре ОбработкаПолученияПредставления пропишем условие подстановки нужной строки:
    
    Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
        // Проверяем признак англоязычного интерфейса пользователя
        Если РольДоступна("АнглоязычныйИнтерфейс") ИЛИ ПараметрыСеанса.ТекущийЯзыкИнтерфейса = "EN" Тогда
            Если ЗначениеЗаполнено(Данные.НаименованиеНаАнглийском) Тогда
                Представление = Данные.НаименованиеНаАнглийском;
                СтандартнаяОбработка = Ложь;
                Возврат;
            КонецЕсли;
        КонецЕсли;
    КонецПроцедуры
    

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

Настройка быстрого подбора (ввод по строке)

Для того чтобы по добавленному реквизиту работал штатный ввод текста с клавиатуры:

  1. Откроем свойства справочника Контрагенты в дереве метаданных конфигуратора.
  2. Найдем свойство «Ввод по строке».
  3. Добавим реквизит НаименованиеНаАнглийском в состав полей ввода по строке.

Таким образом, для точечной доработки одного документа оптимально использовать Способ 1 с подменой элементов на форме, а для комплексной адаптации всей системы под конкретного пользователя — Способ 2 с переопределением логики в модуле менеджера.

← На главную