Документ не записывается из-за повторного номера: причины и решение
Содержание
Сообщение Значение поля "Номер" не уникально! значит одно: в базе уже есть документ того же вида с таким же номером в том же периоде нумерации. Платформа отказывается записывать второй. Исправляют так: очищают поле «Номер» и записывают документ заново — программа сама выдаст следующий свободный номер. Если дублей много или они пришли из обмена, нужны префиксы и перенумерация.
Частое заблуждение — считать, что база «сломалась» и нужно тестирование и исправление. Нет: структура базы в порядке, это обычный контроль уникальности, который включён в свойствах документа. Ошибка общая для платформы 8.3 и встречается в Бухгалтерии, ЗУП, УТ и любой другой конфигурации.
Откуда берётся ошибка уникальности номера
У каждого вида документа в конфигураторе есть набор свойств нумерации. От них зависит, когда номер считается повторным.
| Свойство | Что задаёт |
|---|---|
| Контроль уникальности | Проверять ли номер на повтор при записи |
| Периодичность номера | В каких пределах номер должен быть уникален: без периода, год, квартал, месяц, день |
| Автонумерация | Присваивать ли номер автоматически, если поле пустое |
| Тип и длина номера | Строка или число, сколько символов |
В типовых конфигурациях периодичность почти всегда «В пределах года». Поэтому реализация № 0001 от 15.01 и № 0001 от 15.01 следующего года живут спокойно. А две реализации с номером 0001 в одном году — уже конфликт.
Для справочников действует то же правило, только поле называется «Код»: Значение поля "Код" не уникально!. Способы решения у них общие.
Типичные ситуации, в которых появляется сообщение
- ✍️ Номер ввели вручную и попали в уже занятый.
- 📋 Документ скопировали, а потом вручную вернули ему номер оригинала.
- 📅 Дату документа перенесли в другой год, а там такой номер уже есть.
- 🔄 Документ пришёл из другой базы по обмену, и у обеих баз одинаковый префикс.
- 💾 Базу восстановили из старой копии, часть документов ввели заново, потом догрузили потерянные.
- 🏢 У двух организаций в одной базе одинаковый префикс (или он пустой у обеих).
Отдельный случай — дубль уже лежит в базе, а ошибка вылетает при попытке перезаписать один из документов. Так бывает после обмена: при загрузке данных в режиме обмена платформа контроль уникальности не выполняет, и два документа с одним номером спокойно сохраняются. Проблема всплывает позже, когда бухгалтер открывает документ, правит сумму и нажимает «Записать».
Как найти документы с повторяющимся номером
Сначала надо понять, с чем столкнулись: с одним случайным номером или с массовым задвоением.
Быстрая проверка через список
- Откройте журнал нужного вида документов, например, список реализаций.
- Включите сортировку по колонке «Номер» щелчком по заголовку.
- Установите отбор по периоду — тот год, в котором возникла ошибка.
- Найдите номер из ошибочного документа. Если рядом стоят две строки с одинаковым номером — это и есть пара-конфликт.
Способ хорош, когда дубль один. Если их десятки, список не поможет.
Поиск всех дублей запросом
Запрос выполняют в консоли запросов (внешняя обработка) или в режиме «Конфигуратор» через конструктор запроса. Пример для реализаций в пределах года:
ВЫБРАТЬ
Док.Номер КАК Номер,
НАЧАЛОПЕРИОДА(Док.Дата, ГОД) КАК Год,
КОЛИЧЕСТВО(Док.Ссылка) КАК Штук
ИЗ
Документ.РеализацияТоваровУслуг КАК Док
СГРУППИРОВАТЬ ПО
Док.Номер,
НАЧАЛОПЕРИОДА(Док.Дата, ГОД)
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Док.Ссылка) > 1
УПОРЯДОЧИТЬ ПО
Год,
Номер
Подставьте имя своего документа вместо РеализацияТоваровУслуг. Если периодичность номера «В пределах квартала» или «месяца», замените ГОД на КВАРТАЛ или МЕСЯЦ.
Добавьте в выборку поле Док.Ссылка.Организация (если реквизит есть) и сгруппируйте по нему тоже. Так сразу видно, виноват общий префикс двух организаций или нет.
Как устранить конфликт номеров: три способа
Порядок от безопасного к более сложному. Начинайте с первого.
Способ 1. Очистить номер и записать заново
- Откройте документ, который не записывается.
- Сотрите содержимое поля «Номер» полностью.
- Нажмите «Записать» или «Провести и закрыть».
При записи документа с пустым номером платформа сама назначит следующий номер в пределах периода. Если в конфигурации номер формируется с префиксом, префикс тоже подставится.
Минус способа: документ получит номер из конца последовательности, например 0457 вместо 0012. Для внутренних документов это не важно. Для счетов-фактур и актов, которые уже ушли контрагенту, номер менять нельзя — смотрите способ 2.
Способ 2. Перенумеровать «лишний» документ
Если ошибочный документ уже отправлен контрагенту с номером 0012, номер меняют не ему, а второму документу пары — тому, что попал в базу случайно или ещё не ушёл наружу.
- Найдите второй документ с тем же номером (списком или запросом выше).
- Откройте его, очистите поле «Номер», запишите.
- Вернитесь к первому документу и запишите его — теперь номер свободен.
Если оба документа уже ушли наружу с одним номером (выставлены два счёта-фактуры № 12), перенумерация в базе не исправит ситуацию у контрагента. Один из документов придётся оформлять исправлением или аннулированием по правилам вашего учёта — согласуйте это с главным бухгалтером.
Способ 3. Массовая перенумерация обработкой
Когда дублей сотни (типично после неудачного обмена), руками их не пройти. Пишут простую внешнюю обработку, которая назначает новые номера списку документов.
Перед запуском сделайте резервную копию базы. Обработка меняет данные без возможности отмены.
Пример кода для серверной процедуры, которой передают массив ссылок на «лишние» документы:
Процедура ПеренумероватьДокументы(МассивСсылок)
Для Каждого Ссылка Из МассивСсылок Цикл
ДокОбъект = Ссылка.ПолучитьОбъект();
ДокОбъект.УстановитьНовыйНомер();
ДокОбъект.ОбменДанными.Загрузка = Истина;
ДокОбъект.Записать();
КонецЦикла;
КонецПроцедуры
Что здесь происходит:
УстановитьНовыйНомер()берёт следующий свободный номер в периоде документа.ОбменДанными.Загрузка = Истиназаписывает документ без обработчиков и без перепроведения. Движения и признак проведения остаются как были.- Запись в режиме загрузки не проверяет уникальность. Поэтому номер берём только через
УстановитьНовыйНомер(), а не подставляем руками.
Если в типовой конфигурации номер формируется с префиксом в обработчике ПриУстановкеНовогоНомера, вызов УстановитьНовыйНомер() этот обработчик выполнит, и префикс сохранится.
Обработку запускают в нерабочее время. Документы, открытые пользователями, будут заблокированы, и запись на них упадёт с ошибкой блокировки — это нормально, их можно пройти повторно.
Настройка нумерации документов в 1С
Чтобы конфликтов не было, нумерация должна разводить номера разных источников по разным диапазонам. В типовых конфигурациях на БСП для этого есть два префикса.
Префикс организации
В карточке организации есть поле «Префикс». Оно добавляется в начало номера документов этой организации. Если в базе ведётся учёт нескольких организаций, у каждой должен быть свой префикс: например, ТД и СК.
Без префиксов номера двух организаций идут из общего ряда, и при ручной правке или обмене легко получить совпадение.
Префикс информационной базы
Второй префикс — у самой базы. Его задают в разделе Администрирование → Синхронизация данных, поле префикса этой программы. Он нужен, когда документы создаются в нескольких базах и сходятся в одну.
Пример номера реализации в Бухгалтерии 3.0: 00БП-000123.
| Часть номера | Значение |
|---|---|
00 | префикс организации (пустой — нули) |
БП | префикс информационной базы |
- | разделитель |
000123 | порядковый номер в периоде |
Если обе части префикса пустые, номер выглядит как 0000-000123.
Префиксы меняют до начала работы или с начала нового периода нумерации. Смена префикса в середине года не трогает уже созданные документы, но новые получат номера из нового ряда — в отчётах это выглядит как разрыв.
Свойства документа в конфигураторе
Контроль уникальности и периодичность задаются в свойствах объекта метаданных, раздел «Нумерация». Отключать контроль уникальности в типовой конфигурации не стоит: это изменение конфигурации, оно усложняет обновления и прячет проблему, а не решает её. Дубли номеров в первичке всё равно останутся дублями для налоговой и контрагентов.
Повторные номера в распределённых базах и при обмене
Самый массовый источник ошибки — синхронизация двух и более баз. Схема простая: база А создала реализацию № 0001, база Б тоже создала реализацию № 0001, обмен привёз обе в центральную базу.
Распределённая информационная база (РИБ)
В РИБ главный узел и подчинённые узлы создают документы одного вида параллельно. Если у узлов одинаковый префикс, номера совпадут почти гарантированно.
Правило: у каждого узла РИБ — свой уникальный префикс. Например, центральный офис ЦО, склад СК, филиал ФЛ. Префикс задают в каждом узле отдельно, до первой синхронизации.
Обмен между разными конфигурациями
Бухгалтерия и Управление торговлей, ЗУП и Бухгалтерия, Розница и УТ — каждая программа нумерует документы сама. Документ, пришедший по обмену, обычно сохраняет номер из базы-источника.
Если в УТ префикс УТ, а в Бухгалтерии БП, номера разойдутся. Если обе базы оставлены с пустым префиксом, реализация из УТ и реализация, созданная вручную в Бухгалтерии, могут получить один номер.
Копия базы как новый узел
Отдельная ловушка: базу скопировали, чтобы сделать из неё второй узел, и забыли поменять префикс в копии. Обе базы продолжают ряд с одного места.
Что проверить при настройке такой схемы:
Профилактика при загрузке и обмене данными
Ошибка «номер не уникален» почти всегда — следствие процесса, а не случайности. Несколько правил закрывают большинство случаев.
При обмене
- 🔑 Префикс задаётся один раз, до первой синхронизации, и больше не меняется.
- 🔍 После первой полной синхронизации прогоните запрос на дубли по ключевым документам: реализации, поступления, счета-фактуры.
- 📌 Документы одного вида желательно вводить в одной базе. Если реализации оформляют только в УТ, а в Бухгалтерию они приходят обменом, конфликтов не будет даже при ошибке в префиксах.
При загрузке из файлов и внешних систем
Загрузка документов из Excel, интернет-магазина или самописной обработки — второй частый источник дублей. Обработки обычно пишут в режиме загрузки, и платформа не проверяет номер.
- 🚫 Не передавайте в 1С номер из внешней системы в поле «Номер». Храните его в отдельном реквизите (например, номер заказа сайта в комментарии или в реквизите «Номер входящего документа», если он есть).
- ⚙️ В обработке загрузки вызывайте
УстановитьНовыйНомер()для каждого нового документа. - 🧪 Сначала прогоните загрузку на копии базы и проверьте запросом, не появилось ли повторов.
При восстановлении из резервной копии
Если после сбоя базу восстановили из копии и часть документов ввели заново, не догружайте потерянные документы из старой базы целиком. Сначала сравните номера: документы, введённые повторно, будут конфликтовать с оригиналами.
Когда ошибку можно не исправлять, а предотвратить заранее
Если в базе один пользователь, одна организация и нет обменов, ошибка возникает только при ручном вводе номера. Самая надёжная профилактика здесь — не трогать поле «Номер» вообще. Программа сама ведёт ряд без пропусков и повторов.