При переносе данных из других конфигураций или при интеграции внешних систем с 1С:Бухгалтерия 3.0 (БП 3.0) разработчики часто сталкиваются с особенностями автонумерации документов. Один из типичных вопросов: почему в стандартных номерах документов на пятом символе всегда стоит дефис (тире) и какую практическую роль он выполняет? Попробуем разобраться в этом вопросе подробно.
Рассмотрим структуру номера, принятую в Библиотеке стандартных подсистем (БСП), которая является технологической основой для 1С:Бухгалтерии 3.0. Стандартный номер документа состоит из 11 символов и имеет следующий вид: ХХХХ-000001.
Разберем эту структуру по шагам:
-). Он выступает в роли жесткого разделителя.Таким образом, первые четыре символа отводятся под служебные префиксы, после которых система всегда ожидает увидеть дефис.
Символ дефиса выполняет в системе две важнейшие функции:
1. Корректный вывод номера на печать
Бухгалтерам и клиентам не нужно видеть технические префиксы базы и организации в печатных формах (например, в УПД, счетах-фактурах или накладных). Специальный алгоритм БСП (в частности, функция ПрефиксацияОбъектовКлиентСервер.НомерНаПечать()) автоматически анализирует номер документа. Он находит дефис, отсекает все символы слева от него вместе с самим дефисом, а также убирает лидирующие нули в оставшейся цифровой части. Если нарушить эту структуру и убрать дефис, система не сможет корректно выделить значащую часть, и в печатные формы попадет полный технический номер со всеми служебными префиксами.
2. Работа механизма автонумерации платформы
Платформа «1С:Предприятие» при создании нового документа пытается автоматически продолжить нумерацию. Для этого она анализирует существующие номера справа налево до первого нецифрового символа, чтобы определить число, которое нужно увеличить на единицу. Стандартный дефис служит четкой границей для платформы. Если изменить формат номера вручную (например, убрать дефис или вставить букву в неустановленное место), платформа может потерять ориентир. Это приводит к сбросу нумерации, ошибкам нарушения уникальности номеров или невозможности записать новый документ при ручном вводе.
Если перед нами стоит задача объединить при переносе несколько разных видов документов-источников в один вид документа в БП 3.0 (например, в «Реализацию товаров и услуг») и при этом важно сохранить идентификацию источника по номеру, рассмотрим правильные архитектурные варианты решения этой задачи.
Мы можем вставить буквенный идентификатор источника сразу после стандартного дефиса. В этом случае структура номера будет выглядеть следующим образом: 0000-А000001 для одного источника и 0000-Б000001 для другого.
Проанализируем этот подход:
А или Б как нецифровой символ-границу.0000-А000002, 0000-А000003 и т.д.).В БСП предусмотрена возможность программного добавления пользовательских префиксов, которые гибко встраиваются в общую цепочку формирования номера. Для реализации этого механизма программисты задействуют возможности переопределяемых модулей.
Рассмотрим пример кода, который можно использовать в подписке на событие ПриУстановкеНовогоНомера или в общем модуле ПрефиксацияОбъектовПереопределяемый в процедуре ПриИзмененииНомера:
Процедура ПриУстановкеНовогоНомераДокумента(Источник, СтандартнаяОбработка, Префикс) Экспорт
// Добавляем к стандартному префиксу организации и ИБ наш символ источника
Если ТипЗнч(Источник) = Тип("ДокументОбъект.РеализацияТоваровУслуг") Тогда
Если Источник.ЭтоНовый() Тогда
// Например, определяем символ "А" или "Б" в зависимости от реквизитов заполнения
СимволИсточника = "А";
Префикс = Префикс + СимволИсточника;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
При таком подходе буква-префикс войдет в четырехсимвольную префиксную часть перед дефисом, сохранив работоспособность всех типовых механизмов платформы и печати.
Самый надежный и чистый способ с точки зрения методологии 1С — вообще не трогать типовую нумерацию БП 3.0. Вместо кодирования типа источника в текстовом номере рекомендуется использовать механизм дополнительных реквизитов и сведений. Создайте дополнительный реквизит для документа «Реализация товаров и услуг» (например, «Тип документа-источника») и записывайте информацию туда. Это гарантированно убережет базу от сбоев автонумерации и позволит легко строить любые отчеты в разрезе систем-источников.