Как включить выбор нескольких языков (вернуть значок лупы) в макете внешней печатной формы 1С

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

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

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

Проанализируем ситуацию по шагам и рассмотрим все доступные решения — от манипуляций в Конфигураторе до программных методов локализации динамических параметров.

Почему пропадает кнопка выбора языков («лупа») во внешних макетах

Прежде всего выясним причину такого поведения платформы. Внешняя печатная форма (файл с расширением .epf или .erf) является самостоятельным программным объектом. В ее структуре метаданных физически отсутствует ветка Общие -> Языки, которая есть в основной конфигурации базы данных. Платформа 1С определяет, является ли база многоязычной, на основе активной конфигурации, открытой в текущем сеансе Конфигуратора.

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

Рассмотрим детально методы решения этой проблемы.

Решение 1. Правильное открытие конфигурации базы данных

Самый простой и быстрый способ вернуть «лупу» в свойствах ячеек — предоставить Конфигуратору контекст многоязычной базы данных перед началом работы с файлом внешней печатной формы.

Выполним следующие действия:

  1. Запустите Конфигуратор нужной информационной базы (в которой настроена многоязычность, например, украинская или международная версия конфигурации).
  2. В главном меню обязательно выберите пункт Конфигурация и нажмите Открыть конфигурацию. Дождитесь полной загрузки дерева метаданных.
  3. Разверните ветку Общие -> Языки и убедитесь, что в базе действительно заведено несколько языков (например, русский ru и украинский uk).
  4. Только после этого перейдите в меню Файл -> Открыть и выберите вашу внешнюю печатную форму (.epf).
  5. Откройте макет табличного документа и выберите любую текстовую ячейку. Посмотрите на палитру свойств (клавиша F4) — напротив строки текста должна снова появиться кнопка выбора («лупа»).

Решение 2. Добавление второго языка в базу данных

Если вы разрабатываете печатную форму в пустой или одноязычной базе (например, в российской локализации БП, где по умолчанию добавлен только один язык), платформа не отобразит «лупу», так как переводить текст просто не на что. Чтобы исправить это, нам необходимо временно или постоянно добавить второй язык в саму конфигурацию.

Пройдем по шагам процесс добавления нового языка локализации:

  1. Откройте дерево метаданных вашей базы в Конфигураторе.
  2. Найдите ветку Общие, внутри нее нажмите правой кнопкой мыши по пункту Языки и выберите Добавить.
  3. В свойствах созданного языка укажите имя (например, Украинский) и код языка (например, uk). Для английского языка используйте код en.
  4. Выполните обновление конфигурации базы данных (клавиша F7).
  5. Критически важный шаг: полностью закройте Конфигуратор и запустите его заново. Без перезапуска платформы изменения в языковых настройках могут не примениться к уже открытым сессиям редактирования внешних файлов, и в макетах вместо правильных названий языков может отображаться системное имя вроде «Язык1».
  6. После перезапуска откройте вашу внешнюю печатную форму. Теперь в окне редактирования свойств ячейки при нажатии на «лупу» откроется полноценная форма ввода строк для всех зарегистрированных в системе языков.

Решение 3. Использование группового инструмента «Редактирование текстов интерфейса»

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

Давайте разберем, как им пользоваться:

  1. В главном меню Конфигуратора перейдите по пути: Правка -> Редактирование текстов интерфейса...
  2. В появившемся диалоговом окне в поле поиска выберите вариант Внешний файл и укажите путь к вашей внешней печатной форме (.epf) на жестком диске.
  3. Нажмите кнопку ОК. Платформа произведет глубокое сканирование всех макетов и модулей обработки, после чего выведет на экран удобную сводную таблицу.
  4. В этой таблице строки будут представлять собой исходные тексты, найденные в макете, а колонки — доступные языки конфигурации. Вы сможете быстро скопировать русский текст в украинскую или английскую колонку и сразу же отредактировать перевод для каждой строки.
  5. После завершения редактирования сохраните изменения и закройте окно инструмента. Все переводы автоматически запишутся внутрь макета табличного документа ВПФ.

Решение 4. Программная локализация динамических параметров в модуле ВПФ

Стоит отметить, что «лупа» в свойствах ячеек макета решает проблему только для статического текста (шапки таблиц, подписи, названия колонок). Однако в реальных печатных формах большинство данных выводится динамически через параметры. Например, статусы документов, названия должностей или единицы измерения.

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

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


// Функция определяет язык формирования печатной формы на основе настроек пользователя
Функция ПолучитьКодЯзыкаПечати()
    
    // В типовых конфигурациях язык обычно хранится в персональных настройках пользователя
    РежимПользователя = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(
        глЗначениеПеременной("глТекущийПользователь"), 
        "РежимФормированияПечатныхФорм"
    );
    
    Если РежимПользователя = Перечисления.РежимФормированияПечатныхФорм.НаРусскомЯзыке Тогда
        Возврат "ru";
    ИначеЕсли РежимПользователя = Перечисления.РежимФормированияПечатныхФорм.НаУкраинскомЯзыке Тогда
        Возврат "uk";
    Иначе
        // По умолчанию используем язык интерфейса текущей сессии
        Возврат КодЯзыкаИнтерфейса();
    КонецЕсли;
    
КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    // Получаем целевой код языка для вывода формы
    КодЯзыкаПечать = ПолучитьКодЯзыкаПечати();
    
    // Получаем макет из внешней обработки
    ЭтотОбъект = РеквизитФормыВЗначение("Объект");
    Макет = ЭтотОбъект.ПолучитьМакет("Макет");
    
    // Указываем макету, под какой языковой стандарт его инициализировать
    Макет.КодЯзыкаМакета = КодЯзыкаПечать;
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.КодЯзыкаМакета = КодЯзыкаПечать;
    
    // Выводим шапку макета
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    
    // Локализация динамического параметра программным способом
    // Функция НСтр выбирает нужную строку в зависимости от переданного во втором параметре кода языка
    ОбластьШапка.Параметры.СтатусДокумента = НСтр("ru='Проведен'; uk='Проведений'", КодЯзыкаПечать);
    
    ТабличныйДокумент.Вывести(ОбластьШапка);
    
    // Передаем сформированный документ на вывод пользователю
    КоллекцияПечатныхФорм.Очистить();
    ТабличнаяЧастьПечатнойФормы = КоллекцияПечатныхФорм.Добавить();
    ТабличнаяЧастьПечатнойФормы.ТабличныйДокумент = ТабличныйДокумент;
    
КонецПроцедуры

В данном примере свойство КодЯзыкаМакета указывает платформе, какую именно языковую версию статических надписей извлекать из макета при вызове метода ПолучитьОбласть(). Если для ячеек была настроена локализация с помощью «лупы», то при установке КодЯзыкаМакета = "uk" платформа автоматически подставит украинские аналоги строк.

Решение 5. Инструменты локализации макетов в режиме «1С:Предприятие» (БСП)

Если вы работаете в современной конфигурации, разработанной на базе Библиотеки стандартных подсистем (БСП), вам может вообще не понадобиться Конфигуратор для локализации макета внешней печатной формы. В БСП встроен удобный интерактивный редактор макетов.

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

  1. Откройте программу в режиме «1С:Предприятие» под учетной записью администратора.
  2. Перейдите в раздел Администрирование -> Печатные формы, отчеты и обработки.
  3. Выберите пункт Макеты печатных форм.
  4. Найдите в списке вашу внешнюю печатную форму и дважды кликните по ней для редактирования макета.
  5. Платформа откроет встроенный табличный документ. На панели инструментов вы сможете переключить текущий отображаемый язык макета, ввести перевод для необходимых областей и сохранить изменения непосредственно в информационную базу. Этот вариант исключает риск затирания локализованных строк при переносе файлов обработок между разными базами данных.

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

← На главную