При работе с типовыми конфигурациями «1С:Предприятие 8» разработчики часто сталкиваются с ситуацией, когда стандартной длины Наименования (обычно это 25, 50 или 100 символов) или Кода справочника недостаточно для нужд бизнеса. Изменять саму конфигурацию нежелательно, так как это усложняет последующее обновление. В этой статье мы подробно разберем, как решить эту задачу с помощью механизма расширений, выясним, почему изменения могут не применяться, и рассмотрим альтернативные варианты решения проблемы.
Прежде чем приступать к техническим манипуляциям в конфигураторе, нам необходимо проанализировать самое важное ограничение — режим совместимости основной конфигурации. Многие разработчики ошибочно полагают, что достаточно установить современную платформу или изменить режим совместимости в самом расширении. Однако возможности расширения жестко ограничены настройками основной базы.
Проанализируем ключевые вехи развития платформы в этом вопросе:
1С:Бухгалтерия 3.0 или сильно кастомизированных систем.Наименование, Код) режим совместимости основной базы должен быть не ниже 8.3.15.Розница 3.0, УНФ 3.0, актуальные версии УТ 11.5), работающих на платформе 8.3.17 и выше без режима совместимости, расширения имеют максимальную свободу действий.Важный момент: Чтобы проверить этот параметр, нужно в дереве конфигурации основной базы нажать правой кнопкой на корень (имя конфигурации), выбрать «Свойства» и найти пункт Режим совместимости.
Рассмотрим алгоритм действий, который позволяет переопределить свойства реквизита в расширении. Выясним, как правильно управлять флажками свойств, чтобы платформа «увидела» изменения.
Шаг 1. Добавление объекта в расширение. Находим нужный справочник (например, Номенклатура) в основной конфигурации, нажимаем правую кнопку мыши и выбираем команду «Добавить в расширение».
Шаг 2. Настройка свойств. Открываем палитру свойств справочника уже внутри расширения. Нас интересуют поля Длина наименования или Длина кода.
Шаг 3. Управление состояниями флажка. В окне свойств расширения флажок рядом со свойством имеет три состояния. Разберем их подробнее:
Чтобы изменение «взлетело», попробуйте нажимать на флажок несколько раз, пока не добьетесь состояния, при котором значение длины становится доступным для редактирования и визуально помечается как измененное (обычно жирным шрифтом или специальной пиктограммой). После этого введите новое значение (например, увеличьте со 100 до 150).
При работе с расширением структуры данных следует помнить о нескольких критических правилах:
1. Только увеличение. Платформа позволяет через расширение только увеличивать длину. Попытка уменьшить длину поля (например, с 50 до 30) будет проигнорирована или вызовет ошибку при попытке обновления конфигурации базы данных. Это сделано для защиты от случайной потери данных (обрезания строк).
2. Реструктуризация таблиц. Изменение длины стандартного поля — это не просто смена настройки, а полноценная операция ALTER TABLE на уровне SQL-сервера. Если в вашем справочнике Номенклатура миллионы записей, применение расширения может занять длительное время. В этот момент системе может потребоваться монопольный доступ к таблице.
3. Влияние на индексы и уникальность. Если вы увеличиваете Длину кода, помните, что это может затронуть механизмы автоматической нумерации и перестроение индексов, что также влияет на производительность при записи новых объектов.
Если режим совместимости основной конфигурации не позволяет менять длину напрямую (например, база стоит на 8.3.12), или если стандартный механизм по каким-то причинам дает сбой, мы рекомендуем использовать проверенный метод «дополнительного реквизита».
Разберем этот метод по шагам:
Доп_НаименованиеПолное с типом Строка и нужной нам длиной (допустим, 500 символов).Наименование можно скрыть или оставить только для системных нужд.Наименование. Это обеспечит корректную работу всех типовых отчетов и механизмов поиска.Пример реализации в модуле объекта (через расширение):
&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
// Синхронизируем длинное наименование со стандартным
// Для совместимости обрезаем до максимально допустимой длины в основной базе
ДлинаСтандартногоПоля = Метаданные().СтандартныеРеквизиты.Наименование.Тип.КвалификаторыСтроки.Длина;
Наименование = Лев(Доп_НаименованиеПолное, ДлинаСтандартногоПоля);
КонецПроцедуры
Этот способ является максимально безопасным, так как он не затрагивает критические структуры данных основной конфигурации и гарантирует, что при обновлении платформы или самой конфигурации ваши данные не пострадают.
После внесения изменений в расширение и успешного применения конфигурации базы данных, обязательно выполните следующие действия:
Таким образом, мы выяснили, что увеличение длины через расширение — задача вполне решаемая, если учитывать технические ограничения платформы и правильно использовать инструменты настройки свойств объектов.