Как сделать одинаковыми номера у реализаций и счетов-фактур в 1С: варианты решения проблемы

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

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

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

Почему «расползается» нумерация: суть проблемы

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

  1. При создании новой реализации система берет последний номер накладной в текущем периоде и увеличивает его на единицу.
  2. При создании счета-фактуры (даже на основании этой реализации) система обращается к нумератору счетов-фактур, берет его последнее значение и также увеличивает на единицу.

Если в базе создаются только пары «Реализация — Счет-фактура», то их номера будут идти синхронно. Но как только вводится счет-фактура на аванс, счет-фактура по отчету комиссионера или реализация без НДС, цепочка синхронности прерывается. Нумераторы сдвигаются относительно друг друга.

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


Решение 1. Организационный переход на УПД (Статус 1)

Перед тем как приступать к доработке конфигурации, проанализируем первопричину требования одинаковых номеров. Чаще всего бухгалтеры хотят видеть одинаковые номера, чтобы избежать путаницы при отправке бумажных или электронных документов контрагентам. В этом случае лучшим решением будет переход на использование Универсального передаточного документа (УПД) со статусом «1».

УПД со статусом «1» объединяет в себе функции и первичного документа (акта/накладной), и счета-фактуры. По правилам, заложенным в конфигурациях 1С:

Этот вариант является наиболее предпочтительным, так как он полностью соответствует законодательству РФ и не требует внесения изменений в программу.


Решение 2. Использование готового расширения 1С

Если конфигурация типовая (например, «1С:Бухгалтерия 8», в том числе в облачном сервисе 1С:Фреш), и переходить на УПД компания не планирует, можно воспользоваться готовым решением без программирования. В магазине расширений 1С доступно бесплатное расширение «Единая нумерация счетов на оплату, реализаций, счетов-фактур». Оно связывает цепочку документов в рамках одной сделки и автоматически присваивает им одинаковый номер при записи.


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

Если программирование неизбежно, то первое, что мы должны рассмотреть — это архитектурное разделение потоков нумерации. Нам нужно сделать так, чтобы «нестандартные» счета-фактуры не сбивали общую нумерацию счетов-фактур по реализациям.

Выясним причину сбоя: счета-фактуры по отчетам комиссионеров «вклиниваются» в общую очередь. Мы можем настроить систему так, чтобы для таких документов использовался отдельный префикс (например, «ОК» или «К»). В этом случае:

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


Решение 4. Выделение диапазона номеров

Еще один вариант распределения номеров — выделение фиксированного диапазона под «нетипичные» документы. Например, для счетов-фактур, создаваемых не по прямым реализациям, можно выделить диапазон номеров начиная с 70000 до 90000.

При записи счета-фактуры по отчету комиссионера программа должна программно определять максимальный номер из этого диапазона и увеличивать его на 1. Это позволит сохранить сквозную и бесконфликтную нумерацию для основных документов реализации в пределах диапазона от 1 до 69999.


Решение 5. Создание общего нумератора через подписку на события

Для реализации жесткой связи номеров в конфигураторе можно использовать механизм подписок на события. Мы можем создать общий нумератор для документов РеализацияТоваровУслуг и ОтчетКомиссионера, а также написать подписку на событие ПриУстановкеНовогоНомера или ПередЗаписью для документа СчетФактураВыданный.

Алгоритм работы подписки при записи счета-фактуры:

  1. Программа проверяет документ-основание.
  2. Если основанием является «Реализация товаров и услуг», счет-фактура получает номер, равный номеру реализации (с очисткой префиксов при необходимости).
  3. Если основанием является другой документ, номер присваивается по общим правилам с использованием выделенного префикса или диапазона.

Техническая реализация: как найти документ с максимальным номером?

При разработке собственного алгоритма нумерации часто возникает задача: как быстро и корректно определить в базе документ с максимальным номером за текущий год, чтобы инкрементировать его?

Рассмотрим пример запроса, который выбирает максимальный номер счета-фактуры (или реализации) за текущий год по конкретной организации:


НачГода = НачалоГода(Дата);
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |   ТаблицаДокумента.Номер КАК Номер
    |ИЗ
    |   Документ.СчетФактураВыданный КАК ТаблицаДокумента
    |ГДЕ
    |   ТаблицаДокумента.Ссылка <> &Ссылка
    |   И ТаблицаДокумента.Дата >= &ДатаНачала
    |   И ТаблицаДокумента.Организация = &Организация
    |   И НЕ ТаблицаДокумента.ПометкаУдаления
    |
    |УПОРЯДОЧИТЬ ПО
    |   Номер УБЫВ";

Запрос.УстановитьПараметр("ДатаНачала", НачГода);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Организация", Организация);

Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
    МаксимальныйНомер = Выборка.Номер;
КонецЕсли;

Важное предупреждение для разработчиков! Использование прямого запроса для определения следующего номера при записи документа в многопользовательском режиме несет в себе серьезные технические риски:

Поэтому в современных конфигурациях 1С, построенных на базе БСП (Библиотеки стандартных подсистем), вмешиваться в нумерацию следует строго через предопределенные механизмы БСП. Рекомендуется использовать подписку на событие ПриУстановкеНовогоНомера и стандартные процедуры модуля ПрефиксацияОбъектовСобытия.


Законодательные требования и риски при изменении нумерации

Решая техническую задачу по синхронизации, необходимо помнить о правилах налогового учета РФ:

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

← На главную