При разработке расширений или доработке типовых конфигураций 1С часто возникает необходимость программно добавлять реквизиты на управляемую форму. Однако нередко после добавления нового поля интерфейс формы «разъезжается»: родительские группы или таблицы увеличивают свою ширину, из-за чего на экране появляется нежелательный горизонтальный скролл. Давайте разберемся, почему это происходит и как правильно управлять размерами элементов.
Когда мы добавляем новый элемент через программный код, платформа 1С пытается автоматически пересчитать геометрию формы, чтобы новый объект корректно вписался в существующую структуру. Если родительским элементом является таблица или группа с установленными правилами размещения, система может изменить ширину соседних колонок, чтобы освободить место. Чаще всего проблема кроется в том, что соседние колонки или сам новый элемент имеют установленное свойство РастягиватьПоГоризонтали в значении Истина (или по умолчанию). В этом случае элемент стремится занять всё доступное пространство, что и приводит к появлению прокрутки.
Для того чтобы вернуть прежние размеры родительского элемента и предотвратить «раздувание» формы, воспользуемся следующей стратегией настройки свойств элементов.
РастягиватьПоГоризонтали: Это самый эффективный способ зафиксировать ширину колонок. Если после добавления элемента вы видите, что соседние колонки необоснованно расширяются, принудительно отключите для них автоматическое растяжение.РастягиватьПоГоризонтали = Ложь, если вы не хотите, чтобы оно влияло на ширину всей таблицы.ДеревоЦен), следите за тем, в какую группу или коллекцию вы добавляете новый объект.Рассмотрим, как правильно реализовать добавление реквизита, чтобы сохранить стабильность интерфейса. В следующем примере мы добавим поле ввода в таблицу формы и сразу настроим его параметры:
мНовыеРеквизиты = Новый Массив;
пНовыйРеквизит = Новый РеквизитФормы("РеквизитКорректор",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)),
"ДеревоЦен", "Корректор");
мНовыеРеквизиты.Добавить(пНовыйРеквизит);
ЭтаФорма.ИзменитьРеквизиты(мНовыеРеквизиты);
пНовыйЭлемент = Элементы.Добавить("Расш1_Корректор", Тип("ПолеФормы"), Элементы.ДеревоЦен);
пНовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
пНовыйЭлемент.ПутьКДанным = "ДеревоЦен.РеквизитКорректор";
// Важный шаг: отключаем автоматическое растяжение, чтобы не портить верстку
пНовыйЭлемент.РастягиватьПоГоризонтали = Ложь;
Если вы заметили, что даже после добавления нового поля соседние колонки (например, колонка «Артикул») продолжают расширяться, необходимо явно обратиться к этим элементам и ограничить их поведение. Пройдитесь по элементам таблицы и примените к ним настройки:
// Пример фиксации соседней колонки
ЭлементАртикул = Элементы.Найти("ДеревоЦенАртикул");
Если ЭлементАртикул <> Неопределено Тогда
ЭлементАртикул.РастягиватьПоГоризонтали = Ложь;
КонецЕсли;
Помимо указанных выше приемов, обратите внимание на следующие рекомендации, которые помогут избежать проблем с визуальным отображением формы:
Ширина. Например, пНовыйЭлемент.Ширина = 10;. Это заставит платформу придерживаться заданного размера в символах.Группировка у родительской группы. Если оно установлено в значение Горизонтальная, добавление каждого нового элемента будет увеличивать ширину группы на его размер. В сложных интерфейсах иногда выгоднее использовать Вертикальную группировку для дочерних элементов, если места по горизонтали недостаточно.Применяя эти методы, вы сможете точно контролировать расположение элементов на управляемой форме 1С, обеспечивая удобство пользователей и сохраняя эстетику интерфейса без появления ненужных полос прокрутки.