При разработке и кастомизации внешних печатных форм (ВПФ) в среде «1С:Предприятие» разработчики часто сталкиваются со странным поведением платформы: в макете табличного документа (.mxl) пропадает возможность задать перевод для статических ячеек на разных языках. В палитре свойств ячеек рядом с текстовым полем исчезает привычная кнопка открытия (в простонародье называемая «лупой»). Из-за этого невозможно настроить двуязычную печать (например, на русском и украинском языках), и форма выводится пустой при переключении локализации пользователя.
В данной статье мы подробно разберем, почему возникает эта проблема, как функционируют механизмы локализации макетов в 1С и какими способами можно вернуть полнофункциональное многоязычное редактирование ячеек во внешних обработках.
Проанализируем ситуацию по шагам и рассмотрим все доступные решения — от манипуляций в Конфигураторе до программных методов локализации динамических параметров.
Прежде всего выясним причину такого поведения платформы. Внешняя печатная форма (файл с расширением .epf или .erf) является самостоятельным программным объектом. В ее структуре метаданных физически отсутствует ветка Общие -> Языки, которая есть в основной конфигурации базы данных. Платформа 1С определяет, является ли база многоязычной, на основе активной конфигурации, открытой в текущем сеансе Конфигуратора.
Если перед открытием файла внешней обработки вы не открыли основную конфигурацию базы данных или если в открытой конфигурации добавлен только один язык интерфейса, платформа автоматически скрывает элементы интерфейса для локализации строк. В этот момент макет переходит в режим работы с единственным языком, а все ранее введенные переводы для других языков могут быть скрыты или даже безвозвратно утеряны при сохранении макета.
Рассмотрим детально методы решения этой проблемы.
Самый простой и быстрый способ вернуть «лупу» в свойствах ячеек — предоставить Конфигуратору контекст многоязычной базы данных перед началом работы с файлом внешней печатной формы.
Выполним следующие действия:
ru и украинский uk)..epf).Если вы разрабатываете печатную форму в пустой или одноязычной базе (например, в российской локализации БП, где по умолчанию добавлен только один язык), платформа не отобразит «лупу», так как переводить текст просто не на что. Чтобы исправить это, нам необходимо временно или постоянно добавить второй язык в саму конфигурацию.
Пройдем по шагам процесс добавления нового языка локализации:
Украинский) и код языка (например, uk). Для английского языка используйте код en.Иногда ручной перевод каждой ячейки через клик по «лупе» занимает слишком много времени, особенно если макет содержит сотни строк. В Конфигураторе встроен мощный альтернативный инструмент, который позволяет редактировать локализацию внешних файлов списком без необходимости открывать свойства ячеек.
Давайте разберем, как им пользоваться:
.epf) на жестком диске.Стоит отметить, что «лупа» в свойствах ячеек макета решает проблему только для статического текста (шапки таблиц, подписи, названия колонок). Однако в реальных печатных формах большинство данных выводится динамически через параметры. Например, статусы документов, названия должностей или единицы измерения.
Для корректного вывода динамических данных на языке пользователя необходимо использовать системную функцию НСтр() в сочетании с явным указанием кода языка формирования печатной формы.
Посмотрим на пример реализации логики формирования мультиязычной печатной формы в модуле объекта внешней обработки:
// Функция определяет язык формирования печатной формы на основе настроек пользователя
Функция ПолучитьКодЯзыкаПечати()
// В типовых конфигурациях язык обычно хранится в персональных настройках пользователя
РежимПользователя = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(
глЗначениеПеременной("глТекущийПользователь"),
"РежимФормированияПечатныхФорм"
);
Если РежимПользователя = Перечисления.РежимФормированияПечатныхФорм.НаРусскомЯзыке Тогда
Возврат "ru";
ИначеЕсли РежимПользователя = Перечисления.РежимФормированияПечатныхФорм.НаУкраинскомЯзыке Тогда
Возврат "uk";
Иначе
// По умолчанию используем язык интерфейса текущей сессии
Возврат КодЯзыкаИнтерфейса();
КонецЕсли;
КонецФункции
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Получаем целевой код языка для вывода формы
КодЯзыкаПечать = ПолучитьКодЯзыкаПечати();
// Получаем макет из внешней обработки
ЭтотОбъект = РеквизитФормыВЗначение("Объект");
Макет = ЭтотОбъект.ПолучитьМакет("Макет");
// Указываем макету, под какой языковой стандарт его инициализировать
Макет.КодЯзыкаМакета = КодЯзыкаПечать;
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.КодЯзыкаМакета = КодЯзыкаПечать;
// Выводим шапку макета
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
// Локализация динамического параметра программным способом
// Функция НСтр выбирает нужную строку в зависимости от переданного во втором параметре кода языка
ОбластьШапка.Параметры.СтатусДокумента = НСтр("ru='Проведен'; uk='Проведений'", КодЯзыкаПечать);
ТабличныйДокумент.Вывести(ОбластьШапка);
// Передаем сформированный документ на вывод пользователю
КоллекцияПечатныхФорм.Очистить();
ТабличнаяЧастьПечатнойФормы = КоллекцияПечатныхФорм.Добавить();
ТабличнаяЧастьПечатнойФормы.ТабличныйДокумент = ТабличныйДокумент;
КонецПроцедуры
В данном примере свойство КодЯзыкаМакета указывает платформе, какую именно языковую версию статических надписей извлекать из макета при вызове метода ПолучитьОбласть(). Если для ячеек была настроена локализация с помощью «лупы», то при установке КодЯзыкаМакета = "uk" платформа автоматически подставит украинские аналоги строк.
Если вы работаете в современной конфигурации, разработанной на базе Библиотеки стандартных подсистем (БСП), вам может вообще не понадобиться Конфигуратор для локализации макета внешней печатной формы. В БСП встроен удобный интерактивный редактор макетов.
Выясним, как изменить языковые данные макета прямо в пользовательском режиме:
Подводя итог, отметим: если в вашей внешней печатной форме пропала «лупа» выбора языков, не спешите пересоздавать макет заново. Достаточно открыть основную многоязычную конфигурацию в Конфигураторе, перезапустить его и продолжить полноценную разработку мультиязычной формы.