Дубль номера документа в 1С 8.3: откуда берётся и как развести документы
Содержание
Ошибка «не уникальный номер» в 1С означает, что в базе уже есть документ того же вида с таким же номером в том же периоде нумерации. Быстрое решение: откройте документ, очистите поле «Номер» и запишите его — программа сама присвоит следующий свободный номер. Если номер важен (он уже на бумаге у контрагента), меняйте номер у второго, «лишнего» документа.
Сообщение выглядит по-разному: Значение поля "Номер" не уникально, «документ с таким номером уже существует» или ошибка СУБД про нарушение уникального индекса. Причина почти всегда одна из пяти: ручная правка номера, смена даты, совпадающие префиксы, загрузка из другой базы или повреждение индексов. Какая из них ваша, видно по тому, когда и у какого документа появилась ошибка.
Как 1С нумерует документы и где включается контроль
Нумерация — это свойство объекта конфигурации, а не настройка пользователя. У каждого вида документа в конфигураторе заданы:
- 🔢 Тип и длина номера — строка или число, например 11 символов.
- 📅 Периодичность — непериодический, в пределах года, квартала, месяца или дня. В типовых БП 3.0 и УТ 11 для большинства документов это год.
- 🔒 Контроль уникальности — флаг, при котором платформа не даёт записать второй документ с тем же номером в одном периоде.
- ⚙️ Автонумерация — если номер пустой, при записи платформа выдаёт следующий.
- 🔗 Нумератор — общий счётчик для нескольких видов документов. Тогда номер должен быть уникален сразу по всем этим видам.
Отсюда важное следствие. Периодичность «в пределах года» разрешает два документа № 0000-000001 — один от 15.03 прошлого года, другой от 10.01 текущего. Это не ошибка, а нормальная картина после смены года.
В типовых конфигурациях на базе БСП номер собирается из частей: префикс информационной базы, префикс организации, дефис и порядковая часть. Префиксы нужны, чтобы документы разных организаций и разных узлов обмена не пересекались.
| Часть номера | Где задаётся | Зачем нужна |
|---|---|---|
| Префикс организации | Карточка организации, поле «Префикс» | Разводит номера фирм в одной базе |
| Префикс базы | Администрирование → Синхронизация данных | Разводит номера узлов обмена и РИБ |
| Порядковая часть | Автоматически | Счётчик внутри периода |
Откуда берётся конфликт номеров
Платформа сама по себе дублей не создаёт: автонумерация берёт следующий свободный номер. Конфликт возникает, когда вмешивается человек или внешний источник данных.
- ✍️ Ручной ввод. Пользователь вписал номер, который уже занят. Часто так «подгоняют» номер под бумажный счёт поставщика.
- 📆 Смена даты на другой период. Документ № 45 от декабря перенесли на январь, а в январе свой № 45 уже есть. Платформа проверяет уникальность в новом периоде и отказывает.
- 📋 Копирование. Скопировали документ и вручную поставили номер оригинала.
- 🏢 Пустые или одинаковые префиксы. Две организации без префикса делят одну последовательность. Пока номера выдаёт автоматика, всё спокойно. Стоит одному бухгалтеру вбить номер руками — второй получает ошибку.
- 🔄 Загрузка из другой базы. Документы пришли через обмен, выгрузку-загрузку XML или внешнюю обработку . В режиме загрузки данных часть проверок не выполняется, и дубль попадает в базу. Ошибка всплывает позже — когда кто-то откроет и перезапишет такой документ.
- 🧩 Повреждение индексов. Сбой питания, аварийное завершение сервера, проблемы с диском. Тогда ругается уже СУБД, и сообщение содержит слова «unique index», «duplicate key» или «нарушение уникальности».
Две последние причины коварны: пользователь ничего не нумеровал руками, а ошибка появилась. Если дубль всплыл у документа, который никто не трогал, ищите обмен или сбой.
Поиск дублей номеров в базе
Если дубль один, его видно в списке. Откройте журнал нужного вида документов, отсортируйте по колонке «Номер» щелчком по заголовку и посмотрите на соседние строки. Сузить поиск помогает отбор по периоду и по организации.
Когда документов тысячи или подозреваете массовую проблему после обмена, быстрее запрос. Его можно выполнить в консоли запросов (внешняя обработка) или в режиме конфигуратора при отладке. Пример для реализаций с периодичностью «в пределах года»:
ВЫБРАТЬ
Док.Номер КАК Номер,
НАЧАЛОПЕРИОДА(Док.Дата, ГОД) КАК Год,
КОЛИЧЕСТВО(Док.Ссылка) КАК Штук
ИЗ
Документ.РеализацияТоваровУслуг КАК Док
СГРУППИРОВАТЬ ПО
Док.Номер,
НАЧАЛОПЕРИОДА(Док.Дата, ГОД)
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Док.Ссылка) > 1
Для другого вида документа замените имя после Документ.. Если у документа периодичность «в пределах квартала» или «месяца», замените ГОД на КВАРТАЛ или МЕСЯЦ. Для непериодической нумерации поле года из запроса уберите.
Чтобы увидеть сами документы, а не только номер, выполните второй запрос:
ВЫБРАТЬ
Док.Ссылка,
Док.Дата,
Док.Номер,
Док.Проведен
ИЗ
Документ.РеализацияТоваровУслуг КАК Док
ГДЕ
Док.Номер = &Номер
УПОРЯДОЧИТЬ ПО
Док.Дата
Параметр &Номер подставьте из первого запроса. В результате будут обе ссылки — их можно открыть двойным щелчком.
Если документы разных видов используют общий нумератор, дубль может быть между ними: например, приходный документ и возврат с одинаковым номером. Запрос по одному виду такой пары не покажет — объедините виды через ОБЪЕДИНИТЬ ВСЕ.
Способы исправить неуникальный номер: от формы до обработки
Сначала решите главный вопрос: у какого из двух документов номер правильный. Правило простое — номер не меняют у документа, который уже ушёл наружу.
- 📤 Счёт-фактура выставлен и отражён в книге продаж или отправлен по ЭДО — его номер не трогаем.
- 🖨️ Акт, накладная или счёт уже подписаны контрагентом — номер не трогаем.
- 📝 Документ создан недавно, никуда не отправлялся — его и перенумеровываем.
Смена номера у уже переданной первички или счёта-фактуры создаёт расхождение с документами контрагента. Если без этого не обойтись, согласуйте изменение с ним и с главным бухгалтером.
Способ 1. Очистить номер и записать
Самый безопасный путь для одного-двух документов.
- Откройте документ, который будете перенумеровывать.
- Сотрите содержимое поля «Номер». В типовых конфигурациях при правке номера программа может спросить подтверждение — согласитесь.
- Нажмите «Записать» или «Провести и закрыть».
- Программа присвоит следующий свободный номер с нужными префиксами.
Документ получит номер в конце последовательности, а не «в дырку». Для внутренних документов это нормально.
Способ 2. Вписать конкретный номер вручную
Нужен, когда номер должен совпасть с бумажным оригиналом или встать на определённое место.
- Проверьте по списку, что выбранный номер в этом году свободен.
- Впишите его полностью, вместе с префиксами и ведущими нулями:
0000-000123, а не123. - Запишите документ.
Частая промашка — вписать короткий номер без префикса. Он формально уникален, но выбивается из нумерации, и потом его трудно найти поиском.
Способ 3. Массовая перенумерация обработкой
После неудачного обмена дублей бывают сотни. Руками это долго, поэтому пишут внешнюю обработку. Ядро такое:
ДокОбъект = Ссылка.ПолучитьОбъект();
ДокОбъект.УстановитьНовыйНомер();
ДокОбъект.ОбменДанными.Загрузка = Истина;
ДокОбъект.Записать();
Метод УстановитьНовыйНомер() выдаёт следующий номер по правилам документа. Режим ОбменДанными.Загрузка записывает объект без обработчиков и без перепроведения: движения остаются как были, ведь регистры ссылаются на документ, а не на его номер.
Режим загрузки пропускает проверки конфигурации. Прогоните обработку сначала на копии базы, сверьте результат запросом из раздела выше и только потом запускайте в рабочей. Перед запуском сделайте резервную копию.
| Способ | Когда подходит | Риски |
|---|---|---|
| Очистить номер | 1–5 внутренних документов | Номер уйдёт в конец последовательности |
| Ручной номер | Нужно совпадение с бумагой | Можно снова попасть в занятый номер |
| Обработка | Десятки и сотни дублей после обмена | Ошибка в коде затронет много документов |
Если ругается СУБД, а не программа
Сообщение с duplicate key, unique index или «нарушение уникальности индекса» говорит о повреждении данных на уровне таблиц. Перенумерация тут не поможет.
- Сделайте резервную копию (выгрузку
.dtили копию каталога файловой базы). - Попросите всех пользователей выйти: проверка требует монопольного доступа, сеансы будут закрыты.
- В конфигураторе выберите
Администрирование → Тестирование и исправление. - Отметьте проверку логической целостности и реиндексацию таблиц, режим — тестирование и исправление.
- После проверки найдите дубли запросом и разведите их одним из способов выше.
Запускайте проверку вечером или в выходной: на большой базе она идёт часами.
Дубли номеров в распределённой базе (РИБ) и обменах
В распределённой базе каждый узел нумерует документы сам, не зная о соседях. Единственное, что их разводит, — префикс информационной базы. Если у двух узлов префикс одинаковый или пустой, конфликт неизбежен: магазин и офис в один день создают по реализации № 0000-000210, а при синхронизации одна из них не запишется или перезапишется с ошибкой.
Проверьте префиксы во всех узлах:
- В каждой базе откройте
Администрирование → Синхронизация данных. - Найдите поле «Префикс этой информационной базы».
- Убедитесь, что у каждого узла он свой, например
ЦОдля центральной базы иМ1,М2для магазинов.
Новый префикс действует только на документы, созданные после изменения. Старые дубли остаются, их разводят запросом и перенумерацией. Делайте это в одном узле — обычно в центральном — и дождитесь, пока исправленные номера уйдут в остальные узлы по обмену.
Перед сменой префикса завершите текущий цикл обмена во всех узлах. Иначе в пути окажутся документы со старой нумерацией, и картина запутается.
С обменами между разными конфигурациями — например, УТ 11 и БП 3.0 — похожая история. Если в приёмник документы приходят со своими номерами, а там параллельно вводят такие же документы вручную, номера столкнутся. Решения два: давать базе-приёмнику отдельный префикс организации или запретить ручной ввод документов того вида, которые приходят обменом.
Как не допустить повторения номеров
Профилактика сводится к тому, чтобы номер выдавала программа, а не человек.
- 🏷️ Префиксы у каждой организации. Даже если фирма в базе одна — вторая может появиться. Префикс задают до начала работы: менять его посреди года неудобно.
- 🌐 Уникальный префикс у каждого узла обмена. Проверяйте при создании нового узла РИБ и при подключении новой синхронизации.
- 🚫 Ограничение ручной правки номера. Если в конфигурации есть настройка прав на изменение номера, оставьте её только у ответственных. Номер входящего документа контрагента храните в отдельном поле «Номер входящего документа» — оно есть в большинстве поступлений.
- 📅 Осторожность со сменой даты. Перенос документа в другой год — частый источник конфликта. Перед переносом очистите номер, чтобы программа выдала номер нового периода.
- 💾 Стабильная работа сервера. ИБП, контроль свободного места на диске, регулярное резервное копирование — защита от повреждения индексов.
- 🔍 Проверка после крупных загрузок. После переноса остатков, загрузки из старой базы или первого обмена прогоните запрос на дубли.
Типичные промахи при исправлении
- ❌ Удалить один из документов-дублей. Если оба реальные, вы теряете операцию. Помеченный на удаление документ продолжает занимать номер, пока не удалён окончательно.
- ❌ Поменять номер выставленного счёта-фактуры. Номер в книге продаж разойдётся с экземпляром покупателя.
- ❌ Вписать номер без префикса. Ошибка исчезает, но нумерация ломается, а поиск по номеру потом не находит документ.
- ❌ Сменить префикс базы и забыть про старые дубли. Новый префикс не исправляет прошлое.
- ❌ Перенумеровать в подчинённом узле РИБ. Изменения могут вернуться из центра при следующем обмене.