Как открыть форму обработки управляемом приложении

Программное открытие форм в управляемом приложении 1С

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

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

Обратите внимание, что при принятии формы будет также выполняться процедура события OnCreateOnServer.

.

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

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

В данном случае все чрезвычайно просто.

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

Для этого есть функция EnterValue(). Функция имеет 3 параметра:

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

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

Значение переменной;
Массив = новый массив ;
полей. Добавить(Тип(«DirectoryReference.Nomenclature» )​​​​​​​​​);
полей. Добавить (Тип («DirectoryReference.Contractors» ) );

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

Res = EnterValue (Значение, «Подсказка», ТипОписания);

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

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

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

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

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

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

Читайте также:  Как получить наилучшее изображение

&AtClient
Процедура Команда 1 ( Command )
Параметр = новая структура;
Параметр. Вставить(«Ключ», FindC());
OpenForm(«Directory.Accounts.ObjectForm», Parameter);
Завершить процедуру

&OnServer
Function FindC ( ) ;
Возвращает направляющие. Поставщики. FindByAttribute(«ИНН», «745107734623»)
EndFunction

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

Простая функция OpenForm() без параметров

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

Вам нужно передать параметр Base , значением которого будет ссылка на базовый объект наполнитель. Это запустит процедуру FillProcessing().

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

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

Выбор в формах 1С может быть простым и сложным. Простой выбор включает такие термины, как Organization = Horns and Hooves LLC. Сложный выбор предполагает другие типы сравнений, например В списке . В этой статье мы разберемся с организацией простого отбора и сложного. посвящена отдельная статья.

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

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

Выбор = новая структура;
Выбор. Insert(«Владелец», Справочник по именованию);

Параметр. Insert(«Выделение», Selection) ;

OpenForm(«Directory.Numbers GTE.ListForm», Parameter );
Завершение процедуры

7. Как открыть форму записи журнала информации

Для этого вам понадобится ключ записи журнала информации.

Журнал ключ — значения всех измерений и периодов (если запись периодическая). Это означает, что ключ реестра является параметром, по которому можно однозначно идентифицировать реестр.

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

  1. Введите ключ реестра данных с помощью требуемое значение в структуре.
  2. Поместите полученную структуру в массив.
  3. Создайте раздел реестра из массива.
  4. Передаем в открывшуюся форму параметр ключ с ключом реестра элемента 3 в качестве значения.

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

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

RecordKey = New(«RegistrarRecordRecordKey.NomenclaturePrices» , KeyArray ) ;

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

ОткрытьФорму(«Информационная Запись.Номенклатурные Цены.Бланк Записи», Параметр ) ;
Завершить процедуру

Источник

Как открыть вторую форму внешней обработки в управляемом приложении 1С

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

Читайте также:  Как получить копии учредительных документов юридического лица

Итак, первое, что вам нужно сделать, это сохранить все данные внешней обработки, введенные в первой форме. Для этого используем функцию PlaceIntoTemporaryStorage() . На него должны быть переданы все данные внешней обработки. В целом код выглядит так:

&OnClient
Процедура OpenSecondForm()

//Проходим все детали внешнего обработка в цикле и запись их в структуру
_Object = FormAttributeToValue(«Object»);
Параметры структуры = Новая структура ;
Для каждого реквизита _Object. Метаданные ( ). Цикл атрибутов
Структура параметров . Вставить(Атрибут.Имя, Объект[Атрибут.Имя]);
Конец цикла ;

//Вы можете добавить как части таблицы, так и детали первой формы.
Структура параметров. Вставить(«АтрибутФормы1»,АтрибутФормы1);
Структура параметров. Insert(«TablePart1» , Object[ «TablePart1» ] .Unload() ) ;

//Теперь помещаем эти данные в хранилище и получаем адрес этого хранилища
PassedParameters address = PutIntoTemporaryStorage( Parameters Structure , New UniqueIdentifier );

//Создаем структуру с параметрами для передачи во вторую форму
_Parameters = new Struct(«Адрес», Адрес переданных параметров);

/ /Создать оповещение, которое срабатывает при закрытии второй формы,
//потому что измененные данные нужно передать обратно в первую.
AlertDescription = New AlertDescription( «ProcessCloseSecondForm», ThisForm );

//Ну наконец открываем вторую форму
OpenForm ( «ExternalProcessing.IssueSoldProducts.Form.FormFillingProductParametersURF» , _FormDescription Alert. );

Теперь нам нужно получить и обработать данные во второй управляемой форме. Это делается с помощью обработчика событий OnCreateAtServer() .

&На сервере
Создать процедуру на сервере (Отмена, Стандартная обработка)

/ //Получить данные Хранится в storage
ParameterStructure = GetFromTemporaryStorage(Parameters.Address);

//Загрузить таблицу разделов
Object [ «TablePart1» ] . Load (ParameterStructure [«TablePart1»]);

//Загрузка атрибутов внешней обработки
_Object = FormAttributeToValue( «Object» ) ;
Для каждого реквизита _Object. Метаданные ( ). Цикл атрибутов
Объект [ Атрибут . Имя ] = Параметры Структура [ Реквизит . Заголовок ] ;
EndLoop ;

Закрытие второй формы должно делать то же самое: собирать все данные в хранилище, передавать их процедуре уведомления в первой форме и там обрабатывать.

&ампер; ;OnClient
Процедура CloseForm()

//Проходим в цикле все детали внешней обработки и записываем их в структуру
_Object = FormAttributeToValue(«Object»);
Параметры структуры = Новая структура ;
Для каждого реквизита _Object. Метаданные ( ). Цикл атрибутов
Структура параметров . Вставить(Атрибут.Имя, Объект[Атрибут.Имя]);
EndCycle ;

//Вы можете добавить как части таблицы, так и детали первой формы.
Структура параметров. Вставить(«АтрибутФормы1»,АтрибутФормы1);
Структура параметров. Insert(«TablePart1» , Object [ «TablePart1» ] . Unload() ) ;

//Теперь помещаем эти данные в хранилище и получаем адрес этого хранилища
PassedParameters address = PutIntoTemporaryStorage ( Структура parameters , New UniqueIdentifier);

//Создаем структуру с параметрами, которые будут переданы во вторую форму
_Parameters = new struct(«Адрес», Адрес передаваемых параметров);

//Закрытие формы передаваемых параметров.
Close( _Parameters);

И в первой форме мы создали процедуру, для которой сделали описание уведомления. Обрабатываем в нем полученные данные.

&НаСервере
Процедура ProcessSecondFormClosing (ClosingResult, Parameters) Export

If ClosingResult = Undefined Then
Return ;
EndIf;

//Получить данные из хранилища
ParameterStructure = GetFromTemporaryStorage( Результат закрытия. Адрес );

//Получить данные
Object[«TablePart1»] . Загрузить (СтруктураПараметров[«ЧастьТаблицы1»]);

_Объект =АтрибутФормыВЗначение(«Объект» ) ;
Для каждого реквизита _Object. Метаданные ( ). Цикл атрибутов
Объект [ Атрибут . Имя ] = Параметры Структура [ Реквизит . Заголовок ] ;
EndCycle ;

Как открыть вторую форму внешней обработки в управляемом приложении 1С: 1 комментарий

«&OnClient
Процедура OpenSecondForm()

//Проходим по всем атрибутам внешней обработки и записываем их в структуру
_Object = FormAttributeToValue(«Object»);»

Читайте также:  Как получить исходный код приложения андроид

Источник

Открытые формы

Область применения: управляемое приложение, мобильное приложение.

1. Для открытия форм используйте метод глобального контекста OpenForm (при использовании платформы «1С:Предприятие» версии 8.2 и ранее также OpenFormModally). Использовать альтернативный метод получения формы и затем открывать ее методом GetForm не рекомендуется.

Рекомендации, основанные на рассуждениях

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

Кроме того, использование глобального метода OpenForm гарантирует инициализацию формы на сервере в обработчике OnCreateOnServer. Такой подход помогает хранить весь код инициализации формы в одном месте и устраняет «случайные» вызовы сервера, связанные с инициализацией формы между строками кода

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

Параметры формы этого набора можно указать в вызывающем коде при открытии формы (OpenForm).

3. Нельзя использовать другие способы параметризации формы при ее открытии. Например, следует избегать доступа к методам и свойствам формы после обнаружения
Например, вместо

FormGuide = Form.OpenForm(«GeneralForm.SystemGuide»);
FormGuide.Elements.GroupStep.CurrentPage = FormGuide.Elements.GroupStep.Page.Welcome;

по той же причине следует использовать параметры формы:

OpenForm(«GeneralForm.System Guide » , New Structure(«OpenMode», «Welcome»));

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

ФормаВопроса = ПолучитьФорму(«ОбщаяФорма.ФормаВопроса»);
Форма Вопроса.OpenModal();
IfQuestionForm.Do NotShowReminderMore Then
// …

следует использовать обработчики уведомлений, которые будут вызываться при выходе пользователя из формы:

Alert = New AlertDescription(«Не показывать напоминаниеFinish снова», ЭтотОбъект);
OpenForm(«ОбщаяФорма.ФормаВопроса».Alert,FormWindowOpenMode.LockAllInterface);
.

&OnClient
ПроцедураНе показыватьНапоминаниеЗавершить(НеЧитатьНапоминание, Параметры) Экспорт

Если НеПоказыватьMoreReminder = Undefined Then
Возврат;
EndIf;

Если нет moreShowReminder Then
//…

При этом в коде формы создается возвращаемое значение формы модуля с помощью метод Close формы.

5. Другие ограничения:

  • Обработчик события OnOpen формы не должен содержать код для открытия другой формы, так как это может привести к нарушение порядка отображения окон. В этом случае рекомендуется использовать обработчик ожидания на короткий интервал или открывать другие формы в интерактивном режиме, например, по нажатию кнопки.
  • Программное открытие и закрытие формы в одном и том же контроллере не рекомендуется. Такие действия должны быть растянуты во времени. Например, форма может быть закрыта в обработчике ожидания.
  • При использовании стандартных подсистем разработки и форм (рабочих станций), предназначенных для внешних пользователей, только в конфигурации библиотеки необходимо явно блокировать открытие таких форм в «обычных» пользовательских сессиях. Для этого установите параметр Запретить при создании формы на сервере с помощью функции ThisExternalUserSession общего модуля Users или UsersClient:

&OnServer
CreateProcedureOnServer(Failure, StandardProcessing )

If Not UsersClientServer.This IsExternalUserSession() Then
Failure = True;
Возврат;
КонецЕсли;

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

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

Источник

Поделиться с друзьями
Решатор
Adblock
detector