Преобразование данных прикладных объектов в данные формы и обратно

Печать (Ctrl+P)

1С:Предприятие 8.3.14. Документация
Глава 7. Формы

Для конвертирования прикладных объектов в данные формы и обратно существует набор глобальных методов:

  •  ЗначениеВДанныеФормы(),
  •  ДанныеФормыВЗначение(),
  •  КопироватьДанныеФормы().

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

Во время конвертирования данных формы в прикладной объект нужно учитывать их совместимость.

  •  ЗначениеВДанныеФормы() ‑ преобразует объект прикладного типа в данные формы.
  •  ДанныеФормыВЗначение() ‑ преобразует данные формы в объект прикладного типа.
  •  КопироватьДанныеФормы() ‑ производит копирование данных формы, обладающих совместимой структурой. Возвращает значение Истина, если копирование произведено, или Ложь, если структура объектов несовместима.

При преобразовании данных формы в прикладные объекты и обратно используется кеширование объектов, но при этом выполняется проверка актуальности версии объекта в кеше.

ПРИМЕЧАНИЕ. При выполнении стандартных действий (открытие формы, выполнение стандартной команды Записать и т. д.) в форме с основным реквизитом преобразование выполняется автоматически.

Приведем пример, как использовать преобразование данных в собственных алгоритмах.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
 ОбъектТовар = Товары.НайтиПоНаименованию("Кофейник").ПолучитьОбъект();
 ЗначениеВДанныеФормы(ОбъектТовар, Объект);
КонецПроцедуры

&НаКлиенте
Процедура Записать()
 ЗаписатьНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаписатьНаСервере()
  ОбъектТовар =     ДанныеФормыВЗначение(Объект, Тип("СправочникОбъект.Товары"));
    ОбъектТовар.Записать();
КонецПроцедуры

Также у объекта ФормаКлиентскогоПриложения существуют методы, доступные на сервере:

● ЗначениеВРеквизитФормы() ‑ выполняет преобразование объекта прикладного типа в заданный реквизит формы.

● РеквизитФормыВЗначение() ‑ преобразует реквизит данных формы в объект прикладного типа.

Использование данных методов обычно удобнее, так как они имеют, например, информацию о типе реквизита формы. Кроме того, метод РеквизитФормыВЗначение() выполняет установку соответствия данных формы и объекта, которая используется при формировании сообщений.

Также следует помнить, что при преобразовании в данные формы (как с помощью метода ЗначениеВДанныеФормы(), так и с помощью метода ЗначениеВРеквизитФормы()) объектов типа ТаблицаЗначений или ДеревоЗначений нужно учитывать следующую особенность: в преобразуемом объекте должны существовать все колонки, которые существуют в данных формы.

ВНИМАНИЕ! Колонки реквизитов, не связанные с данными, не участвуют в преобразовании значений между данными формы и объектами информационной базы и обратно. Колонки, отсутствующие в данных объекта, очищаются при преобразовании в данные формы.

При переносе объекта в данные формы платформой, или при вызове методов ЗначениеВДанныеФормы(), ЗначениеВРеквизитФормы(), переносятся только данные объекта. Внутренние состояние объекта в данные формы не переносится. Например, значение ссылки нового, которая установлена в объект методом УстановитьСсылкуНового(), будет утеряна в процессе преобразования объекта в данные формы и обратно.

В качестве первого параметра методов РеквизитФормыВЗначение() и ДанныеФормыВЗначение() могут выступать только реквизиты формы следующих типов: ДанныеФормыСтруктура, ДанныеФормыКоллекция, ДанныеФормыСтруктураСКоллекцией, ДанныеФормыДерево. Приведем пример использования этих методов.

&НаСервере
Процедура ПересчитатьНаСервере()
    // Преобразует реквизит Объект в прикладной объект.
    Документ = РеквизитФормыВЗначение("Объект");
    // Выполняет пересчет методом, определенным в модуле документа.
    Документ.Пересчитать();
    // Преобразует прикладной объект обратно в реквизит.
    ЗначениеВРеквизитФормы(Документ, "Объект");
КонецПроцедуры
Previous Article
Next Article

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.