Буквы перед номером: откуда в 1С берётся префикс кода и как им управлять

· 10 мин

Содержание

Префикс кода справочника в 1С 8.3 задаётся не галочкой в свойствах объекта, а кодом: в модуле объекта справочника пишут обработчик ПриУстановкеНовогоКода и присваивают параметру Префикс нужную строку, например "МСК-". В типовых конфигурациях на БСП то же самое уже сделано за вас: префикс берётся из настройки «Префикс информационной базы», и менять его нужно в пользовательском режиме, а не в Конфигураторе.

Частое заблуждение — искать поле «Префикс» в палитре свойств справочника. Его там нет. В свойствах есть только длина и тип кода, серии кодов и автонумерация. Без этих настроек префикс работать не будет, поэтому начнём с них. Всё ниже относится к платформе 8.3 и подходит для любой конфигурации, где код справочника строковый.

Зачем справочнику префикс в коде

Код справочника — это короткий человекочитаемый идентификатор элемента. Ссылка в базе живёт отдельно и от кода не зависит. Поэтому префикс не влияет на связи между объектами, он нужен людям и обменам.

Когда префикс действительно полезен:

  • 🔀 Несколько баз создают элементы одного справочника. Центральный офис и филиалы заводят контрагентов параллельно. Без префикса обе базы выдадут код 000000125, и после обмена получится два элемента с одинаковым кодом.
  • 🏢 Нужно видеть источник элемента. По коду ЕКБ-00412 сразу понятно, что товар завели в екатеринбургской базе.
  • 📦 Коды уходят во внешние системы. Сайт, склад или сканер работают с кодом, и разделение диапазонов по префиксу снимает конфликты.
  • 🗂 Разные категории элементов в одном справочнике. Например, У- для услуг и Т- для товаров. Это решаемо, но обычно надёжнее реквизит или группа, чем префикс.

Как платформа нумерует с префиксом: она ищет максимальный код среди элементов с тем же префиксом и прибавляет единицу. Сменили префикс — нумерация для нового префикса начнётся с единицы. Старые элементы при этом свои коды не меняют.

Свойства кода в Конфигураторе: без них префикс не заработает

Откройте конфигурацию, раскройте ветку Справочники, выберите нужный и откройте его окно редактирования. Параметры кода находятся на закладке Данные.

СвойствоЧто выбрать для префиксаПочему
Тип кодаСтрокаВ числовой код буквы не запишешь
Длина кодаДлина префикса + разрядность номераПрефикс занимает место внутри кода
Допустимая длинаПеременная или фиксированнаяФиксированная дополняет номер нулями до полной длины
Серии кодовВо всём справочникеИначе коды повторяются в разных группах или у разных владельцев
Контроль уникальностиВключитьПлатформа не даст записать дубль
АвтонумерацияВключитьНовый код подставится при создании элемента

Посчитайте длину заранее. Пример: длина кода 9, префикс МСК- из четырёх символов. На номер остаётся 5 знаков, то есть максимум 99 999 элементов. Если справочник большой, увеличьте длину кода до 11–12.

Серия кодов «В пределах подчинения» означает, что в каждой группе нумерация своя. Для справочника с префиксом филиала это почти всегда ошибка: в группе «Поставщики» и в группе «Покупатели» появятся одинаковые коды.

Смена типа или длины кода — изменение структуры. Применяется через «Обновить конфигурацию базы данных», и для этого нужен монопольный доступ. В типовой конфигурации на поддержке правка свойств справочника снимает объект с поддержки или требует включить возможность изменений.

Обработчик ПриУстановкеНовогоКода

Само назначение префикса делают в модуле объекта справочника. Откройте его через контекстное меню справочника, пункт Открыть модуль объекта, и добавьте процедуру:

Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)
	Префикс = "МСК-";
КонецПроцедуры

Платформа вызывает этот обработчик, когда сама подбирает код: при создании элемента с включённой автонумерацией и при вызове метода УстановитьНовыйКод(). Параметр СтандартнаяОбработка трогать не нужно: если оставить его в Истина, платформа сама досчитает номер после префикса.

Префикс не обязан быть константой. Его можно взять из константы, из параметра сеанса или из реквизита самого элемента. Главное — чтобы на момент вызова значение было определено.

Префикс в пользовательском режиме: типовые конфигурации на БСП

В Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других конфигурациях на Библиотеке стандартных подсистем префиксы уже встроены. Подсистема «Префиксация объектов» подписана на события установки нового кода и номера. Программировать ничего не надо — достаточно заполнить настройки.

Где задаются префиксы:

Что настраиваетсяГде найтиНа что влияет
Префикс информационной базыАдминистрирование → Синхронизация данныхКоды справочников и номера документов, создаваемых в этой базе
Префикс организацииКарточка организации, поле «Префикс»Номера документов этой организации

Префикс организации на справочники обычно не действует. Большинство справочников с организацией не связаны, и для них важен только префикс базы. Если вы видите коды вида БП-00000123, часть до дефиса — это префикс, подставленный подсистемой.

Как поменять префикс базы :

  1. Войдите в программу под пользователем с полными правами.
  2. Откройте Администрирование → Синхронизация данных.
  3. Найдите поле префикса этой базы, введите новое значение — обычно две буквы или цифры.
  4. Сохраните и создайте тестовый элемент в нужном справочнике. Проверьте его код.

Подсистема префиксации трогает только новые коды. Уже созданные элементы останутся со старым префиксом, пока вы их не перенумеруете.

Если после смены префикса код нового элемента не изменился, значит, в конкретном справочнике подписки нет. Типовые конфигурации префиксуют не все справочники. Для такого справочника префикс придётся добавлять самостоятельно (см. раздел о программной настройке ниже).

Как перенумеровать уже созданные элементы

Ситуация: справочник ведётся годами, префикс решили ввести только сейчас. Новые элементы получают МСК-00001, а старые остались с кодами 000000417. Для единообразия старые коды нужно переписать.

Сначала решите, нужно ли это вообще. Перенумерация безопасна для связей внутри базы: документы ссылаются на элемент по ссылке, а не по коду. Но код могут использовать снаружи:

  • 📑 печатные формы и договоры, где указан код клиента;
  • 🔄 обмены, которые сопоставляют объекты по коду;
  • 🌐 сайт, склад, кассы и сканеры;
  • 📊 выгрузки и отчёты в Excel, которые бухгалтерия сверяет по коду.

Если хотя бы один пункт про вас — согласуйте перенумерацию с ответственными за эти системы.

Способы массового изменения кодов

СпособКогда подходитРиски
Ручная правка в карточкеДо 20–30 элементовОпечатки, долго
Универсальная обработка «Групповая обработка справочников и документов»Нужно без программирования, есть доступ к внешним обработкамОбработка внешняя, проверяйте версию под свою платформу
Обработка или консоль кода с методом УстановитьНовыйКодТысячи элементов, нужна предсказуемая нумерацияТребует навыков 1С-программиста

Перед массовой перенумерацией сделайте копию базы и сначала прогоните операцию на копии.

Пример кода для внешней обработки. Он выбирает элементы в порядке старых кодов и выдаёт новые с префиксом. Запускать на сервере, в монопольном режиме не обязательно, но лучше, когда в базе никто не работает :

Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	Спр.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.Контрагенты КАК Спр
	|УПОРЯДОЧИТЬ ПО
	|	Спр.Код");
Ссылки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");

НачатьТранзакцию();
Попытка
	Для Каждого Ссылка Из Ссылки Цикл
		Объект = Ссылка.ПолучитьОбъект();
		Объект.УстановитьНовыйКод("МСК-");
		Объект.Записать();
	КонецЦикла;
	ЗафиксироватьТранзакцию();
Исключение
	ОтменитьТранзакцию();
	ВызватьИсключение;
КонецПопытки;

Почему сначала массив ссылок, а не выборка с записью на ходу: при изменении кода меняется порядок сортировки, и выборка по коду может вернуть уже обработанный элемент повторно. Массив фиксирует список заранее.

Для справочника на 50 000 элементов одна транзакция может оказаться тяжёлой. Тогда записывайте порциями по 1 000–5 000 элементов, каждую в своей транзакции.

Префиксы узлов в распределённой информационной базе

В РИБ префиксы — не украшение, а защита от дублей. Центральная база и периферийные узлы создают элементы независимо, и каждый узел нумерует по своим данным. Без разных префиксов два узла почти гарантированно выдадут одинаковые коды.

Как устроено в типовых конфигурациях:

  1. При настройке синхронизации мастер просит задать префикс этой базы и префикс создаваемого узла.
  2. Префиксы должны различаться. Например, ЦБ для центральной базы и ФЛ для филиала.
  3. Каждый узел подставляет в новые коды свой префикс. Элементы, пришедшие обменом, сохраняют префикс узла-источника.

Чего не делать в РИБ:

  • ❌ Не меняйте префикс узла в разгар работы без договорённости. Новые коды пойдут с новым префиксом, старые останутся, а в отчётах появится смесь.
  • ❌ Не задавайте двум узлам одинаковый префикс. Это частая ошибка при копировании узла из резервной копии.
  • ❌ Не правьте свойства кода справочника в периферийном узле. Изменения конфигурации в РИБ вносятся только в главном узле и приходят в подчинённые с обменом.

Если узел восстановили из копии центральной базы и забыли сменить префикс, коды начнут конфликтовать после первого обмена. Смените префикс сразу после развёртывания узла, до ввода новых данных.

Ещё один нюанс — серия кодов. Если в справочнике серия «В пределах подчинения», то даже разные префиксы узлов не спасут от путаницы внутри групп. Для РИБ выбирайте серию «Во всём справочнике».

Программная настройка: подписка на событие и расширение

Писать обработчик прямо в модуле объекта неудобно в двух случаях: справочников много или конфигурация на поддержке. Есть два более аккуратных способа.

Подписка на событие

Подписка позволяет навесить один обработчик сразу на несколько справочников:

  1. В ветке Общие → Подписки на события создайте новую подписку.
  2. В поле «Источник» отметьте нужные справочники (тип СправочникОбъект.<Имя>).
  3. Событие — ПриУстановкеНовогоКода.
  4. Обработчик — экспортная процедура в общем серверном модуле.
Процедура УстановитьПрефиксКода(Источник, СтандартнаяОбработка, Префикс) Экспорт
	Префикс = Константы.ПрефиксФилиала.Получить() + "-";
КонецПроцедуры

В этом примере префикс хранится в константе ПрефиксФилиала. Её нужно создать заранее и вывести на форму настроек, чтобы администратор мог задать значение без Конфигуратора.

Расширение конфигурации

Если типовую конфигурацию снимать с поддержки нельзя, ту же подписку и общий модуль создают в расширении. Расширение подключается к базе отдельно, а основная конфигурация остаётся на поддержке и обновляется без объединения.

Порядок такой:

  1. В Конфигураторе откройте Конфигурация → Расширения конфигурации и создайте новое расширение.
  2. Заимствуйте нужный справочник.
  3. Добавьте в расширение общий модуль и подписку на событие, как описано выше.
  4. Сохраните расширение и обновите конфигурацию базы данных.

В типовой конфигурации на БСП сначала проверьте, нет ли уже подписки подсистемы префиксации на этот справочник. Две подписки на одно событие вызываются по очереди, и итоговый префикс окажется тем, который присвоили последним. Отлаживать такое неприятно.

Ошибки при работе с префиксами и что с ними делать

Ниже симптомы, которые встречаются после введения префикса или смены его значения. Выберите свой случай:

Диагностика: выберите симптом

Ещё одна ловушка — пробелы. Если префикс задали с пробелом на конце, код выглядит правильно, но поиск по коду с клавиатуры его не находит. Используйте в префиксе буквы, цифры и дефис, без пробелов.

Частые вопросы

Можно ли задать префикс для числового кода?
Нет. Числовой код хранит только цифры. Сначала смените тип кода на «Строка» в Конфигураторе и обновите структуру базы.
Влияет ли смена кода на документы, где этот элемент уже выбран?
Нет. Документы хранят ссылку на элемент, а не код. Меняется только отображение кода в списках и печатных формах.
Можно ли задать разные префиксы для групп одного справочника?
Можно в обработчике ПриУстановкеНовогоКода: проверьте реквизит Родитель и присвойте префикс по группе. Но с серией «Во всём справочнике» номера всё равно пойдут по каждому префиксу отдельно.
Сколько символов отводить под префикс?
Обычно хватает двух-трёх символов и дефиса. Длинный префикс съедает разряды номера и мешает быстро вводить код с клавиатуры.
Задаётся ли префикс для групп справочника так же, как для элементов?
Да. Обработчик вызывается и при создании группы, и группа получит код с тем же префиксом, если в обработчике не задано иначе.