Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Как организовать генерацию события из одного сеанса 1С остальным сеансам? (число прочтений - 6183 )
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Как организовать генерацию события из одного сеанса 1С остальным сеансам?
17. Февраля 2009 :: 08:55
Печать  
Господа с умными головами, подмогните мыслью плиз. Че-то у меня мозг сегодня не работает.

Есть обработка - расписание приема врачей. Сделана на базе печатной таблицы. При вводе/изменении данных в в ячейке таблицы все изменения отражаются на определенном справочнике. Несколько пользователей могут работать с расписанием одного и того же врача. Соответственно могут возникнуть коллизии когда на, скажем, 15:00 один из пользователей записал пациента, а другой этих изменений не увидел и пытается записать на то же время другого пациента. Необходимо решить задачу, чтобы изменения произведенные одним пользователем, как-то тут же сообщались другим.

Например, изменивший пользователь генерирует широковещательное событие, другие клиенты это событие перехватывают и если нужно отрабатывают. Ситуация еще осложняется тем что сейчас все работают в сетвом режиме, а через месяц будут работать в терминальном.

Возможно эту задачу как-нибудь разрешить? Можно конечно извратиться через "ОбработкаОжидания", но хотелось бы более красивого решения.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как организовать генерацию события из одного сеанса 1С остальным сеансам?
Ответ #1 - 17. Февраля 2009 :: 09:37
Печать  
Например, создай служебный справочник РасписаниеВрачей с реквизитами Врач, Дата, Время.
Перед записью делай анализ наличия записи на время/дату и врача.
Если ее нету, то просто записывай этот элемент.
Если запись есть, то выдавай сообщение пользователю или запрещай запись.
Но в 77 в своей обработке без обработки ожидания/таймера не обойдешься Печаль
Обработка ожидания будет простая - повторная выборка всех записей по данному врачу на текущий день или ближайшее время, т.е. как удобнее.
И занесение полученной выборки в твою таблицу для выбора.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Как организовать генерацию события из одного сеанса 1С остальным сеансам?
Ответ #2 - 17. Февраля 2009 :: 09:45
Печать  
Ну есть еще одна проблемка. Если на дату/время записан пациент, то пользователь может его снять с записи (пациент отказался), или изменить запись (ошибка ввода). Так что простая проверка не поможет. Кроме того, постоянно опрашивать справочник через обработку ожидания - будет сильно грузить сервер.
  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Как организовать генерацию события из одного сеанса 1С остальным сеансам?
Ответ #3 - 17. Февраля 2009 :: 09:52
Печать  
maljaev писал(а) 17. Февраля 2009 :: 08:55:
Несколько пользователей могут работать с расписанием одного и того же врача.


ТО есть расписание врача отрыто на запись всем что ли, тут без блокировок вряд ли обойтись, перед открытием спрашивай на запись или на чтение открывать
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Как организовать генерацию события из одного сеанса 1С остальным сеансам?
Ответ #4 - 17. Февраля 2009 :: 09:58
Печать  
Самое умное, что смог придумать - ввести справочник логов изменений, подчиненный справочнику врачей. В обработке ожидания смотреть, какие новые записи появились в справочнике логов с момента последней отработки обработки ожидания, и отражать эти изменения в таблице. Раз в сутки чистить справочник логов.

Это нормальный вариант? Ничего лучше с использованием ВК не придумать?

Насколько будет грузить сеть и сервер такой алгоритм?

Код
Выбрать все
// где-нибудь при открытии модуля

ТЗ_ПоследниеДействия=СоздатьОбъект("ТаблицаЗначений");
ТЗ_ПоследниеДействия.НоваяКолонка("ЭлементЛога");

СпрЛог=СоздатьОбъект("Справочник.Логи");
СпрЛог.ИспользоватьВладельца(Врач);
СпрЛог.ПорядокКодов(1);
СпрЛог.ОбратныйПорядок(1);

// в обработке ожидания

ТЗ_ПоследниеДействия.КоличествоСтрок(0);
СпрЛог.ВыбратьЭлементы();

Пока СпрЛог.ПолучитьЭлемент()=1 Цикл
   Если СпрЛог.Код<ПоследнийОтработанныйКод
	Прервать;
   КонецЕсли;
   ТЗ_ПоследниеДействия.НоваяСтрока();
   ТЗ_ПоследниеДействия.ЭлементЛога=СпрЛог.ТекущийЭлемент();
КонецЦикла;

Если ТЗ_ПоследниеДействия.КоличествоСтрок()>0 Тогда
   Код;
   // потом отрабатываем события из ТЗ_ПоследниеДействия на таблице ввода
КонецЕсли; 

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как организовать генерацию события из одного сеанса 1С остальным сеансам?
Ответ #5 - 17. Февраля 2009 :: 10:24
Печать  
Можно и без компонент все сделать
Делаем минимальный квант времени скажем 10  ( можно 5 )
тогда занятость может начинаться в 0 10 20 30 40 50 минут
структура справочника занятости :
Врач- СправочникВрачей
ТекДата дата
Час  число (0 дл 23)
Мин ( 0 или 10 или 20 или 30 или 40 или 50 )
КтоВнесЗапись  СправочникСотрудников.

Если надо длительность приема 30 минут то вносим сразу 3 записи.
Далее каким либо способом организуем блокировку в момент записи. И при этой записи проверяем  не заняты ли нужные интервалы
дата время если заняты ( хотя бы один интервал )то в записи отказываем и обновляем таблицу.
Еще сделай удалить прием может либо автор либо старший
администратор.
Далее веди где либо весь лог добавлений,удалений из расписания.
Вроде все. Можно периодически а еще лучше при заполнении чего либо проверять на то что уже занято и на основе этого обновляй свой табличный документ.

Еще варианты решения твоей задачи :
1.Использовать регистр сведений но тогда все будет на документах
вместо справочнике но не надо будет думать о блокировках а все делать в модуле проведения.
2.использовать отдельные таблицы sql и все делать на них.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как организовать генерацию события из одного сеанса 1С остальным сеансам?
Ответ #6 - 17. Февраля 2009 :: 10:32
Печать  
РС кстати для этого справочника сделай уникальный код (ключ)
ИдВрача,Дата,НачалоСеанса
этим самым сделаем еще более невозможным дублирование расписания приема врача.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как организовать генерацию события из одного сеанса 1С остальным сеансам?
Ответ #7 - 17. Февраля 2009 :: 10:47
Печать  
Можно как-нибудь тупо: при начале редактирования проверять, не изменились ли данные, если изменились, то выдавать предупреждение, что данные изменились и принудительно обновить форму, отвергая все сделанные изменения.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как организовать генерацию события из одного сеанса 1С остальным сеансам?
Ответ #8 - 17. Февраля 2009 :: 10:50
Печать  
JohnyDeath писал(а) 17. Февраля 2009 :: 10:47:
Можно как-нибудь тупо: при начале редактирования проверять, не изменились ли данные, если изменились, то выдавать предупреждение, что данные изменились и принудительно обновить форму, отвергая все сделанные изменения.

т.к. если они одновременно начнут редактировать локально каждый у себя то никто и не получит этого Предупреждения.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Как организовать генерацию события из одного сеанса 1С остальным сеансам?
Ответ #9 - 17. Февраля 2009 :: 10:54
Печать  
В принципе понимаю, что через ОбработкаОжидания проверено и проще,
а через dll и ОбработкаВнешнегоСобытия() не будет интересней?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как организовать генерацию события из одного сеанса 1С остальным сеансам?
Ответ #10 - 17. Февраля 2009 :: 10:54
Печать  
Z1 писал(а) 17. Февраля 2009 :: 10:50:
JohnyDeath писал(а) 17. Февраля 2009 :: 10:47:
Можно как-нибудь тупо: при начале редактирования проверять, не изменились ли данные, если изменились, то выдавать предупреждение, что данные изменились и принудительно обновить форму, отвергая все сделанные изменения.

т.к. если они одновременно начнут редактировать локально каждый у себя то никто и не получит этого Предупреждения.

Ну так.. кто первый кончил, тот и папа  Подмигивание
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Как организовать генерацию события из одного сеанса 1С остальным сеансам?
Ответ #11 - 17. Февраля 2009 :: 18:36
Печать  
У Ромикса была компонента: http://www.kb.mista.ru/article.php?id=119 Можно установить общий каталог, в котором отслеживать изменения. Если кто-то осуществил запись - то выставляется тут файл-флаг, который ловится остальными 1С-ками и они обновляют свои формы
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как организовать генерацию события из одного сеанса 1С остальным сеансам?
Ответ #12 - 18. Февраля 2009 :: 05:31
Печать  
Можно и через WMI сделать подобное слежение за файлом/папкой Улыбка
Пример на форуме выкладывался.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
aou1c
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 183
Местоположение: Екатеринбург
Зарегистрирован: 29. Мая 2006
Пол: Мужской
Re: Как организовать генерацию события из одного сеанса 1С остальным сеансам?
Ответ #13 - 07. Марта 2009 :: 18:17
Печать  
Я бы все сделал через документ с проведением по регистру остатков,  просто и надежно
Измерения: день, интервал(15,...)
Ресурс: Занято (0 - не занято)
  
Наверх
ICQ  
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Как организовать генерацию события из одного сеанса 1С остальным сеансам?
Ответ #14 - 07. Марта 2009 :: 22:38
Печать  
aou1c писал(а) 07. Марта 2009 :: 18:17:
Я бы все сделал через документ с проведением по регистру остатков,  просто и надежно
Измерения: день, интервал(15,...)
Ресурс: Занято (0 - не занято)

Зачем? Ужас Это нагрузка минимум на 4 таблицы, а возможно даже больше, лишние блокировки и прочее... Тормоз. Лучше уж тогда через справочник. Ну, в принципе, я так и так через справочник уже делаю.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать