При разработке интерфейсов в платформе 1С:Предприятие 7.7 нередко возникает задача динамического изменения состава колонок в многострочной части формы — например, в форме списка, подбора справочника или табличной части документа. Разберем особенности платформы, штатные возможности управления колонками и доступные обходные пути.
Проанализируем архитектурные особенности встроенного языка платформы 1С 7.7. Штатными методами программно создать новую колонку в многострочной части формы во время работы пользователя невозможно. Состав колонок многострочной части формы жестко задается на этапе разработки в Конфигураторе.
Тем не менее, для решения прикладных задач мы можем динамически управлять свойствами уже добавленных колонок либо использовать альтернативные механизмы представления табличных данных.
Если колонки заранее размещены в форме через Конфигуратор, мы можем полностью управлять их визуальным отображением и поведением в рантайме.
Рассмотрим основные доступные операции:
Видимость() контекста формы.Заголовок().Доступность().Посмотрим на пример программной настройки колонок при открытии формы:
Процедура ПриОткрытии()
// Скрываем ненужную колонку
Форма.Артикул.Видимость(0);
// Включаем отображение колонки и задаем динамический заголовок
Форма.Цена.Видимость(1);
Форма.Цена.Заголовок("Цена с НДС (" + глТекущаяВалюта + ")");
// Запрещаем редактирование колонки
Форма.Остаток.Доступность(0);
КонецПроцедуры
Если имя колонки заранее неизвестно и формируется динамически (например, при обходе в цикле), можно использовать встроенную функцию Шаблон():
ИмяКолонки = "Сумма";
НовыйТекст = "Всего к оплате";
Шаблон("[Форма." + ИмяКолонки + ".Заголовок(""" + НовыйТекст + """)]");
Разберем по шагам классический прием для реализации квазидинамических колонок в 1С 7.7:
Колонка1, Колонка2, Колонка3).ПолучитьЗначениеКолонки(НомерКолонки).Видимость(1) и задаем нужные заголовки через Заголовок().Если состав колонок не поддается жесткой типизации и должен быть полностью динамическим, стандартную многострочную часть на форме можно заменить элементом управления ТаблицаЗначений.
Для объекта ТаблицаЗначений доступно полноценное программное создание колонок с помощью методов НоваяКолонка() и ВставитьКолонку():
Таб = СоздатьОбъект("ТаблицаЗначений");
// Идентификатор, Тип, Длина, Точность, Заголовок, Ширина
Таб.НоваяКолонка("Номенклатура", "Справочник.Номенклатура", , , "Товар", 25);
Таб.НоваяКолонка("Количество", "Число", 10, 3, "Остаток", 10);
Таб.НоваяКолонка("Цена", "Число", 15, 2, "Цена продажи", 12);
Если базовых возможностей интерфейса 1С 7.7 недостаточно, применяют проверенные внешние компоненты расширения функционала платформы: