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