При работе в современном интерфейсе «Такси» на платформе 1С:Предприятие 8.3 пользователи часто сталкиваются с модальным окном при попытке редактирования номера документа. Сообщение гласит: «Номер заполняется автоматически при записи объекта. Отредактировать номер вручную?». Для бухгалтеров, которым необходимо массово перенумеровать документы или внести правки в соответствии с входящими данными, это окно становится серьезным препятствием, замедляющим работу и вызывающим раздражение. В этой статье мы подробно разберем, как технически реализовать отключение этого вопроса, рассмотрим программные методы и выясним, почему платформа ведет себя именно так.
Для начала проанализируем ситуацию с точки зрения логики платформы. 1С использует механизмы автоматической генерации номеров и кодов. Когда пользователь начинает изменять номер, система «пугается», что ручной ввод нарушит последовательность или логику префиксов. В интерфейсе «Такси» разработчики 1С решили жестко закрепить это предупреждение на уровне платформенных механизмов управляемых форм. Это защита «от дурака», призванная предотвратить случайные ошибки, которые могут привести к сбою автонумерации (например, возникновению ошибки «Номер не уникален» при создании следующего документа).
Однако существуют ситуации, когда это предупреждение избыточно. Рассмотрим способы его обхода.
Самый простой и правильный путь с точки зрения проектирования интерфейса — это изменение свойств самого элемента формы. Разберем по шагам, как это работает:
Номер.ОтображениеПредупрежденияПриРедактировании (в англоязычном варианте WarningOnEdit).Это свойство может принимать три значения, которые мы сейчас детально изучим:
Установив значение Никогда, мы добьемся того, что пользователь сможет сразу начать ввод нового номера без лишних кликов мышкой или нажатий на клавиатуру.
Если мы не хотим снимать основную конфигурацию с поддержки, воспользуемся механизмом расширений. Это позволит нам сохранить чистоту кода и легкость будущих обновлений. Проанализируем, как реализовать отключение программно для конкретной формы.
Нам необходимо перехватить событие ПриСозданииНаСервере. Рассмотрим пример кода, который нужно поместить в модуль формы расширения:
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Обращаемся напрямую к элементу формы "Номер"
Элементы.Номер.ОтображениеПредупрежденияПриРедактировании = ОтображениеПредупрежденияПриРедактировании.Никогда;
КонецПроцедуры
Этот метод хорош тем, что он срабатывает динамически. Мы можем даже добавить условие, чтобы предупреждение отключалось только для определенных ролей (например, только для «Главного бухгалтера»), а обычные пользователи продолжали видеть предупреждение, чтобы не нарушать порядок в базе.
Бывают задачи, когда нужно убрать это «раздражающее» окно сразу во всей системе. Чтобы не заходить в каждую форму вручную, мы можем реализовать общий алгоритм. Разберем ситуацию, когда у нас есть общий модуль, отвечающий за модификацию форм при создании.
В общем модуле с установленными флагами Сервер и Привилегированный (или вызываемом из контекста формы) можно использовать следующий подход:
Процедура ОтключитьПредупреждениеДляНомера(Форма) Экспорт
ЭлементНомер = Форма.Элементы.Найти("Номер");
Если ЭлементНомер <> Неопределено Тогда
ЭлементНомер.ОтображениеПредупрежденияПриРедактировании = ОтображениеПредупрежденияПриРедактировании.Никогда;
КонецЕсли;
КонецПроцедуры
Такой подход позволяет централизованно управлять поведением интерфейса «Такси» во всей конфигурации.
Если задача бухгалтерии заключается в том, чтобы «перенумеровать 100 документов сразу», то ручное редактирование номеров в форме — это самый трудозатратный путь, даже если мы отключим предупреждение. Выясним причину, почему лучше использовать стандартные обработки.
В типовых конфигурациях (БП 3.0, ERP, УТ 11) существует обработка «Групповое изменение реквизитов». При ее использовании запись объектов происходит программно на уровне сервера. Интерфейсные механизмы формы, включая «Такси» и его вопросы, при этом не задействуются. Это позволяет изменить номера массово, быстро и без лишних диалогов.
Рассмотрим подробнее, почему 1С так настойчиво выводит это окно. При ручном изменении номера крайне важно соблюдать структуру префиксов. Если в конфигурации настроена автоматическая нумерация, 1С ищет последний записанный номер, выделяет в нем числовую часть и инкрементирует ее (прибавляет 1).
Что произойдет, если пользователь введет номер неправильно:
999, когда текущий был 100, следующий автоматически созданный документ попытается получить номер 1000. Если длина поля номера ограничена (например, 3 знака), возникнет критическая ошибка переполнения или неуникальности.Подытожим: Отключение предупреждения в интерфейсе «Такси» — задача технически несложная и решается через свойство ОтображениеПредупрежденияПриРедактировании. Однако, внедряя такое решение, мы берем на себя ответственность за возможные ошибки пользователей в нумерации. Рекомендуется сочетать это изменение с дополнительными проверками в процедуре ПередЗаписью или предоставлять доступ к этой возможности только опытным сотрудникам.