Примеры программирования в управляемых формах

  1. Как в модуле управляемой формы вызвать процедуру из модуля объекта?
  2. Как выделить строки табличной части документа управляемой формы по условию сравнения количества в каждой строке?
  3. Как получить данные динамического списка управляемой формы в таблицу значений?

Как в модуле управляемой формы вызвать процедуру из модуля объекта?

В модуле объекта документа есть процедура, которую нужно использовать в модуле управляемой формы. Но вызвать ее никак не получится, если пытаться это сделать, как обычно. При вызове будет выдана ошибка: «такой процедуры или функции не существует». А нужно это сделать таким образом:

&НаКлиенте
Процедура ВыполнитьКоманду(Команда)
	ВыполнитьКомандуНаСервере();
КонецПроцедуры

&НаСервере
Процедура ВыполнитьКомандуНаСервере()
	ДокументОбъект = РеквизитФормыВЗначение("Объект");
	ДокументОбъект.ВашаПроцедураМодуляОбъектаЭкспортная();
	ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
КонецПроцедуры

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

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

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

Как выделить строки табличной части документа управляемой формы по условию сравнения количества в каждой строке?

Есть две колонки в табличной части «Количество » и «КоличествоФакт», если значения не равны, то данная строка должна подсвечиваться красным цветом. Чтобы решить эту задачу нужно воспользоваться кодом ниже:

&НаСервере
Процедура ПодсветкаСтрокиСРазнымКоличеством() 
		
    Элемент = УсловноеОформление.Элементы.Добавить();
    Элемент.Использование = Истина;
    Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона",  WebЦвета.ЛососьСветлый);
    
    ЭлементУсловияЦвет                = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементУсловияЦвет.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Объект.Товары.Количество"); 
    ЭлементУсловияЦвет.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КоличествоФакт");
    ЭлементУсловияЦвет.ВидСравнения   = ВидСравненияКомпоновкиДанных.НеРавно;
    ЭлементУсловияЦвет.Использование  = Истина;
    
    ОформляемоеПоле      = Элемент.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары");
    
КонецПроцедуры

Теперь можно использовать процедуру ПодсветкаСтрокиСРазнымКоличеством в обработчике события формы ПриСозданииНаСервере.

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

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

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

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

ПОДПИСКА