Как увеличить длину кода справочника в расширении 1С:Предприятие 8.3

Программист 1С v8.3 (Управляемые формы)
← На главную

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

Проверка системных требований и режима совместимости

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

  1. Версия платформы: Возможность изменения длины стандартных реквизитов (таких как Код и Наименование) появилась в платформе начиная с версии 8.3.12.
  2. Режим совместимости: Это критически важный параметр. Даже если у вас установлена последняя версия платформы, но в свойствах основной конфигурации установлен РежимСовместимости ниже 8.3.12 (например, 8.3.10), платформа заблокирует попытку изменить физическую структуру таблиц.
  3. Тип расширения: В свойствах самого расширения должна быть снята галочка ИспользуетсяТолькоДляИсправления. Если этот флаг установлен, расширение будет считаться "патчем", который не может вносить изменения в структуру данных (создавать таблицы, менять длину полей и т.д.).

Пошаговая инструкция по изменению длины кода

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

Шаг 1. Добавление объекта в расширение. В дереве объектов основной конфигурации найдем нужный справочник, нажмем на него правой кнопкой мыши и выберем пункт "Добавить в расширение". Убедитесь, что справочник перенесся со всеми необходимыми свойствами.

Шаг 2. Изменение свойства. Откроем палитру свойств справочника уже внутри расширения. Найдем поле ДлинаКода и установим требуемое значение (например, увеличим с 3 до 10 символов). На этом этапе многие сталкиваются с проблемой: при попытке обновить конфигурацию базы данных (F7) система выдает ошибку: "Значение контролируемого свойства ДлинаКода у объекта не совпадает со значением в расширяемой конфигурации".

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

Реструктуризация базы данных и монопольный режим

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

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

Обратите внимание: Увеличить длину кода можно, но уменьшить её относительно значения в основной конфигурации платформа не позволит. Это логично, так как уменьшение длины может привести к потере данных (обрезанию значащих символов кода), что недопустимо для целостности системы.

Особенности нумерации и префиксации

Выясним причину, по которой простого увеличения длины поля иногда бывает недостаточно для корректной работы. В 1С используется механизм автоматической генерации кодов. Рассмотрим ситуацию на примере:

Если старая длина кода была 3 символа и последний номер был "999", то после увеличения длины до 5 символов следующий код может автоматически сформироваться как "1000". Однако, если в кодах используются префиксы (например, "УТ-001"), изменение длины может потребовать пересмотра логики префиксации. В некоторых случаях после изменения длины в расширении требуется программно вызвать процедуру ОбновитьПовторноИспользуемыеЗначения() или вручную перенумеровать существующие записи, чтобы автонумерация подхватила новый диапазон.

Для программной проверки текущей длины кода в контексте расширения мы можем использовать следующий код:


// Пример получения длины кода программно
МетаданныеСправочника = Справочники.СтраныМира.Метаданные();
ДлинаКодаОбъекта = МетаданныеСправочника.ДлинаКода;
Сообщить("Текущая длина кода справочника: " + ДлинаКодаОбъекта);

Риски и рекомендации при использовании расширений для структуры данных

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

  1. Обмен данными: Если ваша база участвует в обмене (РИБ или синхронизация через Универсальный формат), изменение длины кода только в одной базе приведет к критическим ошибкам. Данные с длинным кодом просто не "пролезут" в приемник, где длина осталась старой. Необходимо синхронно применять расширение во всех узлах распределенной системы.
  2. Обновление конфигурации: При выходе официального обновления от поставщика (например, фирмы 1С), если разработчик тоже решит изменить длину кода в основной конфигурации, возникнет конфликт. При обновлении через "Сравнение/Объединение" нужно будет внимательно проверить настройки расширения, чтобы они не затирали новые стандарты поставщика.
  3. Несколько расширений: Если у вас подключено несколько расширений, меняющих один и тот же справочник, платформа применит максимальное значение длины кода из всех активных расширений. Мы рекомендуем избегать таких ситуаций и вносить изменения в структуру данных только в одном, "базовом" расширении, чтобы не запутаться в приоритетах.

Подводя итог, можно сказать, что механизм расширений предоставляет мощный инструмент для кастомизации системы без снятия с поддержки. Главное — помнить про настройку режима контроля свойств ("две кавычки") и учитывать необходимость монопольного доступа при обновлении базы данных.

← На главную