В процессе ведения учета во многих компаниях возникает жесткое требование со стороны бухгалтерии или контрагентов: номера документов «Реализация товаров и услуг» и связанных с ними документов «Счет-фактура выданный» должны строго совпадать. На первый взгляд, задача кажется тривиальной — достаточно создавать счет-фактуру на основании реализации. Однако в реальной практике нумерация быстро «расползается». Этому способствуют несколько факторов: ввод счетов-фактур на основании других документов (например, отчетов комиссионеров), создание реализаций без счетов-фактур (при передаче на комиссию или операциях без НДС), а также ручные корректировки пользователей.
В этой статье мы подробно разберем, как решить проблему рассинхронизации номеров. Мы рассмотрим как готовые организационные и методические решения, не требующие изменения кода, так и различные технические приемы программирования в среде 1С.
В типовых конфигурациях 1С (например, в «1С:Бухгалтерия 8») механизмы нумерации для накладных и счетов-фактур работают независимо. Каждый документ имеет свой собственный сквозной нумератор:
Если в базе создаются только пары «Реализация — Счет-фактура», то их номера будут идти синхронно. Но как только вводится счет-фактура на аванс, счет-фактура по отчету комиссионера или реализация без НДС, цепочка синхронности прерывается. Нумераторы сдвигаются относительно друг друга.
Рассмотрим, как можно решить эту задачу на разных уровнях — от методологии учета до изменения программного кода.
Перед тем как приступать к доработке конфигурации, проанализируем первопричину требования одинаковых номеров. Чаще всего бухгалтеры хотят видеть одинаковые номера, чтобы избежать путаницы при отправке бумажных или электронных документов контрагентам. В этом случае лучшим решением будет переход на использование Универсального передаточного документа (УПД) со статусом «1».
УПД со статусом «1» объединяет в себе функции и первичного документа (акта/накладной), и счета-фактуры. По правилам, заложенным в конфигурациях 1С:
Этот вариант является наиболее предпочтительным, так как он полностью соответствует законодательству РФ и не требует внесения изменений в программу.
Если конфигурация типовая (например, «1С:Бухгалтерия 8», в том числе в облачном сервисе 1С:Фреш), и переходить на УПД компания не планирует, можно воспользоваться готовым решением без программирования. В магазине расширений 1С доступно бесплатное расширение «Единая нумерация счетов на оплату, реализаций, счетов-фактур». Оно связывает цепочку документов в рамках одной сделки и автоматически присваивает им одинаковый номер при записи.
Если программирование неизбежно, то первое, что мы должны рассмотреть — это архитектурное разделение потоков нумерации. Нам нужно сделать так, чтобы «нестандартные» счета-фактуры не сбивали общую нумерацию счетов-фактур по реализациям.
Выясним причину сбоя: счета-фактуры по отчетам комиссионеров «вклиниваются» в общую очередь. Мы можем настроить систему так, чтобы для таких документов использовался отдельный префикс (например, «ОК» или «К»). В этом случае:
0000-000001, 0000-000002 и т.д.0000-К00001, 0000-К00002.Таким образом, две очереди нумератора будут вестись параллельно и независимо, не мешая друг другу.
Еще один вариант распределения номеров — выделение фиксированного диапазона под «нетипичные» документы. Например, для счетов-фактур, создаваемых не по прямым реализациям, можно выделить диапазон номеров начиная с 70000 до 90000.
При записи счета-фактуры по отчету комиссионера программа должна программно определять максимальный номер из этого диапазона и увеличивать его на 1. Это позволит сохранить сквозную и бесконфликтную нумерацию для основных документов реализации в пределах диапазона от 1 до 69999.
Для реализации жесткой связи номеров в конфигураторе можно использовать механизм подписок на события. Мы можем создать общий нумератор для документов РеализацияТоваровУслуг и ОтчетКомиссионера, а также написать подписку на событие ПриУстановкеНовогоНомера или ПередЗаписью для документа СчетФактураВыданный.
Алгоритм работы подписки при записи счета-фактуры:
При разработке собственного алгоритма нумерации часто возникает задача: как быстро и корректно определить в базе документ с максимальным номером за текущий год, чтобы инкрементировать его?
Рассмотрим пример запроса, который выбирает максимальный номер счета-фактуры (или реализации) за текущий год по конкретной организации:
НачГода = НачалоГода(Дата);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ТаблицаДокумента.Номер КАК Номер
|ИЗ
| Документ.СчетФактураВыданный КАК ТаблицаДокумента
|ГДЕ
| ТаблицаДокумента.Ссылка <> &Ссылка
| И ТаблицаДокумента.Дата >= &ДатаНачала
| И ТаблицаДокумента.Организация = &Организация
| И НЕ ТаблицаДокумента.ПометкаУдаления
|
|УПОРЯДОЧИТЬ ПО
| Номер УБЫВ";
Запрос.УстановитьПараметр("ДатаНачала", НачГода);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Организация", Организация);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
МаксимальныйНомер = Выборка.Номер;
КонецЕсли;
Важное предупреждение для разработчиков! Использование прямого запроса для определения следующего номера при записи документа в многопользовательском режиме несет в себе серьезные технические риски:
Поэтому в современных конфигурациях 1С, построенных на базе БСП (Библиотеки стандартных подсистем), вмешиваться в нумерацию следует строго через предопределенные механизмы БСП. Рекомендуется использовать подписку на событие ПриУстановкеНовогоНомера и стандартные процедуры модуля ПрефиксацияОбъектовСобытия.
Решая техническую задачу по синхронизации, необходимо помнить о правилах налогового учета РФ:
0000-000202, стало 0000-И00004). Это сделано для предотвращения сбоев автонумерации и корректного обмена данными. Хотя в печатных формах буква «И» опускается, в интерфейсе журналов 1С такая нумерация выглядит неэстетично.Проанализировав все варианты, мы рекомендуем в первую очередь рассмотреть организационное решение с переходом на УПД со статусом 1. Если этот вариант не подходит, оптимальным техническим решением будет использование разных префиксов документов или установка расширения единой нумерации, что позволит избежать рисков блокировок базы и сохранит стабильность конфигурации.