1с 8.3 программное добавление элементов управляемой формы. Реквизиты управляемой формы (1Cv8). Передача данных между клиентской и серверной частями управляемой формы

Реквизиты формы

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

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

Имеется возможность назначить Основной реквизит формы , т. е. реквизит, который будет определять стандартную функциональность формы (расширение формы). Следует помнить, что основной реквизит у формы может быть только один.

Расширение формы – это дополнительные свойства, методы и параметры формы объекта УправляемаяФорма, характерные для объекта, являющегося основным элементом формы.

В процессе разработки формы можно явно задать возможность просмотра и редактирования конкретных реквизитов формы, в разрезе ролей, с помощью свойств Просмотр и Редактирование (подробнее смотрите раздел «Ролевая настройка формы» главы «Редакторы»). Кроме того, доступность того или иного реквизита в самой форме можно настраивать с помощью функциональных опций (подробнее о функциональных опциях можно посмотреть в главе «Управление интерфейсом конфигурации»).

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

Типы данных, доступные в управляемой форме

Управляемая форма отличается от обычной формы также и типами данных, с которыми она работает. Если обычная форма работает с большинством типов, которые предоставляет 1С:Предприятие (в том числе и вида СправочникОбъект, ДокументОбъект и т. д.), то в управляемой форме можно выделить следующие категории типов:

  • типы, которые непосредственно используются в форме – это те типы, которые существуют на стороне тонкого и Веб-клиента (например, Число, СправочникСсылка.Товары, ГрафическаяСхема, ТабличныйДокумент);
  • типы, которые будут преобразованы в специальные типы данных – типы данных управляемой формы. Такие типы отображаются в списке реквизитов формы в круглых скобках, например (СправочникОбъект.Товары);
  • динамический список (подробнее см. раздел «Динамический список» данной главы).

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

Некоторые прикладные типы (такие как СправочникОбъект и т. д.) не существуют на стороне тонкого и Веб-клиентов (подробнее см. главу «Концепция управляемого приложения»). Поэтому для представления в форме таких прикладных типов в платформе введены специальные типы данных, предназначенные для работы в управляемых формах. Эта особенность управляемого приложения обуславливает необходимость выполнять преобразование прикладных объектов в данные формы (и обратно).

Используются следующие типы данных:

  • ДанныеФормыСтруктура – содержит набор свойств произвольного типа. Свойствами могут быть другие структуры, коллекции или структуры с коллекциями. Таким типом представляется, например, в форме СправочникОбъект.
  • ДанныеФормыКоллекция – это список типизированных значений, похожий на массив. Доступ к элементу коллекции осуществляется по индексу или по идентификатору. Доступ по идентификатору может отсутствовать в некоторых случаях. Это обусловлено типом прикладного объекта, который представлен этой коллекцией. Идентификатором может быть любое целое число. Таким типом представляется, например, в форме табличная часть.
  • ДанныеФормыСтруктураСКоллекцией – это объект, который представлен в виде структуры и коллекции одновременно. С ним можно обращаться как с любой из этих сущностей. Таким типом представляется, например, в форме набор записей.
  • ДанныеФормыДерево – объект предназначен для хранения иерархических данных.

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

Например, документ, содержащий табличную часть, будет представлен объектом типа ДанныеФормыСтруктура (собственно документ), которому подчинен объект типа ДанныеФормыКоллекция (табличная часть документа).

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

Передача данных между клиентской и серверной частями управляемой формы

Фактически можно сказать, что данные формы – это унифицированное представление данных различных прикладных объектов, с которыми форма работает единообразно и которые присутствуют и на сервере, и на клиенте. То есть форма содержит некоторую «проекцию» данных прикладных объектов в виде своих собственных типов данных и выполняет преобразование между ними при необходимости. Однако в случае если разработчик конфигурации реализует свой алгоритм обработки данных, то преобразование данных (из специализированных типов в прикладные и обратно) он должен выполнять самостоятельно.

При редактировании реквизитов формы в специализированном редакторе (подробнее см. раздел «Реквизиты формы» главы «Редакторы») имеется возможность влиять на передачу данных между клиентом и сервером во время работы формы. Для этого служит колонка редактора реквизитов Использовать всегда . Действие этого свойства различается для трех типов реквизитов:

  • Для реквизита, подчиненного динамическому списку (колонке динамического списка):
    • свойство включено – реквизит всегда считывается из базы данных и включается в данные формы;
    • свойство выключено – реквизит считывается из базы данных и включается в данные формы только тогда, когда есть видимый в данный момент элемент формы, связанный с реквизитом или его подчиненным реквизитом.
  • Для реквизита, подчиненного коллекции движений:
    • свойство включено – движения документа считываются из базы данных и будут присутствовать в данных формы;
    • свойство выключено – движения документа не будут считываться из базы данных и не попадут в данные формы (если нет элемента формы, ссылающегося на движения документа).
  • Остальные реквизиты формы:
    • свойство включено – реквизит будет присутствовать в данных формы вне зависимости от того, есть или нет хоть один элемент формы, который связан с реквизитом или его подчиненным реквизитом;
    • свойство выключено – реквизит будет присутствовать в данных формы только в том случае, если есть элемент формы, связанный с реквизитом или его подчиненным реквизитом. В отличие от реквизитов динамического списка, здесь не играет роли видимость элемента, связанного с реквизитом.

Примечание. Следует помнить, что свойство, установленное у родительского реквизита, действует на все подчиненные реквизиты. Например, если свойство Использовать всегда снято у табличной части документа, то система считает, что это свойство снято и у всех подчиненных реквизитов (несмотря на фактическое состояние свойства).

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

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

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

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

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

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

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

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

&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

КонецПроцедуры

&НаКлиенте Процедура Записать()

ЗаписатьНаСервере();

КонецПроцедуры

&НаСервере Процедура ЗаписатьНаСервере()

ОбъектТовар = ДанныеФормыВЗначение(Объект, Тип(«СправочникОбъект.Товары»)); ОбъектТовар.Записать();

КонецПроцедуры

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

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

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

Приведем пример использования этих методов.

&НаСервере Процедура ПересчитатьНаСервере()

// Преобразует реквизит Объект в прикладной объект. Документ = РеквизитФормыВЗначение(«Объект»); // Выполняет пересчет методом, определенным в модуле документа. Документ.Пересчитать(); // Преобразует прикладной объект обратно в реквизит. ЗначениеВРеквизитФормы(Документ, «Объект»);

КонецПроцедуры

Программный интерфейс

ДанныеФормыДерево (FormDataTree)

  • НайтиПоИдентификатору (FindById)
  • ПолучитьЭлементы (GetItems)

Описание:

Предназначен для моделирования дерева в данных управляемой формы.

Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту определяется в пространстве имен. Имя типа XDTO:

ПолучитьЭлементы (GetItems)

Синтаксис:

ПолучитьЭлементы()

Возвращаемое значение:

Тип: ДанныеФормыКоллекцияЭлементовДерева.

Описание:

Получает коллекцию элементов дерева верхнего уровня.

Доступность: клиент, сервер, тонкий клиент, веб-клиент.

НайтиПоИдентификатору (FindById)

Синтаксис:

НайтиПоИдентификатору(<Идентификатор>)

Параметры:

<Идентификатор> (обязательный)

Тип: Число. Идентификатор элемента дерева.

Возвращаемое значение:

Тип: ДанныеФормыЭлементДерева.

Описание:

Получает элемент коллекции по идентификатору.

Доступность: клиент, сервер, тонкий клиент, веб-клиент.

ДанныеФормыЭлементДерева (FormDataTreeItem)

Свойства:

<Имя свойства> (<Имя свойства>)

  • ПолучитьИдентификатор (GetId)
  • ПолучитьРодителя (GetParent)
  • ПолучитьЭлементы (GetItems)
  • Свойство (Property)

Описание:

Элемент дерева данных формы.

ДанныеФормыКоллекцияЭлементовДерева (FormDataTreeItemCollection)

Элементы коллекции: ДанныеФормыЭлементДерева

Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции. Возможно обращение к элементу коллекции посредством оператора [...]. В качестве аргумента передается индекс элемента.

  • Вставить (Insert)
  • Добавить (Add)
  • Индекс (IndexOf)
  • Количество (Count)
  • Очистить (Clear)
  • Получить (Get)
  • Сдвинуть (Move)
  • Удалить (Delete)

Описание:

Коллекция элементов дерева.

Доступность: клиент, сервер, тонкий клиент, веб-клиент.

См. также:

  • ДанныеФормыЭлементДерева, метод ПолучитьЭлементы
  • ДанныеФормыДерево, метод ПолучитьЭлементы

Особенности работы с деревом значений

Обновление дерева

Существует проблема падения платформы при обновлении дерева.

Если в дереве был развернут какой-либо узел и выбран подчиненный узел, то при обновлении дерева функцией ЗначениеВДанныеФормы происходит падение платформы.

Решение: перед обновлением нужно очищать дерево.

Например:

&НаСервере Процедура ОчиститьДерево(элементы) Для каждого элемент из элементы Цикл ОчиститьДерево(элемент.ПолучитьЭлементы()); КонецЦикла; элементы.Очистить(); КонецПроцедуры

&НаСервере Процедура ЗаполнитьДеревоПонятий() дзПонятия = срСвойства.ПостроитьДеревоПонятий(НаДату, Мета.ТекущаяИБ()); ОчиститьДерево(ДеревоПонятий.ПолучитьЭлементы()); ЗначениеВДанныеФормы(дзПонятия, ДеревоПонятий); КонецПроцедуры

&НаКлиенте Процедура НаДатуПриИзменении(Элемент) ЗаполнитьДеревоПонятий(); КонецПроцедуры

Управление формой осуществляется посредством различных элементов формы, которые расположены иерархически на закладке Элементы конструктора формы. Самым главным элементом является сама форма, которая расположена вверху иерархии элементов, а остальные элементы ей подчинены.

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

Добавление элементов на форму

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

После выбора, элемент нужного появится в окне Элементы .

Элемент управляемой формы Поле

Разберем элемент управляемой формы Поле . Этот элемент нужен для ввода информации на форме. А также для отображения какой-либо информации. После того, как Вы добавите этот элемент на форму, справа откроется палитра свойств элемента формы. Пока Вас должны интересовать два свойства – ПутьКДанным и Вид.

В свойстве ПутьКДанным разработчик может связать элемент формы с нужным реквизитом формы. Обратите внимание, что после того, как был добавлен элемент Поле ввода на форму он не отобразился на самой форме. Это произошло потому, что наш новый элемент не связан с . Для примера я создал на форме обработки несколько реквизитов с разными примитивными типами и один реквизит с ссылочным типом.

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

После этого заполнятся свойства ПутьКДанным и Вид, а сам элемент отобразится в представлении формы.

Обратите внимание на свойство элемента Вид . При помощи этого свойства определяется функциональность поля ввода. Можно выбрать различные значения этого свойства.

В зависимости от выбранного значения будет определятся функционал. На рисунках выше выбрано значение – поле ввода , т.е. мы можем вводить какие-либо значения в это поле ввода, а если выбрать значение поле надписи , то ни чего вводить мы не сможем.

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

Теперь добавим новый элемент формы с типом Поле ввода и свяжем его с реквизитом РеквзитДата посредством уже знакомого нам свойства ПутьКДанным

Как Вы видите вид поля ввода поменялся, а так же поменяется возможный выбор значений свойства Вид.

Таким образом, делаем вывод – функциональность поля ввода зависит от типа реквизита.

Для реквизита с типом Булево будут доступны следующие значения свойства Вид.

А для реквизита с ссылочным типом будут доступны иные значения свойства Вид.

Более подробно работа с элементами формы на практичных примерах дается в книге «Основы разработки в 1С:Такси. Разработка управляемого приложения за 12 шагов» .

Иногда кажется, что изучить язык программирование в 1С сложно и трудно. В действительности программировать в 1С — легко. Помогут Вам легко и быстро освоить программирование в 1С мои книги: и «Основы разработки в 1С: Такси»

Изучите программирование в 1С с помощью моей книги «Программировать в 1С за 11 шагов»

  1. Без сложных технических терминов.
  2. Более 700 страниц практического материала.
  3. Каждое задание сопровождается рисунком (скриншот).
  4. Сборник задач для домашней проработки.
  5. Книга написана понятным и простым языком — для новичка.

Эта книга подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С

  1. Без сложных технических терминов;
  2. Более 600 страниц практического материала;
  3. Каждый пример сопровождается рисунком (скриншот);
  4. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!

Промо-код на скидку в 15% — 48PVXHeYu


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы.

Реквизиты формы обеспечивают ее связь с данными. При этом один (и только один) из реквизитов может быть назначен основным; он не обязательно может быть того типа данных, к объекту которого мы рисуем форму. Но от типа данных основного реквизита будет зависеть поведение формы. Кроме изменения поведения формы, происходит изменение контекста модуля формы. Наряду с методами и свойствами формы, в нем становятся доступны методы и свойства объекта, являющегося значением основного реквизита. Важно, что формы типа "Произвольная форма" не имеют основного реквизита. В этом случае поведение формы определяется только настройками пользователя. Рассмотрим вопросы по основным реквизитам.

Вопрос 10.05 экзамена 1С:Профессионал по платформе. Для чего служит основной реквизит формы?

  1. Определяет источник данных для формы в целом
  2. Определяет стандартные возможности платформы для работы формы с данными типа, заданного у основного реквизита
  3. Для обеспечения возможности программного обращения к реквизитам объекта из локального контекста формы
  4. Обеспечивает визуализацию реквизитов объекта на диалоге формы
  5. Верны 2 и 3
  6. Верны 1 и 2

Правильный ответ шестой, см. выше.


Вопрос 10.06 экзамена 1С:Профессионал по платформе. Для чего нужны реквизиты формы?
  1. Для описания состава данных, которые отображаются, редактируются или хранятся в форме
  2. Для отображения и редактирования данных в форме
  3. Верны 1 и 2

Правильный ответ третий - и то, и другое.

Вопрос 10.07 экзамена 1С:Профессионал по платформе. Что бы произвольной управляемой форме назначить основной реквизит...

  1. нужно в свойствах реквизита формы установить флажок "Основной реквизит"
  2. нужно заполнить свойство "Данные" формы, выбрав нужный реквизит формы

Правильный ответ второй:

Вопрос 10.08 экзамена 1С:Профессионал по платформе. Что бы произвольной обычной форме назначить основной реквизит...
  1. форму нужно сделать основной, основной реквизит при этом определяется автоматически
  2. нужно в свойствах реквизита формы установить флажок "Основной реквизит"
  3. нужно войти в меню "Правка", пункт "Основной реквизит" и выбрать нужное значение
  4. нужно заполнить свойство "Данные" формы, выбрав нужный реквизит формы

Правильный ответ четвертый:

Основной реквизит выделяется жирным:

Вопрос 10.09 экзамена 1С:Профессионал по платформе. При наличии одного основного реквизита формы можно ли добавить еще один основной реквизит?
  1. Это не возможно
  2. Можно посредством назначения соответствующего значения свойства реквизита формы
  3. Можно только программно, при обращении к объекту "Форма"
  4. Можно посредством добавления еще одного значения к соответствующему свойству формы

Правильный ответ первый, основной реквизит строго один, т.к. связь с объектом должна быть однозначна.

Вопрос 10.113 экзамена 1С:Профессионал по платформе. Какой из реквизитов формы, представленной на рисунке, является основным?

  1. СписокКурсовВалют
  2. СправочникОбъект
  3. У форм справочников нет основного реквизита
  4. У форм справочников все реквизиты основные
Правильный ответ второй - тот, что жирный.