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