Данные и элементы управления
Важной особенностью платформы 1С:Предприятие 8.0 является механизм представления данных в формах. Ключевым моментом здесь является то, что принадлежность формы к тому или иному объекту конфигурации никоим образом не определяет состав данных, которые форма будет отображать. Например, можно создать общую форму, которая не будет подчинена ни одному из объектов конфигурации, но которая, в зависимости от содержимого, будет либо отображать список справочника, либо позволять редактировать документ. Однако такую форму уже нельзя будет назначить основной для выполнения определенных действий.
Форма сама по себе и ее элементы управления обособлены от объектов конфигурации. Для того чтобы форма отображала какие-либо данные, необходимо задать связь самой формы и большинства из ее элементов управления с данными. При использовании конструктора форм, конфигуратор создает такие связи автоматически. Если разработчик создает форму вручную – он может определить эти связи путем задания свойств формы и элементов управления. В любом случае, эти связи могут быть изменены средствами встроенного языка в процессе выполнения программы.
Связь формы и элементов управления с данными осуществляется при помощи реквизитов формы. Список существующих реквизитов формы доступен на закладке "Реквизиты" окна редактирования формы.
Среди всех реквизитов формы, как правило, существует один основной реквизит (он выделен жирным шрифтом). Основной реквизит определяет источник данных для формы в целом. От типа значения основного реквизита формы зависит не только то, какие данные будут отображены в элементах управления формы, но и поведение самой формы. Например, если основному реквизиту формы указать тип значения ДокументОбъект.ПриходнаяНакладная, то при закрытии формы программа будет запрашивать подтверждение записи и проведения документа. Если же основному реквизиту формы указать тип значения СправочникСписок.Номенклатура, то подобного подтверждения при закрытии формы возникать не будет. [502]
Похожее влияние источники данных оказывают и на элементы управления. Например, состав колонок табличного поля будет различным, если в качестве источника данных этого поля указать реквизит формы с типом значения СправочникСписок.Номенклатура или РегистрНакопленияСписок.ОстаткиКомплектующих. To же самое справедливо и для элемента управления командная панель. При установленном свойстве командной панели "Автозаполнение", смена источника данных (а точнее говоря, источника действий) будет приводить к изменению состава команд, которые отображает командная панель.
Возможность связать форму и элементы управления с различными данными является причиной того, что у формы и у элементов управления существует несколько расширений. Расширение представляет собой набор дополнительных свойств, методов и событий, появляющихся у объекта. Наличие того или иного расширения определяется либо типом данных, которые отображает объект, либо расположением его в других объектах.
Рассмотрим этот механизм на примере элемента управления Поле ввода, расположенного в колонке "Вид номенклатуры" формы списка справочника "Номенклатура":
Поскольку форма отображает данные объекта СправочникСписок.Номенклатура, к свойствам, методам и [503] событиям объекта Форма добавляется расширение формы списка справочника:
В результате этого у формы появляются такие свойства как ПараметрТекущаяСтрока, ПараметрВыборПоВладельцу и т.п. [504]
Затем, поскольку данными, отображаемыми в табличном поле, будет список справочника "Номенклатура", к свойствам, методам и событиям табличного поля добавляется расширение табличного поля списка справочника. Но, поскольку это табличное поле расположено в форме, к его свойствам, методам и событиям добавляется также и расширение элементов управления, расположенных в форме:
[505]
И в заключение, поскольку поле ввода будет отображать значение реквизита справочника типа Перечисление.ВидыНоменклатуры, к свойствам и событиям поля ввода добавляется расширение поля ввода перечисления. А раз это поле ввода расположено в табличном поле, то к его свойствам и событиям добавляется также расширение элементов управления, расположенных в табличном поле:
Теперь, когда мы представляем, что такое расширение, рассмотрим более подробно расширение элементов управления, расположенных в форме.
В числе прочего, это расширение добавляет элементам управления одно важное свойство – Данные. Это свойство имеет тип Строка и [506] должно содержать путь к данным. Путем к данным может являться либо имя реквизита формы, либо путь к одному из свойств реквизита
Например, если в форме существует элемент управления табличное поле, можно в качестве данных указать ему имя реквизита "СправочникСписок", который имеет тип значения СправочникСписок.Номенклатура. [507]
Если на этой же форме разместить поле ввода, то его свойство Данные может иметь значение СправочникСписок.Отбор.Ссылка.Значение.
[508]
Таким образом свойство Данные позволяет связать элемент управления с теми данными, которые он должен отображать.
Следует заметить, что при определении свойства Данные в конфигураторе, предоставляется возможность выбрать только из тех реквизитов, которые имеют подходящий тип для отображения в конкретном элементе управления.
Следующим важным свойством, которым обладают элементы управления расположенные в форме, является свойство "ТипЗначения". Это свойство содержит тип реквизита, данные которого отображает элемент управления. При выборе в конфигураторе значения свойства Данные, свойство Тип значения заполняется автоматически, на основании типа выбранных данных.
При установленной связи с данными свойство Тип значения становится недоступным для изменения. Однако, если связь с данными не задана, можно изменять свойство Тип значения. Такой способ используется иногда для связи элемента управления не с самими данными, а с некоторым типом данных. Причем, если указать тип, допускающий однозначный выбор данных (например, СправочникСписок.Номенклатура), то эти данные даже будут отображены в элементе управления.
В качестве примера можно создать форму, не имеющую ни одного реквизита, разместить в ней табличное поле и указать, что его тип значения будет равен СправочникСписок.Номенклатура. При открытии этой формы в режиме 1С:Предприятия мы увидим, что табличное поле содержит данные элементов справочника "Номенклатура".
Говоря о связи элементов управления и данных, следует отдельно упомянуть поле ввода, поскольку это элемент управления имеет одну особенность – свойство ОграничениеТипа.
Использование этого свойства позволяет ограничить пользователя в выборе возможных типов данных значений, вводимых в поле ввода. Например, если реквизит формы имеет составной тип данных:
· | Число, |
· | Строка, |
· | Дата, |
· | СправочникСсылка.Клиенты, |
· | СправочникСсылка.Сотрудники, [509] |
· | СправочникСсылка.Номенклатура, |
· | Число, |
· | Дата, |
· | Строка: |
[510]
Интересной особенностью здесь является то, что типы данных, заданные в свойстве ОграничениеТипа поля ввода, могут не совпасть с типом данных реквизита, отображаемого в поле ввода.
Например, как в приведенном выше примере, когда в реквизите уже хранится значение типа СправочникСсылка.Клиенты. В этом случае ограничение типа будет игнорироваться, т.е. тип отображаемых данных будет обладать "большим весом", чем поле ввода, эти данные отображающее. Такое решение вполне логично, поскольку именно реквизит содержит данные, а поле ввода – всего лишь инструмент для их отображения. [511]