Примеры программирования в управляемых формах
- Как в модуле управляемой формы вызвать процедуру из модуля объекта?
- Как выделить строки табличной части документа управляемой формы по условию сравнения количества в каждой строке?
- Как получить данные динамического списка управляемой формы в таблицу значений?
Как в модуле управляемой формы вызвать процедуру из модуля объекта?
В модуле объекта документа есть процедура, которую нужно использовать в модуле управляемой формы. Но вызвать ее никак не получится, если пытаться это сделать, как обычно. При вызове будет выдана ошибка: «такой процедуры или функции не существует». А нужно это сделать таким образом:
&НаКлиенте
Процедура ВыполнитьКоманду(Команда)
ВыполнитьКомандуНаСервере();
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере()
ДокументОбъект = РеквизитФормыВЗначение("Объект");
ДокументОбъект.ВашаПроцедураМодуляОбъектаЭкспортная();
ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
КонецПроцедуры
Почему такое происходит? Дело в том, что в контексте модуля формы реквизит Объект является типом ДанныеФормыСтруктура, это облегчённый вариант для работы с объектом формы в управляемом приложении. Платформа выполняет имитацию исходных объектов с помощью ДанныхФормы, которые имитируют только структуру исходных объектов.
При этом методы исходных объектов недоступны, как и модуль объекта, так как Объект тоже имитируется через ДанныеФормы. Для того чтобы обратиться к модулю объекта или к методам исходных объектов, необходимо выполнить преобразование объекта из данных формы в исходный объект. Поэтому и нужно сделать, так как написано в коде выше.
Данная операция может быть выполнена только на сервере. После чего с помощью метода формы РеквизитФормыВЗначение(), как показано выше или с помощью глобальной команды ДанныеФормыВЗначение() можно преобразовать ДанныеФормы в исходный объект. Затем данные объекта, измененные в результате пересчета, преобразуем обратно в реквизит формы при помощи метода ЗначениеВРеквизитФормы(). В результате, измененные данные отобразятся на форме.
Как выделить строки табличной части документа управляемой формы по условию сравнения количества в каждой строке?
Есть две колонки в табличной части «Количество » и «КоличествоФакт», если значения не равны, то данная строка должна подсвечиваться красным цветом. Чтобы решить эту задачу нужно воспользоваться кодом ниже:
&НаСервере
Процедура ПодсветкаСтрокиСРазнымКоличеством()
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Использование = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.ЛососьСветлый);
ЭлементУсловияЦвет = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементУсловияЦвет.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Количество");
ЭлементУсловияЦвет.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КоличествоФакт");
ЭлементУсловияЦвет.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ЭлементУсловияЦвет.Использование = Истина;
ОформляемоеПоле = Элемент.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары");
КонецПроцедуры
Теперь можно использовать процедуру ПодсветкаСтрокиСРазнымКоличеством в обработчике события формы ПриСозданииНаСервере.
Как получить данные динамического списка управляемой формы в таблицу значений?
Чтобы получить данные из динамического списка, который расположен на управляемой форме можно воспользоваться кодом ниже.
&НаСервере
Функция ПолучитьДанныеДинамическогоСпискаВТаблицуЗначений()
Схема = Элементы.ДинамическийСписок.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
Настройки = Элементы.ДинамическийСписок.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , ,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Возврат ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецФункции
Как видно из кода, данные получаются с использованием схемы компоновки данных, на которой построена работа с динамическим списком. Возвращаемым значением будет ТаблицаЗначений, которая будет содержать то, что в таблице на форме с учетом применённых отборов и сортировок. Даже если этот динамический список сформирован на основании произвольного запроса.