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

Для того чтобы открыть форму выбора с отбором в 1с 8.2 (обычные формы), нам нужно выполнить некоторые действия. Сначала мы ее получим. После этого выставим отбор и программно откроем, вот пример кода:

Отбор на форме в поле ввода 1С 8.2 с несколькими значениями

В примере выше мы рассмотрели как устанавливать отбор на форме выбора по конкретному значению. Теперь давайте рассмотрим ситуацию когда нужно подставить несколько значений, это может быть например как массив, так и выгрузка из результата запроса. Это отбор в поле ввода 1с с несколькими значениями.

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

Установка отбора в поле ввода на форме в 1С 8.3, событие НачалоВыбора

Теперь рассмотрим отбор в поле ввода на управляемой форме в 1С 8.3 . Найдем на форме интересующий нас элемент, в котором мы будем устанавливать отбор, в нашем случае это поле «Организация». Находим событие «НачалоВыбора», щелкаем на лупу и оказываемся в процедуре. Мы видим параметр ДанныеВыбора, этот параметр имеет тип СписокЗначений. Для того чтобы ограничить выбор необходимыми элементами, нам необходимо заполнить СписокЗначений. Элементы выбрать можем только на сервере, поэтому создаем процедуру с директивой компиляции &НаСервере. В данной процедуре заполняем ДанныеВыбора.

С-П говорит нам следующее:

Глобальный контекст.ПолучитьФорму (Global context.GetForm)
Глобальный контекст (Global context)
ПолучитьФорму (GetForm)
Синтаксис:

ПолучитьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>)
Параметры:

<ИмяФормы> (обязательный)

Тип: .
Имя формы. Образуется как полный путь к объекту метаданных Форма (например, "Справочник.Контрагенты.Форма.ФормаОбъекта", "ОбщаяФорма.ФормаСохраненияФайла") или как полный путь к прикладному объекту, дополненный именем формы по умолчанию (например, "Справочник.Товары.ФормаВыбора").
Имена форм по умолчанию:

  • ФормаОбъекта (ObjectForm) - форма объекта по умолчанию;
  • ФормаГруппы (FolderForm) - форма группы по умолчанию;
  • ФормаЗаписи (RecordForm) - форма записи регистра по умолчанию;
  • ФормаСписка (ListForm) - форма списка по умолчанию;
  • ФормаВыбора (ChoiceForm) - форма выбора по умолчанию;
  • ФормаВыбораГруппы (FolderChoiceForm) - форма выбора группы по умолчанию;
  • ФормаКонстант (ConstantsForm) - форма констант по умолчанию для обычного режима, установленная как форма констант для конфигурации;
  • Форма (Form) - форма константы, отчета и обработки по умолчанию;
  • ОбщаяФорма (CommonForm) - общая форма;
  • ФормаНастроек (SettingsForm) - форма настроек отчета по умолчанию;
  • ФормаЗагрузки (LoadForm) - форма загрузки настроек;
  • ФормаСохранения (SaveForm) - форма сохранения настроек;
  • ФормаВарианта (VariantForm) - форма редактирования варианта отчета;
  • ФормаПоиска (SearchForm) - форма полнотекстового поиска в данных.
Например, для получения общей формы "ОбщиеНастройки" следует в модуле написать код:
Форма = ПолучитьФорму("ОбщаяФорма.ОбщиеНастройки");

Для внешних отчетов и обработок имя формы задается следующим образом:

  • ВнешнийОтчет.<имя отчета>.Форма.<имя формы>;
  • ВнешнийОтчет.<имя отчета>.<имя стандартной формы>;
  • ВнешняяОбработка.<имя обработки>.Форма.<имя формы>;
  • ВнешняяОбработка.<имя обработки>.<имя стандартной формы>.
При этом внешний отчет или обработка должны быть предварительно зарегистрированы в системе.
<Параметры> (необязательный)

Тип: .
Параметры формы. Ключ структуры - имя параметра, а значение - значение параметра формы. Имя элемента должно совпадать с именем параметра структуры.
П = Новый Структура("Ключ", Поставщик);
Форма = ПолучитьФорму("Справочник.Контрагенты.ФормаОбъекта", П);
Форма.Открыть();
<Владелец> (необязательный)

Владелец формы - форма или элемент управления другой формы.
<Уникальность> (необязательный)

Тип: Произвольный.
В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная форма.
- искать форму с ключом уникальности по умолчанию, - не искать форму вообще, любое другое значение устанавливает ключ уникальности, по которому будет произведен поиск.
Значение по умолчанию: .
<Окно> (необязательный)

Тип: ; .
Окно приложения, в котором будет открыта форма.
Применимо только для управляемой формы. Окном может быть только основное окно приложения или вспомогательное окно формы.
Если указан тип , окно формы будет создано согласно выбранному варианту.
<НавигационнаяСсылка> (необязательный)

Тип: ; .
Если содержит значение, отличное от , то это значение присваивается свойству формы, полученной в результате вызова данного метода, и свойство этой формы устанавливается в .
Значение по умолчанию: .
Возвращаемое значение:

Тип: ; ; .
- если в обработчике установлен признак отказа от создания формы.
Описание:

Получает форму или управляемую форму. Перед получением осуществляется поиск уже открытой такой же формы.
Поиск осуществляется по типу формы, значениям ключевых параметров формы, владельцу формы, пользовательскому ключу уникальности.
Если в параметре <Уникальность> передано значение , то поиск уже открытых форм не осуществляется.
Доступность:

Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент).
Примечание:

В тонком и веб-клиенте получает только управляемую форму.
Обычные формы внешних обработок не поддерживаются.
Если при получении обычной формы в параметре <ИмяФормы> указано не стандартное имя формы, передаваемые параметры не обрабатываются.
В процессе выполнения может быть несколько обращений к серверу. Часть из них кэшируются. Как минимум одно обращение к серверу есть всегда и оно не кэшируется. Кэширование зависит от версии платформы и версии конфигурации в целом. Если установлена низкая скорость соединения и не указывается текущая строка, то кэшируется форма выбора. Очистка кэша осуществляется с периодичностью в 20 мин. Удаляются формы, которые не использовались в этот период времени.
См. также:

Программное открытие форм в управляемом приложении 1С значительно отличается от их открытия в обычном приложении. Рассмотрим для начала старый метод. Он заключается в получении формы и ее последующем открытии в обычном или модальном режиме (при открытии в модальном режиме форма блокирует работу программы).

ПолучитьФорму() . Открыть()

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

Форма= ПолучитьФорму("Документ.ПоступлениеТоваровУслуг.ФормаДокумента" ) ;
//Тут выполняем действия с формой
Форма. Открыть() ;

Надо учитывать, что при получении формы будет выполняться еще процедура события ПриСозданииНаСервере.

Рассмотрим другие методы, которые позволяют открывать формы в управляемом приложении 1С быстрее и удобнее. В зависимости от конкретной ситуации могут использоваться разные методы.

1. Как открыть форму объекта в управляемом приложении, если есть ссылка на него.

В этом случае все предельно просто.

СпрСсылка= Справочники. Номенклатура. НайтиПоКоду("000000001" ) ;
ОткрытьЗначение(СпрСсылка) ;

2. Как открыть форму выбора и получить потом выбранное значение.

Для этого существует функция ВвестиЗначение(). У функции 3 параметра:

  • Переменная, в которую будет записано выбранное значение;
  • Подсказка, которая будет отображена в окне выбора;
  • Описание типов выбираемых значений. Может быть несколько типов, тогда перед выбором конкретного значения будет предложено выбрать тип.

В результате выполнения функции откроется форма выбора по умолчанию для объекта указанного типа.

Перем Значение;
Массив= новый массив;
Массив. Добавить(Тип("СправочникСсылка.Номенклатура" ) ) ;
Массив. Добавить(Тип("СправочникСсылка.Контрагенты" ) ) ;

ОписаниеТипов= новый ОписаниеТипов(Массив) ;

Рез= ВвестиЗначение(Значение, "Подсказка" , ОписаниеТипов) ;

Предыдущие способы позволяли открывать только формы, установленные для объектов по умолчанию (форму объекта или форму выбора). Если нужно открыть произвольную форму, то можно воспользоваться функцией ОткрытьФорму().

Эта функция имеет довольно много параметров. Рассмотрим некоторые из них:

  • Имя формы — тут можно выбрать либо одну из стандартных форм объекта, например, ФормаВыбора или ФормаСписка . Или конкретную, созданную разработчиками форму.
  • Параметры — позволяет передать в форму в виде структуры некоторые параметры перед ее открытием, тем самым определив выводимые данные. Параметры могут представлять собой любые данные, которые можно передавать с клиента на сервер. Переданные при открытии формы параметры можно обработать в процедуре ПриСозданииНаСервере() у открываемой формы.
  • Режим открытия формы — имеет 3 варианта: независимый, блокировать весь интерфейс, блокировать форму владельца.

Рассмотрим, как применяется функция ОткрытьФорму() в различных ситуациях.

3. Как открыть форму существующего объекта

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

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

&НаСервере
Функция НайтиС() ;
Возврат Справочники. Контрагенты. НайтиПоРеквизиту ("ИНН" , "745107734623" )
КонецФункции

4. Как открыть форму нового объекта

Тут подойдет просто функция ОткрытьФорму() без всяких параметров.

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

5. Как открыть форму нового объекта и заполнить ее на основании чего-либо

Нужно передать параметр Основание , значением которого будет являться ссылка на объект-основание заполнения. При этом будет запущена процедура ОбработкаЗаполнения().

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

В этом примере будет создан документ Реализация товаров и услуг и заполнен на основании счета на оплату покупателю, ссылка на который была передана.

6. Как открыть форму и задать на ней отбор

Отбор на формах 1С может быть простым и сложным. Простой отбор предусматривает выражения типа Организация = ООО «Рога и копыта». Сложный отбор предполагает и другие типы сравнения, например, В списке . В данной статье рассмотрим организацию простого отбора, а сложному будет посвящена отдельная статья.

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

Например, откроем форму списка справочника НомераГТД и сделаем там отбор по владельцу — элементу справочника Номенклатура .

&НаКлиенте
Процедура Команда1 (Команда)
Параметр= новый структура;

Отбор= новый Структура;
Отбор. Вставить("Владелец" , СсылкаНаНоменклатуру) ;

Параметр. Вставить("Отбор" , Отбор) ;

ОткрытьФорму("Справочник.НомераГТД.ФормаСписка" , Параметр) ;
КонецПроцедуры

7. Как открыть форму записи регистра сведений

Для этого понадобится ключ записи регистра сведений.

Ключ записи — это значения всех измерений и период (если регистр периодический). То есть ключ записи — это параметры, по которым можно однозначно идентифицировать запись.

Алгоритм открытия следующий:

  1. Заносим в структуру данные ключа записи с необходимыми значениями.
  2. Помещаем полученную структуру в массив.
  3. Из массива создаем ключ записи.
  4. Передаем в открываемую форму параметр Ключ с ключом записи из п.3 в качестве значения.

&НаКлиенте
Процедура Команда1 (Команда)
Параметр= новый структура;

ПараметрыКлюча= новый Структура;
ПараметрыКлюча. Вставить("Номенклатура" , СсылкаНаНоменклатуру) ;
ПараметрыКлюча. Вставить("ТипЦены" , СсылкаНаТипЦен) ;
ПараметрыКлюча. Вставить("Период" , Дата) ;

МассивКлюча = Новый Массив;
МассивКлюча. Добавить(ПараметрыКлюча) ;

КлючЗаписи = Новый("РегистрСведенийКлючЗаписи.ЦеныНоменклатуры" , МассивКлюча) ;

Параметр. Вставить("Ключ" , КлючЗаписи) ;

ОткрытьФорму("РегистрСведений.ЦеныНоменклатуры.ФормаЗаписи" , Параметр) ;
КонецПроцедуры

Главная Для начинающих разработчиков Учимся программировать

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

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

Например, если из формы списка организаций нужно открыть форму той организации, на которой находится курсор, сделать это можно следующим способом:

Параметры формы передаем в виде структуры, где имя элемента структуры соответствует имени параметра формы, а значение - это то значение, в которое мы хотим установить параметр формы.

Если требуется открыть не основную, а произвольную форму объекта, созданную в конфигураторе, вместо стандартного имени основной формы (ФормаОбъекта ) указывается слово Форма и через точку за ним - имя формы, созданной в конфигураторе.

Например:

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

Следует заметить, что в том случае, когда кроме ссылки на объект никакие параметры в открываемую форму передавать не нужно и нужна именно основная форма существующего объекта, можно использовать более простой способ - открывать форму с помощью процедуры ОткрытьЗначение() :

ОткрытьЗначение(Элементы.Список.ТекущаяСтрока);

Такой способ обладает меньшей универсальностью, но в некоторых случаях он экономит время и силы. Например, в рассмотренном случае одна такая строка может заменить всю написанную нами ранее процедуру из трех строк.

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

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