Как изменить нумерацию документов в БП 3.0

11.09.14

Разработка - Математика и алгоритмы

В статье (на примере Бухгалтерия предприятия, редакция 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);

                               КонецЕсли;

                КонецЕсли;

               

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

               

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

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

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

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

               

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

                              

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

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

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

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

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

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

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

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

Буду рад развитию темы.

Мой сайт: 1c1c1c.ru

Бухгалтерия префикс номер как поменять нумерацию нумерация

См. также

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    9322    YA_418728146    6    

143

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2196    24    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16324    141    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7343    quazare    8    

110

Хитрости СКД. Часть 3

СКД Универсальные функции Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Столкнулся с тем, что мне приходится писать гору отчетов. Во многих приходится использовать повторяющиеся приемы. Решил написать шпаргалку, которая, надеюсь пригодится не только мне. В этой статье: Объединение ячеек в отчете только на определенном уровне иерархии, Постобработка итогов в табличном документе, Скрытие колонок в зависимости от количества месяцев в периоде.

28.05.2022    9381    milkers    11    

94

Модули общего назначения - готовые полезные функции и процедуры конфигураций на БСП

Универсальные функции БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной статье я рассматриваю несколько полезных "классических" функций и процедур для работы с данными, которые уже встроены в БСП и готовы к использованию.

25.04.2022    15252    quazare    11    

138

Несколько простых приемов для удобной работы в конфигураторе

Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Простая и удобная среда разработки 1С:Предприятия позволяет практически любому человеку начать работать под капотом 1С - в конфигураторе. Время идет, новички становятся программистами, специалистами, а об удобных приемах работы узнают годами, по ходу своего карьерного пути. А здорово было бы, если бы все знали удобные приемы в начале своего пути? Эти несколько приемов будут полезны новичкам, так как они затрагивают ту область работы, с которой приходится сталкиваться в начале карьеры.

12.11.2021    17584    acces969    95    

148
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Aleksey_3 12.09.14 08:45 Сейчас в теме
Что с печатью? Корректно ли обрабатывается такая нумерация при выводе на печать?

И самое главное цель переделки? Я понимаю когда цель изменить нумерацию с нумерации в течении года на нумерацию в течении дня, а тут что?

Поясню свою. мысль.
В БП 2.0 У нас был номер ПРФ0000123, которые при печати выводился как 123
В БП 3.0 У нас уже номер ПФИБ-00123, которые при печати будет так же выводится, т.е. 123

Тогда смысл всей этой переделки, если в конечном счете мы получим тот же номер в печатных формах документа, только вид сбоку?
2. 1cspbru 200 12.09.14 11:18 Сейчас в теме
Алексей, ваш вопрос понятен, но ситуации, как говорится бывают разные. Логика переделки такая- вот представьте, печатает бухгалтер какие-то своды документов с номерами для управленцев или кто-то из управленцев смотрит документы и привык к трехзначным префиксам... В общем, не критично, можно и к другим привыкнуть. Но не всегда программист влияет на ситуацию к чему и кому привыкать...

Второй вопрос - не поедет ли нумерация при печати документов. Нет, не поедет. Принципиально, чтобы префикс был выдержан в формате "XXXX-", где X - символ(ну почти любой:). Если префикс будет, скажем такой: "XXX_", то придется переделывать процедуры, отвечающие за формирование номера документа для печатной формы

Одно из возможных приложений описанного подхода в том, чтобы вообще сохранить нумерацию, как в БП 2.0. В этом случае, ЕСЛИ ПРЕФИКС СОВПАДАЕТ С ПРЕФИКСОМ бп20, то нумерация в печатных формах сбиваться не будет (во всяком случае так в том релизе, на который ссылается настоящая статья) Разумеется, код, приведенный в статье не предполагает сохранение нумерации, как в БП 2.0

Мне кажется, что информация, приведенная в статье может оказаться полезной тем, кто всё же столкнулся с проблемой изменения формата номера БП 3.0. Хочется еще раз обратить внимание, что подобное изменение формата возможно не во всех случаях. Например, если информационная база БП 3.0 активно синхронизируется с другими инфорамационными базами, то изменение формата номера может быть затруднительно.
rpgshnik; +1 Ответить
3. Aleksey_3 12.09.14 11:59 Сейчас в теме
Принципиально, чтобы префикс был выдержан в формате "XXXX-", где X - символ(ну почти любой:). Если префикс будет, скажем такой: "XXX_", то придется переделывать процедуры, отвечающие за формирование номера документа для печатной формы


Там немножко другая логика заложена. При печати БП смотрит чтобы разделитель "-" был 3 или 5 символом, и если это так, то включается механизм новой нумерации, в противном случае БП использует "ПрефиксБП20" для удаления префикса из номера



Мне кажется, что информация, приведенная в статье может оказаться полезной тем, кто всё же столкнулся с проблемой изменения формата номера БП 3.0.


Для этого нужно как минимум расписать для каких документов используется та или иная подписка, чтобы было понятно, что чтобы изменить префикс у документа счет-фактуры нужно править в ПрефиксацияОбъектовСобытия, а для реализации править в ПрефиксацияОбъектовБПСобытия.


Лично у себя я не стал плодить сущности, а сразу прописал в коде

Процедура УстановитьПрефиксИнформационнойБазыОрганизацииПодразделения(Источник, СтандартнаяОбработка, Префикс) Экспорт
	
	ИмяОрганизации   = ПрефиксацияОбъектовСобытия.ИмяРеквизитаОрганизация(Источник.Метаданные());
	ИмяПодразделения = ИмяРеквизитаПодразделение(Источник.Ссылка);
	
	
	//Начало изменений
	МетаданныеДокумента = Источник.Метаданные();

	ТекПрефикс = Префикс;
	Если МетаданныеДокумента.Имя = "АктОбОказанииПроизводственныхУслуг" или
		МетаданныеДокумента.Имя = "АвансовыйОтчет" или		
		МетаданныеДокумента.Имя = "ВозвратТоваровОтПокупателя"          или
		МетаданныеДокумента.Имя = "ВозвратТоваровПоставщику"            или
		МетаданныеДокумента.Имя = "ОприходованиеТоваров"                или
		МетаданныеДокумента.Имя = "ОтчетОРозничныхПродажах"             или
		МетаданныеДокумента.Имя = "ПеремещениеТоваров"                  или
		МетаданныеДокумента.Имя = "ПоступлениеНаРасчетныйСчет"          или
		МетаданныеДокумента.Имя = "ПоступлениеТоваровУслуг"             или 
		МетаданныеДокумента.Имя = "ПриходныйКассовыйОрдер"              или
		МетаданныеДокумента.Имя = "РасходныйКассовыйОрдер"              или 
		МетаданныеДокумента.Имя = "РеализацияТоваровУслуг"              или 
		МетаданныеДокумента.Имя = "СписаниеСРасчетногоСчета"            или 
		МетаданныеДокумента.Имя = "СчетФактураВыданный"                 или
        МетаданныеДокумента.Имя = "СписаниеТоваров"	                    тогда
		
		Префикс = ...//Формируем Префикс по своим правилам
	Иначе
		Префикс = ПрефиксИнформационнойБазыОрганизацииПодразделения(Источник[ИмяОрганизации], Источник[ИмяПодразделения], Префикс);	
	КонецЕсли;
	
	//Префикс = ПрефиксИнформационнойБазыОрганизацииПодразделения(Источник[ИмяОрганизации], Источник[ИмяПодразделения], Префикс);	
	//Конец изменений от 09.02.2006 
	
	
	
КонецПроцедуры
Показать


В данном случае для "избранных" документов формируется префикс по нужному мне правилу.
SoDm; KolBbl4; victor_k; alexandrmishinn; ekomova; janpresnyakova; clev; +7 Ответить
9. user603532_fan_club_chelsea 25.08.17 10:34 Сейчас в теме
(3) А как можно сделать подобное для Розницы 2.2. У меня нули добавляются, а префиксы все равно ставятся, просто на номер меньшее количество цифр выходит.

в общем помогите, киньте код
10. victor_k 95 25.01.19 08:54 Сейчас в теме
(3) ****
ИЛИ МетаданныеДокумента.Имя = "СписаниеСРасчетногоСчета"
ИЛИ МетаданныеДокумента.Имя = "СписаниеТоваров"
Тогда
Если Источник.ОбменДанными.Загрузка И ЗначениеЗаполнено(Источник.Номер) Тогда
СтандартнаяОбработка = Ложь;
Иначе

*****

Если надо, чтобы номер, который был установлен программно перед записью не изменялся
4. 1cspbru 200 12.09.14 13:32 Сейчас в теме
Спасибо за идею, вполне симпатичный код. Я пошел немного другим путем - дожидаюсь, пока префикс сформируется по типовым правилам БП 3.0 и заменяю некие его части непосредственно в обработчике подписки на событие
5. hazd 12.10.14 01:03 Сейчас в теме
спасибо, нужная информация.
6. Astafan 09.11.14 15:59 Сейчас в теме
Спасибо за статью, оказалась очень полезной. Как раз сейчас разбираюсь с префиксами новых документов в БП 3.0, но с возможностью сохранения поддержки.
7. woot 12.02.15 01:06 Сейчас в теме
Была Задача приравнять код к дате и чтоб каждый день нумерация начиналась с 1,не стал копаться долго в коде,потому как никакого обмена нету.Написал вот так,можт кому будет полезно у кого такая же ситуация появится.В модуле объекта прописал 1 процедуру и добавил её при записи:
Процедура УстановитьПредставлениеНомера()

Если НЕ ЗначениеЗаполнено(Номер) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СчетНаОплатуПокупателю.Номер
|ИЗ
| Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
|ГДЕ
| СчетНаОплатуПокупателю.Дата МЕЖДУ &Дн И &Дк" ;
Запрос.УстановитьПараметр("Дн",НачалоДня(ТекущаяДата()));
Запрос.УстановитьПараметр("Дк",КонецДня(ТекущаяДата()));

Запрос.Выполнить().Выбрать();
Выборка = Запрос.Выполнить().Выбрать();
Кол = (Выборка.Количество()+1);

НОмер1 = Строка(Сред(ТекущаяДата(),1,6));
НОмер1 = СтрЗаменить(НОмер1,".","")+"-000"+Кол+"";
НОмер = НОмер1;

КонецЕсли;
КонецПроцедуры

Так же в процедуре при записи пишем нашу процедуру:
УстановитьПредставлениеНомера();
Так же поставил нумерацию в пределах дня.
8. dim3740 6 26.01.16 19:53 Сейчас в теме
woot, да, код работает на 3.0... тестил в счетах и СФ выданных. Но, как писалось выше, на печатную форму полный номер не переносится((( А самое плохое - что и в книгу продаж попадает также неполный..
11. Meistersinger 26.01.21 16:47 Сейчас в теме
Классная статья, спасибо огромное. Убил уйму времени, чтобы понять как теперь что нумеруется и почему.
12. zinzillya 11.02.22 13:56 Сейчас в теме
если пытаешься поставить свой префикс вообще получается 0000-2- и остаётся четыре знака.
до чего уродливо сделано. и ведь не отключишь галкой - нет надо какие-то коленца вприсядку выдавать.
aquarius-d; zaic; +2 Ответить
Оставьте свое сообщение