Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Динамически изменить имя процедуры (число прочтений - 930 )
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 235
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Динамически изменить имя процедуры
22. Февраля 2019 :: 15:18
Печать  
В классе применяется таймер РасшФормы.ОбработкаОжидания(). При помещении на форму двух объектов получаем два таймера с одноименными процедурами, вызывается одна из них. Как разделить, чтобы каждый объект вызывал свою процедуру? Кто-нибудь сталкивался с подобной задачей? Может есть другое решение?
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 564
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Динамически изменить имя процедуры
Ответ #1 - 22. Февраля 2019 :: 15:48
Печать  
  
Наверх
www  
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 235
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: Динамически изменить имя процедуры
Ответ #2 - 22. Февраля 2019 :: 18:11
Печать  
Djelf писал(а) 22. Февраля 2019 :: 15:48:


Можно было бы попробовать, да только нечего. А где качать?

Я вообще не представляю механику работы таймера внутри объекта.
« Последняя редакция: 22. Февраля 2019 :: 19:16 - recop »  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 807
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Динамически изменить имя процедуры
Ответ #3 - 22. Февраля 2019 :: 19:19
Печать  
Смотри класс МультиТаймер: https://github.com/alyuev/1C

Это класс-наследник объекта Таймер. Идея была такая, чтобы запустить какую-то процедуру (экспортную из глобальника) с уже переданными параметрами (в методе запуска таймера) через какое-то указанное время. Можно периодически запускать.

Код (C++)
Выбрать все
Процедура ЗапуститьТест(Парам1,Парам2, ... ,ПарамN) экспорт
КонецПроцедуры
...
Таймер=СоздатьОбъект("МультиТаймер");
Таймер.ЗапуститьТаймер(100000,0,"ЗапуститьТест",Парам1,Парам2, ... ,ПарамN); 

  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 235
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: Динамически изменить имя процедуры
Ответ #4 - 22. Февраля 2019 :: 22:11
Печать  
Решил на удивление просто (спасибо Альфу):

Код
Выбрать все
-
procedure HintShow() export
  var hX,hY,Width,Height;
 
  if ПоказыватьПодсказки=0 then
    return;
  elsif ТипЗначенияСтр(IVr.Context)<>"ГрупповойКонтекст" then
    return;
  endif;

  IVr.ExtForm.ОбработкаОжидания("HintShow",0);
  if ПустоеЗначение(IVr.Current)=1 then
    ПерехватчикПредыдущий.HintShow(); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    IVr.PanelHint.Show=0;
      return;
  elsif ПустоеЗначение(IVr.Current.Подсказка)=1 then
    return;
  endif;
...

 

  
Наверх
 
IP записан
 
vladimirmir2012
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 425
Зарегистрирован: 18. Мая 2011
Re: Динамически изменить имя процедуры
Ответ #5 - 23. Февраля 2019 :: 06:16
Печать  
recop писал(а) 22. Февраля 2019 :: 15:18:
В классе применяется таймер РасшФормы.ОбработкаОжидания().

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

Это позволяет к примеру "на лету" генерировать код функции и выполнять ее.
Например у меня такой подход использован для загрузки данных таблиц любой базы Firebird в 1С /в справочники/.
Для этого используется всего лишь одна обработка, которая имеет доступ к метаданным таблиц, которые используются для формирования на лету текста функции, которая формирует значение реквизитов элемента справочника.
Такой подход экономит массу времени.
Да и реализация такого модуля весьма тривиальна.

Так же в 1cpp реализована возможность добавления и использования в контекст модуля новых переменных.

Использование этих двух возможностей позволяют реализовать модули не с статической логикой работы, а динамической.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать