наверх
Свободные IT публикации
быстро и доступно
логин:
пароль:

Работа с формами

  • Как открыть форму объекта имея ссылку на него?
  • Как открыть форму выбора произвольного объекта?
  • Как открыть форму существующего объекта ссылочного типа?
  • Открыть форму существующей записи регистра?
  • Как открыть форму нового объекта с обработкой заполнения?
  • Как правильно организовать выбор (подбор) в табличную часть?
  • Как открыть форму и установить в ней отбор?
  • Как в форме отобразить картинку, сохраненную в реквизите справочника?
  • Как в журнале документов "УчетКадров" отобрать только документы "ПриемНаРаботу"?
  • Как узнать интервал дат в открытом текущем журнале?
  • Как при открытии справочника сделать отбор по контрагентам, входящим в список?
  • Как обеспечить, чтобы для выбора значения покупателя в расходной накладной справочник контрагенты открывался сразу с открытой группой "Покупатели"?
  • Как в форме обеспечить выбор реквизита, подчиненного Владельцу?
  • Как не открывая форму внешней обработки выполнить ее процедуру для определенного объекта?
  • Как вывести многострочное предупреждение?
  • Как задать вопрос пользователю?
  • Как открыть форму объекта имея ссылку на него?

    &НаКлиенте
    Процедура ОткрытьФорму(Команда)
    	ОткрытьЗначение(СсылкаНаОбъект); 
    КонецПроцедуры

    Как открыть форму выбора произвольного объекта?

    &НаКлиенте
    Процедура Команда1(Команда)
        Перем ВыбЗнач;
    
        Массив = Новый Массив;
        Массив.Добавить(Тип("СправочникСсылка.Контрагенты"));
    
        ОписаниеТиповК = Новый ОписаниеТипов(Массив);
    
        Если ВвестиЗначение(ВыбЗнач, "Введите значение", ОписаниеТиповК) Тогда
            Сообщить(ВыбЗнач);
        КонецЕсли;
    КонецПроцедуры

    Как открыть форму существующего объекта ссылочного типа?

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

    Открыть форму существующей записи регистра?

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

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

    &НаКлиенте
    Процедура ОткрытьФорму(Команда)
    	ПараметрыОткрытия = Новый Структура;
    	ОткрытьФорму("Справочник.Проекты.ФормаОбъекта", ПараметрыОткрытия);
    КонецПроцедуры

    В это случае вызывается процедура «ОбработкаЗаполнения» модуля объекта. Эта процедура имеет единственный параметр «Основание». Если мы в параметры вставим ключ «Основание», то он будет передан в процедуру «ОбработкаЗаполнения»:
    &НаКлиенте
    Процедура ОткрытьФорму(Команда)
    	ПараметрыОткрытия = Новый Структура;
    	ПараметрыОткрытия.Вставить("Основание", Проект);
    	ОткрытьФорму("Справочник.Проекты.ФормаОбъекта", ПараметрыОткрытия);
    КонецПроцедуры

    Как правильно организовать выбор (подбор) в табличную часть?


    Все параметры, указанные в параметреметода открыть форму, доступны в событии «ПриСозданииНаСервере» открываемой формы:
    &НаКлиенте
    Процедура ОткрытьФорму(Команда)
    	ПараметрыОткрытия = Новый Структура;
    	ПараметрыОткрытия.Вставить("ЛюбойПараметр", Проект);
    	ОткрытьФорму("Справочник.Проекты.ФормаВыбора", ПараметрыОткрытия); 
    КонецПроцедуры

    В событии «ПриСозданииНаСервере» формы элемента справочника Проекты можно будет получить «ЛюбойПараметр»:
    &НаСервере
    Процедура ПриСозданииНаСервере()
    	Если Параметры.Свойство("ЛюбойПараметр") Тогда
    		ПереданныйПараметр = Параметры.ЛюбойПараметр;
    	    //Программная обработка формы
    	КонецЕсли;
    КонецПроцедуры

    При открытии формы выбора у Владельца сработает событие «ОбработкаВыбора»:
    &НаКлиенте
    Процедура ОткрытьФорму(Команда)
    	ПараметрыОткрытия = Новый Структура;
    	ПараметрыОткрытия.Вставить("ЛюбойПараметр", Проект);
    	ВладелецФормыПодбора = Элементы.ПодчиненныеПроекты;
    	ОткрытьФорму("Справочник.Проекты.ФормаВыбора", ПараметрыОткрытия, ВладелецФормыПодбора);
    КонецПроцедуры

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

    В самой форме организуем программно выбор таким образом:
    &НаКлиенте
    Процедура Выбрать(Команда)
        РезультатВыбора = ПодготовитьРезультатВыбора();
        ОповеститьОВыборе(РезультатВыбора);
    КонецПроцедуры
    
    
    &НаСервере
    Функция ПодготовитьРезультатВыбора()
    	//Готовим результат выбора
    КонецФункции

    В результате выполнения метода ОповеститьОВыборе форма подбора закроется и вызовется событие «ОбработкаВыбора» элемента управления «Товары».

    Как открыть форму и установить в ней отбор?


    Для организации отбора при открытии формы нужно использовать параметр «Отбор», тип Структура, где Ключ – это Имя поля динамического списока, а значение это собственно то, почему нужно фильтровать данные
    &НаКлиенте
    Процедура ОткрытьФорму(Команда)
    	ПараметрыОткрытия = Новый Структура;
    	Отбор = Новый Структура;
    	Отбор.Вставить("Владелец", Контрагент);
    	ПараметрыОткрытия.Вставить("Отбор", Отбор);
    	ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаВыбора", ПараметрыОткрытия); 
    КонецПроцедуры

    В случае если отбор сложный и его можно установить только программно:
    &НаКлиенте
    Процедура ОткрытьФорму(Команда)
    	ПараметрыОткрытия = Новый Структура;
    	ПараметрыОткрытия.Вставить("Подразделение", Подразделение);
    	ВладелецФормыПодбора = Элементы.Сотрудник;
    	ОткрытьФорму("Справочник.СотрудникиОрганизаций.ФормаВыбора", ПараметрыОткрытия, ВладелецФормыПодбора); 
    КонецПроцедуры

    В самой форме в событии «ПриСозданииНаСервере» задаем отбор списка:
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        Если Параметры.Свойство("Подразделение") Тогда
            СписокСотрудников = ПодготовитьСписокСотрудниковПодразделения(Параметры.Подразделение);
            НовыйЭлемент = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
            НовыйЭлемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
            НовыйЭлемент.ВидСравнения  = ВидСравненияКомпоновкиДанных.ВСписке;
            НовыйЭлемент.ПравоеЗначение   = СписокСотрудников;
            НовыйЭлемент.Применение = ТипПримененияОтбораКомпоновкиДанных.Элементы;
        КонецЕсли;
    КонецПроцедуры

    Как в форме отобразить картинку, сохраненную в реквизите справочника?

    // Значение, сохраненное в реквизите справочника, имеющем тип 
    // ХранилищеЗначения, можно только получить. 
    СохраненнаяКартинка = Фотография.Получить(); 
    
    Если СохраненнаяКартинка <> Неопределено Тогда 
    	// Если в хранилище было что-нибудь заранее записано… 
    	ЭлементыФормы.Фото.Картинка = СохраненнаяКартинка; 
    КонецЕсли;

    Как в журнале документов "УчетКадров" отобрать только документы "ПриемНаРаботу"?

    ЖурналДокументовСписок.Отбор.ВидДокумента.Установить(Метаданные.Документы.ПриемНаРаботу);

    Как узнать интервал дат в открытом текущем журнале?

    Если ЖурналДокументовСписок.Отбор.Дата.Использование Тогда 
    	Сообщить(ЖурналДокументовСписок.Отбор.Дата); 
    Иначе 
    	Сообщить("Без ограничения по датам"); 
    КонецЕсли;

    Как при открытии справочника сделать отбор по контрагентам, входящим в список?

    Процедура ПриОткрытии() 
    
    	СправочникСписок.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке; 
    	СправочникСписок.Отбор.Ссылка.Значение = СписокКонтрагентов; 
    	СправочникСписок.Отбор.Ссылка.Использование = Истина; 
    
    КонецПроцедуры

    Как обеспечить, чтобы для выбора значения покупателя в расходной накладной справочник контрагенты открывался сразу с открытой группой "Покупатели"?

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

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

    // При начале выбора реквизита Помещение вызывается процедура:
    Процедура ПомещениеНачалоВыбора(Элемент, СтандартнаяОбработка)
    
    	СтандартнаяОбработка = Ложь; 
    
    	ФормаВыбора = Справочники.ПереченьПомещенийОбъекта.ПолучитьФормуВыбора( , Элемент); 
    	ФормаВыбора.СправочникСписок.Отбор.Владелец.ВидСравнения = ВидСравнения.Равно;
    	ФормаВыбора.СправочникСписок.Отбор.Владелец.Использование = Истина;
    	ФормаВыбора.СправочникСписок.Отбор.Владелец.Значение = Владелец;
    
    	Помещение = ФормаВыбора.ОткрытьМодально();
    	
    	Если Помещение <> неопределено Тогда
    		ЭлементыФормы.Помещения.ТекущаяСтрока.Помещение = Помещение;
    	КонецЕсли;
    
    КонецПроцедуры

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

    Обработка = ВнешниеОбработки.Создать(ИмяФайла); 
    Обработка.Печать(Ссылка);

    Как вывести многострочное предупреждение?

    Предупреждение("На складе: " + Остаток + Символы.ПС + "В резерве : " + 
    	Зарезервировано + Символы.ПС + "Свободный остаток: " + 
    	(Остаток - Зарезервировано), 20, "Состояние остатков");

    Как задать вопрос пользователю?

    Если Товары.Количество() > 0 Тогда
    	Ответ = Вопрос("Табличная часть будет очищена! Продолжить?", 
    	РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да, "Внимание!");
    	Если Ответ = КодВозвратаДиалога.Нет Тогда
    		Возврат;
    	КонецЕсли;
    КонецЕсли;
    Товары.Очистить();