- Программное открытие форм в управляемом приложении 1С
- 1. Как открыть форму объекта в управляемом приложении, если на него есть ссылка.
- 2. Как открыть форму выбора, а затем получить выбранное значение.
- 3. Как открыть форму существующего объекта
- 4. Как открыть новый объект формы
- 5. Как открыть новую форму объекта и заполнить ее на основе чего-либо
- 6. Как открыть форму и задать в ней выбор
- 7. Как открыть форму записи журнала информации
- Как открыть вторую форму внешней обработки в управляемом приложении 1С
- Как открыть вторую форму внешней обработки в управляемом приложении 1С: 1 комментарий
- Открытые формы
Программное открытие форм в управляемом приложении 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. Как открыть форму записи журнала информации
Для этого вам понадобится ключ записи журнала информации.
Журнал ключ — значения всех измерений и периодов (если запись периодическая). Это означает, что ключ реестра является параметром, по которому можно однозначно идентифицировать реестр.
Алгоритм открытия следующий:
- Введите ключ реестра данных с помощью требуемое значение в структуре.
- Поместите полученную структуру в массив.
- Создайте раздел реестра из массива.
- Передаем в открывшуюся форму параметр ключ с ключом реестра элемента 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С:Предприятия из меню «Все функции» пользователю всегда должны быть доступны следующие типы форм, независимо от того, находится в интерфейсе команд приложения или нет:
Источник