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