При работе в конфигурации «Зарплата и управление персоналом 3.1» пользователи часто сталкиваются с ситуацией, когда при попытке изменить номер документа система выдает предупреждение: «Номер заполняется автоматически при записи документа. Отредактировать номер вручную?». Для многих это становится препятствием, если бизнес-процесс требует ручной корректировки нумерации. В этой статье мы подробно разберем, как устроена эта защита на уровне платформы и как она реализована программно в типовых решениях на базе БСП.
Прежде всего, выясним причину появления этого окна. Платформа «1С:Предприятие 8» обладает встроенным механизмом защиты стандартных реквизитов, таких как Номер (для документов) и Код (для справочников). Это сделано для того, чтобы предотвратить случайное нарушение автоматической последовательности нумерации.
Рассмотрим основное свойство элемента формы, отвечающее за это поведение. Это свойство называется Отображение предупреждения при редактировании (WarningOnEditRepresentation). Оно доступно для полей ввода и может принимать три значения:
Номер это значение по умолчанию эквивалентно включенной защите.Проанализируем ситуацию: если вы создаете собственный документ в расширении или новой конфигурации, достаточно установить это свойство в значение Не отображать в палитре свойств элемента формы «Номер».
В типовых конфигурациях, таких как ЗУП 3.1, управление формой часто происходит динамически. Разберем, почему ручное изменение свойства в конфигураторе может не дать результата. В ЗУП используется механизм «Ключевых реквизитов», который программно переопределяет доступность и поведение полей формы при ее открытии или изменении данных.
Как указано в технических деталях реализации, за это отвечает общая процедура ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(). Проанализируем, как работает эта логика в коде формы документа:
Для корректной работы этого механизма в модуле формы документа должны присутствовать экспортные процедуры, описывающие структуру защиты. Посмотрим на пример кода, который обычно присутствует в таких формах:
&НаСервере
Процедура КлючевыеРеквизитыЗаполненияФормыОписаниеКлючевыхРеквизитов(ОписаниеРеквизитов) Экспорт
// Здесь описываются реквизиты, при изменении которых
// система должна реагировать особым образом
ОписаниеРеквизитов.Вставить("Номер", "ОтображатьПредупреждение");
КонецПроцедуры
Если нам необходимо убрать назойливое окно для конкретного вида документа (например, «Прием на работу»), не снимая конфигурацию с поддержки, мы воспользуемся механизмом расширений. Рассмотрим пошагово, как это сделать:
ПриСозданииНаСервере.Пример кода для расширения:
&НаСервере
&После("ПриСозданииНаСервере")
Процедура ИТ_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Находим элемент формы, связанный с номером
ЭлементНомер = ЭтаФорма.Элементы.Найти("Номер");
Если ЭлементНомер <> Неопределено Тогда
// Устанавливаем прямое указание не показывать окно вопроса
ЭлементНомер.ОтображениеПредупрежденияПриРедактировании = ОтображениеПредупрежденияПриРедактировании.НеОтображать;
КонецЕсли;
КонецПроцедуры
Важный нюанс: иногда в типовых формах реквизит Номер может называться иначе в дереве элементов (например, ДатаНомерГруппа_Номер). Поэтому важно проверить точное имя элемента в конфигураторе перед написанием кода.
Выясним еще одну причину, по которой редактирование может быть затруднено. В системе 1С существует специальное право «Интерактивное изменение номера». Если в профиле групп доступа пользователя это право отсутствует, то даже после нажатия «Да» в окне предупреждения, поле может остаться недоступным для ввода текста.
В современных версиях ЗУП 3.1 также существует роль РедактированиеНомеровДокументов. Если вы хотите разрешить бухгалтеру править номера, убедитесь, что в его профиль добавлена эта роль или аналогичное полномочие. Без этого программные манипуляции со свойством ОтображениеПредупрежденияПриРедактировании могут оказаться бесполезными, так как сработает ограничение прав доступа.
Разберем, почему 1С так настойчиво защищает это поле. Система автонумерации работает по принципу поиска максимального значения. Номера в 1С имеют текстовый тип и дополняются лидирующими нулями (например, 00ЗУП-00001).
Проанализируем возможные последствия ручного вмешательства:
Именно поэтому, прежде чем отключать предупреждение, мы рекомендуем убедиться, что пользователи понимают ответственность за сохранение структуры номера.
Подведем итог. Предупреждение при редактировании номера — это комбинированный механизм. Для его настройки или отключения необходимо проверить:
ОтображениеПредупрежденияПриРедактировании в конфигураторе.КлючевыеРеквизитыЗаполненияФормы в модуле формы.Наиболее корректным способом внесения изменений в типовую ЗУП 3.1 является использование расширения с переопределением свойства элемента формы в событии ПриСозданииНаСервере.