Как настроить ежемесячную нумерацию документов с единицы для конкретной организации в 1С?

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

В практической работе с конфигурациями 1С (такими как «1С:Управление торговлей», «1С:Комплексная автоматизация» или «1С:ERP») часто возникает задача настроить уникальную логику нумерации документов для отдельного юридического лица. Стандартный механизм платформы предполагает единую периодичность нумератора для всех организаций в рамках одного типа документа (как правило, в пределах года). Если нам требуется, чтобы для одной конкретной организации нумерация документов начиналась заново с единицы каждый месяц, а для всех остальных организаций сохранялся типовой годовой цикл, мы сталкиваемся с техническим ограничением платформы.

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

В чем сложность стандартной настройки?

Свойство метаданных документа Периодичность определяет интервал времени, в течение которого номера документов должны быть уникальными. По умолчанию для большинства документов установлена периодичность «Год». Это значит, что платформа 1С отслеживает уникальность номеров с 1 января по 31 декабря текущего года.

Если мы попытаемся изменить свойство Периодичность на «Месяц» напрямую в конфигураторе, это изменение применится ко всем организациям информационной базы. Более того, изменить периодичность нумератора через расширение конфигурации невозможно — платформа накладывает жесткое ограничение на изменение свойств метаданных нумерации в расширениях. Следовательно, нам нужен обходной путь, который позволит имитировать ежемесячную смену периода нумерации только для выбранной организации.

Решение проблемы: лайфхак с динамическим префиксом

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

Например, если в январе для организации «Торговый Дом» использовался префикс ТД01-, то максимальным номером будет ТД01-000150. Когда наступит февраль, программа автоматически сформирует для этой организации префикс ТД02-. Поскольку документов с таким префиксом в базе еще нет, следующий созданный документ автоматически получит номер ТД02-000001. При этом для остальных организаций префикс останется стандартным (например, ОП-), и их годовая нумерация никак не пострадает.

Рассмотрим по шагам, как реализовать этот алгоритм в современных конфигурациях на управляемых формах.

Шаг 1. Переопределение префикса через БСП

В современных конфигурациях 1С формирование префиксов и номеров документов регулируется подсистемой БСП «Префиксация объектов». Вместо прямого редактирования модулей документов мы воспользуемся общим модулем ПрефиксацияОбъектовПереопределяемый. Нам необходимо создать расширение конфигурации и переопределить процедуру ПриУстановкеНовогоНомера.

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


&После("ПриУстановкеНовогоНомера")
Процедура Расш1_ПриУстановкеНовогоНомера(Источник, СтандартнаяОбработка, Префикс)
    
    // Проверяем, что у документа есть реквизит Организация
    Если ОбщегоНазначения.ЕстьРеквизитОбъекта(Источник, "Организация") Тогда
        
        // Задаем ссылку на нашу организацию, для которой нужен ежемесячный нумератор.
        // В реальной базе лучше использовать предопределенный элемент или настройку в параметрах учета.
        НужнаяОрганизация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7701010101");
        
        Если Источник.Организация = НужнаяОрганизация И ЗначениеЗаполнено(Источник.Дата) Тогда
            
            // Получаем двузначный номер месяца из даты документа (например, "02" для февраля)
            НомерМесяца = Формат(Источник.Дата, "ДФ=ММ");
            
            // Модифицируем префикс, добавляя к нему номер месяца
            // Например, из префикса "ТД" мы получим "ТД02-"
            Префикс = Префикс + НомерМесяца + "-";
            
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Разберем, как работает этот код. Когда пользователь создает новый документ, БСП генерирует стандартный префикс организации (например, ТД). Наш код перехватывает управление, проверяет, относится ли документ к нашей целевой организации, и динамически добавляет к префиксу номер текущего месяца и дефис в качестве разделителя. Платформа видит новый уникальный префикс и начинает отсчет номеров с единицы для каждого нового месяца.

Шаг 2. Вывод «красивого» номера в печатные формы

Использование префиксов вроде ТД02-000001 полностью решает техническую проблему в базе данных, однако бухгалтеры и клиенты могут негативно отнестись к появлению месяца в печатных формах накладных или счетов-фактур. На бумаге номер должен выглядеть стандартно и лаконично (например, просто 1 или ТД-1 вместо ТД02-000001).

Для решения этой задачи в БСП предусмотрен механизм редактирования номера перед отправкой на печать. Мы добавим в наше расширение общий модуль ПрефиксацияОбъектовКлиентСерверПереопределяемый и переопределим процедуру ПриПолученииНомераНаПечать:


&После("ПриПолученииНомераНаПечать")
Процедура Расш1_ПриПолученииНомераНаПечать(Номер, ПропуститьПрефиксациюДепартаментов, ПреобразоватьНомер)
    
    // Алгоритм поиска нашей кастомной добавки месяца в префиксе.
    // Если номер содержит шаблон вида "ТД[Месяц]-", мы можем программно очистить его.
    
    // Ищем вхождение дефиса, который отделяет наш измененный префикс
    ПозицияРазделителя = СтрНайти(Номер, "-");
    
    Если ПозицияРазделителя > 0 Тогда
        // Извлекаем чистую числовую часть номера и убираем лидирующие нули
        ЧистыйНомер = Сред(Номер, ПозицияРазделителя + 1);
        
        // Удаляем лидирующие нули для красивого отображения (например, "000001" превратится в "1")
        Пока Лев(ЧистыйНомер, 1) = "0" Цикл
            ЧистыйНомер = Сред(ЧистыйНомер, 2);
        КонецЦикла;
        
        // Возвращаем измененный номер для печати
        Номер = ЧистыйНомер;
        ПреобразоватьНомер = Истина;
    КонецЕсли;
    
КонецПроцедуры

Этот простой алгоритм позволяет хранить в базе данных строгую и уникальную сквозную нумерацию с префиксом месяца, гарантируя отсутствие конфликтов номеров, при этом выдавая контрагентам красивые и понятные документы без лишних символов.

Шаг 3. Реализация для устаревших конфигураций (УТ 10.3 / БП 2.0)

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


Процедура УстановитьПрефиксОрганизацииЕжемесячно(Источник, СтандартнаяОбработка, Префикс) Экспорт
    
    Если Источник.ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
    Если ТипЗнч(Источник.Организация) = Тип("СправочникСсылка.Организации") Тогда
        
        Если Источник.Организация.Код = "000000001" Тогда // Код вашей организации
            
            НомерМесяца = Формат(Источник.Дата, "ДФ=ММ");
            Префикс = Префикс + НомерМесяца + "/";
            
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Обратите внимание на использование символа косой черты / или дефиса - в качестве разделителя префикса. Платформа 1С корректно распознает эти знаки и отделяет префикс от цифровой части номера при автогенерации.

Важные риски и нюансы, которые необходимо учесть

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

  1. Ограничение длины номера документа: Стандартная длина номера в конфигурациях 1С обычно составляет 11 символов. Префикс организации занимает 2 символа, префикс информационной базы (в случае РИБ) — еще 2, разделитель — 1 символ. Если мы добавляем к префиксу еще 2 символа месяца и разделитель, длина префикса существенно увеличивается. Под сам порядковый номер может остаться всего 3–4 символа (то есть максимум 999 или 9999 документов в месяц). Убедитесь, что лимита разрядности номера хватит для вашего ежемесячного объема документов.
  2. Смена даты документа пользователем: Если пользователь создал документ в конце февраля, система присвоила ему февральский префикс (например, ТД02-000150). Если затем пользователь решит перенести этот документ на 1 марта, стандартный механизм БСП при записи должен автоматически пересчитать префикс на мартовский и обновить номер на ТД03-000001. Обязательно протестируйте этот сценарий в вашей базе, чтобы избежать ситуации, когда мартовский документ остался с февральским номером.
  3. Специфика Счетов-фактур: Нумерация счетов-фактур строго регламентируется налоговым законодательством. Счета-фактуры должны нумероваться в хронологическом порядке. Если вы меняете логику нумерации для первичных документов (Реализации, Авансовые отчеты), согласуйте с главным бухгалтером, требуется ли аналогичное изменение для Счетов-фактур и не нарушит ли это локальные требования налоговой отчетности.

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

← На главную