Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Сервис.ВыполнитьГлобальнуюПроцедуру() (число прочтений - 20650 )
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Сервис.ВыполнитьГлобальнуюПроцедуру()
Ответ #15 - 11. Августа 2006 :: 04:25
Печать  
По всей вероятности мой вопрос не понят до конца или я не пойму всех вас.
Меня не устраивает периодическое отслеживание события, а обработка ожидания это оно и есть, т.е. обращение к гл.процедуре с заданным интервалом. Нужен запуск "спящей" глобальной процедуры/функции у всех пользователей по команде (по срабатыванию триггера) у любого из пользователей. Не могу же я в ПриНачалеРаботыСистемы написать "ОбработкаОжидания("НужнаяПроцедура",Интервал)", вернее можно все, но сисма только и будет заниматься тем, что ждать, когда кто-нибудь сделает то, что мне нужно знать.
  

Константин
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Сервис.ВыполнитьГлобальнуюПроцедуру()
Ответ #16 - 11. Августа 2006 :: 04:48
Печать  
Цитата:
По всей вероятности мой вопрос не понят до конца или я не пойму всех вас.
Меня не устраивает периодическое отслеживание события, а обработка ожидания это оно и есть, т.е. обращение к гл.процедуре с заданным интервалом. Нужен запуск "спящей" глобальной процедуры/функции у всех пользователей по команде (по срабатыванию триггера) у любого из пользователей. Не могу же я в ПриНачалеРаботыСистемы написать "ОбработкаОжидания("НужнаяПроцедура",Интервал)", вернее можно все, но сисма только и будет заниматься тем, что ждать, когда кто-нибудь сделает то, что мне нужно знать.


чего ты боишься? периодического запуска некоей процедуры? если написать ее оптимально, то потерь на общей производительности ты не заметишь - 100% доказано многолетним опытом работы!

Более того - все абстракции в системе, реализующие асинхронность событий основаны на подобных периодических опросах (прерываниях и т.д.), так зачем тебе нужна еще одна абстракция? она может протечь в любой момент!  Подмигивание
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервис.ВыполнитьГлобальнуюПроцедуру()
Ответ #17 - 11. Августа 2006 :: 05:27
Печать  
DrACe писал(а) 11. Августа 2006 :: 04:48:
Более того - все абстракции в системе, реализующие асинхронность событий основаны на подобных периодических опросах
Не согласен. Не все. А как же CallBack-вызовы?
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Сервис.ВыполнитьГлобальнуюПроцедуру()
Ответ #18 - 11. Августа 2006 :: 08:42
Печать  
Цитата:
чего ты боишься? периодического запуска некоей процедуры?

Не боюсь. Просто при большом периоде опроса данные в этом промежутке могут быть, да скорее всего будут неактуальны. Уменьшение периода до тех пределов, когда интервал становится соизмеримым с со временем выполнения самой процедуры - абсурд какой-то Вот и уперся я, чтоб процедура выполнялась по сигналу извне, а команда поступает именно по ФАКТУ исполнения любым юзером некоей операции.
  

Константин
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Сервис.ВыполнитьГлобальнуюПроцедуру()
Ответ #19 - 11. Августа 2006 :: 09:18
Печать  
Цитата:
Цитата:
чего ты боишься? периодического запуска некоей процедуры?

Не боюсь. Просто при большом периоде опроса данные в этом промежутке могут быть, да скорее всего будут неактуальны. Уменьшение периода до тех пределов, когда интервал становится соизмеримым с со временем выполнения самой процедуры - абсурд какой-то Вот и уперся я, чтоб процедура выполнялась по сигналу извне, а команда поступает именно по ФАКТУ исполнения любым юзером некоей операции.


приведи все же свой конкретный пример и может кто-нибудь предложит тебе простую альтернативу тому, чего все равно еще нет (да и не известно - появится ли)
  
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Сервис.ВыполнитьГлобальнуюПроцедуру()
Ответ #20 - 11. Августа 2006 :: 10:11
Печать  
Пример займет много места, я хочу, чтобы меня поняли.
У менеджера постоянно открыта обработка, на форме которой имеется ТП с поставщиком данных ODBC, В ТП выведен список товаров с остатками, которые непрерывно меняются, и поэтому ТП тоже обновляется. Обновление происходит с некоторой периодичностью. Очень часто бывает так что остатки изменились в промежутке между обращениями к БД и юзер видит неверные остатки, а другой раз вообще нет движения и процдура обновления проходит впустую. Вся задача как раз в том, чтобы ТП обновлялась не периодически, а после любого движения в ренистре остатков, которое вызвано любым из пользователей. Я из этой ситуации вижу только один выход - применение какого-нибудь внешнего приложения с использованием сетевых протоколов. Вот и хочу услышать что-нибудь другое, может сообща получится?
  

Константин
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Сервис.ВыполнитьГлобальнуюПроцедуру()
Ответ #21 - 11. Августа 2006 :: 10:56
Печать  
тогда очевидный тупой вопрос: когда менеджеру нужны Актуальные остатки(а не просто подбор номенклатуры)  - почему бы не нажать кнопку "Обновить"?  Ужас
Ведь все равно при проведении документа остатки будут контролироваться снова и может так получиться, что кто-нибудь из юзеров успеет списать остаток во время заполнения документа при имевшихся в наличии мгновение назад на форме подбора остатках.

...или менеджер, как в матрице(или на бирже) - просто смотрит на бегущие цифры, меняющиеся остатки на глазах, потом кричит - стойте все!!! Дайте отгрузить ведро гаек!  Подмигивание Не обижайся, пожалуйста, другие подскажут более конструктивно - у меня такое решение и я его могу отстаивать
  
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Сервис.ВыполнитьГлобальнуюПроцедуру()
Ответ #22 - 11. Августа 2006 :: 11:37
Печать  
Цитата:
...или менеджер, как в матрице(или на бирже) - просто смотрит на бегущие цифры

Абсолютно в точку. Сидит и тупо обслуживает клиентов не закрывая вышеуказанной мною обработки, только быстренько вводит клиента, перебрасывает из ТП в другую таблицу выбранные товары, вводит их количество. Естественно после "ОК" ТП обновляется, БД автоматом тоже обновляется. Клиент идет с распечатанными бумагами на склад получать товары. А его оказывается там уже нет потому, что ТП вовремя не обновилась, и товар, который уже отгрузил другой такой-же менагер, из ТП не скрылся.
Кто виноват? - конечно тупой программист.
  

Константин
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервис.ВыполнитьГлобальнуюПроцедуру()
Ответ #23 - 11. Августа 2006 :: 11:39
Печать  
Цитата:
Кто виноват? - конечно тупой программист.

Конечно! А кто будет остатки контролировать?! В твоем случае это лучше делать при печати. Причем сразу в этот момент сохранять и проводить документ.
  

FormEx developer
Наверх
www  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Сервис.ВыполнитьГлобальнуюПроцедуру()
Ответ #24 - 11. Августа 2006 :: 12:24
Печать  
О, АльФ!
Менеджер даже не видит, что отправляется на печать. Он видит только "табло остатков", как на бирже. Я и так уже почти любое действие пытаюсь отследить, чуть ли не нажатие кнопки клавы и движение мыши, и по этим событиям ТП обновляется. Но это не выход. Нужно видеть динамическую картинку - изменились остатки - изменилась и картинка, а если нет - картинка замирает. Вот и вся проблема.
  

Константин
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Сервис.ВыполнитьГлобальнуюПроцедуру()
Ответ #25 - 11. Августа 2006 :: 12:35
Печать  
kms писал(а) 10. Августа 2006 :: 06:41:
Кстати, забавно, что 1С проверяет наличие изменений именно методом, описанным Valet. Ужас
Код
Выбрать все
Select NETCHGCN from _1SUSERS(NOLOCK)
 


и никаких триггеров.



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

А пока решил попробовать GTTools, я ее с Проклуба скачал. Может быть кто-то уже пробовал ее в деле?
  

Константин
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервис.ВыполнитьГлобальнуюПроцедуру()
Ответ #26 - 11. Августа 2006 :: 18:44
Печать  
О GTTools пролетала тема http://www.1cpp.ru/forum/YaBB.pl?num=1152733087/5
  

De quelle planète es-tu?
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Сервис.ВыполнитьГлобальнуюПроцедуру()
Ответ #27 - 12. Августа 2006 :: 08:05
Печать  
Цитата:
О GTTools

Да, спасибо. Идея очень заманчивая. Вот только запустить ее я так и не смог (отсутствует CLSID), несмотря на то, что выполнил все инструкции, расписанные в комментариях к ВК на Проклубе. Ищу что-нибудь похожее.
  

Константин
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервис.ВыполнитьГлобальнуюПроцедуру()
Ответ #28 - 12. Августа 2006 :: 08:58
Печать  
steban писал(а) 08. Августа 2006 :: 08:35:
Зато теперь для обмена через MSMQ есть EventProxy.dll Улыбка


Вот готовое решение. Чем не нравится? Проще пользовать готовое решение микрософта по обмену сообщениями, чем ВК.
  
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Сервис.ВыполнитьГлобальнуюПроцедуру()
Ответ #29 - 12. Августа 2006 :: 09:26
Печать  
Утро вечера мудреней...
Для себя решил я эту задачу, взяв идею из GTTools о своем мини-сервере. Правда без обработки ожидания не получается, но при малой периодичности опроса риск промахнуться сведен до минимума. Идея такова: создается файл формата БД, мето расположения выбирается любое удобное, можно и в БД. Поля: Имя пользователя, Флаг присутствия и поля, нужные для использования, напр. Флаг движения рег.остатков ТМЦ, Сообщение и т.д.. При начале работы системы у каждого, кто ее запускает, в записи с ID этого пользователя устанавливается флаг 1 или 2 (монопольно). При завершении - флаг 0 (аналог 1SUsers). При выполнении операции, которую должны заметить все, или выбранные юзеры, в этом сервере далаются записи в поле "Флаг операции ХХХ". При переодическом опросе у тех юзеров, кому этот сигнал предназначен, получают его. После приема сигнала значение в поле обнуляется. При повторном опросе, если записи нет ничего не происходит и так, до следующего сигнала.
Если кому будет интересно, то я выложу код. Работает зараза: и запускает процедуры, и выдает сообщения, и открывает формы - прямо конференция в 1С (прямо хоть патентуй), причем необязательно использование никаких ВК (для DBF), в т.ч. 1С++, одно только могу сказать, что прямой запрос конечно на все головы выше обычноых методов работы с DBF.
Жаль только, что не получилось использовать 1С в асинхронном режиме, но раз Drace сказал, что бояться использования обработки ожидания через каждую секунду не нужно - Let it be.
  

Константин
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать