Программное выполнение стандартной команды из управляемой формы

&НаКлиенте

Процедура Команда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;

   КонецЕсли;

   // Позиционироваться на нов.элемент

   Элементы.СписокТоваров.ТекущаяСтрока = эл.ПолучитьИдентификатор();

КонецПроцедуры

// Привязать обработчик на событие Выбор в Справочники.Номенклатура.Форма.ФормаПодбораНоменклатуры

&НаКлиенте

Процедура ТаблицаПодбораВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

   СтандартнаяОбработка = Ложь;

   ОповеститьОВыборе(Элемент.ТекущиеДанные.Номенклатура);

КонецПроцедуры