Где в 1С:Бухгалтерия 3.0 происходит установка номера для документа «Счет на оплату покупателю»?

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

При сопровождении или доработке типовой конфигурации «1С:Бухгалтерия предприятия 3.0» разработчики часто сталкиваются с задачей изменить или отладить логику формирования номера документов. Попытка найти стандартную процедуру ПриУстановкеНовогоНомера непосредственно в модуле объекта документа СчетНаОплатуПокупателю нередко заходит в тупик — модуль объекта пуст или не содержит данного обработчика. Выясним причину такого поведения платформы, определим конкретный механизм, отвечающий за нумерацию счета, и разберем способы его настройки.

Архитектурная особенность подписок на события в платформе 1С

Разберем, почему процедура может отсутствовать в модуле объекта. В платформе 1С событие ПриУстановкеНовогоНомера является базовым событием любого ссылочного объекта данных, у которого включена поддержка нумерации. Механизм подписок на события позволяет платформе перехватывать это системное событие напрямую, не требуя физического присутствия процедуры-обработчика в модуле объекта документа.

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

Какая подписка отвечает за номер счета на оплату

В типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП) используется разделение документов по составу префиксов. Документ СчетНаОплатуПокупателю включен в подписку на событие УстановитьПрефиксИнформационнойБазыОрганизацииПодразделенияНомеруДокумента (в отличие от некоторых других документов, использующих подписку без учета подразделения или организации).

Проанализируем цепочку вызова:

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

Как работает алгоритм формирования номера и префиксов

Рассмотрим подробнее правила, по которым платформа и БСП формируют итоговую строку номера:

  1. Момент присвоения: В управляемых формах БП 3.0 номер намеренно не заполняется при открытии нового окна. Это сделано для защиты от пропуска номеров и блокировок таблиц нумерации, если пользователь закроет форму без сохранения. Номер генерируется в момент непосредственной записи объекта в базу данных (или при принудительном программном вызове метода Объект.УстановитьНовыйНомер()).
  2. Состав префикса: Префикс документа формируется процедурами БСП и складывается из двухсимвольного префикса информационной базы (из настроек синхронизации данных), двухсимвольного префикса организации и символа дефиса. Например, при префиксе базы 01 и префиксе организации ОФ префикс примет вид 01ОФ-. Если префиксы не заданы, программа подставляет нули (0000-).
  3. Платформенный автоинкремент: После возврата из процедуры подписки платформа ищет в базе максимальный существующий номер, начинающийся с переданного префикса, в пределах установленного периода нумерации (для счета на оплату — в пределах календарного года), и увеличивает правую числовую группу цифр на единицу.

Как переопределить логику установки номера

Если вам требуется вмешаться в алгоритм формирования номера или префикса документа «Счет на оплату покупателю», рассмотрим два рекомендованных способа решения задачи:

Способ 1. Использование механизма переопределяемых модулей БСП

В конфигурации предусмотрен общий модуль ПрефиксацияОбъектовПереопределяемый. В нем содержатся экспортные процедуры, позволяющие изменить алгоритм получения префикса организации или информационной базы без снятия конфигурации с поддержки (или через расширение конфигурации).

Способ 2. Перехват через расширение конфигурации

Посмотрим на пример перехвата системного обработчика в общем модуле с помощью аннотации &Вместо или создания собственной подписки на событие в расширении. Если требуется полностью взять управление генерацией номера на себя, необходимо установить параметр СтандартнаяОбработка = Ложь:


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

Причины сбоев нумерации и правила работы с номерами

Проанализируем типичные проблемы, которые приводят к нарушению нумерации счетов на оплату:

  1. Ручное редактирование номера: Платформа 1С выполняет автоинкремент строго по крайней правой числовой группе с сохранением лидирующих нулей. Если бухгалтер вручную удалит нули (например, сделает номер 0000-1 вместо 0000-000001) или введет в конец номера буквы, дефисы или косые черты, штатный автоинкремент прекратит работать корректно, и программа начнет выдавать ошибку «Номер документа не является уникальным».
  2. Периодичность нумерации: Нумерация счетов ведется в пределах года. 1 января каждого календарного года счетчик автоматически сбрасывается и начинает отсчет с единицы для каждой организации и каждого префикса.
  3. Изменение организации в созданном документе: Если пользователь выбрал одну организацию, сохранил счет (номер зафиксировался с соответствующим префиксом), а затем поменял организацию на другую — префикс в номере автоматически не обновится, если только программно не очистить реквизит Номер перед повторной записью.
← На главную