Как настроить предупреждение при редактировании номера документа в 1С:ЗУП 3.1

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

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

Механизм защиты на уровне платформы «1С:Предприятие 8»

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

Рассмотрим основное свойство элемента формы, отвечающее за это поведение. Это свойство называется Отображение предупреждения при редактировании (WarningOnEditRepresentation). Оно доступно для полей ввода и может принимать три значения:

  1. Авто: В этом режиме платформа самостоятельно определяет необходимость вывода предупреждения. Для стандартного реквизита Номер это значение по умолчанию эквивалентно включенной защите.
  2. Отображать: Предупреждение будет выводиться всегда, независимо от состояния документа или прав пользователя, как только фокус будет установлен в поле номера и будет нажата любая клавиша.
  3. Не отображать: Система позволит редактировать номер сразу, не задавая лишних вопросов.

Проанализируем ситуацию: если вы создаете собственный документ в расширении или новой конфигурации, достаточно установить это свойство в значение Не отображать в палитре свойств элемента формы «Номер».

Программное управление предупреждением в ЗУП 3.1

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

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

  1. При создании формы на сервере или при чтении данных система анализирует статус документа (проведен, помечен на удаление, новый).
  2. Если документ уже проведен, доступ к номеру может быть заблокирован полностью.
  3. Если документ редактируется, вызывается механизм настройки ключевых реквизитов.

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


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

Как отключить предупреждение через расширение

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

  1. Создаем новое расширение и добавляем в него форму нужного документа.
  2. Находим обработчик события ПриСозданииНаСервере.
  3. Добавляем в конец процедуры программную установку свойства элемента формы.

Пример кода для расширения:


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

Важный нюанс: иногда в типовых формах реквизит Номер может называться иначе в дереве элементов (например, ДатаНомерГруппа_Номер). Поэтому важно проверить точное имя элемента в конфигураторе перед написанием кода.

Влияние прав доступа и ролей

Выясним еще одну причину, по которой редактирование может быть затруднено. В системе 1С существует специальное право «Интерактивное изменение номера». Если в профиле групп доступа пользователя это право отсутствует, то даже после нажатия «Да» в окне предупреждения, поле может остаться недоступным для ввода текста.

В современных версиях ЗУП 3.1 также существует роль РедактированиеНомеровДокументов. Если вы хотите разрешить бухгалтеру править номера, убедитесь, что в его профиль добавлена эта роль или аналогичное полномочие. Без этого программные манипуляции со свойством ОтображениеПредупрежденияПриРедактировании могут оказаться бесполезными, так как сработает ограничение прав доступа.

Риски ручного изменения номеров

Разберем, почему 1С так настойчиво защищает это поле. Система автонумерации работает по принципу поиска максимального значения. Номера в 1С имеют текстовый тип и дополняются лидирующими нулями (например, 00ЗУП-00001).

Проанализируем возможные последствия ручного вмешательства:

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

Резюме

Подведем итог. Предупреждение при редактировании номера — это комбинированный механизм. Для его настройки или отключения необходимо проверить:

  1. Свойство элемента формы ОтображениеПредупрежденияПриРедактировании в конфигураторе.
  2. Наличие специализированных процедур КлючевыеРеквизитыЗаполненияФормы в модуле формы.
  3. Права доступа пользователя (роль на редактирование номеров).

Наиболее корректным способом внесения изменений в типовую ЗУП 3.1 является использование расширения с переопределением свойства элемента формы в событии ПриСозданииНаСервере.

← На главную