Для представления в форме объектов конфигурации (справочники, документы и т.п.) существуют специальные типы данных:
ДанныеФормыСтруктура— содержит набор свойств произвольного типа. Свойствами могут быть другие структуры, коллекции или структуры с коллекциями. Таким типом представляется, например, в формеСправочникОбъект.ДанныеФормыКоллекция— это список типизированных значений, похожий на массив. Доступ к элементу коллекции осуществляется по индексу или по идентификатору. Доступ по идентификатору может отсутствовать в некоторых случаях. Это обусловлено типом прикладного объекта, который представлен этой коллекцией. Идентификатором может быть любое целое число. Таким типом представляется, например, в форме табличная часть.ДанныеФормыСтруктураСКоллекцией— это объект, который представлен в виде структуры и коллекции одновременно. С ним можно обращаться как с любой из этих сущностей. Таким типом представляется, например, в форме набор записей.ДанныеФормыДерево— объект предназначен для хранения иерархических данных.
Прикладной объект представлен либо одним, либо несколькими элементами данных формы. Например, документ, содержащий табличную часть, будет представлен объектом типа ДанныеФормыСтруктура (собственно документ), которому подчинен объект типа ДанныеФормыКоллекция (табличная часть документа).
Во время разработки конфигурации важно помнить, что прикладные объекты доступны только на сервере, в то время как объектами данных форм можно пользоваться и на сервере, и на клиенте.
В редакторе формы вместо имен этих типов обычно отображаются те типы, данные которых содержит реквизит. Например, если реквизит Объект содержит данные элемента справочника Клиенты, то в колонке «Тип» отображается ненастоящий тип этого реквизита формы — ДанныеФормыСтруктура, а тип прикладного объекта, данные которого содержатся в этом реквизите — СправочникОбъект.Клиенты. Чтобы было понятно, что это «ненастоящий тип» реквизита, тип прикладного объекта показывается в круглых скобках.
Таким образом форма содержит некоторую «проекцию» данных объектов в виде своих собственных типов данных и автоматически выполняет преобразование между ними при необходимости. Однако, можно и самостоятельно преобразовать объект в данные формы и обратно с использованием глобальных методов:
ЗначениеВДанныеФормы()— преобразует объект прикладного типа в данные формы;ДанныеФормыВЗначение()— преобразует данные формы в объект прикладного типа.
Аналогичные методы, предназначенные для конвертирования значений реквизитов формы в прикладные объекты и обратно, существуют и у самой управляемой формы:
ЗначениеВРеквизитФормы()— преобразует объект прикладного типа в реквизит управляемой формы;РеквизитФормыВЗначение()— преобразует реквизит управляемой формы в значение прикладного типа.
Методы, работающие с прикладными объектами, доступны только в серверных процедурах формы. При выполнении стандартных действий формы с основным реквизитом (открытие формы, выполнение стандартной команды Записать() и т. д.) преобразование выполняется автоматически.
Рассмотрим пример преобразования данных. Пусть у нас есть особенная форма, в которой в качестве одного из реквизитов (ТоварДляМодификации) используются данные элемента справочника Товары. При создании формы на сервере мы по некоторому алгоритму определяем, какой именно это товар, и читаем его данные в реквизит формы. При этом используется преобразование данных ЗначениеВДанныеФормы().
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ОбъектТовар = Справочники.Товары.НайтиПоНаименованию("Кофейник").ПолучитьОбъект(); ЗначениеВДанныеФормы(ОбъектТовар, ТоварДляМодификации); КонецПроцедуры &НаКлиенте Процедура Записать() ЗаписатьНаСервере(); КонецПроцедуры &НаСервере Процедура ЗаписатьНаСервере() ОбъектТовар = ДанныеФормыВЗначение( ТоварДляМодификации, Тип("СправочникОбъект.Товары") ); ОбъектТовар.Записать(); КонецПроцедуры
Как уже упоминалось, у формы также есть методы, позволяющие преобразовать прикладные данные в реквизит формы и наоборот. Использование данных методов обычно удобнее, так как они имеют, например, информацию о типе реквизита формы. Кроме этого, метод РеквизитФормыВЗначение() выполняет установку соответствия данных формы и объекта, которая используется при формировании сообщений.
Приведем пример использования этих методов. В серверной процедуре формы мы получаем прикладной объект из реквизита формы и выполняем метод этого прикладного объекта Пересчитать(). Затем данные объекта, измененные в результате пересчета, преобразуем обратно в реквизит формы.
&НаСервере Процедура ПересчитатьНаСервере() // Преобразуем реквизит Объект в прикладной объект Документ = РеквизитФормыВЗначение("Объект"); // Выполняем пересчет методом, определенным в модуле документа Документ.Пересчитать(); // Преобразуем прикладной объект обратно в реквизит ЗначениеВРеквизитФормы(Документ, "Объект"); КонецПроцедуры
Поиск:
1С:Предприятие • Данные формы в значение • Значение в данные формы • Значение в реквизит формы • Реквизит формы в значение • Типы данных • Управляемая форма
Содержание
- 1 Реквизиты формы
- 1.1 Типы данных, доступные в управляемой форме
- 1.2 Преобразование прикладных объектов в данные формы
- 1.3 Передача данных между клиентской и серверной частями управляемой формы
- 1.4 Методы для преобразования данных прикладных объектов в данные формы
- 2 Программный интерфейс
- 2.1 ДанныеФормыДерево (FormDataTree)
- 2.1.1 ПолучитьЭлементы (GetItems)
- 2.1.2 НайтиПоИдентификатору (FindById)
- 2.2 ДанныеФормыЭлементДерева (FormDataTreeItem)
- 2.3 ДанныеФормыКоллекцияЭлементовДерева (FormDataTreeItemCollection)
- 2.1 ДанныеФормыДерево (FormDataTree)
- 3 Особенности работы с деревом значений
- 3.1 Обновление дерева
Реквизиты формы
Набор реквизитов формы описывает состав данных, которые отображаются, редактируются или хранятся в форме. При этом реквизиты формы сами по себе не обеспечивают возможности отображения и редактирования данных. Для отображения и редактирования служат элементы формы (смотрите раздел «Элементы формы» данной главы), связанные с реквизитами формы. Совокупность всех реквизитов формы будем называть данными формы.
Важно! Необходимо помнить, что, в отличие от обычных форм, все данные управляемой формы должны быть описаны в виде реквизитов. Не допускается использование переменных модуля формы в качестве источников данных для элементов формы.
Имеется возможность назначить Основной реквизит формы, т. е. реквизит, который будет определять стандартную функциональность формы (расширение формы). Следует помнить, что основной реквизит у формы может быть только один.
Расширение формы – это дополнительные свойства, методы и параметры формы объекта УправляемаяФорма, характерные для объекта, являющегося основным элементом формы.
В процессе разработки формы можно явно задать возможность просмотра и редактирования конкретных реквизитов формы, в разрезе ролей, с помощью свойств Просмотр и Редактирование (подробнее смотрите раздел «Ролевая настройка формы» главы «Редакторы»). Кроме того, доступность того или иного реквизита в самой форме можно настраивать с помощью функциональных опций (подробнее о функциональных опциях можно посмотреть в главе «Управление интерфейсом конфигурации»).
Свойство реквизита формы Сохраняемые данные является признаком того, что интерактивное изменение реквизита будет приводить к попытке блокировки данных формы для редактирования, а также к автоматической установке признака модифицированности формы.
Типы данных, доступные в управляемой форме
Управляемая форма отличается от обычной формы также и типами данных, с которыми она работает. Если обычная форма работает с большинством типов, которые предоставляет 1С:Предприятие (в том числе и вида СправочникОбъект, ДокументОбъект и т. д.), то в управляемой форме можно выделить следующие категории типов:
- типы, которые непосредственно используются в форме – это те типы, которые существуют на стороне тонкого и Веб-клиента (например, Число, СправочникСсылка.Товары, ГрафическаяСхема, ТабличныйДокумент);
- типы, которые будут преобразованы в специальные типы данных – типы данных управляемой формы. Такие типы отображаются в списке реквизитов формы в круглых скобках, например (СправочникОбъект.Товары);
- динамический список (подробнее см. раздел «Динамический список» данной главы).
Преобразование прикладных объектов в данные формы
Некоторые прикладные типы (такие как СправочникОбъект и т. д.) не существуют на стороне тонкого и Веб-клиентов (подробнее см. главу «Концепция управляемого приложения»). Поэтому для представления в форме таких прикладных типов в платформе введены специальные типы данных, предназначенные для работы в управляемых формах. Эта особенность управляемого приложения обуславливает необходимость выполнять преобразование прикладных объектов в данные формы (и обратно).
Используются следующие типы данных:
- ДанныеФормыСтруктура – содержит набор свойств произвольного типа. Свойствами могут быть другие структуры, коллекции или структуры с коллекциями. Таким типом представляется, например, в форме СправочникОбъект.
- ДанныеФормыКоллекция – это список типизированных значений, похожий на массив. Доступ к элементу коллекции осуществляется по индексу или по идентификатору. Доступ по идентификатору может отсутствовать в некоторых случаях. Это обусловлено типом прикладного объекта, который представлен этой коллекцией. Идентификатором может быть любое целое число. Таким типом представляется, например, в форме табличная часть.
- ДанныеФормыСтруктураСКоллекцией – это объект, который представлен в виде структуры и коллекции одновременно. С ним можно обращаться как с любой из этих сущностей. Таким типом представляется, например, в форме набор записей.
- ДанныеФормыДерево – объект предназначен для хранения иерархических данных.
Прикладной объект представлен либо одним, либо несколькими элементами данных формы. В общем виде иерархия и состав данных формы зависят от сложности и взаимосвязи прикладных объектов управляемой формы.
Например, документ, содержащий табличную часть, будет представлен объектом типа ДанныеФормыСтруктура (собственно документ), которому подчинен объект типа ДанныеФормыКоллекция (табличная часть документа).
Важно! Во время разработки конфигурации важно помнить, что прикладные объекты доступны только на сервере, в то время как объектами данных форм можно пользоваться и на сервере, и на клиенте.
Передача данных между клиентской и серверной частями управляемой формы
Фактически можно сказать, что данные формы – это унифицированное представление данных различных прикладных объектов, с которыми форма работает единообразно и которые присутствуют и на сервере, и на клиенте. То есть форма содержит некоторую «проекцию» данных прикладных объектов в виде своих собственных типов данных и выполняет преобразование между ними при необходимости. Однако в случае если разработчик конфигурации реализует свой алгоритм обработки данных, то преобразование данных (из специализированных типов в прикладные и обратно) он должен выполнять самостоятельно.
При редактировании реквизитов формы в специализированном редакторе (подробнее см. раздел «Реквизиты формы» главы «Редакторы») имеется возможность влиять на передачу данных между клиентом и сервером во время работы формы. Для этого служит колонка редактора реквизитов Использовать всегда. Действие этого свойства различается для трех типов реквизитов:
- Для реквизита, подчиненного динамическому списку (колонке динамического списка):
- свойство включено – реквизит всегда считывается из базы данных и включается в данные формы;
- свойство выключено – реквизит считывается из базы данных и включается в данные формы только тогда, когда есть видимый в данный момент элемент формы, связанный с реквизитом или его подчиненным реквизитом.
- Для реквизита, подчиненного коллекции движений:
- свойство включено – движения документа считываются из базы данных и будут присутствовать в данных формы;
- свойство выключено – движения документа не будут считываться из базы данных и не попадут в данные формы (если нет элемента формы, ссылающегося на движения документа).
- Остальные реквизиты формы:
- свойство включено – реквизит будет присутствовать в данных формы вне зависимости от того, есть или нет хоть один элемент формы, который связан с реквизитом или его подчиненным реквизитом;
- свойство выключено – реквизит будет присутствовать в данных формы только в том случае, если есть элемент формы, связанный с реквизитом или его подчиненным реквизитом. В отличие от реквизитов динамического списка, здесь не играет роли видимость элемента, связанного с реквизитом.
Примечание. Следует помнить, что свойство, установленное у родительского реквизита, действует на все подчиненные реквизиты. Например, если свойство Использовать всегда снято у табличной части документа, то система считает, что это свойство снято и у всех подчиненных реквизитов (несмотря на фактическое состояние свойства).
Методы для преобразования данных прикладных объектов в данные формы
Для конвертирования прикладных объектов в данные формы и обратно существует набор глобальных методов:
- ЗначениеВДанныеФормы(),
- ДанныеФормыВЗначение(),
- КопироватьДанныеФормы().
Важно! Методы, работающие с прикладными объектами, доступны только в серверных процедурах. Метод для копирования значений между данными формы доступен на сервере и на клиенте, так как не требует прикладных объектов в качестве параметров.
Во время конвертирования данных формы в прикладной объект нужно учитывать их совместимость.
- ЗначениеВДанныеФормы() – преобразует объект прикладного типа в данные формы;
- ДанныеФормыВЗначение() – преобразует данные формы в объект прикладного типа;
- КопироватьДанныеФормы() – производит копирование данных формы, обладающих совместимой структурой. Возвращает значение Истина, если копирование произведено, или Ложь, если структура объектов несовместима.
Примечание. При выполнении стандартных действий (открытие формы, выполнение стандартной команды Записать и т. д.) формы с основным реквизитом, преобразование выполняется автоматически.
Приведем пример, как использовать преобразование данных в собственных алгоритмах.
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ОбъектТовар = Справочники.Товары.НайтиПоНаименованию(«Кофейник»).ПолучитьОбъект(); ЗначениеВДанныеФормы(ОбъектТовар, Объект); КонецПроцедуры &НаКлиенте Процедура Записать() ЗаписатьНаСервере(); КонецПроцедуры &НаСервере Процедура ЗаписатьНаСервере() ОбъектТовар = ДанныеФормыВЗначение(Объект, Тип(«СправочникОбъект.Товары»)); ОбъектТовар.Записать(); КонецПроцедуры
Также у объекта УправляемаяФорма существуют методы, доступные на сервере:
- ЗначениеВРеквизитФормы() – выполняет преобразование объекта прикладного типа в заданный реквизит формы.
- РеквизитФормыВЗначение() – преобразует реквизит данных формы в объект прикладного типа.
Использование данных методов обычно удобнее, так как они, имеют, например, информацию о типе реквизита формы. Кроме того, метод РеквизитФормыВЗначение() выполняет установку соответствия данных формы и объекта, которая используется при формировании сообщений. Подробнее об этом можно прочитать в главе «Сервисные возможности навигации».
Приведем пример использования этих методов.
&НаСервере Процедура ПересчитатьНаСервере() // Преобразует реквизит Объект в прикладной объект. Документ = РеквизитФормыВЗначение(«Объект»); // Выполняет пересчет методом, определенным в модуле документа. Документ.Пересчитать(); // Преобразует прикладной объект обратно в реквизит. ЗначениеВРеквизитФормы(Документ, «Объект»); КонецПроцедуры
Программный интерфейс
ДанныеФормыДерево (FormDataTree)
Методы:
- НайтиПоИдентификатору (FindById)
- ПолучитьЭлементы (GetItems)
Описание:
Предназначен для моделирования дерева в данных управляемой формы.
Доступность: клиент, сервер, тонкий клиент, веб-клиент. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту определяется в пространстве имен . Имя типа XDTO:
ПолучитьЭлементы (GetItems)
Синтаксис:
ПолучитьЭлементы()
Возвращаемое значение:
Тип: ДанныеФормыКоллекцияЭлементовДерева.
Описание:
Получает коллекцию элементов дерева верхнего уровня.
Доступность: клиент, сервер, тонкий клиент, веб-клиент.
НайтиПоИдентификатору (FindById)
Синтаксис:
НайтиПоИдентификатору(<Идентификатор>)
Параметры:
<Идентификатор> (обязательный)
Тип: Число. Идентификатор элемента дерева.
Возвращаемое значение:
Тип: ДанныеФормыЭлементДерева.
Описание:
Получает элемент коллекции по идентификатору.
Доступность: клиент, сервер, тонкий клиент, веб-клиент.
ДанныеФормыЭлементДерева (FormDataTreeItem)
Свойства:
<Имя свойства> (<Имя свойства>)
Методы:
- ПолучитьИдентификатор (GetId)
- ПолучитьРодителя (GetParent)
- ПолучитьЭлементы (GetItems)
- Свойство (Property)
Описание:
Элемент дерева данных формы.
Доступность: клиент, сервер, тонкий клиент, веб-клиент. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту определяется в пространстве имен . Имя типа XDTO:
ДанныеФормыКоллекцияЭлементовДерева (FormDataTreeItemCollection)
Элементы коллекции:
ДанныеФормыЭлементДерева
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора […]. В качестве аргумента передается индекс элемента.
Методы:
- Вставить (Insert)
- Добавить (Add)
- Индекс (IndexOf)
- Количество (Count)
- Очистить (Clear)
- Получить (Get)
- Сдвинуть (Move)
- Удалить (Delete)
Описание:
Коллекция элементов дерева.
Доступность: клиент, сервер, тонкий клиент, веб-клиент.
См. также:
- ДанныеФормыЭлементДерева, метод ПолучитьЭлементы
- ДанныеФормыДерево, метод ПолучитьЭлементы
Особенности работы с деревом значений
Обновление дерева
Существует проблема падения платформы при обновлении дерева.
Если в дереве был развернут какой-либо узел и выбран подчиненный узел, то при обновлении дерева функцией ЗначениеВДанныеФормы
происходит падение платформы.
Решение: перед обновлением нужно очищать дерево.
Например:
&НаСервере Процедура ОчиститьДерево(элементы) Для каждого элемент из элементы Цикл ОчиститьДерево(элемент.ПолучитьЭлементы()); КонецЦикла; элементы.Очистить(); КонецПроцедуры &НаСервере Процедура ЗаполнитьДеревоПонятий() дзПонятия = срСвойства.ПостроитьДеревоПонятий(НаДату, Мета.ТекущаяИБ()); ОчиститьДерево(ДеревоПонятий.ПолучитьЭлементы()); ЗначениеВДанныеФормы(дзПонятия, ДеревоПонятий); КонецПроцедуры &НаКлиенте Процедура НаДатуПриИзменении(Элемент) ЗаполнитьДеревоПонятий(); КонецПроцедуры

Занятие 27 821
Рис. 27.6. Контекст поля формы дополняется контекстом расширения поля ввода
Типы данных формы
В управляемой форме можно выделить следующие категории типов, с которыми она работает:
Типы встроенного языка, предназначенные для использования как в управляемых формах, так и вне них. Например, Число,
СправочникСсылка.<имя>, ГрафическаяСхема, ТабличныйДокумент
и т. д.
Типы встроенного языка, предназначенные исключительно для того, чтобы представить в форме данные прикладных объектов (справочников, документов и т. д.). Это такие типы, как Дан-
ныеФормыСтруктура, ДанныеФормыКоллекция и другие.
Отдельно следует упомянуть тип ДинамическийСписок, который используется в управляемых формах для отображения списков прикладных объектов.
Все типы прикладных объектов (такие как СправочникОбъект и т. д.) не существуют на стороне тонкого и веб-клиентов, они существуют только на сервере. Однако данные этих объектов нужно отображать в управляемых формах.

822 1С:Предприятие 8.3. Практическое пособие разработчика
Поэтому для представления в форме данных этих прикладных типов введены специальные типы данных, предназначенные для работы именно в управляемых формах. Используются следующие типы данных:
ДанныеФормыСтруктура – содержит набор свойств произвольного типа. Свойствами могут быть другие структуры, коллекции или структуры с коллекциями. Таким типом представляется, напри-
мер, в форме СправочникОбъект.
ДанныеФормыКоллекция – это список типизированных значений, похожий на массив. Доступ к элементу коллекции осуществляется по индексу или по идентификатору. Доступ по идентификатору может отсутствовать в некоторых случаях. Это обусловлено типом прикладного объекта, который представлен этой коллекцией. Идентификатором может быть любое целое число. Таким типом представляется, например, в форме табличная часть.
ДанныеФормыСтруктураСКоллекцией – это объект, который пред-
ставлен в виде структуры и коллекции одновременно. С ним можно обращаться как с любой из этих сущностей. Таким типом представляется, например, в форме набор записей.
ДанныеФормыДерево – объект предназначен для хранения иерархических данных.
Прикладной объект представлен либо одним, либо несколькими элементами данных формы. В общем виде иерархия и состав данных формы зависят от сложности и взаимосвязи прикладных объектов управляемой формы.
Например, документ, содержащий табличную часть, будет представлен объектом типа ДанныеФормыСтруктура (собственно документ), которому подчинен объект типа ДанныеФормыКоллекция (табличная часть документа).
ВНИМАНИЕ!
Во время разработки конфигурации важно помнить, что прикладные объекты доступны только на сервере, в то время как объектами данных форм можно пользоваться и на сервере, и на клиенте.
Фактически можно сказать, что данные формы – это унифицированное представление данных различных прикладных объектов, с которыми форма работает единообразно и которые присутствуют и на сервере, и на клиенте.

Занятие 27 823
В редакторе формы (у реквизитов формы) вместо имен этих типов обычно отображаются те прикладные типы, данные которых содержит реквизит.
Например, если реквизит Объект содержит данные элемента справочника Клиенты, то в колонке Тип отображается ненастоящий тип этого реквизита формы – ДанныеФормыСтруктура, а тип прикладного объекта, данные которого содержатся в этом реквизите – СправочникОбъект.Клиенты. Причем чтобы было понятно, что это «ненастоящий тип» реквизита, тип прикладного объекта показывается в круглых скобках.
Таким образом форма содержит некоторую «проекцию» данных прикладных объектов в виде своих собственных типов данных и автоматически выполняет преобразование между ними при необходимости.
Однако если разработчик конфигурации реализует свой алгоритм обработки данных, то преобразование данных (из специализированных типов в прикладные и обратно) он должен выполнять самостоятельно.
Для конвертирования прикладных объектов в данные формы и обратно существует набор глобальных методов:
ЗначениеВДанныеФормы() – преобразует объект прикладного типа в данные формы;
ДанныеФормыВЗначение() – преобразует данные формы в объект прикладного типа.
Аналогичные методы, предназначенные для конвертирования значений реквизитов формы в прикладные объекты и обратно, существуют и у самой управляемой формы:
ЗначениеВРеквизитФормы() – преобразует объект прикладного типа в реквизит управляемой формы;
РеквизитФормыВЗначение() – преобразует реквизит управляемой формы в значение прикладного типа.
Методы, работающие с прикладными объектами, доступны только в серверных процедурах формы.
При выполнении стандартных действий формы с основным реквизитом (открытие формы, выполнение стандартной команды Записать и т. д.) преобразование выполняется автоматически.

824 1С:Предприятие 8.3. Практическое пособие разработчика
Приведем пример преобразования данных, которое может потребоваться в собственных алгоритмах.
Например, у нас есть особенная форма, в которой в качестве одного из реквизитов (ТоварДляМодификации) используются данные элемента справочника Товары. При создании формы на сервере мы по некоторому алгоритму определяем, какой именно это товар, и читаем его данные в реквизит формы. При этом используется преобразование данных ЗначениеВДанныеФормы(), листинг 27.1.
Листинг 27.1. Пример преобразования данных прикладных объектов в данные формы
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ОбъектТовар = Справочники.Товары.НайтиПоНаименованию(«Кофейник»).ПолучитьОбъект(); ЗначениеВДанныеФормы(ОбъектТовар, ТоварДляМодификации);
КонецПроцедуры
&НаКлиенте Процедура Записать()
ЗаписатьНаСервере();
КонецПроцедуры
&НаСервере Процедура ЗаписатьНаСервере()
ОбъектТовар = ДанныеФормыВЗначение(ТоварДляМодификации, Тип( «СправочникОбъект.Товары»));
ОбъектТовар.Записать();
КонецПроцедуры
В некоторый момент работы формы мы решаем, что измененные данные нашего товара необходимо записать в базу данных, и тогда выполняем обратное преобразование данных формы в прикладной объект (ДанныеФормыВЗначение()) и записываем его.
Как мы уже упомянули, у формы также есть методы, позволяющие преобразовать прикладные данные в реквизит формы и наоборот.
Использование данных методов обычно удобнее, так как они имеют, например, информацию о типе реквизита формы. Кроме этого, метод РеквизитФормыВЗначение() выполняет установку соответствия

Занятие 27 825
данных формы и объекта, которая используется при формировании сообщений.
Приведем пример использования этих методов. В серверной процедуре формы мы получаем прикладной объект из реквизита формы и выполняем метод этого прикладного объекта Пересчитать(). Затем данные объекта, измененные в результате пересчета, преобразуем обратно в реквизит формы (листинг 27.2).
Листинг 27.2. Пример преобразования данных прикладных объектов в данные формы
&НаСервере Процедура ПересчитатьНаСервере()
//Преобразует реквизит Объект в прикладной объект. Документ = РеквизитФормыВЗначение(«Объект»);
//Выполняет пересчет методом, определенным в модуле документа. Документ.Пересчитать();
//Преобразует прикладной объект обратно в реквизит. ЗначениеВРеквизитФормы(Документ, «Объект»);
КонецПроцедуры
Связанные списки
При создании прикладных решений часто возникает необходимость из какой-либо формы прикладного объекта перейти к информации, логически связанной с этим объектом.
Это может быть, например, список подчиненного справочника; регистры, в которых объект производит движения; регистры, где измерение с типом этого объекта указано как ведущее; критерии отбора, в которые входит этот тип; объекты, которые можно ввести на основании этого типа, и т. д.
Одним из распространенных примеров использования связанных списков является необходимость перейти из формы документа к списку движений, которые произвел этот документ в каком-либо регистре.
Все перечисленные ситуации платформа контролирует автоматически. На основании информации, содержащейся в объектах конфигурации, платформа автоматически создает в формах объектов

826 1С:Предприятие 8.3. Практическое пособие разработчика
команды для перехода к связанной информации. Некоторые такие команды она сразу же делает видимыми, и они появляются в форме. Некоторые команды она только создает, но по умолчанию не включает их видимость.
Поэтому чаще всего, если в форме вы не видите команды перехода к связанной информации, которая должна быть, просто нужно включить ее видимость в интерфейсе формы.
Рассмотрим это на примере.
В режиме «Конфигуратор»
Для примера откроем форму документа ОказаниеУслуги. В левом верхнем окне перейдем на закладку Командный интерфейс.
В разделе Панель навигации в группе Перейти уже находится набор таких команд. Это команды перехода к записям регистров, для которых этот документ является регистратором.
Мы можем установить общую видимость для этих команд, а можем более точно настроить видимость этих команд для каждой отдельной роли, которая есть в нашей конфигурации (рис. 27.7).
Рис. 27.7. Командный интерфейс формы

Занятие 27 827
Врежиме «1С:Предприятие»
Врежиме 1С:Предприятие откроем один из документов Оказание
услуги (рис. 27.8).
Рис. 27.8. Документ «Оказание услуги № 3»
В панели навигации формы мы видим команды перехода к списку записей регистров, связанных с открытым документом.
|
Например, выполним команду Стоимость |
материалов и |
перейдем |
|
к движениям, которые произвел в этом |
регистре наш |
документ |
|
(рис. 27.9). |
Рис. 27.9. Движения документа «Оказание услуги № 3» по регистру «Стоимость материалов»

828 1С:Предприятие 8.3. Практическое пособие разработчика
Оформление строк в форме списка
Одним из полезных свойств формы списка является возможность настройки оформления его строк. Для иллюстрации этой возможности мы воспользуемся формой списка справочника Номенклатура и придадим ей нестандартный вид.
В режиме «Конфигуратор»
Откроем в конфигураторе форму списка справочника Номенклатура и создадим обработчик события формы ПриСозданииНаСервере.
Внесем в него следующий текст (листинг 27.3).
Листинг 27.3. Обработчик события формы «При открытии»
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СписокСправочника = Элементы.Список;
// Задать режим отображения справочника. СписокСправочника.Отображение = ОтображениеТаблицы.Список;
// Скрыть линии сетки. СписокСправочника.ВертикальныеЛинии = Ложь; СписокСправочника.ГоризонтальныеЛинии = Ложь;
КонецПроцедуры
В этой процедуре, выполняющейся при создании формы на сервере, мы сначала представляем список в виде обычного, а не иерархического списка. Это сделано для большей наглядности, чтобы материалы отображались вперемешку с услугами.
Затем мы скрываем линии, разделяющие колонки и строки таблицы списка.
Теперь настроим условное оформление строк списка. Для этого вызовем палитру свойств основного реквизита формы Список.
В строке Настройка списка нажмем Открыть (рис. 27.10).
Поскольку этот реквизит имеет тип ДинамическийСписок, который построен на основе системы компоновки данных, то мы можем настроить для него Отбор, Порядок, Группировку и УсловноеОформ-
ление аналогично тому, как это делалось в отчетах.

Занятие 27 829
Рис. 27.10. Вызов настройки динамического списка
В открывшемся окне настройки динамического списка перейдем на закладку Условное оформление и нажмем кнопку Добавить в
командной панели окна.
Сначала укажем Оформление для выделения полей.
Нажмем кнопку выбора в поле Оформление и установим сиреневый цвет фона (рис. 27.11).
Рис. 27.11. Настройка условного оформления

830 1С:Предприятие 8.3. Практическое пособие разработчика
Нажмем ОК. Затем укажем условие, при наступлении которого будет применяться оформление, то есть когда строки списка будут сиреневыми.
Нажмем кнопку выбора в поле Условие и в появившемся окне добавим Новый элемент отбора (рис. 27.12). Для этого нажмем кнопку
Добавить и укажем в графе Левое значение – поле ВидНоменклатуры, в графе Вид сравнения – Равно, а в графе Правое значение выберем
Перечисление.ВидыНоменклатры.Услуга.
Рис. 27.12. Настройка условного оформления
Нажмем ОК.
Таким образом, мы установили, что когда в списке номенклатуры будут отражаться услуги, эти строки будут выделены сиреневым фоном.
Поскольку мы хотим выделить полностью строки, а не отдельные поля списка, то список оформляемых полей можно оставить пустым. Нажмем ОК.
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и откроем список номенклатуры.
Мы видим, что список имеет вид обычного неиерархического списка, услуги выделены сиреневым цветом, а также отсутствуют разделительные линии строк и колонок списка (рис. 27.13).
Соседние файлы в папке Учебники
- #
- #
- #
- #
- #
- #
Назначение: в управляемой форме в качестве реквизитов могут быть следующие типы: примитивные (дата, число, строка, булево) и ссылки (СправочникСсылка.Контрагенты, ДокументСсылка.ЗаказПокупателя и т.д.).
Прикладные объекты (СправочникОбъект, ДокументОбъект и т.д.) храниться в управляемой форме не могут. Поэтому для управляемых форм созданы аналогичные специальные типы значений (ДанныеФормыСтруктура, ДанныеФормыКоллекция и т.д). На форме эти типы обозначаются в скобках, причем в скобках указываются не сами типы, а соответствующие им прикладные объекты:
В работе часто требуется преобразовать такие типы значений управляемой формы в прикладной объект и наоборот. Для этого созданы специальные операторы (показаны ниже в коде). Важно, что:
— с их помощью можно преобразовывать только «специальные» типы значений (ДанныеФормыСтруктура, ДанныеФормыКоллекция и т.д). Для ссылок и примитивных типов преобразование не требуется;
— по синтакс-помощнику нужно смотреть, где эти операторы доступны (какие на клиенте, какие на сервере).
Источник:
Номенклатура объектов: модуль формы объекта (справочника, документа и т.д).
&НаСервере Процедура ПрочитатьЗаполнитьСвойстваИЗначения() // преобразование реквизита управляемой формы в прикладной объект // пример: // ДокументОбъект = РеквизитФормыВЗначение("Объект"); ДокументОбъект = РеквизитФормыВЗначение("[Реквизит формы]"); //------------------------------------------------------------- // преобразование прикладного объекта в реквизит управляемой формы // пример: // ЗначениеВРеквизитФормы(ДокументОбъект, "Объект"); ЗначениеВРеквизитФормы([Прикладной объект], "[Реквизит формы]"); //------------------------------------------------------------- // преобразование реквизита управляемой формы в прикладной объект // пример: // ОбъектБД = ДанныеФормыВЗначение(Объект, Тип("СправочникОбъект.Фонды")); ОбъектБД = ДанныеФормыВЗначение([Реквизит формы], Тип("[имя типа]")); //------------------------------------------------------------- // преобразование прикладного объекта в реквизит управляемой формы // пример: // ЗначениеВДанныеФормы(ОбъектБД, Объект); ЗначениеВДанныеФормы([Прикладной объект], [Реквизит формы]); КонецПроцедуры
Может тебе это надо?:
ЗначениеВДанныеФормы (ValueToFormData)
Синтаксис:
ЗначениеВДанныеФормы(<Значение>, <Объект>)
Параметры:
<Значение> (обязательный)
Тип: Произвольный.
Значение прикладного типа, для которого определено преобразование в данные формы.
<Объект> (обязательный)
Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура.
Данные формы, имеющие совместимую структуру.
Описание:
Преобразует объект прикладного типа в универсальный объект данных.
Доступность:
Сервер, толстый клиент.
ДанныеФормыВЗначение (FormDataToValue)
Синтаксис:
ДанныеФормыВЗначение(<Объект>, <Тип>)
Параметры:
<Объект> (обязательный)
Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура; ДанныеФормыДерево.
Данные формы.
<Тип> (обязательный)
Тип: Тип.
Тип значения, получаемого из данных формы.
Возвращаемое значение:
Тип: Произвольный.
Описание:
Преобразует данные формы в объект прикладного типа.
Доступность:
Сервер, толстый клиент.

