1с как получить значение реквизита формы

Задача заключается в том, чтобы получить реквизит от ссылочного значения, хранящегося в реквизите формы. Например у документа Накладная есть реквизит ссылочного типа – Поставщик . Необходимо получить ИНН этого поставщика:

Мы находимся в модуле формы на клиенте. В контексте клиента ссылочные типы очень сильно ограничены в своих возможностях. В частности, нельзя получить значение реквизита от ссылки «через точку». Это можно сделать только в контексте сервера.

Поэтому для решения этой задачи в модуле формы создадим серверную внеконтекстную функцию, которую вызовем с клиента и передадим в нее ссылку на поставщика. В теле функции, на сервере, мы получим ИНН поставщика и вернем его на клиента.

Например, локальная команда формы, вызывающая серверную функцию, будет выглядеть следующим образом:

А функцию ПолучитьИНННаСервере() опишем здесь же, в модуле формы:

Таким образом на сервере мы сразу же получаем значение реквизита «через точку» от полученной ссылки и возвращаем его на клиента.

Важно заметить, что функция ПолучитьИНННаСервере() не использует контекст формы (директива компиляции &НаСервереБезКонтекста ). Потому что все, что нужно передать на сервер, – это только ссылка, и мы передаем ее в параметре функции. Использовать контекстный вызов и передавать на сервер весь контекст формы только ради того, чтобы на сервере взять из него значение одного реквизита формы, — это слишком расточительно.

Если реквизит объекта «вытащен» на форму, то реквизит формы можно получить через объект ЭлементыФормы , который содержит коллекцию элементов формы, сканируя ее в цикле:

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

Реквизиты формы могут быть различных типов. Поставив фильтр в виде типа реквизита мы можем просмотреть реквизиты определенного типа.

Если реквизит формы имеет тип «ТабличноеПоле», то можно такой элемент просканировать во вложенном цикле и узнать имена колонок таблицы:

Как получить значение отдельного реквизита формы?

Чаще требуется получать не массив реквизитов формы, а значение отдельных конкретных реквизитов формы. Например реквизиты «Шапки» или «Подвала» формы документа.

Реквизиты шапки могут иметь различные типы: Дата, СправочникСсылка, ЧекБокс, элемент раскрывающегося списка и др.

Доступ к табличной части формы через объект

Доступ к табличной части формы (например: Товары) можно получить через объект:

Здесь ДокОбъект.Товары — это табличная часть «Товары» объекта. Далее в цикле табличная часть построчно сканируется!
В каждой итерации цикла можно получить доступ к любому полю строки указав через точку имя этого поля:

Доступ к табличной части формы через ЭлементыФормы

Табличная часть объекта и табличная часть формы объекта — это не одно и то же!

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

То есть должна быть установлена связь между реквизитом табчасти объекта и реквизитом табчасти формы. Форм у объекта метаданных может быть много мы знаем. Табличную часть формы объекта можно получить через объект ЭлементыФормы :

Объект ЭлементыФормы используется для доступа к элементам управления, расположенным на форме, в частности к таб части документа.

Результат для документа Авансовый отчет:

Это табличное поле!! Товары
Количество строк: 4
Женские ботфорты коричневые
Ботинки женские демисезонные
Ботинки женские натуральная кожа
Женские босоножки

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

Результат для документа Авансовый отчет:

Это табличное поле!! ВыданныеАвансы
=======================
НомерСтроки 1
ДокументАванса Расходный кассовый ордер ТК000000004 от 15.02.2007 19:24:03
СуммаДокументаАванса 300
ВалютаДокументаАванса USD
Выдано 300
Сумма 174

Такое двойное сканирование удобно использовать для быстрой проверки того, что все колонки таб части формы имеют связь с реквизитами таб части объекта. Если такой связи у какой-либо колонки нет, система сгенерирует ошибку.

Получение значения реквизита формы.

Нужно вывести на форму список значений со списком типов цен.
Реквизит должен быть не реквизитом объекта, а реквизитом формы.

Что бы получить значение элемента (реквизита) формы нужно написать следующее:
Код 1C v 8.2 УП
Через «ЭтаФорма» также можно достучаться и к элементам «Объект».
Код 1C v 8.2 УП

Похожие FAQ

Еще в этой же категории

Как на управляемой форме разместить список регистра сведений с отбором? 15
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом » ДинамическийСписок» В поле » Основная табли Поле выбора

Заполнение списка значений в элементе поле выбора на форме 9
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип — Произвольный, Использование — Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Как установить параметр динамического списка? 8
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма

Программное создание таблицы значений с условным оформлением 6
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Как обновить динамический список или реквизит на форме клиента? 6
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Посмотреть все в категории Работа с Формой (Диалог) и её элементами

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: