Как отключить проверку на уникальность регистрационного номера в 1С:Документооборот?

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

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

Анализ проблемы: где происходит проверка?

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

Частая ошибка новичков заключается в попытке изменить результат функции непосредственно в модуле формы документа. Например, замена Возврат Ложь на Возврат Истина в месте вызова не принесет результата, так как система ожидает корректного логического ответа от модуля Делопроизводство. Если мы хотим разрешить дублирование, мы должны модифицировать именно логику проверки внутри общего модуля или использовать механизмы расширения конфигурации для условий проверки при записи.

Реализация решения: модификация функции проверки

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


Функция РегистрационныйНомерУникален(Объект) Экспорт
    УстановитьПривилегированныйРежим(Истина);
    Нумератор = Нумерация.ПолучитьНумераторДокумента(Объект);
    
    // Здесь располагается логика проверки
    Если Не ЗначениеЗаполнено(Нумератор) Тогда
        // Обработка документов без номера
        Если НРег(Объект.РегистрационныйНомер) = НСтр("ru = 'б\н'") 
           Или НРег(Объект.РегистрационныйНомер) = НСтр("ru = 'б/н'") Тогда
            Возврат Истина;
        КонецЕсли;
    КонецЕсли;
    
    // Вставляем наше условие для пропуска проверки
    Если ЗначениеЗаполнено(Нумератор) И Нумератор.Наименование = "ВашНумератор" Тогда
        Возврат Истина;
    КонецЕсли;
    
    // Далее следует стандартная логика проверки уникальности
КонецФункции

Обратите внимание: мы не отключаем проверку глобально для всех документов, а проверяем условие Нумератор.Наименование = "ВашНумератор". Это самый безопасный способ, так как он затрагивает только те документы, для которых дублирование номеров допустимо бизнес-логикой вашей организации, что часто встречается при внедрении авторегистрации внутренних документов.

Рекомендации по доработке и лучшие практики

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

Что делать, если система все еще выдает ошибку?

Если после внесения изменений вы все еще получаете сообщение Указанный регистрационный номер не уникален!, проверьте следующие моменты:

Работая с кодом 1С:Документооборот, важно всегда действовать точечно. Вместо попыток удалить проверку, мы всегда должны ограничивать действие нашего изменения конкретным ВидДокумента или Нумератор. Такой подход гарантирует стабильность системы и сохранение возможности обновления конфигурации в будущем.

← На главную