Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Формэкс. Процедура ПослеОткрытия() не срабатывает при модальном открытии
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
igmig65
День добрый. Есть обработка подключения к постерминалу, нужно сделать чтобы она открывалась модально, на ней выводится лог выполнения: Подключение к терминалу, ожидаем карту, автоизация с банком и тд. Но не могу ее запустить процедуры из ПослеОткрытия(), в модальном режиме не срабатывает, а если вставляю процедуры в ПриОткрытии(), то все срабатывает но форма не открывается, вернее открывается уже после выполнения процедур, соответственно лог не видно. Формэкс скачал вроде последний, 198. Кто нибудь подскажет, может как по другому можно сделать, чтобы форма открывалась посередине, отцентрованно и в момент, когда форма уже открыта запустить нужные процедуры.
Vofka
В 8 есть метод ПодключитьОбработчикОжидания() или что-то типа этого. Там, кажется, указывается процедура которую надо вызвать, интервал через когда вызвать, и еще что-то. Короче точно не помню, но суть должна быть понятна. В 7.7 я вообще ничего уже не помню, но быстренько загуглил, вроде как там тоже есть метод ОбработкаОжидания(). Я бы смотрел в эту сторону. Т.е. открыть форму, а в ПриОткрытии вконце добавить обработчик ожидания, который выведет лог.
andrew76
Vofka @ Сегодня, 12:59 необходимо зарегистрироваться для просмотра ссылки ,

Это описание ОбработкиОжидания от FormEx:
РасширениеФормы->ОбработкаОжидания

ОбработкаОжидания(<?>,)
Синтаксис:
ОбработкаОжидания(Имя, Интервал)
Назначение:
Вызывает процедуру модуля формы с заданным интервалом в миллисекундах. В отличии от штатной обработки ожидания, вызывается при открытых модальных формах. Для одной формы может быть установлено сколько угодно обработок ожидания путем создания нужного количества объектов РасширениеФормы. При уничтожении объекта, для которого вызывался данный метод, соответствующая процедура обработки ожидания останавливается. Метод работает только после физического открытия окна формы.
Параметры:
<Имя> - (Строка Имя процедуры модуля текущей формы для периодического вызова (если в качестве параметра передается пустая строка, то ранее запущенный процесс прекращается))
<Интервал> - (Число Интервал вызова процедуры в миллисекундах (если в качестве параметра передается 0 (ноль)) , то ранее запущенный процесс прекращается)
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
(Строка) Имя процедуры, которая была установлена ранее в качестве процедуры обработки ожидания.

Есть еще ,тоже от FormEx
Сервис->ОстальныеМетоды


ОбработкаОжидания(<?>,)
Синтаксис:
ОбработкаОжидания(<Имя>,<Интервал>)
Назначение:
Вызывает глобальную процедуру с заданным интервалом в миллисекундах.
ПРИМЕР:
Сервис = СоздатьОбъект("Сервис");
Сервис.ОбработкаОжидания("глПолучитьНовыеЗаявки",100);

Цитата(igmig65 @ 17.03.25, 12:51) необходимо зарегистрироваться для просмотра ссылки
не могу ее запустить процедуры из ПослеОткрытия(), в модальном режиме не срабатывает, а если вставляю процедуры в ПриОткрытии(), то все срабатывает но форма не открывается, вернее открывается уже после выполнения процедур, соответственно лог не видно.


Есть еще процедура ПослеСозданияФормы от FormEx

Процедура ПослеСозданияФормы(<?>)КонецПроцедуры
Синтаксис:
Процедура ПослеСозданияФормы(<Контекст>)КонецПроцедуры
Назначение:
Предопределенная процедура вызывается после физического создания окна формы в системе, когда окно формы создано, но еще не полностью проинициализировано и не отображено на экране.
Параметры:
<Контекст> - контекст открытой формы
ЗАМЕЧАНИЕ:
В этой процедуре (и во всех процедурах, вызываемых после нее) можно вызывать методы, которые помечены как "работает только после физического открытия окна формы".


andrew76 @ Сегодня, 14:07 необходимо зарегистрироваться для просмотра ссылки ,

Не работает ПослеОткрытия() в модальном режиме:
правда,ветка на том форуме древняя:
необходимо зарегистрироваться для просмотра ссылки

ещё такое есть:
v7: ОбработкаОжидания в Formex
необходимо зарегистрироваться для просмотра ссылки

Цитата(igmig65 @ 17.03.25, 12:51) необходимо зарегистрироваться для просмотра ссылки
когда форма уже открыта запустить нужные процедуры.


А может посадить процедуры на кнопку (кнопка на форме).
Сделать кнопку невидимой.Потом сэмулировать нажатие этой кнопки ?
Должно сработать в принципе и без formex.
andrew76
Цитата(igmig65 @ 17.03.25, 12:51) необходимо зарегистрироваться для просмотра ссылки
Кто нибудь подскажет, может как по другому можно сделать, чтобы форма открывалась посередине, отцентрованно


Для вывода окна по центру в форме обработки пропишите следующую процедуру :
(если используете компоненту FormEx)

Процедура ПослеОткрытия()
   Окно = СоздатьОбъект("Окна");
   Окно.ЦентрироватьОкно(Форма);
   Форма.Обновить();
КонецПроцедуры


У меня этот код отработал отлично.Каждый раз при запуске обработки,окно строго по центру экрана.

andrew76 @ Сегодня, 17:48 необходимо зарегистрироваться для просмотра ссылки ,

Можно там же поэкспериментировать со стилем окна:

Процедура ПослеОткрытия()
   Окно = СоздатьОбъект("Окна");
   Окно.ЦентрироватьОкно(Форма);
   Окно.СтильОкна(Форма,2); //стиль от 0 до 2, 1 и 2 -без заголовка окна,2 - по моему модальный режим
   Форма.Обновить();
КонецПроцедуры


Что-нибудь получилось ? Дальше мне искать ? Чи не трэба ?

Цитата(igmig65 @ 17.03.25, 12:51) необходимо зарегистрироваться для просмотра ссылки
Кто нибудь подскажет


Так этот вопрос ещё актуален ? Истина уже близко !
igmig65
andrew76 @ Сегодня, 15:56 необходимо зарегистрироваться для просмотра ссылки ,
Сегодня ночью буду пробовать, отпишусь..
andrew76
igmig65 @ Сегодня, 19:05 необходимо зарегистрироваться для просмотра ссылки ,

Не спешите ! Все решится гораздо раньше !
Есть в FormEx нужный функционал - почти как в 1с 8-ке !
Прописываете вызовы ваших процедур в процедуру (я ее назвал- "ВашаПроцедура"-назовите её как хотите) и вызываете её методом - ВыполнитьПроцедуру !

Должно работать !

Процедура ПослеОткрытия()
  
    Окно = СоздатьОбъект("Окна");
    Окно.ЦентрироватьОкно(Форма);
    //Окно.СтильОкна(Форма,2);
    Форма.Обновить();
    Сервис = СоздатьОбъект("Сервис");
    Сервис.ВыполнитьПроцедуру(Контекст, "ВашаПроцедура"); // да,да,вот она !

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


ВыполнитьПроцедуру(<?>,,)
Синтаксис:
ВыполнитьПроцедуру(<Контекст>,<ИмяПроцедуры>,<СписокАргументов>)
Назначение:
Метод предназначен для выполнения процедуры в заданном контексте.
Возвращает 1 в случае успеха, 0 - в противном случае.
ПРИМЕР:
Перем Конт;
Сервис = СоздатьОбъект("Сервис");
ОткрытьФорму("Обработка.Демо", Конт);
Список = СоздатьОбъект("СписокЗначений");
Список.ДобавитьЗначение("Первый параметр");
Список.ДобавитьЗначение("Второй параметр");
Список.ДобавитьЗначение("Третий параметр");
Сервис.ВыполнитьПроцедуру(Конт, "Выполнить", Список);

Только все эти фишки (фичи) - от FormEx !
igmig65
При открытии создаю расширение формы:
//==============================
Процедура ПослеОткрытия()
    Сформировать();
КонецПроцедуры
Процедура ЗагрузитьФормэкс()
    Если ЗагрузитьВнешнююКомпоненту("FormEx.dll") = 0 Тогда
        Предупреждение("Неудачная попытка загрузить FormEx.dll");
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
    //ФормаРасш.Maximize = 1;
КонецПроцедуры
Процедура ПриОткрытии()
    ЗагрузитьФормэкс();
        ФормаРасш = СоздатьОбъект("РасширениеФормы");
    ФормаРасш.ОбработкаОжидания("ПослеОткрытия",10);
    ФормаРасш.ОбработкаОжидания("",0);
КонецПроцедуры

//============================
вот так все норм отработало, всем спс..
andrew76
igmig65 @ Сегодня, 21:01 необходимо зарегистрироваться для просмотра ссылки ,


ну тогда палец,который на форме форума.
igmig65
andrew76 @ Сегодня, 18:08 необходимо зарегистрироваться для просмотра ссылки ,
Да, пардон, думал всем поставил, кстати форму открываю модально, поэтому центровать не пришлось.
Тему можно закрыть, еще раз всем спс..
tibank
andrew76 @ 17.03.25, 17:34 необходимо зарегистрироваться для просмотра ссылки ,
Если форма открывается не модально, можно проще
Перем Конт;

ОткрытьФорму("Обработка.Демо", Конт);
Конт.ВашаПроц(Парам1, Парам2,....);


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