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