Как программно переоткрыть форму 1с
Открытие форм
Область применения: управляемое приложение, мобильное приложение.
1. Для открытия форм следует применять метод глобального контекста ОткрытьФорму (при использовании версии платформы 1С:Предприятие 8.2 и более ранних версий - также ОткрытьФормуМодально ). Применение альтернативного способа, с получением формы и ее последующим открытием с помощью метода ПолучитьФорму , не рекомендуется.
Рекомендация обусловлена соображениями
- повышения устойчивости кода, работающего с формой, за счет разделения программного интерфейса для работы с формой и деталей ее внутренней реализации,
- а также сохранения единой стилистики кода прикладных решений.
Кроме того, применение глобального метода ОткрытьФорму гарантирует выполнение инициализации формы на сервере в обработчике ПриСозданииНаСервере . Этот подход помогает сосредоточить весь код инициализации формы в одном месте и исключает "случайное" обращение к серверу, связанное с инициализацией формы, между строками кода
2. В случаях когда форма требует параметризации при открытии, все ее параметры следует указывать в наборе параметров формы. Таким образом, набор параметров формы декларативно описывает возможности формы по ее параметризации.
Параметры формы из этого набора могут быть указаны в вызывающем коде при открытии формы ( ОткрытьФорму ).
3. Не следует применять другие способы параметризации формы при открытии. Например, нужно избегать обращения к методам и свойствам формы после ее открытия.
Например, вместо
следует по той же причине использовать параметры формы:
ОткрытьФорму("ОбщаяФорма.ПутеводительПоСистеме", Новый Структура("РежимОткрытия", "Приветствие"));
4. Для получения результата работы формы, вместо непосредственного обращения к элементам и реквизитам формы
ФормаВопроса = ПолучитьФорму("ОбщаяФорма.ФормаВопроса");
ФормаВопроса.ОткрытьМодально();
Если ФормаВопроса.БольшеНеПоказыватьНапоминание Тогда
// …
следует использовать процедуры-обработчики оповещений, которые будут вызваны при завершении работы пользователя с формой:
Оповещение = Новый ОписаниеОповещения("БольшеНеПоказыватьНапоминаниеЗавершение", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.ФормаВопроса". Оповещение, РежимОткрытияОкнаФормы.БлокироватьВеcьИнтерфейс);
.
&НаКлиенте
Процедура БольшеНеПоказыватьНапоминаниеЗавершение(БольшеНеПоказыватьНапоминание, Параметры) Экспорт
Если БольшеНеПоказыватьНапоминание = Неопределено Тогда
Возврат;
КонецЕсли;
Если БольшеНеПоказыватьНапоминание Тогда
// …
При этом возвращаемое значение формы формируется в коде модуля формы с помощью метода формы Закрыть .
5. Другие ограничения:
- Обработчик события формы ПриОткрытии не должен содержать код по открытию какой-либо другой формы, так как это может привести к нарушению порядка отображения окон. В этом случае рекомендуется использовать обработчик ожидания на короткий интервал или открывать другие формы интерактивно, например, по нажатию на кнопку.
- Не рекомендуется выполнять программное открытие и закрытие формы в одном обработчике. Такие действия должны быть разнесены по времени. Например, закрытие формы можно выполнять в обработчике ожидания.
- При использовании в конфигурации Библиотека стандартных подсистем и разработке форм (рабочих мест), предназначенных только для внешних пользователей, следует явно блокировать открытие таких форм в сеансах "обычных" пользователей. Для этого следует устанавливать параметр Отказ при создании формы на сервере с помощью функции ЭтоСеансВнешнегоПользователя общего модуля Пользователи или ПользователиКлиент :
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
…
КонецПроцедуры
6. Следующие виды форм должны быть всегда доступны пользователю в режиме 1С:Предприятия из меню "Все функции" вне зависимости от того, размещены ли соответствующие объекты в командном интерфейсе приложения или нет:
martynovalena --> martynovalenaЕфремов --> Ефремов
martynovalena @ 13.12.17, 15:41 ,
Мне тоже нужно было переоткрыть документ. Я сделал так:
Если произошли изменения в базе данных то для обновления того что показывают открытые формы можно использовать
"Оповещения об изменнния" можно прочитать в книге "Профессиональная разработка в системе . " -> Разработка форм ->Обновление данных в динамических списках. logist --> logist
вероятно, у вас неправильный подход к программированию в управляемом приложении, необходимо взять объект через ДанныеФормывзначение передать в обработку, обработать его там и получить обработанный объект, вернуть его обратно через Значениевданныеформы Ефремов --> Ефремов
| Текстовая версия | Сейчас: 23.11.21, 18:32 |
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!
В прилагаемом шаблоне есть 2 формы: для обычного и управляемого приложения. Открывается именно та форма, которая была открыта до нажатия, не зависимо от того, какие выбраны дополнительные/основные, и какие им присвоены имена. Решения немного различаются, поэтому было решено разработать сразу обе формы.
На практике это позволяет редактировать модули и менять формы "на лету".
Переоткрывать файл обработки придется по старинке, если необходимо переименовать сам файл обработки или переназвать используемую форму.
Приняв во внимание все замечания и пожелания высказанные здесь и здесь, учтя все найденные ошибки, выкладываю версию 2. Основное отличие - отсутствие реквизитов обработки, код более компактен и универсален.
Специальные предложения
(0) Хорошая и своевременная публикация. Давно себе хотел сделать подобный сервис, но всё руки не доходили.
Ваша публикация подтолкнула к действию. На основании Вашего кода сделал для себя универсальный шаблон (для обработок и для отчетов).
Кнопку "Переоткрыть" поместил в меню "Действия". Её можно там и оставить после отладки обработки. Не занимает места на командной панели, и глаза не мозолит.
Код для неуправляемой формы получился вот такой (компактней и, по-моему, универсальней):
Процедура КоманднаяПанель1_кнПереоткрыть ( Кнопка )
// Имя формы, которую надо переоткрыть, нужно прописать в КНОПКА.ПОЯСНЕНИЕ
Отладка_ФормаКОткрытию = Кнопка . Пояснение ;
Отладка_ИмяФайла = ЭтотОбъект . ИспользуемоеИмяФайла ;
Закрыть ();
КонецПроцедуры //КоманднаяПанель1_кнПереоткрыть()
Процедура ПриЗакрытии ()
Если НЕ ПустаяСтрока ( Отладка_ФормаКОткрытию ) Тогда
ВнешниеОбработки . Создать ( Отладка_ИмяФайла ). ПолучитьФорму ( Отладка_ФормаКОткрытию ). Открыть (); //Для обработок
//ВнешниеОтчеты.Создать(Отладка_ИмяФайла).ПолучитьФорму(Отладка_ФормаКОткрытию).Открыть(); //Для отчетов
КонецЕсли;
КонецПроцедуры
, где Отладка_ФормаКОткрытию и Отладка_ИмяФайла - это реквизиты внешней обработки/отчета.
_
Читайте также: