1С 8.x Управляемое приложение 1С 7.7. Бухучет Статьи Ссылки
1С 8.x arrow Управляемое приложение arrow Бухгалтерия предприятия 3.0 arrow Как изменить нумерацию документов в БП 3.0
Как изменить нумерацию документов в БП 3.0 Печать

В статье (на примере Бухгалтерия предприятия, редакция 3.0 (3.0.35.27) ) рассматривается, как в БП 3.0 изменить алгоритм формирования префикса номера.

В БП 3.0 по сравнению с БП 2.0 существенно поменялась нумерация документов. Вот, что пишет «1С» по этому поводу (цитату можно найти в файле readme.txt, который прилагается к каждому апдейту конфигурации БП 3.0):

“Способ нумерации документов в редакции 3.0 изменен по сравнению с редакцией 2.0.
Для правильной нумерации документов необходимо изменить номер первого
создаваемого документа каждого вида так, чтобы он продолжал нумерацию из старой версии.
При этом номера документов, перенесенных из редакции 2.0,
в печатных формах будут отображаться правильно.
Например, последний номер документа «Реализация товаров и услуг» был 00000000131.
После обновления на редакцию 3.0 первый введенный документ будет иметь номер 0000-000001.
Чтобы сохранить правильную нумерацию, необходимо в этом документе изменить номер на 0000-000132.
В дальнейшем всем введенным документам «Реализация товаров, услуг»
будет присваиваться правильный номер.”

Другими словами, изменился принцип формирования префикса. Если в БП 2.0 мы имели дело с трехзначным префиксом документа, который брался из реквизита Префикс справочника Организации, то теперь, наш префикс имеет вид «XXXX-», где X – произвольный символ.

 

В общем виде, номер либо код объекта складывается по следующей схеме:
"ОР" + "ИБ" + "-" + номер/код, где:

* "ОР" —префикса организации (2 символа); если префикс организации не назначен, то "00". Префикс организации задается в справочнике «Организации».
* "ИБ" —префикс информационной базы (2 символа); если префикс информационной базы не назначен, то "00". Префикс информационной базы задается в настройках синхронизации данных (раздел Администрирование)
* "-" — раздеяет префикс и номер (код).

 

Еще одно существенное изменение, которое обычно упускают из вида, это тот факт, что реквизит Префикс в справочнике Организации в БП 3.0 уменьшился на один символ и теперь равен не трем, как в БП 2.0, а двум символам. В то же время, появился реквизит ПрефиксБП20 – строка три символа – в который при переходе на БП 3.0 с БП 2.0 сохраняется старый «длинный» префикс. Почему хочется обрать внимание на этот момент? Дело в том, что в случае, если в БП 2.0 у организации «Рога и копыта» был трехзначный префикс, и номер документа начинался с префикса РИК, то в БП 3.0 номер будет начинаться с РИ (именно этот префикс останется по умолчанию в реквизите Префикс справочника Организации). Пользователь может быть не в восторге от этого новшества.

 За формирование префикса в БП 3.0 отвечают несколько подписок на событие, связанных с событием «ПриУстановкеНовогоКода»: или с событием «ПриУстановкеНовогоНомера»:

Подписка
Обработчик
 УстановитьПрефиксИнформационнойБазыИОрганизацииКодуСправочникаЗарплатаКадрыБазовая

ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации

 УстановитьПрефиксИнформационнойБазыИОрганизацииНомеруДокумента ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации
 УстановитьПрефиксИнформационнойБазыИОрганизацииНомеруДокументаЗарплатаКадрыБазовая ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации
 УстановитьПрефиксИнформационнойБазыКодуСправочника ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазы
 УстановитьПрефиксИнформационнойБазыКодуСправочникаЗарплатаКадрыБазовая ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазы
 УстановитьПрефиксИнформационнойБазыНомеруДокумента ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазы
 УстановитьПрефиксИнформационнойБазыОрганизацииПодразделенияНомеруДокумента
 ПрефиксацияОбъектовБПСобытия.УстановитьПрефиксИнформационнойБазыОрганизацииПодразделения

Источники у этих подписок разные. Напомню, что подписка срабатывает после срабатывания основного события, на которое она «вешается». Процедуры, которые являются обработчиками событий расположены в общих модулях, для которых установлены параметры «серверный» и «внешнее соединение».

Зададимся теперь вопросом, нельзя ли изменить алгоритм формирования префикса номера, скажем для документов. Будем считать, что наша информационная база не имеет префикса, а префикс организации в БП 2.0 состоял из трех значащих символов.

Внесем некоторые изменения в типовую конфигурацию БП 3.0.

Во-первых, создадим подсистему «МояНумерация» и включим в нее объекты конфигурации так или иначе имеющие отношение к решаемой задаче.

 

Внесем изменения в справочник Организации.

Во-первых выведем в форме реквизит справочника ПрефиксБП20 и сделаем его доступным.

Во-вторых, создадим реквизит ИспользоватьПрефиксБП20 типа булево, выведем его на форму элемента справочника. Будем считать,что если ИспользоватьПрефиксБП20 = истина, то в качестве префикса "ОР" должен браться префикс из реквизита ПрефиксБП20.

Создадим общий модуль «МояНумерация» с установленными свойствами «Сервер» и «Внешнее соединение». И поместим в него процедуру ПереформироватьПрефиксПоНовымПравилам(…)

Процедура ПереформироватьПрефиксПоНовымПравилам(Знач Источник, Префикс) Экспорт

Если НАЙТИ(Строка(ТипЗнч(Источник)),"Документ объект") = 0 Тогда

                //Это не документ, префикс не меняем

                Возврат;

КонецЕсли;

Если Источник.Метаданные().Реквизиты.Найти("Организация") = Неопределено Тогда

                //Нет реквизита "Организация", менять префикс не нужно

                Возврат;

 

КонецЕсли;

                              

мОрганизация = Источник.Организация;

Если мОрганизация.Метаданные().Реквизиты.Найти("ИспользоватьПрефиксБП20") = Неопределено Тогда

                //Реквизит ИспользоватьПрефиксБП20 отвечает за выбор стратегии формирования префикса

                //Если этого реквизита нет, то считаем, что префикс формируется, как в типовай конфигурации

                Возврат;

КонецЕсли;

Если НЕ мОрганизация.ИспользоватьПрефиксБП20 Тогда

                //Не усьтановлен флажок формирования префикаса номера по старому

                //Префикс формируем, как в типовой

 

Возврат;

КонецЕсли;

                мПолныйПрефикс = Префикс;

               

                Если СтрДлина(СокрЛП(мОрганизация.ПрефиксБП20)) = 3 Тогда

                               мПолныйПрефикс = СтрЗаменить(мПолныйПрефикс,мОрганизация.Префикс + "0", мОрганизация.ПрефиксБП20);

                ИначеЕсли СтрДлина(СокрЛП(мОрганизация.ПрефиксБП20)) = 2 Тогда

                               Если СокрЛП(мОрганизация.ПрефиксБП20) <>СокрЛП(мОрганизация.Префикс) Тогда

                                               мПолныйПрефикс = СтрЗаменить(мПолныйПрефикс,мОрганизация.Префикс, мОрганизация.ПрефиксБП20);

                               КонецЕсли;

                КонецЕсли;

               

                Префикс = мПолныйПрефикс;

 

КонецПроцедуры

Вызов процедуры ПереформироватьПрефиксПоНовымПравилам(…) осуществляется из обработчиков вышеперечисленных событий (последней строкой в коде обработчика)

Общий модуль ПрефиксацияОбъектовБПСобытие:

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

               

<оригинальный код обработчика>…

                              

МояНумерация.ПереформироватьПрефиксПоНовымПравилам(Источник, Префикс);

КонецПроцедуры

Общий модуль ПрефиксацияОбъектовСобытия :

Процедура УстановитьПрефиксИнформационнойБазы(Источник, СтандартнаяОбработка, Префикс) Экспорт

<оригинальный код обработчика>…

МояНумерация.ПереформироватьПрефиксПоНовымПравилам(Источник,Префикс);

КонецПроцедуры

На этом всё. Надеюсь, что описанная здесь методика кому-то поможет. Оговорюсь, что за кадром остался вопрос безопасности подобного изменения нумерации. На первый взгляд, не должно возникнуть проблем в базе, которая работает полностью автономно, то есть без синхронизации с другими базами. В рассмотренном примере считается, что префикс у информационной базы отсутствует, что, разумеется, не всегда так.