К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как перемещать элементы на форме 1С

Как перемещать элементы на форме 1С в конфигураторе: перетаскивание в дереве элементов, группы, порядок обхода, программное перемещение и типичные ошибки.

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

В управляемых формах разработчик не задаёт координаты элементов напрямую — платформа сама строит интерфейс на основе дерева элементов и свойств группировки. Поэтому «переместить элемент» в 1С означает изменить его положение в дереве элементов формы или перенести его в другую группу. Понимание этого принципа избавляет от большинства ошибок, с которыми сталкиваются начинающие разработчики.

Ниже разобраны оба способа, порядок настройки групп и страниц, типичные проблемы и способы проверить результат до передачи изменений пользователям.

Как устроено расположение элементов в управляемой форме

В управляемой форме все элементы образуют иерархическое дерево: вверху находится сама форма, внутри неё — группы, страницы, поля, кнопки и таблицы. Порядок отображения на экране совпадает с порядком следования элементов в этом дереве: что выше в списке, то левее или выше на форме. Точное направление зависит от свойства «Группировка» родительской группы — вертикальная или горизонтальная.

Из-за этого классический подход «схватить мышью и перетащить на форме» в конфигураторе не работает так, как в визуальных редакторах других сред разработки. Предварительный просмотр формы в конфигураторе показывает результат, но перемещение выполняется именно в панели дерева элементов, которая обычно расположена в правой части окна редактора формы.

Перемещение элементов в конфигураторе через дерево элементов

Основной способ изменить расположение — перетаскивание в дереве элементов. Откройте нужную форму в конфигураторе (двойной щелчок по форме объекта или через пункт «Формы» в дереве конфигурации), найдите панель с деревом элементов и перетащите элемент мышью на новое место. Если перетащить элемент на группу, он попадёт внутрь неё; если между двумя элементами — займёт позицию между ними.

Альтернатива мыши — кнопки со стрелками «Вверх» и «Вниз» на командной панели дерева элементов. Они сдвигают выделенный элемент на одну позицию в пределах текущего родителя. Этот способ точнее, когда дерево большое и перетаскивание рискует попасть не в ту группу.

Для переноса элемента в другую группу без мыши используйте контекстное меню: «Переместить в группу» или вырезание (Ctrl+X) и вставка (Ctrl+V) на целевой группе. После вставки проверьте позицию — элемент встаёт в конец списка дочерних элементов группы, и его, возможно, придётся поднять стрелками.

Порядок действий в конфигураторе
  1. 1
    Откройте форму объекта в конфигураторе
  2. 2
    Найдите элемент в дереве элементов формы
  3. 3
    Перетащите его мышью на новое место или в нужную группу
  4. 4
    При необходимости уточните позицию кнопками «Вверх» и «Вниз»
  5. 5
    Сохраните форму и проверьте результат в режиме «Предприятие»

Настройка групп и страниц для правильной компоновки

Часто задача «переместить элемент» на деле означает «изменить структуру групп». Группа — это контейнер, который управляет расположением вложенных элементов. Свойство «Группировка» у обычной группы принимает значения «Вертикальная», «Горизонтальная» и «Горизонтальная всегда». Переключив это свойство, вы меняете направление вывода всех дочерних элементов без их перемещения.

Если форма перегружена, элементы распределяют по страницам. Создайте группу с видом «Страницы», внутри неё — группы с видом «Страница», и перетащите поля и таблицы в соответствующие вкладки. Перемещение между страницами выполняется тем же перетаскиванием в дереве элементов.

Полезные свойства групп: «Отображение» (рамка, слабое выделение, без отображения), «ОтображатьЗаголовок» и «СквозноеВыравнивание». Они влияют на внешний вид, но не на порядок — порядок по-прежнему задаётся только положением в дереве.

Программное перемещение элементов формы

Когда расположение должно меняться в зависимости от условий (роль пользователя, вид операции, статус документа), используют программный способ. У коллекции элементов формы есть метод Переместить(Элемент, Родитель, Место): первый параметр — перемещаемый элемент, второй — новая родительская группа, третий — элемент, перед которым нужно разместить. Если третий параметр не указан, элемент встаёт в конец.

Пример кода в модуле формы:

Элементы.Переместить(Элементы.Комментарий, Элементы.ГруппаДополнительно, Элементы.КнопкаПечать);

Программное перемещение выполняют обычно в обработчиках «ПриСозданииНаСервере» или «ПриОткрытии». Учитывайте, что на тонком и веб-клиенте динамические изменения формы вызывают обмен с сервером, поэтому массовые перемещения лучше выполнять один раз при создании формы, а не при каждом интерактивном действии пользователя.

bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Элементы.Переместить(Элементы.Комментарий, Элементы.ГруппаШапка, Элементы.Дата);
КонецПроцедуры

Порядок обхода и связанные настройки

Перемещение элемента в дереве меняет не только внешний вид, но и порядок обхода полей клавишей Tab. Если после перестановки фокус «прыгает» по форме нелогично, проверьте порядок элементов в дереве — обход идёт сверху вниз. При необходимости выстройте цепочку полей в дереве так, чтобы пользователь заполнял форму последовательно.

Дополнительно на восприятие формы влияют свойства «Ширина», «РастягиватьПоГоризонтали», «АвтоОтметкаНезаполненного» у полей и «ПоведениеПриСжатии» у групп. Если после перемещения элемент выглядит сжатым или растянутым, дело обычно в этих свойствах, а не в самом перемещении.

Контрольные точки

Как проверить результат

Положение элемента на форме
Норма

Элемент отображается в нужной группе и на нужной позиции

Тревожный признак

Элемент остался на старом месте или попал в чужую группу

Порядок обхода Tab
Норма

Фокус переходит по полям последовательно

Тревожный признак

Фокус перескакивает через поля или уходит в конец формы

Работа у пользователей
Норма

Форма открывается без ошибок у всех ролей

Тревожный признак

У части пользователей ошибки или пустые области

Типичные ошибки и ограничения

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

Вторая ошибка — программное перемещение элемента, которого нет на форме в данном контексте. Если элемент скрыт функциональной опцией или не создан, обращение Элементы.ИмяЭлемента вернёт ошибку. Перед перемещением проверяйте существование элемента.

Третья типичная ситуация — разработчик перемещает элементы в предпросмотре формы, ожидая, что это сохранится. Предварительный просмотр только показывает результат; все изменения выполняются в дереве элементов или кодом.

Типичные ошибки
01
Перетаскивание в предпросмотре формы вместо дерева элементов — изменения не сохраняются
02
Доработка типовой формы напрямую вместо расширения — сложности при обновлении конфигурации
03
Перемещение без учёта групп — элемент визуально «уезжает» в неожиданное место
04
Программное перемещение без проверки существования элемента — ошибка при открытии формы

Проверка результата и передача пользователям

После перемещения сохраните конфигурацию (или расширение) и откройте форму в режиме «Предприятие». Проверьте: элемент стоит на нужном месте, порядок обхода Tab логичен, форма не «разъезжается» при изменении размера окна. Полезно проверить форму при разном масштабе и на узком экране — горизонтальные группы могут переноситься.

Если форма открывается у пользователей с разными ролями, убедитесь, что перемещённые элементы доступны всем нужным ролям: ограничение прав на реквизит может скрыть поле, и в группе останется пустое место. В этом случае лучше перемещать элементы программно с учётом прав или настроить видимость через функциональные опции.

Итог

Что важно запомнить

Перемещение элементов формы 1С — это изменение порядка в дереве элементов и групп, а не координат. Визуально это делается перетаскиванием в конфигураторе, динамически — методом Элементы.Переместить(). Типовые формы меняйте через расширения и обязательно проверяйте результат в режиме «Предприятие».

Частые вопросы

Можно ли перемещать элементы мышью прямо на форме, как в визуальных редакторах?

В управляемых формах — нет. Платформа сама рассчитывает координаты по дереву элементов и свойствам групп. Все перемещения выполняются в дереве элементов конфигуратора или программно. В обычных формах (для старых конфигураций) свободное перетаскивание по координатам доступно.

Как поменять местами два поля на форме?

Выделите одно из полей в дереве элементов и сдвиньте его кнопками «Вверх»/«Вниз» до нужной позиции либо перетащите мышью на место второго поля. Оба поля должны находиться в одной группе — иначе сначала перенесите одно из них в группу другого.

Чем расширение лучше прямой доработки формы?

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

Почему после программного перемещения элемент не виден?

Чаще всего целевая группа скрыта (свойство «Видимость» равно Ложь) или элемент попал на неактивную страницу. Проверьте видимость родительской группы и активную страницу, а также убедитесь, что у пользователя есть права на связанный реквизит.

Как переместить кнопку в командную панель формы?

В дереве элементов найдите элемент «КоманднаяПанель» нужной группы или формы и перетащите кнопку внутрь него. Порядок кнопок внутри командной панели задаётся тем же положением в дереве — выше в дереве, левее на панели.