Как в расширении 1С изменить синоним документа или реквизита, чтобы он отображался в сообщениях об ошибках

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

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

Различие между синонимом объекта и заголовком элемента формы

Для начала проанализируем ситуацию и разберем два принципиально разных понятия в платформе 1С. Когда мы работаем с формой, у каждого элемента (поля ввода, кнопки, группы) есть свойство Заголовок. Если изменить его в расширении, пользователь увидит новое название непосредственно на экране. Это «визуальное» решение, которое удовлетворяет эстетические требования заказчика. Для проверки и быстрой корректировки таких свойств прямо в интерфейсе подойдёт обработка для редактирования свойств открытых форм в режиме предприятия.

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

Ограничения режима совместимости 8.3.14

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

Если ваша конфигурация работает в режиме совместимости 8.3.14, изменение синонима в расширении может повлиять на заголовок окна или название в меню, но сообщение «Поле 'СтароеНазвание' не заполнено» останется неизменным. Рассмотрим способы обхода этого ограничения.

Решение 1: Программное переопределение проверки заполнения

Наиболее надежный метод для версии 8.3.14 — это использование обработчиков событий в расширении модуля объекта. Мы можем перехватить стандартную проверку и заменить системное сообщение на свое собственное, содержащее нужное заказчику наименование.

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


&После("ОбработкаПроверкиЗаполнения")
Процедура Расш1_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    
    // Проанализируем список реквизитов, которые платформа собирается проверить
    Индекс = ПроверяемыеРеквизиты.Найти("Контрагент");
    
    Если Индекс <> Неопределено Тогда
        // Удаляем реквизит из стандартной проверки, чтобы платформа не выдала старое имя
        ПроверяемыеРеквизиты.Удалить(Индекс);
        
        // Выполняем проверку самостоятельно
        Если НЕ ЗначениеЗаполнено(ЭтотОбъект.Контрагент) Тогда
            Сообщение = Новый СообщениеПользователю;
            // Используем новое название "Клиент", как того требует заказчик
            Сообщение.Текст = "Поле 'Клиент' не заполнено!"; 
            Сообщение.Поле = "Контрагент";
            Сообщение.УстановитьДанные(ЭтотОбъект);
            Сообщение.Сообщить();
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

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

Решение 2: Использование свойств «Представление»

Помимо синонима, у объектов метаданных (например, у Журналов документов) есть свойства Представление объекта и Представление списка. Проанализируем их влияние: в ряде случаев платформа использует именно их для заголовков окон и списков. Если вы меняете синоним Журнала документов, обязательно попробуйте изменить и эти поля в расширении. В некоторых версиях 8.3.14 это позволяет «протолкнуть» нужное название в интерфейс более эффективно, чем через один лишь синоним.

Решение 3: Динамическое изменение заголовков на форме

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

Разберем, как это реализовать в процедуре ПриСозданииНаСервере:


&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Пройдемся по элементам формы и найдем нужные поля
    ЭлементКонтрагент = Элементы.Найти("Контрагент");
    Если ЭлементКонтрагент <> Неопределено Тогда
        ЭлементКонтрагент.Заголовок = "Заказчик";
    КонецЕсли;
    
    // Для журналов документов часто требуется изменить заголовок всей формы
    Если ЭтотОбъект.Метаданные().Имя = "ЖурналДокументовПродажи" Тогда
        ЭтаФорма.Заголовок = "Реестр клиентских операций";
    КонецЕсли;
    
КонецПроцедуры

Особенности работы с Журналами документов

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

Важное замечание об обновлении платформы

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

Резюме

Подводя итог, выделим основные шаги при работе с синонимами в расширениях на версии 8.3.14:

  1. Проверьте заимствование: Убедитесь, что объект метаданных или реквизит полностью заимствован в расширение.
  2. Измените визуальную часть: Установите нужный Заголовок в свойствах элемента формы в расширении.
  3. Исправьте системные сообщения: Используйте программный перехват в ОбработкаПроверкиЗаполнения, если стандартная ошибка выводит старый синоним.
  4. Проверьте представления: Заполните поля Представление объекта и Представление списка в свойствах метаданных расширения.

Использование этих методов в комплексе позволит вам полностью адаптировать интерфейс программы под требования заказчика, сохранив при этом корректность выводимых системой сообщений.

← На главную