Как выровнять реквизит типа ТаблицаЗначений или СписокЗначений с заголовком слева на управляемой форме 1С?

Программист 1С v8.3 (Управляемые формы)
← На главную

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

Особенности управляемых форм и их влияние на выравнивание

Платформа 1С в управляемых формах реализует концепцию адаптивной верстки. Это означает, что система берет на себя значительную часть работы по компоновке элементов, автоматически подстраивая их размеры и расположение под различные разрешения экранов, системные параметры рабочей станции или браузера. Разработчик, таким образом, имеет ограниченный функционал по непосредственному регулированию размеров и привязок элементов. Мы не можем "жестко" задать координаты элемента, как это было в обычных формах. Вместо этого мы оперируем свойствами, которые влияют на *правила* компоновки, а не на абсолютное положение.

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

Группировка как основной инструмент выравнивания

Для эффективного выравнивания элементов на управляемой форме ключевую роль играют группы. Мы активно используем группировку для управления компоновкой элементов, что позволяет нам упорядочивать их, визуально выделять и применять общие правила выравнивания. Давайте рассмотрим, как мы можем использовать группы:

  1. Вид группировки: Мы можем использовать различные виды группировок, такие как Горизонтальная (элементы располагаются слева направо), Вертикальная (элементы располагаются сверху вниз), ОбычнаяГруппа, Страницы и другие. Для выравнивания реквизитов типа таблиц, которые часто занимают значительное пространство, нам потребуется тщательно продумать структуру групп.

  2. Свойства выравнивания внутри группы: У каждой группы есть ряд свойств, которые влияют на расположение содержащихся в ней элементов. Наиболее важные из них:

    • Выравнивание (для элементов внутри группы): определяет, как элементы будут выравниваться относительно друг друга (например, по левому краю, по центру).

    • ГоризонтальноеПоложение / ВертикальноеПоложение: позволяют нам управлять размещением самой группы или ее содержимого.

    • РастягиватьПоГоризонтали / РастягиватьПоВертикали: эти свойства очень важны для "резиновых" форм, так как они позволяют элементам занимать доступное пространство при изменении размеров формы.

    Для выравнивания реквизитов типа ТаблицаЗначений или СписокЗначений с заголовком слева, мы можем попробовать разместить заголовок и сам элемент в разных группах, выровненных по горизонтали. Например, создать горизонтальную группу, в левой части которой разместить надпись-заголовок, а в правой — элемент ТаблицаЗначений. Однако, это будет лишь имитация заголовка элемента, а не его внутреннее свойство.

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

    Однако, как показала практика автора, для ТаблицаЗначений с заголовком слева, даже этот метод не всегда дает желаемый результат, поскольку платформа может иметь специфические правила отображения для таких элементов.

  4. Не используем декорации для выравнивания: Важно помнить, что декорации (элементы типа Декорация) предназначены для визуального оформления (линии, картинки, надписи), а не для управления компоновкой элементов. Для выравнивания мы всегда должны использовать свойства групп.

Стандарты компоновки заголовков

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

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

Ограничения заголовков в табличных элементах

Мы выясняем, что заголовки элементов, подчиненных таблице управляемой формы (то есть, колонки таблицы), могут не поддерживать динамический перенос текста, автоматическое изменение размера и другие возможности оформления, которые доступны для заголовков обычных полей ввода. Это может быть одной из фундаментальных причин, почему стандартные средства выравнивания для заголовка всего элемента ТаблицаЗначений, расположенного слева, работают некорректно. Платформа, возможно, не предоставляет такого же гибкого контроля над заголовком *всего элемента*, как над заголовками отдельных колонок или над заголовками простых полей.

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

Альтернативные подходы для сложных случаев

Если стандартные средства выравнивания и группировки не дают желаемого результата, особенно для такого нестандартного расположения заголовка, как "Лево" для ТаблицыЗначений, мы можем рассмотреть более глубокое управление отображением. Эти подходы требуют больше усилий в разработке, но предоставляют максимальный контроль.

1. Макеты табличного документа

Для элементов, представляющих табличные данные, мы можем использовать макеты табличного документа. Этот подход позволяет нам:

  1. Создать макет: В конфигураторе мы создаем новый макет типа "Табличный документ".

  2. Разместить элементы: В ячейках макета мы размещаем необходимые элементы: надписи для заголовков, параметры для вывода данных. Мы можем настроить выравнивание текста в ячейках, их размеры, границы и другие свойства, используя привычные средства табличного документа.

  3. Программно заполнять макет: Затем мы программно заполняем табличную часть данными, используя этот макет. Мы выводим области макета (например, область заголовка, область данных) и заполняем их параметрами.

  4. Вывести на форму: Полученный табличный документ мы выводим на форму с помощью элемента формы ПолеТабличногоДокумента.

Такой подход дает нам полный контроль над внешним видом таблицы, включая расположение заголовка (который в этом случае будет просто обычной надписью в ячейке макета) и ее содержимого. Мы можем разместить заголовок слева от области данных, используя структуру макета. Рассмотрим концептуальный пример кода для такого подхода:


&НаКлиенте
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Создаем новый табличный документ
    ТабДок = Новый ТабличныйДокумент;

    // Получаем макет из текущего объекта (например, отчета или обработки)
    Макет = ПолучитьМакет("МойМакетТаблицы");

    // Получаем области макета
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьСтрокаДанных = Макет.ПолучитьОбласть("СтрокаДанных");

    // Заполняем заголовок (который может быть размещен в макете слева от данных)
    // Например, если макет состоит из двух колонок: слева - заголовок, справа - данные
    ОбластьЗаголовок.Параметры.Заголовок = "Мои данные:";
    ТабДок.Вывести(ОбластьЗаголовок);

    // Пример данных
    ДанныеДляТаблицы = Новый ТаблицаЗначений;
    ДанныеДляТаблицы.Колонки.Добавить("Колонка1");
    ДанныеДляТаблицы.Колонки.Добавить("Колонка2");
    ДанныеДляТаблицы.Добавить().Колонка1 = "Значение 1"; ДанныеДляТаблицы.Добавить().Колонка2 = "Значение А";
    ДанныеДляТаблицы.Добавить().Колонка1 = "Значение 2"; ДанныеДляТаблицы.Добавить().Колонка2 = "Значение Б";

    // Заполняем строки данных
    Для Каждого СтрокаТЗ Из ДанныеДляТаблицы Цикл
        ОбластьСтрокаДанных.Параметры.Колонка1 = СтрокаТЗ.Колонка1;
        ОбластьСтрокаДанных.Параметры.Колонка2 = СтрокаТЗ.Колонка2;
        ТабДок.Вывести(ОбластьСтрокаДанных);
    КонецЦикла;

    // Присваиваем готовый табличный документ элементу формы
    Элементы.ПолеТабличногоДокументаНаФорме.УстановитьДокумент(ТабДок);
КонецПроцедуры

В этом примере "МойМакетТаблицы" будет содержать структуру, где мы можем явно указать, где располагаются заголовки и где данные, и как они выравниваются.

2. Программное управление свойствами ячеек

Если мы уже используем макет табличного документа, мы можем еще более тонко настраивать его, программно управляя свойствами отдельных ячеек. Это позволяет нам динамически изменять выравнивание, шрифты, цвета и другие параметры в зависимости от данных или условий. Мы можем использовать свойства объекта Ячейка, такие как ГоризонтальноеПоложение, ВертикальноеПоложение, Текст, Ширина, Высота для достижения максимально точного отображения.

Рекомендации по пересмотру дизайна формы

Учитывая, что ТаблицаЗначений с заголовком слева является нетипичным сценарием, который вызывает сложности с автоматической компоновкой платформы, мы настоятельно рекомендуем пересмотреть дизайн формы. Возможно, стоит рассмотреть следующие варианты:

  1. Использование стандартного расположения заголовка: Чаще всего для табличных элементов заголовок располагается сверху. Это естественное и поддерживаемое платформой поведение, которое упрощает разработку и улучшает читаемость.

  2. Перекомпоновка элементов с использованием нескольких групп: Если нам критически важно, чтобы заголовок находился слева, мы можем создать сложную структуру из нескольких групп. Например, одну вертикальную группу, в которой будет находиться строка с заголовком (как обычной надписью) и ниже – сам табличный элемент. Или горизонтальную группу, где слева будет группа с надписью, а справа – таблица.

  3. Использование декорации для надписи-заголовка: В крайнем случае, если заголовок является чисто декоративным элементом, который не связан напрямую с функциональностью таблицы, мы можем использовать элемент Декорация типа Надпись и разместить его рядом с таблицей. Однако, как мы уже говорили, это не позволит динамически управлять заголовком как частью элемента ТаблицаЗначений.

В итоге, хотя управляемые формы предоставляют множество возможностей для создания гибких и адаптивных интерфейсов, для нестандартных требований, таких как левосторонний заголовок для ТаблицаЗначений, нам, возможно, придется прибегнуть к более сложным программным решениям с использованием макетов или пересмотреть подход к проектированию интерфейса, чтобы следовать стандартным практикам платформы 1С.

← На главную