Как убрать префикс и восстановить правильную нумерацию в справочнике банковских счетов в 1С?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

Почему платформа продолжает подставлять префикс в новые элементы

Проанализируем логику работы встроенного механизма автонумерации платформы 1С. При формировании нового кода или номера объекта система определяет следующее значение, анализируя максимальный существующий код в соответствующей таблице базы данных. Код справочника хранится в виде строки фиксированной длины.

С точки зрения строкового сравнения символы алфавита (включая буквы кириллицы) располагаются в таблице кодировки после цифр. Таким образом, код БП00000001 считается платформой строго «старше», чем чисто числовой код с ведущими нулями 0000000099. Если в информационной базе остается хотя бы один элемент с префиксом БП, платформа берет его за основу, прибавляет единицу к числовой части и продолжает генерировать коды с буквами. По этой причине простое отключение синхронизации или удаление префикса в настройках обмена не возвращает старую нумерацию автоматически.

Проверяем все возможные источники префиксов

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

  1. Префикс информационной базы: убедимся, что константа префикса узла или базы данных полностью очищена. В обычном интерфейсе конфигурации «Бухгалтерия предприятия 2.0» откроем меню «Сервис» — «Настройка программы» и проверим отсутствие буквенных символов в поле префикса.
  2. Префикс организации: в справочнике Организации откроем карточки всех юридических лиц и индивидуальных предпринимателей. На вкладке основных сведений проверим реквизит Префикс. Если туда ошибочно внесли буквы «БП», их необходимо удалить, так как этот реквизит добавляется ко всем номерам и подчиненным справочникам конкретной организации.
  3. План обмена («Этот узел»): если синхронизация настраивалась через типовой механизм планов обмена, откроем список узлов плана обмена. В предопределенном элементе, обозначающем текущую информационную базу (отмечен специальным значком с зеленой точкой), реквизиты Код или Префикс также не должны содержать старых обозначений.

Особенности справочника банковских счетов и отображение поля кода

Справочник БанковскиеСчета обладает рядом специфических особенностей, из-за которых пользователи испытывают затруднения при попытке исправить нумерацию:

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

Поиск ошибочных элементов и требования к длине кода

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	БанковскиеСчета.Ссылка КАК Ссылка,
    |	БанковскиеСчета.Код КАК Код,
    |	БанковскиеСчета.Владелец КАК Владелец
    |ИЗ
    |	Справочник.БанковскиеСчета КАК БанковскиеСчета
    |ГДЕ
    |	БанковскиеСчета.Код ПОДОБНО ""БП%""";

РезультатЗапроса = Запрос.Выполнить();

Важное правило платформы: при ручном изменении или программной перезаписи кода критически важно строго сохранять общую длину строки, заданную в метаданных справочника. Если просто стереть первые две буквы «БП» и записать оставшийся короткий номер, строка сместится влево, а справа или слева возникнут пробелы. Это окончательно разрушит строковую автонумерацию. Код всегда должен дополняться ведущими нулями слева до исходной длины (например, правильный вид — 000000001).

Программное исправление кодов и сброс кэша нумератора

Для исправления можно использовать типовую внешнюю обработку «Перенумерация кодов справочников» с диска ИТС или выполнить групповую обработку. Если необходимо решить задачу программно, напишем процедуру, которая обнулит префиксные коды, назначит корректные новые значения и сбросит кэш автонумератора.

Рассмотрим пример кода внешней обработки:


Выборка = Справочники.БанковскиеСчета.Выбрать();

Пока Выборка.Следующий() Цикл
    ТекущийКод = СокрЛП(Выборка.Код);
    Если Лев(ТекущийКод, 2) = "БП" Тогда
        ОбъектСчета = Выборка.ПолучитьОбъект();
        // Очищаем ошибочный код перед назначением нового
        ОбъектСчета.Код = "";
        // Метод платформы вычисляет правильный следующий код
        ОбъектСчета.УстановитьНовыйКод();
        ОбъектСчета.Записать();
    КонецЕсли;
КонецЦикла;

// Сбрасываем внутренний счетчик платформы для справочника банковских счетов
ОбновитьНумерациюОбъектов(Метаданные.Справочники.БанковскиеСчета);

Обратим внимание на метод ОбновитьНумерациюОбъектов(). Платформа 1С кэширует последний выданный номер в оперативной памяти текущего сеанса. Если просто переименовать объекты в базе данных, сеанс может продолжать выдавать старые значения из памяти. Вызов процедуры ОбновитьНумерациюОбъектов() с передачей объекта метаданных сбрасывает этот кэш и принудительно заставляет платформу перечитать максимальный код из физической таблицы базы данных.

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

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

← На главную