Как получить имена атрибутов многострочной части документа в 1С 7.7 с помощью FormEx?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Общая проблема и начальные подходы к получению атрибутов формы

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


ФормаРасш = СоздатьОбъект("РасширениеФормы");
ФормаРасш.УстановитьФорму(Форма);
Для Х = 0 По ФормаРасш.КоличествоАтрибутов() - 1 Цикл
    текИД = ФормаРасш.ПолучитьАтрибут(Х).Идентификатор;
    текТип = ФормаРасш.ПолучитьАтрибут(Х).Тип;
КонецЦикла;

Этот код действительно позволяет нам получить идентификаторы (имена) и типы всех атрибутов, присутствующих на форме. Однако наша задача состоит в том, чтобы выделить из этого общего списка только атрибуты, относящиеся к многострочной части. Как мы можем это сделать, опираясь на доступные свойства атрибутов?

Решение с использованием прямых методов FormEx (актуальные версии)

Для более новых версий компоненты FormEx (начиная, например, с версии 2.0.5.166), разработчики предусмотрели специализированные методы, которые значительно упрощают работу с колонками многострочной части. Это наиболее рекомендуемый и эффективный способ получения имен атрибутов многострочной части. Давайте разберем эти методы.

Ключевыми методами объекта РасширениеФормы, которые нам помогут, являются:

  1. ПолучитьКоличествоКолонокМногострочнойЧасти(): Этот метод возвращает общее количество колонок, присутствующих в многострочной части документа. Это позволяет нам точно определить диапазон для перебора.
  2. ПолучитьИДКолонкиМногострочнойЧасти(НомерКолонки): Используя индекс (или номер) колонки, этот метод позволяет нам получить её идентификатор, то есть имя атрибута, которое мы ищем.

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


РасширениеФормы = СоздатьОбъект("РасширениеФормы");
РасширениеФормы.УстановитьФорму(Форма);
Для НомерКолонки = 1 По РасширениеФормы.ПолучитьКоличествоКолонокМногострочнойЧасти() Цикл
    // Метод ПолучитьИДКолонкиМногострочнойЧасти принимает номер колонки, начиная с 1.
    // Если требуется индекс, начинающийся с 0, необходимо корректировать.
    // Однако, согласно документации и практике, номер колонки обычно с 1.
    ИДКолонки = РасширениеФормы.ПолучитьИДКолонкиМногострочнойЧасти(НомерКолонки);
    Сообщить("Колонка № " + НомерКолонки + " = " + ИДКолонки);
    // Теперь переменная ИДКолонки содержит имя атрибута многострочной части.
    // Мы можем использовать его для дальнейшей работы, например, для раскраски:
    // РасширениеФормы.УстановитьЦветФонаКолонкиМногострочнойЧасти("МногострочнаяЧасть", ИДКолонки, 255, 0, 0); // Пример
КонецЦикла;

Важное замечание: При попытке использовать эти методы в старых версиях FormEx (например, 2.0.5.93), мы можем столкнуться с ошибкой: "Поле агрегатного объекта не обнаружено (ПолучитьКоличествоКолонокМногострочнойЧасти)". Эта ошибка прямо указывает на то, что используемая версия компоненты не содержит необходимых методов. В такой ситуации нам необходимо обновить компоненту FormEx до более новой версии, например, 2.0.5.166, 2.0.5.175 или актуальной 2.0.5.198. После обновления, как показывает практика, код начинает работать корректно.

Мы можем найти актуальные версии FormEx и сопроводительную документацию (часто в виде als-файла, который содержит описание всех методов) на ресурсах, таких как "Кладовочка АЛьФ'а" (например, dorex.pro). Всегда убеждаемся, что работаем с самой свежей и стабильной версией компоненты, чтобы иметь доступ ко всем заявленным возможностям и исправлениям.

Альтернативный косвенный метод (фильтрация общих атрибутов формы)

Если по каким-либо причинам мы не можем обновить FormEx до версии, поддерживающей прямые методы для работы с многострочной частью, или нам нужен более универсальный подход, позволяющий перебирать все атрибуты формы, а затем фильтровать их, мы можем использовать косвенный метод. Этот подход основан на анализе свойств каждого атрибута.

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

Посмотрим на пример кода, реализующий этот подход:


ФормаРасш = СоздатьОбъект("РасширениеФормы");
ФормаРасш.УстановитьФорму(Форма);
Для Х = 0 По ФормаРасш.КоличествоАтрибутов() - 1 Цикл
    ТекАтрибут = ФормаРасш.ПолучитьАтрибут(Х);
    // Проверяем свойство Дескриптор. Если оно равно 0, это может указывать на атрибут многострочной части.
    // Важно: этот признак может быть не универсальным для всех версий FormEx или типов форм.
    Если ТекАтрибут.Дескриптор = 0 Тогда
        Сообщить("Обнаружен атрибут многострочной части (возможно): " + ТекАтрибут.Идентификатор);
        // Здесь мы можем добавить полученный идентификатор в список или выполнить другие действия.
    КонецЕсли;
КонецЦикла;

При использовании этого косвенного метода важно понимать, что признак Дескриптор = 0 может быть не абсолютно универсальным для всех типов атрибутов многострочной части или для всех версий FormEx. Тем не менее, это может быть рабочим обходным путем, если прямые методы недоступны.

Дополнительная информация и полезные советы по FormEx

Компонента FormEx представляет собой мощный инструмент для расширения функционала 1С:Предприятия 7.7. Давайте обсудим некоторые её возможности и нюансы, которые могут быть полезны в контексте работы с формами и их элементами.

Расширенные возможности FormEx:

FormEx значительно расширяет стандартные возможности работы с интерфейсом 1С 7.7. Мы можем:

  1. Раскрашивать табличные части и списки значений: Это одна из наиболее часто используемых функций FormEx, позволяющая визуально выделять строки или ячейки по определенным условиям, что улучшает читаемость и удобство работы пользователя.
  2. Управлять положением и видимостью колонок: Мы можем программно скрывать, показывать или изменять порядок колонок в табличных частях и списках. Это особенно полезно для адаптации интерфейса под различные роли пользователей или для динамической настройки отображения данных. В более новых версиях FormEx работа с видимостью колонок для многострочной части была значительно улучшена и теперь функционирует корректно.
  3. Отключать/включать флаг автоширины: FormEx предоставляет контроль над автоматическим изменением ширины колонок, что позволяет нам более точно настраивать внешний вид табличных частей.
  4. Программно изменять размеры многострочной части: Компонента позволяет не только работать с отдельными колонками, но и изменять размеры самой многострочной части документа, обращаясь к соответствующему атрибуту формы.

Документация и версии FormEx:

Как мы уже выяснили, версия FormEx играет критическую роль в доступности тех или иных методов. Актуальная документация по FormEx, которая включает описание всех методов и их параметров, часто поставляется в комплекте с компонентой в виде als-файла (например, FormEx.als). Мы можем открыть этот файл в текстовом редакторе или специализированной утилите для просмотра всех доступных функций. Кроме того, информация и новые версии часто публикуются на специализированных ресурсах, таких как "Кладовочка АЛьФ'а". Всегда обращаемся к официальным источникам для получения самой точной информации.

Недокументированные возможности и объект "Информатор":

В мире разработки на 1С 7.7 и 1С++ (в которую было интегрировано ядро FormEx до определенных версий) существует концепция "недокументированных" возможностей. Иногда полезные методы могут быть не описаны в основной документации. В среде 1С++ для обнаружения таких "секретных" методов существует специальный объект — Информатор. Мы можем использовать его для получения списка всех доступных методов и свойств для любого объекта, включая объекты FormEx. Это может быть полезным инструментом для исследования и расширения наших знаний о компоненте.

Подведем итог:

Мы выяснили, что для успешной работы с FormEx и получения имен атрибутов многострочной части документа в 1С 7.7 критически важно использовать актуальную версию компоненты. Прямые методы, такие как ПолучитьКоличествоКолонокМногострочнойЧасти() и ПолучитьИДКолонкиМногострочнойЧасти(), являются наиболее удобными и рекомендуемыми. В случае, если обновление невозможно, косвенный метод с использованием свойства Дескриптор может послужить временным решением. Всегда проверяем документацию и следим за обновлениями FormEx, чтобы использовать все её преимущества.

← На главную