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

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

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

Ограничения штатных средств 1С 7.7

Проанализируем архитектурные особенности встроенного языка платформы 1С 7.7. Штатными методами программно создать новую колонку в многострочной части формы во время работы пользователя невозможно. Состав колонок многострочной части формы жестко задается на этапе разработки в Конфигураторе.

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

Штатное управление видимостью, заголовками и доступностью колонок

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

Рассмотрим основные доступные операции:

  1. Управление видимостью: чтобы скрыть или показать колонку многострочной части, воспользуемся методом Видимость() контекста формы.
  2. Изменение текста заголовка: для динамической смены текста в шапке колонки используется метод Заголовок().
  3. Управление доступностью: для запрета или разрешения редактирования данных в колонке применяется метод Доступность().

Посмотрим на пример программной настройки колонок при открытии формы:


Процедура ПриОткрытии()
    // Скрываем ненужную колонку
    Форма.Артикул.Видимость(0);
    
    // Включаем отображение колонки и задаем динамический заголовок
    Форма.Цена.Видимость(1);
    Форма.Цена.Заголовок("Цена с НДС (" + глТекущаяВалюта + ")");
    
    // Запрещаем редактирование колонки
    Форма.Остаток.Доступность(0);
КонецПроцедуры

Если имя колонки заранее неизвестно и формируется динамически (например, при обходе в цикле), можно использовать встроенную функцию Шаблон():


ИмяКолонки = "Сумма";
НовыйТекст = "Всего к оплате";
Шаблон("[Форма." + ИмяКолонки + ".Заголовок(""" + НовыйТекст + """)]");

Способ 1. Использование резервных колонок

Разберем по шагам классический прием для реализации квазидинамических колонок в 1С 7.7:

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

Способ 2. Замена многострочной части на ТаблицуЗначений

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

Для объекта ТаблицаЗначений доступно полноценное программное создание колонок с помощью методов НоваяКолонка() и ВставитьКолонку():


Таб = СоздатьОбъект("ТаблицаЗначений");
// Идентификатор, Тип, Длина, Точность, Заголовок, Ширина
Таб.НоваяКолонка("Номенклатура", "Справочник.Номенклатура", , , "Товар", 25);
Таб.НоваяКолонка("Количество", "Число", 10, 3, "Остаток", 10);
Таб.НоваяКолонка("Цена", "Число", 15, 2, "Цена продажи", 12);

Способ 3. Использование внешних компонент (FormEx, 1С++)

Если базовых возможностей интерфейса 1С 7.7 недостаточно, применяют проверенные внешние компоненты расширения функционала платформы:

  1. FormEx: предоставляет средства расширенного управления визуальными элементами форм, событиями мыши и клавиатуры, а также позволяет раскрашивать строки и ячейки многострочной части.
  2. 1С++ (класс «ТабличноеПоле»): встраивает в форму современный табличный элемент управления, в котором колонки и их свойства можно гибко добавлять, удалять и связывать с произвольными источниками данных непосредственно из программного кода.
← На главную