Элемент проекта вида «Структура» для описания данных в интерфейсе

Чтобы описать данные, которые нужно показывать и редактировать в интерфейсе, можно использовать элементы проекта вида Структура (подробнее).

Структура в проекте это описание типа, имеющего фиксированный набор полей.

Пример использования структуры в интерфейсе может выглядеть следующим образом:

Есть форма, которая показывает список сотрудников: ФИО, возраст и город. Эта информация о сотрудниках не хранится в базе данных приложения — она получается или вычисляется некоторым образом.

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

Форма содержит произвольный список, который состоит из элементов, описанных в проекте как МояСтрокаСписка. То есть МояСтрокаСписка — это три поля ввода, расположенные горизонтально.

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

Форма и список

Форма выглядит следующим образом:

ВидЭлемента: КомпонентИнтерфейса
ОбластьВидимости: ВПодсистеме
Ид: 490ac0b2-b4e9-42e7-99a7-07b318bbe261
Имя: МояФорма
Наследует:
    Тип: Стд::Интерфейс::Форма
    ВключатьВАвтоИнтерфейс: Истина
    Содержимое: 
        Тип: ФиксированнаяГруппа    
        Содержимое:
            - 
                Тип: ПроизвольныйСписок<ИсточникДанныхМассив<ДанныеСотрудника>>
                Имя: СписокСотрудников
                ТипКомпонентаСтроки: МояСтрокаСписка
                КонтейнерСтрок:
                    Тип: ФиксированнаяГруппа
            -
                Тип: Кнопка
                Заголовок: Записать    
Здесь два важных момента:
  • Компонент элемента списка — это компонент интерфейса с именем МояСтрокаСписка. Он связывает данные и элементы интерфейса, в которых эти данные показываются и редактируются;
  • Тип источника данных списка — ИсточникДанныхМассив. Источник будет заполнен данными с помощью встроенного языка.

Структура «ДанныеСотрудника»

Структура ДанныеСотрудника выглядит следующим образом:

ВидЭлемента: Структура
ОбластьВидимости: ВПодсистеме
Ид: 3cc44843-e496-4d2e-8360-50d35ec258a8
Имя: ДанныеСотрудника
Поля: 
    -
        Тип: Строка
        Имя: ФИО
    -
        Тип: Число
        Имя: Возраст
    -
        Тип: Строка
        Имя: Город

Она описывает три поля, в которых будут находиться данные для одной строки списка.

Заполнение списка данными

Самый простой способ заполнить список данными — в обработчике события формы ПослеСоздания:

@Обработчик
метод ПослеСоздания()
    
    знч Сотрудник1 = новый ДанныеСотрудника()
    Сотрудник1.ФИО     = "Булатов И.В."
    Сотрудник1.Возраст = 32
    Сотрудник1.Город   = "Мурманск"
    Компоненты.СписокСотрудников.Источник.Данные.Добавить(Сотрудник1)

    знч Сотрудник2 = новый ДанныеСотрудника()
    Сотрудник2.ФИО     = "Громова Н.П."
    Сотрудник2.Возраст = 45
    Сотрудник2.Город   = "Вологда"
    Компоненты.СписокСотрудников.Источник.Данные.Добавить(Сотрудник2)

    знч Сотрудник3 = новый ДанныеСотрудника()
    Сотрудник3.ФИО     = "Орлова Е.Н."
    Сотрудник3.Возраст = 23
    Сотрудник3.Город   = "Иваново"
    Компоненты.СписокСотрудников.Источник.Данные.Добавить(Сотрудник3)
;

Сначала создается экземпляр типа ДанныеСотрудника (это тип структуры, описанной в проекте). Заполняются его поля: ФИО, Возраст и Город. После этого экземпляр добавляется в массив источника данных списка. И так для каждой строки списка.

В результате параметр ДанныеСтроки, который вы можете использовать для указания свойств компонентов (подробнее), будет иметь тип структуры, то есть ДанныеСотрудника. Это понадобится для связывания данных и интерфейса, которое описано далее.

Связь данных с интерфейсом

Произвольный элемент списка МояСтрокаСписка выглядит следующим образом:

ВидЭлемента: КомпонентИнтерфейса
Ид: d78f5166-ddff-41de-9c84-1f28712dae5c
Имя: МояСтрокаСписка
ОбластьВидимости: ВПодсистеме
Наследует:
    Тип: ПроизвольнаяСтрокаСписка<ДанныеСотрудника>
    Содержимое:
        Тип: ФиксированнаяГруппа
        Ориентация: Горизонтальная
        Содержимое:
            -
                Тип: ПолеВвода<Строка>
                Имя: ФИО
                Значение: =ДанныеСтроки.ФИО
            -
                Тип: ПолеВвода<Число>
                Имя: Возраст
                Значение: =ДанныеСтроки.Возраст
            -
                Тип: ПолеВвода<Строка>
                Имя: Город
                Значение: =ДанныеСтроки.Город   

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

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

метод ЗаписатьРезультат()
    для СотрудникОбъект из Компоненты.СписокСотрудников.Источник.Данные
        знч Сотрудник = СотрудникОбъект как ДанныеСотрудника
        пер ФИОСотрудника     = Сотрудник.ФИО
        пер ВозрастСотрудника = Сотрудник.Возраст
        пер ГородСотрудника   = Сотрудник.Город
    ;        
;