При разработке расширений в системе 1С:Предприятие 8.3 программисты часто сталкиваются с необходимостью кастомизации существующих объектов метаданных. Одной из самых частых задач является изменение длины строкового реквизита. Казалось бы, задача тривиальная, но на практике пользователи часто обнаруживают, что нужные поля заблокированы для редактирования или вовсе отсутствуют в палитре свойств. В этой статье мы подробно разберем, как преодолеть эти ограничения, настроить режим совместимости и избежать потери данных.
Прежде всего, разберем базовое действие. Для того чтобы иметь возможность изменять свойства реквизита (например, длину строки), его необходимо «заимствовать» из основной конфигурации в расширение. Рассмотрим, как это происходит:
После этого объект появится в дереве метаданных вашего расширения. Однако, открыв его свойства, вы можете заметить, что поле Длина отсутствует или недоступно для прямого изменения в основной палитре свойств.
Проанализируем ситуацию: почему в палитре свойств реквизита в расширении мы не видим привычного поля для ввода числа? В расширениях работа с типами данных организована через отдельное диалоговое окно. Выясним, как туда попасть:
В палитре свойств заимствованного реквизита найдите строку «Тип». Рядом со значением типа вы увидите кнопку с тремя точками (эллипсис). Нажмите на нее. Перед вами откроется окно «Редактирование типа данных».
Именно в этом окне сосредоточены все настройки длины, точности и допустимых символов. Если реквизит является строковым, здесь вы увидите поле Длина. Однако часто бывает так, что это поле отображается серым цветом и недоступно для изменения. Рассмотрим подробнее, почему это происходит.
Основная причина, по которой платформа блокирует изменение свойств заимствованных объектов, кроется в настройках режима совместимости расширения. Разберем технические требования платформы:
Проанализируем алгоритм изменения режима совместимости:
Режим совместимости.Важное правило: Режим совместимости расширения не может быть выше режима совместимости основной конфигурации. Если основная конфигурация работает в режиме 8.3.14, вы не сможете полноценно менять длину реквизитов в расширении, так как повышение режима до 8.3.18 в расширении приведет к тому, что оно просто не запустится в режиме «Предприятие».
Рассмотрим риски, связанные с изменением длины строки. Здесь важно понимать, как 1С взаимодействует с системой управления базами данных (СУБД):
Увеличение длины: Процедура считается безопасной. Платформа подает команду СУБД на расширение поля в таблице. Существующие данные не затрагиваются, а пользователи получают возможность вводить более длинные значения.
Уменьшение длины: Это критическая операция. Посмотрим на пример: если в базе уже хранятся строки длиной 100 символов, а вы в расширении устанавливаете длину 50, то при применении конфигурации базы данных произойдет безвозвратная обрезка данных. Платформа выдаст предупреждение о реструктуризации. Никогда не игнорируйте это сообщение без предварительного бэкапа!
Выясним, какие ограничения накладываются на специфические поля:
Наименование и Код в справочниках через расширение может работать нестабильно. Это связано с тем, что на эти поля часто завязаны механизмы автонумерации и уникальности. Если вам крайне необходимо изменить их длину, делайте это осторожно и тщательно тестируйте функционал записи объектов.Индексировать, то любое изменение его длины приведет к полной перестройке индекса в SQL-таблице. На больших объемах данных (миллионы записей) это может вызвать длительный простой системы.Представим ситуацию: вы успешно изменили длину реквизита в метаданных расширения с 10 до 50 символов. Но при запуске программы в поле ввода на форме все равно нельзя ввести больше 10 знаков. Проанализируем причину:
Это происходит потому, что в свойствах конкретного элемента формы (поля ввода) может быть жестко прописано ограничение. Чтобы решить эту проблему, выполните следующие действия:
Максимальная длина. Обычно там стоит 0 (что означает использование длины из метаданных), но иногда там может быть указано фиксированное число.Автоотметка незаполненного или другие форматные настройки не препятствуют вводу новых данных.Иногда программисту требуется программно проверить, какая длина строки установлена для реквизита с учетом расширения. Для этого мы используем объект Метаданные. Посмотрим на пример кода:
// Получаем описание типа реквизита "Комментарий" справочника "Контрагенты"
ОписаниеТипа = Метаданные.Справочники.Контрагенты.Реквизиты.Комментарий.Тип;
// Извлекаем квалификаторы строки
КвалификаторыСтроки = ОписаниеТипа.КвалификаторыСтроки;
// Выводим текущую длину в сообщение
Сообщить("Текущая длина реквизита: " + КвалификаторыСтроки.Длина);
Этот код поможет вам убедиться, что расширение успешно применилось и платформа «видит» обновленные метаданные.
Подводя итог, кратко сформулируем правила работы с длиной реквизитов в расширениях:
Соблюдение этих несложных правил позволит вам гибко настраивать конфигурацию под нужды бизнеса, не внося изменений в основную ветку разработки и сохраняя возможность легкого обновления типовых решений.