Как настроить и исправить нумерацию в 1С 8.3
Содержание
Длину номера, его тип и периодичность в 1С задают не в режиме «Предприятие», а в конфигураторе — в свойствах документа или справочника. Пользователю доступно другое: поменять номер вручную в карточке и задать префикс организации. Это первое, что путают, когда ищут, где настроить нумерацию документов и справочников.
Номер есть у документов, код — у элементов справочников. Механика похожа: платформа умеет выдавать значения автоматически с учётом префикса и периода, а разработчик при необходимости перехватывает выдачу своим кодом. Ниже — как устроены оба варианта, как собрать префикс из организации и информационной базы, как не ловить конфликты в обмене и РИБ, и что делать, когда номер «задвоился».
Чем номер документа отличается от кода справочника
У каждого документа есть стандартный реквизит Номер, у каждого элемента справочника — реквизит Код. Это служебные поля, по которым объект узнаётся в списке и в печатных формах.
Нумерация бывает двух видов:
- 🔄 автоматическая — платформа подставляет следующее значение при создании нового объекта;
- ✍️ ручная — пользователь вводит номер сам (встречается редко, обычно для справочников с «говорящими» кодами).
Ключевая разница между документом и справочником — в периодичности. Номер документа почти всегда сбрасывается в начале периода (года или месяца), код справочника растёт сквозным счётчиком без привязки к дате. Поэтому у документов есть настройка периодичности, а у справочников — настройка серий кодов.
Номер хранится строкой, даже если выглядит как число. Из-за этого 000012 и 12 — разные значения, а сортировка идёт посимвольно. Это важно помнить при выгрузках и сравнениях.
Настройки нумерации документов в конфигураторе
Откройте конфигуратор, найдите нужный документ в дереве метаданных, откройте его свойства (палитра свойств, группа Нумерация). Там несколько параметров.
| Свойство | Что задаёт | На что влияет |
|---|---|---|
| Тип номера | Число или Строка | Для префиксов нужна Строка |
| Длина номера | Число символов | Вместе с префиксом должна помещаться целиком |
| Периодичность | Год / квартал / месяц / день / непериодический | Когда счётчик обнуляется |
| Проверка уникальности | Контроль дублей | Платформа не даст два одинаковых номера в периоде |
| Автонумерация | Выдавать номер при создании | Снятый флаг = номер вводят вручную |
| Нумератор | Общий объект нумерации | Сквозной счётчик на несколько документов |
Про нумератор стоит сказать отдельно. Если несколько видов документов должны идти в одной сквозной последовательности (например, все исходящие письма независимо от типа), в конфигураторе создают объект в ветке Нумераторы и назначают его этим документам. Тогда счётчик у них общий.
Периодичность — не косметика, а решение, которое трудно откатить. Если год отработали со сквозной нумерацией, а потом включили сброс по году, старые и новые номера начнут пересекаться внутри уже закрытых периодов. Поэтому периодичность выбирают один раз, на старте работы в базе, и больше не трогают без веской причины.
Важное про длину. Если префикс и порядковый номер вместе не помещаются в заданную длину, платформа обрежет значение или выдаст ошибку. Типовой расчёт: 2 символа на префикс информационной базы + 2 на префикс организации + разделитель + сам номер. Под тысячи документов в год закладывайте не меньше 6–7 знаков под порядковую часть.
Как пользователю поменять номер документа вручную
Это самый частый практический вопрос, и он решается без конфигуратора.
- Откройте документ.
- Встаньте в поле Номер (оно в шапке, рядом с датой).
- Если поле серое и не редактируется — в командной панели формы есть команда, разрешающая правку номера (в типовых она называется по смыслу «Разрешить редактирование реквизитов» или «Изменить номер»).
- Введите нужное значение и запишите документ.
Если включена проверка уникальности, вручную задать номер, который уже занят другим документом в том же периоде, платформа не даст — появится сообщение, что номер не уникален.
После ручного ввода счётчик автонумерации не «подстраивается». Следующий новый документ получит номер по своей логике, а не «после вашего». Поэтому ручная правка номеров в середине последовательности почти всегда рождает дыры и дубли — делайте это осознанно.
Нумерация справочников: длина кода, серии и уникальность
У справочника параметры кода задаются там же, в палитре свойств:
- Длина кода — сколько символов отводится под код;
- Тип кода — Число или Строка;
- Автонумерация — выдавать ли код автоматически;
- Контроль уникальности — запрещать ли дубли кодов;
- Серия кодов — в каких границах код должен быть уникальным и как нарастать.
Серия кодов — главная настройка для иерархических справочников и справочников с владельцем:
| Значение серии | Где уникален код | Типичный случай |
|---|---|---|
| Во всём справочнике | Один сквозной счётчик | Простой плоский справочник |
| В пределах подчинения | Внутри каждой группы своя серия | Иерархия, где коды повторяются в разных папках |
| В пределах подчинения владельцу | Внутри каждого владельца | Подчинённый справочник (например, договоры по контрагенту) |
Для «говорящих» кодов (артикулы, табельные номера сотрудников) автонумерацию чаще отключают, а контроль уникальности оставляют — тогда пользователь вводит код сам, но программа не даст повторить существующий. Пример: в справочнике сотрудников табельный номер назначает кадровик по своим правилам, и автоподстановка здесь только мешает.
Отдельная тонкость — тип кода. Если код числовой, 0012 и 12 платформа считает одним значением, и ведущие нули не сохранятся. Нужны коды строго фиксированной длины с нулями впереди (частый случай для выгрузок во внешние системы) — ставьте тип кода Строка.
Префиксы: организация, информационная база, обмен и РИБ
Префикс — это буквы или цифры в начале номера, по которым видно, чей это документ. В типовых конфигурациях на библиотеке стандартных подсистем (БСП) префикс складывается из двух частей.
🏢 Префикс организации. В карточке организации есть поле «Префикс» (обычно 2 символа). Все документы этой организации получают его в начале номера. Это разводит нумерацию, когда в одной базе несколько юрлиц.
🗄️ Префикс информационной базы. Задаётся в настройках синхронизации данных — поле «Префикс этой информационной базы». Он нужен, когда баз несколько и они обмениваются данными: по префиксу видно, в какой базе документ создан.
Итоговый номер выглядит, например, так: ЦБ-00-000012, где ЦБ — организация, 00 — база, 000012 — порядковый номер.
Менять префикс организации в середине года можно, но номера, выданные до смены, не перестроятся — у них останется старый префикс. Поэтому новый префикс задают либо на старте, либо с начала нового периода, чтобы в пределах года не было смеси. И помните про длину: добавили второй префикс — проверьте, что порядковая часть всё ещё помещается в заданную длину номера.
Почему в обмене и РИБ важны разные префиксы
Когда две базы или два узла распределённой информационной базы (РИБ) создают документы независимо, они оба начинают считать с единицы. Без префиксов номера совпадут, и при синхронизации платформа столкнётся с дублями.
Решение одно: каждому узлу РИБ и каждой базе в обмене задайте свой уникальный префикс информационной базы. Тогда 00-000001 из центральной базы и 05-000001 из филиала — разные номера, конфликта нет.
Самая частая причина «задвоения» номеров после настройки обмена — одинаковый или пустой префикс у узлов. Проверьте префиксы до первой выгрузки, а не после.
Программная установка номера и кода
Когда документ или элемент создаются кодом, номер и код по умолчанию пустые — платформа присвоит их при записи. Но часто значение нужно раньше: показать в форме, записать в связанный объект. Для этого есть явные методы.
Для документа:
НовыйДок = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДок.Дата = ТекущаяДата();
НовыйДок.УстановитьНовыйНомер(); // с учётом периодичности
Если нужно задать префикс вручную, он передаётся параметром: УстановитьНовыйНомер("ЗАК-").
Для элемента справочника аналогично:
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.УстановитьНовыйКод();
Чтобы вмешаться в саму логику выдачи, у документа есть событие ПриУстановкеНовогоНомера, у справочника — ПриУстановкеНовогоКода. В них можно подставить свой префикс или полностью отключить стандартную выдачу:
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
// добавить свой префикс к штатному номеру
Префикс = "ЗАК-";
// СтандартнаяОбработка = Ложь; // так платформа номер НЕ выдаст — считаете сами
КонецПроцедуры
Не выдумывайте собственный счётчик, пока хватает штатного. Ручная генерация номера в коде (через запрос максимума) ломается при одновременной работе нескольких пользователей — два сеанса получат один максимум. Платформенная автонумерация этой гонки лишена.
Ещё один момент, который экономит время: до записи объекта номер пустой. Если нужно показать его пользователю на форме нового документа ещё до сохранения, вызывайте УстановитьНовыйНомер() в обработчике заполнения — иначе в поле будет пусто, и это пугает пользователей, которые ждут номер сразу.
Номер в печатных формах и отчётах
В печать и отчёты номер почти никогда не выводят «как в базе». ЦБ-00-000012 в счёте выглядит некрасиво, клиенту нужен 12 или СФ-12.
В типовых на БСП для этого есть функция, которая убирает ведущие нули и по параметрам отсекает префиксы:
НомерДляПечати = ОбщегоНазначения.НомерНаПечать(
Ссылка.Номер,
Истина, // убрать префикс информационной базы
Ложь); // префикс организации оставить
Если работаете не в типовой или функции нет под рукой — смотрите её описание в составе библиотеки, а простое отсечение ведущих нулей делается через Число(Номер) с обратным преобразованием или штатным форматированием.
В отчётах на СКД номер обычно берут как есть — он нужен для идентификации, а не для красоты. А вот в макетах печатных форм подставляйте уже очищенное значение, иначе служебный префикс попадёт к контрагенту.
Частые ошибки нумерации и как их разобрать
Большинство проблем с нумерацией сводится к нескольким типовым симптомам.
Отдельно про перенумерацию. Массово менять номера у проведённых документов в рабочей базе опасно: собьются ссылки в отчётах, у контрагентов останутся старые номера в их экземплярах, а при обмене правки уедут в другие базы. Если перенумерация действительно нужна — делайте её на копии, проверяйте результат и только потом переносите.