Как отключить предупреждение при редактировании номера документа или кода справочника в 1С:Бухгалтерия 3.0?

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

В современных конфигурациях 1С на базе управляемых форм, таких как 1С:Бухгалтерия предприятия 3.0, 1С:ERP или 1С:Комплексная автоматизация, при попытке пользователя вручную изменить номер документа или код справочника система выдает стандартное окно с предупреждением: «Редактирование номера документа может привести к нарушению автоматической нумерации... Продолжить?».

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

Как устроено предупреждение на уровне платформы?

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

У элементов формы типа «Поле ввода» существуют два важных свойства:

  1. ОтображениеПредупрежденияПриРедактировании — определяет режим вывода предупреждения. Оно принимает значения системного перечисления:
    • Авто — платформа сама решает, нужно ли выводить предупреждение (для стандартных реквизитов Номер и Код предупреждение по умолчанию включено).
    • Отображать — предупреждение будет показываться всегда.
    • НеОтображать — предупреждение выключено.
  2. ПредерживатьПриРедактировании (или ПредупреждениеПриРедактировании) — содержит текстовую строку, которая выводится в диалоговом окне.

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

Выбор архитектурно правильной точки входа в БСП

В старых конфигурациях на обычных формах (таких как «Управление торговлей 10.3» или «Управление производственным предприятием 1.3») разработчики часто внедрялись в централизованную процедуру МеханизмНумерацииОбъектов.ПриОткрытии. В современных конфигурациях на БСП архитектура устроена иначе.

Практически во всех типовых управляемых формах документов и справочников в обработчике события ПриСозданииНаСервере первой строкой прописан вызов стандартного механизма:

СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);

Этот вызов транслирует управление в общий модуль СобытияФорм, который, в свою очередь, передает событие в переопределяемые модули.

Важное предостережение: на форумах часто советуют внедряться в модуль ВерсионированиеОбъектов. Например, использовать обработчик ВерсионированиеОбъектов.ПриСозданииНаСервере. Мы настоятельно не рекомендуем использовать этот путь. Это типичный «костыль», нарушающий принцип единственной ответственности (Single Responsibility Principle). Подсистема версионирования предназначена для записи истории изменений, и она подключена далеко не ко всем объектам метаданных. Если справочник или документ исключен из версионирования, ваш код для него просто не сработает. Кроме того, при отключении версионирования в настройках программы логика работы модуля может измениться.

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

Реализация решения через расширение конфигурации

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

  1. Откройте конфигуратор вашей базы данных и перейдите в меню Конфигурация — Расширения конфигурации.
  2. Добавьте новое расширение, укажите его имя (например, УправлениеИнтерфейсом), префикс (например, уи_) и назначение Адаптация.
  3. В дереве объектов расширения добавьте общий модуль МодификацияКонфигурацииПереопределяемый из основной конфигурации. Для этого найдите его в основной конфигурации, нажмите правой кнопкой мыши и выберите Добавить в расширение.
  4. Откройте модуль в расширении и перехватите процедуру ПриСозданииНаСервере с помощью аннотации &После.

Пропишем в модуле расширения следующий программный код:


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

КонецПроцедуры

Разбор логики работы кода

Давайте детально проанализируем написанный код:

Преимущества данного подхода

Предложенный вариант решения обладает весомыми преимуществами по сравнению с локальным изменением форм или использованием случайных событий БСП:

← На главную