Ситуация, когда бухгалтер или программист сталкивается с тем, что программа перестает автоматически присваивать номера новым документам, является классической для конфигураций на платформе 1С:Предприятие 8.3. Чаще всего это происходит в документах РеализацияТоваровУслуг или СчетФактураВыданный. В этой статье мы подробно разберем, почему возникает эта проблема, как работает механизм нумерации и какими способами можно восстановить работоспособность системы без потери данных.
Для начала проанализируем структуру номера. В типовой конфигурации «1С:Бухгалтерия предприятия 3.0» длина номера документа составляет 11 символов. Рассмотрим пример из вопроса: 00БП-С9999.
Структура этого номера такова:
00 — префикс организации (устанавливается в карточке организации).БП — префикс информационной базы (устанавливается в настройках синхронизации).- — разделитель.С — префикс, который часто добавляется при синхронизации данных из других программ (например, из «Управления торговлей»).9999 — числовая часть номера.Итого мы имеем ровно 11 символов. Система не может создать номер 00БП-С10000, так как в нем будет уже 12 символов, что превышает допустимую длину поля в базе данных. Кроме того, буква «С» (кириллица) в строковом сравнении 1С считается «старше» любой цифры. Когда система ищет максимальный номер, чтобы прибавить к нему единицу, она натыкается на С9999 и застревает, так как математическое увеличение такой строки невозможно без выхода за пределы разрядности.
Самый простой и логичный способ — освободить место в номере за счет удаления или замены лишних символов. Рассмотрим вариант замены префикса С на цифру 0.
Если мы заменим во всех документах текущего года номер 00БП-С9999 на 00БП-09999, у системы появится возможность создать следующий номер — 00БП-10000. При этом общая длина номера останется равной 11 символам.
Важно: Перед выполнением таких операций обязательно создайте резервную копию базы данных. Если в базе есть «зависшие» сеансы, которые мешают сделать архив, попробуйте перезапустить службу 1С:Предприятия (для клиент-серверного варианта) или принудительно завершить процессы dbms на стороне сервера.
После изменения номеров (это можно сделать стандартной обработкой «Групповое изменение реквизитов»), необходимо очистить кэш нумерации, иначе платформа будет продолжать «помнить» старый максимальный номер. Для этого в консоли кода (или через создание внешней обработки) нужно выполнить одну команду:
ОбновитьНумерациюОбъектов(Метаданные.Документы.РеализацияТоваровУслуг);
Эта команда заставляет платформу пересчитать максимальный номер для указанного типа документа, исходя из фактически имеющихся записей в базе данных.
Если объем документов в вашей организации настолько велик, что 5-значного номера не хватает на год, проанализируем возможность изменения периодичности нумерации. По умолчанию в 1С:Бухгалтерии периодичность установлена «В пределах года». Это значит, что 1 января каждого года счетчик сбрасывается в 00001.
Мы можем использовать механизм расширений, чтобы изменить периодичность на «В пределах месяца». В этом случае нумерация будет начинаться заново каждый месяц, и лимит в 9999 документов в месяц будет исчерпать гораздо сложнее. Посмотрим, как это реализовать:
РеализацияТоваровУслуг).Периодичность на В пределах месяца.После этого не забудьте также вызвать ОбновитьНумерациюОбъектов, чтобы система корректно инициализировала новые диапазоны.
Рассмотрим более гибкий вариант, который не требует переименования старых документов (что критично для налоговой отчетности и синхронизации). Мы можем перехватить событие установки нового номера и принудительно задать новую маску.
В расширении для документа создадим обработчик события ПриУстановкеНовогоНомера. Проанализируем пример кода:
&НаСервере
Процедура ПередУстановкойНовогоНомера(Источник, СтандартнаяОбработка, Префикс)
// Если мы видим, что старая нумерация с префиксом "С" забита,
// принудительно меняем префикс на новый, например "А"
Префикс = "00БП-А";
КонецПроцедуры
Таким образом, новые документы будут создаваться с номером типа 00БП-А00001. Система начнет отсчет заново для этого префикса, не обращая внимания на старые документы с префиксом С. Это безопасный способ, который не нарушает целостность архива и не требует массовых изменений в базе.
Выясним причину появления префикса «С». В 1С:Бухгалтерии он обычно означает «Синхронизированный». Если вы измените номера в Бухгалтерии, но не измените их в источнике (например, в «Управлении торговлей»), то при следующем обмене данными система может не найти соответствия по номеру и дате. Это приведет к появлению дублей документов.
Проанализируем также последствия для НДС. Номера реализаций попадают в счета-фактуры и далее в Книгу продаж. Если вы массово измените номера за прошлый квартал, по которому уже сдана декларация, возникнет расхождение с данными налоговой. Поэтому крайне рекомендуется:
Если вы не можете сделать архив из-за зависших сеансов, а прав администратора 1С нет, разберем альтернативные шаги:
1Cv8.1CD. Все файловые дескрипторы закроются, и вы сможете скопировать файл базы.1C:Enterprise 8.3 Server Agent через панель управления службами Windows или убить процессы rphost.После очистки сеансов и создания бэкапа можно приступать к программным манипуляциям. Помните, что платформа 1С очень чувствительна к ручному вмешательству в номера: достаточно одному пользователю один раз вручную вписать номер с буквами в конце (например, 001/А), и вся автоматическая последовательность может сломаться. В таких случаях всегда помогает метод ОбновитьНумерациюОбъектов после исправления ошибочного номера.