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

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

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

Юридические аспекты ежедневной нумерации счетов-фактур

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

Согласно подпункту 1 пункта 5 статьи 169 Налогового кодекса РФ, счет-фактура должен содержать порядковый номер и дату его составления. Однако ни НК РФ, ни Постановление Правительства РФ от 26 декабря 2011 года № 1137 (о правилах заполнения счетов-фактур) не устанавливают конкретных правил по периодичности нумерации. То есть, ежедневная нумерация счетов-фактур с первого порядкового номера прямо не предусмотрена указанным постановлением Правительства РФ.

Министерство финансов РФ в своих разъяснениях (например, письма от 16.10.2012 № 03-07-11/427 и 10.08.2012 № 03-07-11/284) придерживается позиции, что нумерация счетов-фактур должна быть сквозной и возрастающей в целом по организации, без обнуления в течение года и без отдельных серий для авансовых счетов-фактур или накладных. Отдельная нумерация, например, для авансовых счетов-фактур, по мнению Минфина, не отвечает требованиям правил. Однако важно отметить, что это рекомендация, а не строгий запрет.

Использование разделительной черты ("/") в номере счета-фактуры по правилам используется для дополнения порядкового номера цифровым индексом обособленного подразделения, установленным организацией в учетной политике для целей налогообложения. Если вы планируете использовать дробную черту для разделения даты и порядкового номера, имейте в виду, что это может быть не совсем соответствует изначальному предназначению этого символа в номере счета-фактуры.

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

Закрепление порядка в учетной политике. Налогоплательщик имеет право самостоятельно разработать и закрепить порядок (способ) присвоения номеров счетам-фактурам в своей учетной политике для целей налогообложения, исходя из особенностей своей деятельности. Мы настоятельно рекомендуем, если вы решаете использовать ежедневную нумерацию, обязательно зафиксировать этот порядок в учетной политике вашей организации.

Основные принципы автоматической нумерации в 1С:Бухгалтерии 3.0

В "1С:Бухгалтерия предприятия 3.0" нумерация документов автоматизирована. По умолчанию программа присваивает номера, которые обычно обнуляются с начала каждого календарного года. Это достигается за счет использования объекта метаданных «Нумератор документов».

Каждый документ, требующий нумерации (например, РеализацияТоваровУслуг или СчетФактураВыданный), связан с определенным нумератором. В настройках нумератора можно задать:

  1. Автонумерацию;
  2. Контроль длины и уникальности номера;
  3. Периодичность. Именно это поле определяет, когда нумерация документа будет обнуляться и начинаться заново. Стандартные значения включают «Год», «Месяц», «Квартал», «День».

Однако, простое изменение периодичности на «День» может быть недостаточно для корректной работы нумерации, особенно если вы хотите включить дату в префикс номера или изменить его формат. Система 1С имеет внутренние механизмы, которые контролируют присвоение номера. Например, при изменении даты документа в рамках текущего года, номер может не меняться, поскольку внутренний механизм считает, что дата находится в пределах одного периода нумерации. Мы можем увидеть это в стандартных модулях, где проверяется, относятся ли даты объекта к одному периоду:


Если Не ПрефиксацияОбъектовСлужебный.ДатыОбъектаОдногоПериода(Выборка.Дата, Объект.Дата, Объект.Ссылка) Тогда
    Объект.Номер = "";
КонецЕсли;

Этот фрагмент кода показывает, что если даты объекта (старая и новая) попадают в один "период" по логике конфигурации (обычно год, если не изменено), то номер не очищается, и, следовательно, не переформировывается. Нам потребуется вмешаться в эту логику.

Стандартный номер документа в 1С:Предприятии 8.3 также может состоять из префиксов организации, информационной базы и дополнительного пользовательского префикса. Эти префиксы добавляются к порядковому номеру, формируя конечную строку. Расположение и длина этих префиксов фиксированы, и их наличие может повлиять на желаемый формат номера, такой как 010124/1.

Реализация ежедневной нумерации с использованием расширения

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

Шаг 1: Создание расширения и добавление объектов

  1. Откроем конфигурацию в режиме «Конфигуратор».
  2. Создадим новое расширение (Конфигурация -> Расширения конфигурации -> Добавить).
  3. В расширение добавим документы, для которых мы хотим изменить нумерацию. В нашем случае это будут Документ.РеализацияТоваровУслуг и Документ.СчетФактураВыданный. Для этого в окне расширения найдем соответствующие объекты в ветке «Документы», выделим их и добавим в расширение.

Шаг 2: Изменение периодичности для нумераторов

Для каждого документа, который вы добавили в расширение, необходимо изменить периодичность его нумератора.

  1. В расширении откроем добавленный документ (например, РеализацияТоваровУслуг).
  2. Перейдем на закладку «Нумераторы».
  3. Для основного нумератора (обычно называется «Документы») измените свойство «Периодичность» с «В пределах года» на «В пределах дня».
  4. Повторим эти действия для всех документов, которые требуют ежедневной нумерации (например, СчетФактураВыданный).

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

Шаг 3: Переопределение процедуры ПриУстановкеНовогоНомера

Для того чтобы в номер документа автоматически подставлялась дата, мы будем использовать обработчик события ПриУстановкеНовогоНомера в модуле объекта документа. Это событие вызывается непосредственно перед тем, как система генерирует новый номер.

  1. В расширении откроем модуль объекта для Документ.РеализацияТоваровУслуг (или другого нужного документа).
  2. Создадим обработчик события «После» для процедуры ПриУстановкеНовогоНомера.
  3. В этом обработчике мы зададим нужный нам префикс, основанный на дате документа.

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

Этот код позволит заменить префикс документа на дату в формате ДДММГГ/. Например, для 14 января 2024 года префикс будет 140124/. После этого 1С добавит к этому префиксу порядковый номер дня.

Шаг 4: Корректировка стандартных процедур префиксации для предотвращения двойных префиксов

Стандартные механизмы 1С могут добавлять свои префиксы (например, префикс организации типа 0000- или префикс ИБ). Чтобы ваш префикс даты был единственным, может потребоваться изменение префикса у реализации и счетов-фактур. Это делается путем переопределения стандартных процедур в общих модулях, которые отвечают за префиксацию.

  1. В расширении найдем общие модули, отвечающие за префиксацию. Чаще всего это ПрефиксацияОбъектовСобытия или ПрефиксацияОбъектовБПСобытия.
  2. Создадим обработчик события (например, «Перед») для процедуры, которая устанавливает стандартные префиксы (часто это процедура, которая вызывает ПрефиксИнформационнойБазыОрганизацииПодразделения).
  3. В этом обработчике мы будем проверять тип документа и, если это наша РеализацияТоваровУслуг или СчетФактураВыданный, то мы будем отменять стандартную обработку.

// В модуле расширения, например, для обработчика события
// "Перед" процедуры, которая вызывает ПрефиксИнформационнойБазыОрганизацииПодразделения
// Примерный код, требующий адаптации под конкретный общий модуль и процедуру
// Внимание: Этот код нужно интегрировать с осторожностью, чтобы не нарушить другую префиксацию.
Процедура Расш_Перед_УстановкойСтандартногоПрефикса(Источник, ИмяОрганизации, ИмяПодразделения, Префикс, СтандартнаяОбработка)

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

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

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

Шаг 5: Установка номера ПередЗаписью документа

Для того чтобы обеспечить правильное присвоение номера, особенно при изменении даты документа, рекомендуется явно очищать номер и вызывать его установку в процедуре ПередЗаписью модуля объекта документа.

  1. В расширении откроем модуль объекта для Документ.РеализацияТоваровУслуг.
  2. Создадим обработчик события «Перед» для процедуры ПередЗаписью.

// В модуле объекта документа "РеализацияТоваровУслуг" (или "СчетФактураВыданный") в расширении
// Создаем обработчик события "Перед" для процедуры ПередЗаписью
Процедура Расш_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

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

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

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

Важно: Механизм 1С для счета-фактуры часто также заполняет поле ПредставлениеНомера. Мы должны убедиться, что оно тоже корректно формируется с нашим префиксом. Обычно достаточно присвоить ему значение поля Номер.

Шаг 6: Обработка изменения даты документа

Один из важных сценариев – это когда пользователь меняет дату уже существующего документа. Стандартный механизм 1С не перенумеровывает документ при смене даты в рамках одного года, если не очищен номер. Если вы хотите, чтобы при изменении даты документа на другую дату (например, с 01.01.2024 на 02.01.2024) номер документа автоматически пересчитывался в соответствии с новой датой, вам потребуется дополнительная логика.

Мы можем реализовать это, запоминая дату документа при открытии формы и сравнивая ее с датой при записи. Если даты различаются, и мы хотим обновить номер, тогда мы очищаем поле Номер и вызываем УстановитьНовыйНомер(). Это можно сделать в модуле формы или в модуле объекта, но для корректного сравнения дат может потребоваться временное хранение старой даты.

Пример дополнительной логики в модуле формы для перенумерации при изменении даты:


// В модуле формы документа (например, ФормаДокумента)
ПеременныеФормы.ДатаДокументаПриОткрытии = Дата; // Присваиваем при чтении объекта

// В процедуре ПередЗаписьюНаСервере
Если Не Объект.ЭтоНовый() И ПеременныеФормы.ДатаДокументаПриОткрытии <> Объект.Дата Тогда
    // Если дата изменилась, очищаем номер, чтобы сработал наш механизм
    Объект.Номер = "";
КонецЕсли;

Этот подход гарантирует, что даже если пользователь изменит дату у уже записанного документа, номер будет переформирован согласно новым правилам.

Особенности форматирования номера (0001 vs 1)

Часто пользователи хотят видеть номер в формате ДДММГГ/1, ДДММГГ/2, без ведущих нулей в порядковом номере. Однако стандартный нумератор 1С автоматически добавляет ведущие нули, чтобы обеспечить фиксированную длину номера и корректную сортировку, например 0001, 0002, ..., 0010. Если вам принципиально нужен формат без ведущих нулей, вы столкнетесь с необходимостью полной переработки механизма получения номера, не используя стандартный УстановитьНовыйНомер(), а реализуя его полностью вручную, что значительно усложняет решение. Как правило, для автоматической нумерации и удобства сортировки, формат с ведущими нулями (ДДММГГ/0001) является более предпочтительным и не вызывает проблем.

Альтернативные подходы к реализации

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

1. Использование нового регистра для хранения номеров

Мы можем создать собственный регистр сведений, который будет хранить последний присвоенный номер для каждой даты. Например, регистр с измерениями "Дата" и "ВидДокумента" и ресурсом "ПоследнийНомер".

  1. Создадим новый регистр сведений НомераДокументовПоДатам, непериодический, независимый.
  2. Измерения: ДатаДокумента (тип Дата), ВидДокумента (тип Строка, или перечисление, или ссылка на метаданные).
  3. Ресурс: ПоследнийНомер (тип Число).
  4. В процедуре ПередЗаписью для наших документов мы будем:
    1. Получать максимальный номер из этого регистра для текущей даты и вида документа.
    2. Увеличивать его на 1.
    3. Присваивать документу новый номер (например, Формат(Дата, "ДФ=ддММгг") + "/" + НовыйНомер).
    4. Записывать новый номер в регистр.

Преимущества: Полная независимость от стандартного механизма нумерации 1С. Недостатки: Требует написания большого объема кода для обработки всех нюансов (пропуски, повторы, параллельная работа), нет стандартного механизма контроля уникальности номеров 1С.

2. Внешние обработки для перенумерации

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

  1. Пользователь после создания документов за определенный день запускает внешнюю обработку.
  2. Обработка находит все документы РеализацияТоваровУслуг и СчетФактураВыданный за текущий день, которые не имеют нужный формат номера.
  3. Обработка последовательно перенумеровывает их, присваивая номера в соответствии с заданным правилом (ДДММГГ/1, ДДММГГ/2 и так далее).

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

Заключение

Реализация ежедневной нумерации накладных и счетов-фактур в 1С:Бухгалтерии 3.0 возможна и наиболее эффективно достигается путем использования расширений конфигурации. Этот подход позволяет точечно изменить поведение программы, сохранив при этом возможность обновления типовой конфигурации. Мы рассмотрели пошаговую инструкцию, включающую изменение периодичности нумератора, переопределение процедуры ПриУстановкеНовогоНомера для добавления даты в префикс, а также методы предотвращения конфликтов со стандартными префиксами и обработки изменения даты.

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

← На главную