Можно ли программно изменить синоним документа в 1С

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

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

Почему нельзя изменить свойство «Синоним» программно

Выясним причину платформенного ограничения. Попытка переопределить синоним объекта метаданных через встроенный язык, например конструкцией Метаданные.Документы.ПриходнаяНакладная.Синоним = "Поступление";, вызовет ошибку выполнения.

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

Однако конечные пользователи взаимодействуют не с деревом метаданных напрямую, а с элементами интерфейса: заголовками форм, элементами командного интерфейса, списками и представлениями ссылок. Рассмотрим практические альтернативные варианты решения задачи.

Вариант 1. Программная подмена заголовков управляемых форм

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

Рассмотрим пошагово реализацию в форме документа:

  1. Откроем форму документа или форму списка.
  2. В обработчике ПриСозданииНаСервере отключим автоматическое формирование заголовка и зададим собственный текст.

Посмотрим на пример серверного кода в модуле формы документа:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Проверяем условие, например, признак текущего узла РИБ или значение константы
    Если Константы.ИспользоватьАльтернативноеИмяДокумента.Получить() Тогда
        АвтоЗаголовок = Ложь;
        Если Объект.Ссылка.Пустая() Тогда
            Заголовок = "Поступление товаров (создание)";
        Иначе
            Заголовок = СтрШаблон("Поступление товаров №%1 от %2", Объект.Номер, Формат(Объект.Дата, "ДЛФ=D"));
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

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


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

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

Вариант 2. Использование локального расширения конфигурации

Если базы работают в распределенной информационной базе (РИБ), где изменения основной конфигурации мигрируют между всеми узлами, наилучшим архитектурным решением будет подключение Расширения конфигурации непосредственно в целевом узле.

Разберем порядок действий:

  1. В целевой информационной базе создаем локальное расширение конфигурации (без включения его в состав передаваемых по РИБ изменений).
  2. Добавляем в расширение нужные формы документа (форму объекта, списка, выбора) или общие команды.
  3. В расширении переопределяем свойства заголовков форм или тексты команд интерфейса.
  4. Такое расширение работает автономно в конкретной базе и не затрагивает другие базы распределенной сети.

Вариант 3. Переопределение представления ссылки и данных выбора

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

В модуле менеджера документа используется процедура-обработчик ОбработкаПолученияПредставления:


Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    // Формируем пользовательское представление ссылки
    Представление = СтрШаблон("Поступление №%1 от %2", Данные.Номер, Формат(Данные.Дата, "ДЛФ=D"));
    
КонецПроцедуры

Чтобы скорректировать подсказки и варианты автоподбора при наборе текста в поле ввода документа, переопределим обработчик ОбработкаПолученияДанныхВыбора в модуле менеджера:


Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    
    // Здесь можно программно переопределить состав выдаваемых строк при автоподборе
    
КонецПроцедуры

Вариант 4. Использование механизма многоязычности платформы

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

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

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

← На главную