Как получить значение элемента формы 1С
1. Реквизиты объекта и реквизиты формы в 1С
В обычном приложении у элемента формы 1С 8.3 было свойство «Значение», доступное как для чтения, так и для записи. Какой аналог в управляемом приложении?
Элементы формы 1С 8.3 могут содержать реквизиты двух видов: реквизиты объекта 1С и реквизиты формы.
Красным помечен реквизит объекта 1С Контрагент, а зеленым – реквизит формы в 1С.
Интерактивно выберем эти элементы в пользовательском режиме 1С и попробуем прочитать их «программно» кнопкой «Прочитать».
Если читать значения реквизитов в клиентской процедуре, то код для 1С Предприятия будет следующий:
Все бы хорошо: мы получили на клиенте значения реквизитов объекта 1С и формы, но – не значения элементов формы 1С. На клиенте значение элементов формы 1С получить нельзя.
2. Как получить значения из элементов формы 1С
Чтобы получить значения из элементов формы 1С, нам потребуется серверный вызов:
Именно на сервере у элемента формы 1С 8.3 становится доступно свойство ПутьКДанным, по которому его можно извлечь либо из Объекта, который имеет тип ДанныеФормыСтруктура:
…либо из Формы, которая имеет тип ФормаКлиентскогоПриложения:
Форма и ее элементы не видны на сервере без контекста. То есть код для 1С:Предприятия выдаст множество ошибок.
Также Форму нельзя передать как параметр в процедуру и функцию на сервер или в общий модуль.
Новое значение доступно как параметр процедуры ВыбранноеЗначение.
Система дает шанс что-то сделать в этой ситуации.
Как получить значение элемента формы 1С
1. Реквизиты объекта и реквизиты формы в 1С
В обычном приложении у элемента формы 1С 8.3 было свойство «Значение», доступное как для чтения, так и для записи. Какой аналог в управляемом приложении?
Элементы формы 1С 8.3 могут содержать реквизиты двух видов: реквизиты объекта 1С и реквизиты формы.
Красным помечен реквизит объекта 1С Контрагент, а зеленым – реквизит формы в 1С.
Интерактивно выберем эти элементы в пользовательском режиме 1С и попробуем прочитать их «программно» кнопкой «Прочитать».
Если читать значения реквизитов в клиентской процедуре, то код для 1С Предприятия будет следующий:
Все бы хорошо: мы получили на клиенте значения реквизитов объекта 1С и формы, но – не значения элементов формы 1С. На клиенте значение элементов формы 1С получить нельзя.
2. Как получить значения из элементов формы 1С
Чтобы получить значения из элементов формы 1С, нам потребуется серверный вызов:
Именно на сервере у элемента формы 1С 8.3 становится доступно свойство ПутьКДанным, по которому его можно извлечь либо из Объекта, который имеет тип ДанныеФормыСтруктура:
…либо из Формы, которая имеет тип ФормаКлиентскогоПриложения:
Форма и ее элементы не видны на сервере без контекста. То есть код для 1С:Предприятия выдаст множество ошибок.
Также Форму нельзя передать как параметр в процедуру и функцию на сервер или в общий модуль.
Новое значение доступно как параметр процедуры ВыбранноеЗначение.
Система дает шанс что-то сделать в этой ситуации.
Как получить доступ к реквизитам формы?
Этот цикл позволяет просмотреть имена а так же типы всех реквизитов формы, в том числе такие реквизиты как надписи, командные панели и тд.
Реквизиты формы могут быть различных типов. Поставив фильтр в виде типа реквизита мы можем просмотреть реквизиты определенного типа.
Если реквизит формы имеет тип «ТабличноеПоле», то можно такой элемент просканировать во вложенном цикле и узнать имена колонок таблицы:
Как получить значение отдельного реквизита формы?
Чаще требуется получать не массив реквизитов формы, а значение отдельных конкретных реквизитов формы. Например реквизиты «Шапки» или «Подвала» формы документа.
Реквизиты шапки могут иметь различные типы: Дата, СправочникСсылка, ЧекБокс, элемент раскрывающегося списка и др.
Как получить значение элементов табличной части формы?
Доступ к табличной части формы через объект
Доступ к табличной части формы (например: Товары) можно получить через объект:
Доступ к табличной части формы через ЭлементыФормы
Для того, чтобы код работал правильно, надо чтобы колонка формы табчасти объекта в свойстве данные ссылалась на реквизит табличной части объекта. Этим определяется тип колонки таб части формы.
То есть должна быть установлена связь между реквизитом табчасти объекта и реквизитом табчасти формы. Форм у объекта метаданных может быть много мы знаем. Табличную часть формы объекта можно получить через объект ЭлементыФормы :
Объект ЭлементыФормы используется для доступа к элементам управления, расположенным на форме, в частности к таб части документа.
Результат для документа Авансовый отчет:
Это табличное поле!! Товары
Количество строк: 4
Женские ботфорты коричневые
Ботинки женские демисезонные
Ботинки женские натуральная кожа
Женские босоножки
Результат для документа Авансовый отчет:
Это табличное поле!! ВыданныеАвансы
=======================
НомерСтроки 1
ДокументАванса Расходный кассовый ордер ТК000000004 от 15.02.2007 19:24:03
СуммаДокументаАванса 300
ВалютаДокументаАванса USD
Выдано 300
Сумма 174
Такое двойное сканирование удобно использовать для быстрой проверки того, что все колонки таб части формы имеют связь с реквизитами таб части объекта. Если такой связи у какой-либо колонки нет, система сгенерирует ошибку.
Как получить реквизит от ссылочного значения на клиенте
На стороне клиента нельзя обратиться к данным базы, в т.ч. получить реквизит от ссылочного значения. Рассмотрим как все же можно решить эту задачу.
На стороне клиента код вида
приведет к ошибке. Такие конструкции возможны только на сервере.
Предположим, что стоит задача при нажатии на кнопку отобразить ИНН контрагента, выбранного на форме. Для решения поставленной задачи необходимо обратиться на сервер для получения требуемой информации(ИНН). Программный код может иметь вид:
Серверная функция является внеконтекстной ( &НаСервереБезКонтекста ). Это значит, что данные, содержащиеся в форме, не будут отсылаться на сервер, что уменьшит объем передаваемых данных и скорость возврата результата функции.
Внимание!
В случае, когда значение реквизита нужно только для визуального отображения пользователю, можно пойти другим путем: имеется возможность вывести реквизит от ссылочного значения на форму. При этом пользователь не сможет отредактировать этот реквизит.
Рассмотрим пример: на форме документа рядом с полем ввода контрагента должен выводиться его ИНН. Для этого перенесем реквизит ИНН на форму:
В пользовательском режиме при указании контрагента, его ИНН будет автоматически отображен на форме. Никакого программирования в этом случае не потребовалось.
Остались вопросы?
Спросите в комментариях к статье.
1С значение элемента управляемой формы
Основной причиной наличия этого раздела является то, что в 1С:Предприятии 8 экранные формы и элементы управления «отделены» от объектов конфигурации. Поэтому для того, чтобы создать обычную форму списка справочника или форму редактирования документа нужно их «связать» друг с другом. В большинстве случаев эту задачу решают конструктор формы или диалог «размещение данных», но необходимо понимать, какие именно действия при этом производятся. Тогда при необходимости их можно будет произвести вручную или подкорректировать результат работы конструктора.
На эту ситуацию можно посмотреть с двух сторон:
Объект конфигурации (данные):
Экранная форма и элементы управления:
Необходимо понимать, что если форма принадлежит конкретному объекту конфигурации (т.е. отображается в списке «Формы» объекта), то этого недостаточно для реализации связи между элементами управления и данными. Более того, это даже необязательно. Вполне возможно создать общую форму, не принадлежащую ни одному из объектов конфигурации, которая будет отображать список элементов справочника или позволять редактировать конкретный документ. Другое дело, что такую форму нельзя будет назначить в качестве «основной» для определенных действий, но свою функцию она выполнять будет.
Чтобы какое-нибудь табличное поле в любой экранной форме отображало (и позволяло с ним работать) список элементов справочника, оно должно быть связано определенным образом с объектом типа «СправочникСписок.ИмяСправочника». В этой статье рассматривается, как настроить такую связь между формой с ее элементами управления и объектами конфигурации с их реквизитами и табличными частями.
Установка связи с данными производится путем создания реквизитов формы определенного типа и установки свойства «Данные» элементов управления и самой формы. Поясним это на простом примере. Допустим нужно создать форму списка справочника и форму элемента, но мы не будем пользоваться конструктором форм, а сделаем все вручную.
Создание формы списка
Создаем новую форму, принадлежащую справочнику «Номенклатура». При этом запускается конструктор и предлагает выбрать тип формы.
Выберем тип формы «Произвольная», в этом случае создается независимая форма, не связанная с данными. Заметьте, что у нее нет ни одного реквизита формы.
Создадим реквизит формы с именем «СпрСписок» и назначим ему тип «СправочникСписок.Номенклатура»:
Обратите внимание, что этот реквизит не является «основным» (он не выделен жирным шрифтом). Если у формы есть именно основной реквизит, то это сильно меняет поведение формы. Только в этом случае она может являться полноценной формой списка или формой элемента. Сделаем этот реквизит основным для формы. Для этого откройте свойства самой формы и заполните свойство «Данные» следующим образом:
Заметьте, что при указании свойства «Данные» автоматически изменилось и свойство «Тип значения». Если его сейчас изменить, то изменится тип основного реквизита формы. Мы этого делать не будем.
Если вы перейдете обратно на закладку «Реквизиты» формы, то увидите, что этот реквизит стал «основным» (выделен жирным шрифтом):
Теперь поведение формы изменилось в нужную нам сторону. Наличие основного реквизита именно такого типа («СправочникСписок.Номенклатура») позволяет форме служить формой списка. В зависимости от типа основного реквизита у формы могут появиться новые события, описываемые «расширениями формы», а также это влияет на возможный состав кнопок командных панелей формы.
Например, у нашей формы списка справочника появились новые свойства, доступные из встроенного языка:
Перейдем теперь в диалог формы и разместим в рабочей области формы элемент управления «Табличное поле»:
В момент создания нового элемента управления у формы появился новый реквизит (в данном случае «ТабличноеПоле1» типа «ТаблицаЗначений»). Это пока еще не то, к чему мы стремимся, нам нужен динамический спсиок элементов справочника. Теперь нужно связать это табличное поле с реквизитом формы «СпрСписок», имеющим тип «СправочникСписок.Номенклатура». Для этого в свойствах табличного поля укажите свойство «Данные» следующим образом:
На этом этапе лучше сразу изменить имя элемента управления на что-нибудь более читабельное, например, «тпСписок». Но имя элемента управления в принципе ни на что не влияет, кроме случая, когда происходит обращение к элементу управления из модуля формы.
Заметьте, что свойство «Тип значения» для табличного поля стало недоступным. Это означает, что через свойства элемента управления нельзя изменить тип значения реквизита формы. Также заметьте, что в после установки свойства «Данные» произошли некоторые изменения с формой и ее реквизитами:
Теперь в форме есть все необходимое для того, чтобы служить формой списка элементов справочника. Зададим заголовок для формы «Список Номенклатура» и назначим эту форму в качестве основной формы списка, чтобы она открывалась по умолчанию:
Теперь можно запустить «1С:Предприятие» и проверить работу формы:
Создание формы элемента
Теперь создадим форму элемента для этого справочника. Мы опять не будем пользоваться конструктором, а продемонстрируем, как создаются такие формы вручную. Это будет очень полезным, чтобы понимать, что именно делает конструктор.
Создайте новую форму, принадлежащую справочнику. При создании формы укажите тип формы «Произвольная», затем можно задать для нее имя «ФормаЭлементаНовая». Будет создана следующая экранная форма:
Перейдите на закладку «Реквизиты» и создайте новый реквизит формы с именем «СпрОбъект» и типом «СправочникОбъект.Номенклатура».
Этот реквизит пока не является основным реквизитом формы, потому что он не указан в свойстве «Данные» самой формы. Сделаем это. Откройте свойства формы и заполните свойство «Данные» (тип значения будет заполнен автоматически):
Если в палитре свойств изменить «Тип значения», то изменится тип значения реквизита формы. Сейчас этого делать не нужно.
После указания свойства «Данные» реквизит «СпрОбъект» стал основным реквизитом формы. Так как он имеет тип «СправочникОбъект.Номенклатуры», то это значительно изменило поведение формы, в частности следующие аспекты:
Внимание: не путайте события формы «ПередЗаписью» и «ПриЗаписи», а также одноименные события объекта типа «СправочникОбъект». События формы возникают только при интерактивных действиях из этой формы. Нужно иметь в виду, что элемент справочника может быть также записан программно с помощью метода Записать().
Теперь разместим диалоге формы элементы управления для редактирования элемента справочника. Поместите в форму поле ввода и рядом с ним надпись «Наименование»:
В свойствах поля для ввода наименования установите свойство «Данные», связав его с реквизитом «Наименование» объекта «СпрОбъект»:
Заметьте, что тип значения поля ввода стал недоступен для редактирования. Его тип берется из структуры самого справочника:
Аналогичным образом можно разместить в диалоге формы остальные поля ввода и другие элементы управления и связать их с соответствующими реквизитами и табличными частями справочника.
Это окно содержит список реквизитов и табличных частей объекта конфигурации, который назначен в качестве основного реквизита формы. В колонке «Данные» установите пометку для тех реквизитов, которые необходимо разместить в форме. Если диалог вызывается повторно, то пометки установлены для элементов управления, уже расположенных в форме, и если снять пометку, то элемент управления будет удален. В колонке «Элементы формы» можно выбрать тип элемента управления, возможный для данного реквизита. Например, для реквизитов типа «булево» обычно выбирается флажок.
С помощью автоматического или ручного размещения элементов управления в форме постарайтесь, чтобы она приобрела следующий вид:
Осталось назначить эту форму в качестве основной формы элемента справочника и можно проверять ее работу:
Таким образом, механизм связи между элементами формы и реквизитами (табличными частями) объекта конфигурации позволяет легко настроить общепринятые режимы работы с формами, а также реализовать новые проектные решения, используя гибкие возможности технологической платформы 1С:Предприятия 8.
Платформа 1С:Предприятие позволяет программно добавлять и изменять элементы управляемой формы. Разберемся для чего это может потребоваться.
Программная модификация формы может потребоваться в нескольких случаях:
В управляемой форме можно программно добавить, изменить и удалить:
Все указанные операции возможны только на сервере.
Программное изменение формы имеет ограничения:
Изменение команд формы
Коллекция Команды доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Добавить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере.
Изменение реквизитов формы
Внимание!
Процесс изменения состава реквизитов является достаточно ресурсоемким. Фактически выполняется пересоздание формы. В связи с этим работа с реквизитами формы выполняется в пакетном режиме.
Создадим новый реквизит формы с именем Покупатель:
// Изменения состава реквизитов
ИзменитьРеквизиты ( ДобавляемыеРеквизиты );
Изменение элементов формы
Рассмотрим несколько наиболее распространенных на практике примеров работы с командами, реквизитами и элементами формы.
Добавление команды и связанной с ней кнопки:
Добавление реквизита и связанного с ним поля ввода:
Назначение элементу формы обработчика события:
&НаКлиенте
Процедура Подключаемый_ПокупательПриИзменении ( Элемент )
// Действия события
КонецПроцедуры
Внимание!
Внимание!
Скачать обработку с примерами программного поиска и изменения реквизитов, команд и элементов управляемой формы можно ЗДЕСЬ.
Остались вопросы?
Спросите в комментариях к статье.
Получение значения реквизита формы.
Нужно вывести на форму список значений со списком типов цен.
Реквизит должен быть не реквизитом объекта, а реквизитом формы.
Что бы получить значение элемента (реквизита) формы нужно написать следующее:
Код 1C v 8.2 УП
Через «ЭтаФорма» также можно достучаться и к элементам «Объект».
Код 1C v 8.2 УП
Похожие FAQ
Еще в этой же категории
Заполнение списка значений в элементе поле выбора на форме 9
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип — Произвольный, Использование — Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Как установить параметр динамического списка? 8
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма
Программное создание таблицы значений с условным оформлением 6
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Форма