Разберем ситуацию, которая часто встречается у разработчиков при переходе на новые версии платформы 1С:Предприятие (начиная с 8.3.22). Вы увеличиваете длину кода или наименования справочника в расширении, в метаданных всё выглядит корректно, но при попытке ввода данных в режиме «1С:Предприятие» поле на форме всё равно «обрезает» строку по старой длине. Проанализируем причины этого поведения и найдем способы решения.
Прежде всего, нам необходимо убедиться, что используемые инструменты поддерживают данную функциональность. Возможность изменять длину стандартных реквизитов (Код, Наименование) через расширения — это относительно новая функция.
Выясним технические требования:
8.3.22. Если вы работаете на более ранних релизах, расширение просто не сможет переопределить длину поля в базе данных.8.3.22.1750, но в основной конфигурации установлен режим совместимости, например, 8.3.20, то механизмы расширений будут работать по правилам старой версии. В этом случае изменение длины реквизита через расширение не применится к физической таблице базы данных.Проанализируем ситуацию: если режим совместимости ниже необходимого, платформа будет игнорировать изменения длины в расширении, чтобы обеспечить стабильность работы основной конфигурации.
Если с платформой и режимом совместимости всё в порядке, но ввод всё равно ограничен, рассмотрим вторую частую причину — свойства элементов формы. Рассмотрим подробнее, как платформа работает с полями ввода.
Когда мы заимствуем форму в расширение, элементы управления «запоминают» настройки, которые были актуальны на момент заимствования. Рассмотрим свойства элемента формы Код:
Для решения проблемы попробуйте выполнить следующие действия в расширении:
Код из заимствованной формы в расширении и добавьте его заново из списка реквизитов. Это заставит платформу пересчитать свойства элемента на основе новой длины из расширения.Автоотметка незаполненного и другие специфические настройки в палитре свойств элемента формы.Чтобы окончательно убедиться, что проблема именно в интерфейсе (форме), а не в базе данных, выполним проверку. Попробуем установить код программно. Это позволит нам понять, расширилось ли поле в таблице SQL.
Рассмотрим пример кода для обработки или внешнего соединения:
НовоеПодразделение = Справочники.Подразделения.СоздатьЭлемент();
НовоеПодразделение.Наименование = "Тестовое подразделение";
// Пытаемся записать код длиннее старого ограничения
НовоеПодразделение.Код = "ОченьДлинныйКодКоторыйРаньшеНеВлезал";
Попытка
НовоеПодразделение.Записать();
Сообщить("Успешно записано! Новая длина кода: " + СтрДлина(НовоеПодразделение.Код));
Исключение
Сообщить("Ошибка при записи: " + ОписаниеОшибки());
КонецПопытки;
Если программная запись проходит успешно, значит, база данных приняла изменения из расширения, и проблему нужно искать исключительно в визуальном элементе формы (маски, ограничения поля ввода).
Даже если вы планируете вводить коды вручную, нельзя игнорировать механизм автонумерации 1С. Выясним причину, почему это важно. Платформа 1С хранит информацию о максимальном использованном коде для генерации следующего.
При увеличении длины кода, например с 5 до 10 символов, существующие коды (например, "00001") остаются пятизначными. Если пользователь введет вручную код "1000000001", автонумерация может начать работать некорректно или выдавать ошибки уникальности, так как она пытается сопоставить строки разной длины.
Рекомендация: После увеличения длины кода крайне желательно провести обработку «Перенумерация объектов». Это позволит привести все старые коды к новому формату (добавить ведущие нули). Без этого сортировка в списках также будет работать неверно: код "10" окажется выше кода "2", так как строковая сортировка сравнивает символы посимвольно.
Посмотрим на ситуацию со стороны сервера базы данных. При применении расширения, изменяющего длину поля, платформа выполняет команду ALTER TABLE в SQL-базе.
Рассмотрим важные нюансы:
Подведем итог. Чтобы успешно увеличить длину кода и сделать её доступной для ввода на форме, следуйте этому алгоритму:
8.3.22.Код с формы и перетащите его заново из реквизитов, чтобы сбросить жесткие ограничения ввода.ПриИзменении или ПередЗаписью), которые могли быть перенесены из типового решения.Соблюдение этих шагов обеспечит корректную работу системы и позволит пользователям использовать новую длину кода без ограничений интерфейса.