В БП 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);
КонецЕсли;
КонецЕсли;
Префикс = мПолныйПрефикс;
КонецПроцедуры
Вызов процедуры ПереформироватьПрефиксПоНовымПравилам(…) осуществляется из обработчиков вышеперечисленных событий (последней строкой в коде обработчика)
Общий модуль ПрефиксацияОбъектовБПСобытие:
Процедура УстановитьПрефиксИнформационнойБазыОрганизацииПодразделения(Источник, СтандартнаяОбработка, Префикс) Экспорт
<оригинальный код обработчика>…
МояНумерация.ПереформироватьПрефиксПоНовымПравилам(Источник, Префикс);
КонецПроцедуры
Общий модуль ПрефиксацияОбъектовСобытия :
Процедура УстановитьПрефиксИнформационнойБазы(Источник, СтандартнаяОбработка, Префикс) Экспорт
<оригинальный код обработчика>…
МояНумерация.ПереформироватьПрефиксПоНовымПравилам(Источник,Префикс);
КонецПроцедуры
На этом всё. Надеюсь, что описанная здесь методика кому-то поможет. Оговорюсь, что за кадром остался вопрос безопасности подобного изменения нумерации. На первый взгляд, не должно возникнуть проблем в базе, которая работает полностью автономно, то есть без синхронизации с другими базами. В рассмотренном примере считается, что префикс у информационной базы отсутствует, что, разумеется, не всегда так.
Буду рад развитию темы.