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

