При работе с конфигурацией 1С:Документооборот часто возникает задача разрешить использование одинаковых регистрационных номеров для определенных видов документов. В отличие от стандартных учетных систем, в Документообороте существует развитая подсистема Делопроизводство, которая жестко контролирует уникальность номеров через специальные механизмы. Рассмотрим пошагово, как правильно реализовать эту задачу, не нарушая при этом целостность системы.
Прежде всего, нам необходимо понять, какой код отвечает за выдачу ошибки. Проверка уникальности номера выполняется в общем модуле Делопроизводство, в функции РегистрационныйНомерУникален. Данная логика важна и при программном создании входящих документов из почты, где система анализирует, существует ли уже введенный номер в базе данных, и возвращает значение типа Булево.
Частая ошибка новичков заключается в попытке изменить результат функции непосредственно в модуле формы документа. Например, замена Возврат Ложь на Возврат Истина в месте вызова не принесет результата, так как система ожидает корректного логического ответа от модуля Делопроизводство. Если мы хотим разрешить дублирование, мы должны модифицировать именно логику проверки внутри общего модуля или использовать механизмы расширения конфигурации для условий проверки при записи.
Разберем, как внести изменения в функцию РегистрационныйНомерУникален, чтобы разрешить дублирование для конкретного нумератора. Нам потребуется найти следующий блок кода в общем модуле Делопроизводство:
Функция РегистрационныйНомерУникален(Объект) Экспорт
УстановитьПривилегированныйРежим(Истина);
Нумератор = Нумерация.ПолучитьНумераторДокумента(Объект);
// Здесь располагается логика проверки
Если Не ЗначениеЗаполнено(Нумератор) Тогда
// Обработка документов без номера
Если НРег(Объект.РегистрационныйНомер) = НСтр("ru = 'б\н'")
Или НРег(Объект.РегистрационныйНомер) = НСтр("ru = 'б/н'") Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
// Вставляем наше условие для пропуска проверки
Если ЗначениеЗаполнено(Нумератор) И Нумератор.Наименование = "ВашНумератор" Тогда
Возврат Истина;
КонецЕсли;
// Далее следует стандартная логика проверки уникальности
КонецФункции
Обратите внимание: мы не отключаем проверку глобально для всех документов, а проверяем условие Нумератор.Наименование = "ВашНумератор". Это самый безопасный способ, так как он затрагивает только те документы, для которых дублирование номеров допустимо бизнес-логикой вашей организации, что часто встречается при внедрении авторегистрации внутренних документов.
&Вместо в расширении для функции РегистрационныйНомерУникален, что позволит реализовать произвольные действия для дополнительных реквизитов и других элементов системы.Объект на соответствие нужному типу ВидДокумента.Нумераторы в пользовательском режиме. Иногда добавление префикса к номеру документа (например, привязка к организации или подразделению) полностью решает задачу уникальности без вмешательства в программный код.Если после внесения изменений вы все еще получаете сообщение Указанный регистрационный номер не уникален!, проверьте следующие моменты:
ПередЗаписью). Иногда в Документообороте проверка вызывается многократно на разных этапах жизненного цикла документа.Технологический журнал для отслеживания событий, которые происходят непосредственно перед отказом от записи. Это поможет найти тот участок кода, который вы пропустили при анализе.Работая с кодом 1С:Документооборот, важно всегда действовать точечно. Вместо попыток удалить проверку, мы всегда должны ограничивать действие нашего изменения конкретным ВидДокумента или Нумератор. Такой подход гарантирует стабильность системы и сохранение возможности обновления конфигурации в будущем.