Как реализовать нестандартную нумерацию документов реализации и счетов-фактур в 1С:Бухгалтерии 3.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Довольно часто от бухгалтерии поступает задача изменить стандартный механизм нумерации документов реализации и счетов-фактур. Например, пользователи хотят видеть номер вида ДДММГГ-№ с ежедневным сбросом счетчика. На первый взгляд задача кажется простой, однако в типовой конфигурации «1С:Бухгалтерия предприятия 3.0» на базе Библиотеки стандартных подсистем (БСП) такая доработка затрагивает множество механизмов — от префиксации до регламентированной отчетности по НДС. Разберем по шагам, где и как правильно переопределять номер, какие подводные камни необходимо учесть и как не сломать учет.

Где лучше назначать номер: в событии ПередЗаписью или в ПриУстановкеНовогоНомера

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

Штатный и наиболее надежный способ назначения номера в платформе «1С:Предприятие 8» — использование события ПриУстановкеНовогоНомера (через подписку на событие или расширение). Платформа сама управляет блокировками нумератора в транзакции, гарантируя корректное выделение следующего по порядку номера без коллизий. Однако в типовой БП 3.0 уже действует типовая подписка на это событие, отвечающая за механизм БСП. Чтобы внедрить свой алгоритм без конфликта с типовыми механизмами, переопределение логичнее выполнять через подсистему «Префиксация объектов», формируя нужную дату в качестве префикса документа.

Формат даты в номере: почему ГГММДД предпочтительнее ДДММГГ

Проанализируем структуру номера. Бухгалтеры часто просят формат ДДММГГ-№, однако с точки зрения сортировки строк этот формат крайне неудачен. Строка «010224» (1 февраля) при стандартной лексикографической сортировке в списках и журналах окажется раньше, чем «310124» (31 января). В результате нарушается сквозной хронологический порядок отображения документов. Если принято решение внедрять дату в номер, рекомендуется убедить заказчика использовать формат ГГММДД-№: в таком виде документы естественным образом выстраиваются строго по возрастанию дат.

Реализация формирования префикса по дате документа

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


Функция ДополнениеНулем(Число) Экспорт
    Если СтрДлина(Строка(Число)) > 2 Тогда
        Возврат Прав(Строка(Число), 2);
    КонецЕсли;
    Возврат ?(СтрДлина(Число) = 1, "0", "") + Строка(Число);
КонецФункции

Функция ПолучитьПрефиксПоДате(ДатаДокумента) Экспорт
    // Формируем строку формата ДДММГГ или ГГММДД
    ДеньСтр  = ДополнениеНулем(День(ДатаДокумента));
    МесяцСтр = ДополнениеНулем(Месяц(ДатаДокумента));
    ГодСтр   = Формат(ДатаДокумента, "ДФ=yy");
    
    // Рекомендуемый порядок: Год + Месяц + День
    Возврат ГодСтр + МесяцСтр + ДеньСтр + "-";
КонецФункции

Посмотрим на пример встраивания логики в общую функцию добавления префикса организации. Если в базе ведется учет по нескольким организациям, префикс организации должен обязательно предшествовать дате, иначе номера разных юрлиц пересекутся:


Процедура ДобавитьПрефиксОрганизации(ДокументОбъект, Префикс) Экспорт
    ПрефиксОрганизации = "";
    Если ДокументОбъект.Метаданные().Реквизиты.Найти("Организация") <> Неопределено Тогда
        ПрефиксОрганизации = СокрЛП(ДокументОбъект.Организация.Префикс);
    КонецЕсли;
    
    // Добавляем к префиксу организации сформированную дату
    Префикс = ПрефиксОрганизации + ПолучитьПрефиксПоДате(ДокументОбъект.Дата);
КонецПроцедуры

Подводные камни и технические ограничения

Перед тем как внедрять подобную доработку, необходимо проанализировать целый ряд критических факторов:

  1. Ограничение длины номера в метаданных. В типовой «1С:Бухгалтерии 3.0» длина реквизита Номер для документов реализации и счетов-фактур составляет всего 11 символов. Префикс даты с разделителем занимает 7 знаков (например, «240517-»). Если к этому добавить двухсимвольный префикс организации или префикс узла РИБ, под сам порядковый номер останется лишь 1–2 знака, чего категорически мало. Увеличение длины реквизита в метаданных снимет конфигурацию с полной поддержки и усложнит типовые обновления.
  2. Счета-фактуры и функция НомерНаПечать. Типовые печатные формы (УПД, счет-фактура) и механизмы формирования книги продаж используют функцию НомерНаПечать(). Стандартный алгоритм отсекает лидирующие нули и префиксы до символа дефиса или косой черты. Если в номере присутствует дефис (например, «170524-001»), алгоритм может посчитать номером документа только то, что идет после дефиса («1»), либо исказить данные в декларации по НДС.
  3. Авансовые и исправительные счета-фактуры. По регламенту нумерации счетов-фактур авансовые документы часто маркируются литерой «А», а исправления — номером исправления через знак дроби. При нестандартной нумерации необходимо четко прописать в коде, как будет выглядеть номер на аванс и не нарушит ли он общую структуру нумератора.
  4. Смена даты задним числом. Номер генерируется платформой один раз при первой записи. Если пользователь создал документ сегодня, получил номер с сегодняшней датой, а затем исправил дату на вчерашний день, номер сам по себе не изменится. Потребуется писать дополнительный программный контроль, отслеживающий смену даты и принудительно перезаписывающий номер, что может повлечь пропуски номеров.
  5. Синхронизация данных и РИБ. Если данные выгружаются из «1С:Управление торговлей» или «1С:ERP», правила обмена сопоставляют документы по номеру и дате. Изменение алгоритма только на стороне БП 3.0 приведет к постоянным коллизиям и созданию дубликатов при синхронизации. Доработка должна быть симметрично выполнена во всех базах.
  6. Налоговые риски. Постановление Правительства РФ № 1137 требует соблюдения сквозной хронологической нумерации счетов-фактур. Ежедневный сброс номера на единицу формально нарушает принцип сквозной нумерации в рамках квартала. Хотя суды часто встают на сторону налогоплательщика (ст. 169 НК РФ запрещает отказывать в вычете, если можно идентифицировать продавца и покупателя), регулярные запросы и требования пояснений от налоговой инспекции гарантированы.

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

← На главную