Типы данных формы
Для представления в форме объектов конфигурации (справочники, документы и т.п.) существуют специальные типы данных:
- ДанныеФормыСтруктура — содержит набор свойств произвольного типа. Свойствами могут быть другие структуры, коллекции или структуры с коллекциями. Таким типом представляется, например, в форме СправочникОбъект .
- ДанныеФормыКоллекция — это список типизированных значений, похожий на массив. Доступ к элементу коллекции осуществляется по индексу или по идентификатору. Доступ по идентификатору может отсутствовать в некоторых случаях. Это обусловлено типом прикладного объекта, который представлен этой коллекцией. Идентификатором может быть любое целое число. Таким типом представляется, например, в форме табличная часть.
- ДанныеФормыСтруктураСКоллекцией — это объект, который представлен в виде структуры и коллекции одновременно. С ним можно обращаться как с любой из этих сущностей. Таким типом представляется, например, в форме набор записей.
- ДанныеФормыДерево — объект предназначен для хранения иерархических данных.
Прикладной объект представлен либо одним, либо несколькими элементами данных формы. Например, документ, содержащий табличную часть, будет представлен объектом типа ДанныеФормыСтруктура (собственно документ), которому подчинен объект типа ДанныеФормыКоллекция (табличная часть документа).
В редакторе формы вместо имен этих типов обычно отображаются те типы, данные которых содержит реквизит. Например, если реквизит Объект содержит данные элемента справочника Клиенты , то в колонке «Тип» отображается ненастоящий тип этого реквизита формы — ДанныеФормыСтруктура , а тип прикладного объекта, данные которого содержатся в этом реквизите — СправочникОбъект.Клиенты . Чтобы было понятно, что это «ненастоящий тип» реквизита, тип прикладного объекта показывается в круглых скобках.
Таким образом форма содержит некоторую «проекцию» данных объектов в виде своих собственных типов данных и автоматически выполняет преобразование между ними при необходимости. Однако, можно и самостоятельно преобразовать объект в данные формы и обратно с использованием глобальных методов:
- ЗначениеВДанныеФормы() — преобразует объект прикладного типа в данные формы;
- ДанныеФормыВЗначение() — преобразует данные формы в объект прикладного типа.
Аналогичные методы, предназначенные для конвертирования значений реквизитов формы в прикладные объекты и обратно, существуют и у самой управляемой формы:
- ЗначениеВРеквизитФормы() — преобразует объект прикладного типа в реквизит управляемой формы;
- РеквизитФормыВЗначение() — преобразует реквизит управляемой формы в значение прикладного типа.
Методы, работающие с прикладными объектами, доступны только в серверных процедурах формы. При выполнении стандартных действий формы с основным реквизитом (открытие формы, выполнение стандартной команды Записать() и т. д.) преобразование выполняется автоматически.
Рассмотрим пример преобразования данных. Пусть у нас есть особенная форма, в которой в качестве одного из реквизитов ( ТоварДляМодификации ) используются данные элемента справочника Товары . При создании формы на сервере мы по некоторому алгоритму определяем, какой именно это товар, и читаем его данные в реквизит формы. При этом используется преобразование данных ЗначениеВДанныеФормы() .
Как уже упоминалось, у формы также есть методы, позволяющие преобразовать прикладные данные в реквизит формы и наоборот. Использование данных методов обычно удобнее, так как они имеют, например, информацию о типе реквизита формы. Кроме этого, метод РеквизитФормыВЗначение() выполняет установку соответствия данных формы и объекта, которая используется при формировании сообщений.
Приведем пример использования этих методов. В серверной процедуре формы мы получаем прикладной объект из реквизита формы и выполняем метод этого прикладного объекта Пересчитать() . Затем данные объекта, измененные в результате пересчета, преобразуем обратно в реквизит формы.
АйТиБложик
Разработчики платформы 1С предоставили две функции:
- РеквизитФормыВЗначение — преобразует указанный реквизит формы в объект прикладного типа.
- ДанныеФормыВЗначение — преобразует данные формы в объект прикладного типа.
Работает и с помощью одной функции и с помощью другой О_о. Напишем код по преобразованию ДанныеФормыДерево в объект прикладного типа:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ДеревоЗначений1 = РеквизитФормыВЗначение(«Реквизит1»);
ДеревоЗначений2 = ДанныеФормыВЗначение(ЭтаФорма.Реквизит1, Тип(«ДеревоЗначений»));
КонецПроцедуры
ДеревоЗначений1 и ДеревоЗначений2 имеют одинаковый тип — ДеревоЗначений. Так в чем же разница этих функций.
ДанныеФормыВЗначение — функция глобального контекста. Производит преобразование типа объекта поддерживаемого формой в тип объекта базы данных: ДанныеФормыСтруктура —> СправочникОбъект.Справочник1.
РеквизитФормыВЗначение — функция модуля формы, то есть вызывается на сервере в контексте формы (&НаСервере). Если вы попытаетесь вызвать данную функцию вне контексте формы, то платформа сгенерирует исключительную ошибку:
&НаСервереБезКонтекста
Процедура ПреобразованиеТипа()
// Этот код неправильный, контекст формы не доступен, будет ошибка!
СпрОбъект2 = РеквизитФормыВЗначение(Объект, Тип(«СправочникОбъект.Справочник1»));
СпрОбъект2.ВывестиСообщение(Объект.Реквизит1);
КонецПроцедуры
ДанныеФормыВЗначение(), ЗначениеВДанныеФормы()
В этой заметке будет описана возможность использований процедур ДанныеФормыВЗначение() и ЗначениеВДанныеФормы().
Что нам говорит синтакс-помощник?
Глобальный контекст.ЗначениеВДанныеФормы (Global context.ValueToFormData)
Глобальный контекст (Global context)
Тип: Произвольный. Значение прикладного типа, для которого определено преобразование в данные формы.
Преобразует объект прикладного типа в данные формы.
Сервер, толстый клиент.
Глобальный контекст (Global context)
Тип: Тип. Тип значения, получаемого из данных формы.
Преобразует данные формы в объект прикладного типа.
Сервер, толстый клиент.
Использовать эти процедуры можно, например, следующим образом:
ОбъектБазы = ДанныеФормыВЗначение(Объект, Тип(“ДокументОбъект.РеализацияТоваровУслуг”));
НачальнаяУстановкаРеквизитовДокументов.УстановитьНачальныеРеквизиты(ОбъектБазы);
ЗначениеВДанныеФормы(ОбъектБазы, Объект);
Сам код заполнения начальных реквизитов в данном случае располагается в общем модуле (удобное использовать, если эта одинаковая процедура должна использоваться для многих документов). Можно, разумеется, разместить ее в модуле объекта или в модуле менеджера в зависимости от Ваших потребностей.
Написанные выше строчки могут располагаться в серверной процедуре ПриСозданииНаСервере() или ОбработкаЗаполнения().
О нашем блоге
В этом разделе нашего интернет магазина вы найдете много полезной информации, статей и обзоров на продукты и программы, которые представлены в нашем каталоге. Приятного чтения!
IT записки
Заполнение реквезитов
Для реквезитов в документе\обработке\отчете:
Для реквезитов на форме:
Наверх
Получение пустой ссылки или предопределенного значения.
Наверх
Открыть форму
или по умолчанию
Наверх
Фунции отвечающие за обмен данных с формой на сервере.
- РеквизитФормыВЗначение- Преобразует указанный реквизит формы в объект прикладного типа.
- ЗначениеВРеквизитФормы — Преобразует объект прикладного типа в реквизит управляемой формы
- ДанныеФормыВЗначение — Преобразует данные формы в объект прикладного типа.
- ЗначениеВДанныеФормы — Преобразует объект прикладного типа в универсальный объект данных.
Наверх
На сервере обратиться к функции находящейся в модуле объекта.
Пример для обработки. Функция в модуле объекта зовется ОбсчитатьДанные.
Наверх
Внешняя обработка: из модуля формы вызвать процедуру в модуле объекта
Наверх
ПолучитьМакет
Наверх
Получение расшифровки для текущей ячейки СКД
«Результат» — поле табличного документа.
Наверх
Обратиться к «видимым» строкам таблицы значения
На форме расположен таблица «табДанные». Берет данные из таблицы значения «тзДанные».
Имееться булевое поле «Выбран» которое надо проставить в Истина для тех строк которые видны после поиска.
Наверх
Получить данные из текущей строки таблицы
Таблица «ОтклонениеПоВыручке» ссылаеться на одноименную табличную часть в документе.