Каждый практикующий специалист 1С или бухгалтер рано или поздно сталкивается со сбоем автонумерации документов. Особенно критична эта проблема для счетов-фактур выданных, так как их нумерация жестко контролируется налоговыми органами. Типичная ситуация: программа исправно работала, но при попытке создать новый документ после номера Префикс-0999 внезапно выдает ошибку: «Значение поля номер не уникально». Попытки перенумеровать документы вручную или выполнить стандартное обновление нумерации объектов часто не приносят результата — 1С упорно пытается записать документ со старым «застрявшим» номером.
В этой статье мы подробно разберем, почему возникает этот сбой, проанализируем внутренние механизмы платформы 1С:Предприятие, оценим риски популярных «кустарных» методов исправления и рассмотрим правильные, безопасные способы восстановления сквозной автонумерации.
Чтобы понять природу ошибки, рассмотрим, как платформа 1С работает со строковыми номерами документов. По умолчанию в конфигурации «1С:Бухгалтерия предприятия» для счета-фактуры выданного задана фиксированная длина номера — обычно это 12 символов. Номер имеет сложную структуру и условно делится на три части:
АБ-).0 (ноль) заменяется на букву А для авансовых счетов-фактур или на И для исправленных документов.000001).Проанализируем ситуацию, когда пользователь решает сократить номер вручную, убрав «лишние» нули, и записывает документ как Префикс-0999. В этот момент происходит критический сбой в логике платформы:
999 стоит ноль, а длина номера была принудительно урезана пользователем, система фиксирует строковую часть Префикс-0 в качестве постоянного статического префикса.999.999 + 1 = 1000.1000 физически требует четырех разрядов, а у системы под счетчик выделено только три (так как первый ноль уже «прирос» к префиксу). Сформировать номер Префикс-01000 программа не может, поскольку это превысит установленные границы распознанного префикса.Префикс-0999, пытается записать его, видит, что документ с таким номером уже существует в базе данных, и выводит предупреждение о неуникальности.На форумах часто советуют быстрые решения проблемы. Например, вставить в номер неразрывный пробел с помощью комбинации клавиш Alt+255 (как в сообщении 8) или добавить буквенный индекс, изменив номер на Префикс-0Ж1000 (как в сообщении 16).
С технической точки зрения добавление буквы действительно решает проблему «здесь и сейчас»: алгоритм поиска максимального номера наталкивается на букву Ж, сбрасывает автонумерацию, и код 1000 начинает записываться. Однако в реальном бухгалтерском учете такие методы несут колоссальные риски:
Рассмотрим правильные и безопасные способы исправления нумерации, которые не навредят учету.
В современной «1С:Бухгалтерии 8» (редакции 3.0) предусмотрен надежный автоматический инструмент для выявления и исправления ошибок нумерации. Нам не нужно вручную искать каждый проблемный документ.
Выполним следующие шаги для исправления ситуации:
ПР-00000001). Система автоматически перепишет номера документов, выстроив их в хронологическом порядке, что мгновенно вернет работоспособность механизму автонумерации.Что делать, если менять номера документов за весь прошлый период категорически нельзя из-за требований руководства или уже сданной отчетности? Нам нужно точечно вернуть правильную разрядность последним введенным документам, из-за которых «спотыкается» система.
Если документов немного, достаточно вручную открыть последний документ (тот самый Префикс-0999) и дописать в его номер недостающие лидирующие нули непосредственно перед числовой частью, чтобы общая длина номера соответствовала стандартному шаблону (например, изменить на Префикс-00000999). После этого следующий документ автоматически запишется как Префикс-00001000. Для пакетного восстановления формата номеров за период можно применить обработку для добавления лидирующих нулей в счета-фактуры.
Если документов с нарушенной разрядностью накопилось много, воспользуемся штатной обработкой Групповое изменение реквизитов:
Функции для технического специалиста).Счет-фактура выданный.Дата Больше или равна [Начало месяца].Бывают ситуации, когда все некорректные номера в базе исправлены, лидирующие нули восстановлены, но платформа 1С при создании нового документа все равно продолжает выдавать ошибку уникальности и подставлять старый некорректный код. Это происходит из-за механизма кэширования номеров на стороне сервера «1С:Предприятия».
В клиент-серверном варианте работы сервер 1С в целях оптимизации производительности кэширует диапазоны номеров для каждого вида документов. Чтобы сбросить этот кэш и заставить систему пересчитать максимальный номер заново, необходимо выполнить комплекс мер. Для синхронизации кэша нумератора с базой данных можно использовать обработку для исправления ошибки неуникальности номера.
Во-первых, воспользуемся встроенным методом платформы ОбновитьНумерациюОбъектов(). Напишем простую обработку или выполним код в консоли кода:
// Программный сброс кэша нумерации для счетов-фактур
МетаданныеДокумента = Метаданные.Документы.СчетФактураВыданный;
ОбновитьНумерациюОбъектов(МетаданныеДокумента);
Предупреждение("Нумерация успешно обновлена!");
Во-вторых, если программное обновление нумерации не помогло (такое случается при жестком кэшировании на некоторых версиях платформ), потребуется административное вмешательство:
ragent) или завершить рабочие процессы rphost, относящиеся к этой базе данных, через консоль администрирования серверов 1С.После перезапуска процессов сервер будет вынужден обратиться напрямую к СУБД для поиска максимального номера, считает исправленный номер с нулями (например, Префикс-00000999) и корректно сформирует новый документ с номером Префикс-00001000.
Соблюдение этих несложных правил и использование штатных инструментов администрирования позволит вам быстро вернуть систему в рабочее состояние без рисков для регламентированного и налогового учета вашей организации.