Почему не получается получить значение реквизита формы в 1С?
Я сделал форму, добавил реквизит пользователей из справочника пользователей и создал поле выбора с типом справочника пользователей. Мне нужно получить значение этого реквизита в модуле формы, но в строке, где я его получаю, выходит ошибка:
Ошибка при вызове метода контекста (РеквизитФормыВЗначение) :РеквизитПользователя = РеквизитФормыВЗначение("Пользователь"); // :ТабДокумент = СформироватьМакетНаСервере(); по причине: Недопустимое значение параметра (параметр номер '1')
Как это можно исправить? Вот сам код:
&НаСервере Функция СформироватьМакетНаСервере() ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); РеквизитПользователя = РеквизитФормыВЗначение("Пользователь"); // КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(ОтчетОбъект.СхемаКомпоновкиДанных, ОтчетОбъект.КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ТаблицаЗначений = Новый ТаблицаЗначений; ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.Очистить(); Макет = ОтчетОбъект.ПолучитьМакет("Макет"); Возврат ТабДокумент; КонецФункции &НаКлиенте Процедура СформироватьМакет(Команда) ТабДокумент = СформироватьМакетНаСервере(); КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("Макет"); ПечатнаяФорма = УправлениеПечатьюКлиент.ОписаниеПечатнойФормы(КоллекцияПечатныхФорм, "Макет"); ПечатнаяФорма.СинонимМакета = "Макет"; ПечатнаяФорма.ТабличныйДокумент = ТабДокумент; ПечатнаяФорма.ИмяФайлаПечатнойФормы = "Макет"; ОбластиОбъектов = Новый СписокЗначений; УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, ОбластиОбъектов); КонецПроцедуры
Вот форма со свойствами поля:
И свойства реквизита: 
Как получить значение элемента формы
Собственно задача поднималась мною пару дней назад и кое-как я решил вопрос, получаю на клиенте форму, открываю ее, перебираю все значения полей ввода и флажков, записываю имена таблиц, после чего закрываю форму и передаю инфу на сервак, клепаю простенький отчет о том как называется элемент и что содержит, в т.ч. отслеживаю на каких страницах что находится.
Но вот косяк. Господа разработчики, как последние собаки, взяли и назвали реквизит немного не так, как называется элемент на форме, в итоге обращаясь к Форма[Элемент.Имя] или к Форма.Объект[Элемент.Имя], дабы получить его содержание, я вылетаю с ошибкой потому что Элемент.Имя=РеализацияПоЗаказу, а Форма.Объект[Элемент.Имя]=РеализацияПоЗаказам.
Возник вопрос, как мне управляемую форму разобрать так, чтобы полностью получить имя реквизита, соответствующего полю на форме.
(0) Этот код должен выпоняться на сервере
Текущие данные 1С
Это свойство табличного поля элемента формы. Благодаря этому свойству есть возможность получить значения в колонках текущей строки 1С 8.3 таблицы. Свойство Текущие Данные 1С доступно только для чтения, т.е. этому свойству невозможно присвоить значение.
2. Где найти справку по свойству текущие данные 1С?

Справку по данному свойству проще всего найти в синтаксис-помощнике конфигуратора. Открываем конфигуратор – нажимаем на кнопку вызова синтаксис-помощника, либо используем сочетание горячих клавиш (Ctrl+Shift+F1). В синтаксис-помощнике последовательно раскрываем следующие ветки: Интерфейс (управляемый) – Таблица формы – Таблица формы – Свойства – Текущие Данные.
Текущие данные
3. Как получить текущие данные в 1С?

Как видно из справки, текущие данные можно получить только в процедурах выполняемых на стороне клиента. Из процедур выполняемых на стороне сервера к текущим данным 1С выделенной строки обратится не получится. Это важно учитывать при разработке.
Пример: у нас есть форма документа Счет на оплату в 1С 8. На форме размещена таблица Товары. Таблица товары содержит несколько колонок: Номенклатура, Характеристика, Количество, Цена, Сумма НДС, Сумма, Всего. При 1С изменении Номенклатуры хотим получить текущие данные строки.
Все достаточно просто: ТекущаяСтрока = Элементы.Товары. Текущие Данные 1С; Важно помнить что эта строка должна вызываться из клиентской процедуры в контексте формы (директива &НаКлиенте).
Номенклатура
При отладке видно значение всех колонок в текущей строке таблицы товары.
4. Где применяют текущие данные 1С?

Текущие данные 1С чаще всего применяют для получения значений в выделенной строке 8.3 таблицы. Хотя в сами Текущие Данные нельзя записать какое-то значение (или изменить значение), в данные полученные через конструкцию Текущие Данные 1С можно внести изменения.
Например, можно изменить данные в 1С в колонке количество. Присвоим значение 5.
Таким образом Текущие Данные 1С – это полезное свойство таблицы формы. Это свойство позволяет получить значения колонок в текущей строке таблицы значений, но эти значения доступны только на клиентских процедурах в контексте формы.
Специалист компании «Кодерлайн»
Альберт Нургалеев
Как в 1С 8.2 УФ получить и задать значение элемента, а не реквизита формы?
В УФ 8.2 отсутствует значение, то есть Элементы. Элемент1.Значение — недоступно.
Мне это нужно, чтобы в событии Поля ПриИзменении получить/ввести данные программно, но в коде будет неизвестен соответствующий реквизит, ПриИзменении передается только элемент — как быть? Или есть возможность ПриИзменении узнать реквизит соответствующий?
Лучший ответ
Не надо обращаться через элементы, обращайтесь через объект. Я имею в виду, элементы на форме отражают структуру объекта, документа там или справочника или еще чего. Ну так вот, если вам нужно, допустим, сделать недоступным окно ввода, тогда да, ЭлементыФормы. СуммаОплаты. Доступность = ложь; А если надо изменить значение, тогда просто Объект. СуммаОплаты = 1000;
Объект нам нам форме вполне доступен
Господин енотПросветленный (20241) 7 лет назад
Спасибо, я понимаю, что правильно обрашаться к реквизитам формы — в частности к Объекту.
Однако, насколько понимаю, события есть у элементов формы, а не у реквизитов, и когда срабатывает ПриИзменении, то я могу только для каждого элемента создать свое при изменении и прописать соответствующий Объект.
В 8.1 же я мог для всех элементов задать 1 событие, в котором Элемент. Значение — было доступно.
Вопрос — если я не могу получить более значение элемента, то могу ли я хотя бы получить Имя соответствующего объекта, чтобы к нему обраться? Или мне для каждого элемента создавать свою процедуру события теперь?
Господин енот Просветленный (20241) обратиться*
Остальные ответы
Не понял вопроса:
ЭлементыФормы. Элемент1 = «Моё значение»; // Чем не подходит ?
Господин енотПросветленный (20241) 7 лет назад
ЭлементыФормы в 8.2 — Элементы
И не работает, это же не значение, а ПолеФормы
Чайкин Виталий Мыслитель (7582) Получить можно внути формы: Объект. Задать: &НаСервере Процедура ПередЗакрытием () Объект. = «»; КонецПроцедуры
С этими элементами беда! В целях поддержания чистоты кода программист имеет право использовать исключительно контекст вызова обработчика изменения не прибегая к внешним объектам.