Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2013, 17:23   #1
SolidSnake
Пользователь
 
Аватар для SolidSnake
 
Регистрация: 17.09.2009
Сообщений: 36
По умолчанию Delphi COM 1c 8.2 Обработка дисконнектов

Добрый день форумчане.
Пишу сервис в среде Borland Delphi 2006, который подключается к 1с по COM-соединению.
Подключаюсь так.
Код HTML:
 con1c:=createOleObject('V82.COMConnector');
  conn:=con1c.connect(ConnectionString );
Подключается без проблем.
Каждый день запланирован ребут 1с сервера. (Ну бывают и нештатные ситуации )
Как корректно обработать событие разрыва подключения сервиса с 1с сервером?
Попробовал вызывать процедуру "проверки соединения":
======
Код HTML:
try
     User1c :=conn.ПараметрыСеанса.ТекущийПользователь.Код;
  except
     con1c:=Unassigned;
     conn:=Unassigned;
  end;
=======
дальше "Переподключение "

Код HTML:
try
             begin
              
              if VarIsEmpty(conn) then
                begin
                  con1c:=createOleObject('V82.COMConnector');          
                  conn:=con1c.connect('Srvr='connectstring');           
               end;
             end;
          except on E:Exception do
            begin
              con1c:=Unassigned;
              conn:=Unassigned;
Вроде даже все переподключается. Но через некоторое время, сервис сваливается с сообщением типа "Access Violation at 0X0bf05355 write of address 0x4cfe3fa3.Process Stopped ".

Может уже есть какой-нибудь готовый компонент? Мобыть я напрасно пытаюсь изобрести велосипед ?
SolidSnake вне форума Ответить с цитированием
Старый 24.02.2013, 18:07   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Не понятно. Хотя нет, 1c и Delphi
Код:
try
     User1c :=conn.ПараметрыСеанса.ТекущийПользователь.Код;
  except
     con1c:=Unassigned;
     conn:=Unassigned;
  end;
Шедевр


По теме:
Поставьте MadExcept, подключите к проекту, пересоберите проект и пускайте в ход, при ошибке получите массу полезной информации о том, откуда ноги растут.
Человек_Борща вне форума Ответить с цитированием
Старый 25.02.2013, 08:33   #3
SolidSnake
Пользователь
 
Аватар для SolidSnake
 
Регистрация: 17.09.2009
Сообщений: 36
По умолчанию

Если кому интересно, то bugreport во вложении.
Что то мне подсказывает , что просто не выгружаются вовремя 1сные модули .
Вложения
Тип файла: txt bugreport.txt (13.0 Кб, 137 просмотров)
SolidSnake вне форума Ответить с цитированием
Старый 25.02.2013, 10:47   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ошибка не у вас. Вы вызываете исключение в ПО, которое хотите прибить.
Человек_Борща вне форума Ответить с цитированием
Старый 25.02.2013, 12:50   #5
SolidSnake
Пользователь
 
Аватар для SolidSnake
 
Регистрация: 17.09.2009
Сообщений: 36
По умолчанию

Если я правильно понял, то вы имеете ввиду мой шедевр ?

Код:
try
     User1c :=conn.ПараметрыСеанса.ТекущийПользователь.Код;
  except
     con1c:=Unassigned;
     conn:=Unassigned;
  end;

SolidSnake вне форума Ответить с цитированием
Старый 25.02.2013, 13:36   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

я толком, не понимаю, что там происходит.
Но код просто не имеет смысла.
Код:
  except
     con1c:=Unassigned;
     conn:=Unassigned;
  end;
этот код выполнится только, если здесь
Код:
   try
     User1c :=conn.ПараметрыСеанса.ТекущийПользователь.Код;
будет ошибка.

Вам будет лучше спросить на форумах 1c, как правильно завершать сеанс пользователя(закрывать подключение к серверу) и запускать его снова. А потом уже это через API делать.

Последний раз редактировалось Человек_Борща; 25.02.2013 в 13:40.
Человек_Борща вне форума Ответить с цитированием
Старый 25.02.2013, 13:51   #7
SolidSnake
Пользователь
 
Аватар для SolidSnake
 
Регистрация: 17.09.2009
Сообщений: 36
По умолчанию

в случае дисконнекта, conn.ПараметрыСеанса.ТекущийПользов атель.Код;
возвращает исключние с сообщением

к примеру "
21.02.2013 14:19:34: Сервер баз данных не обнаружен
Microsoft OLE DB Provider for SQL Server: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует, или доступ запрещен.
HRESULT=80004005, SQLSrvr: SQLSTATE=08001, state=1, Severity=10, native=17, line=0, SrvrName=dbsrv\dbsrv
21.02.2013 14:20:29: Сервер баз данных не обнаружен "

, которое в дальнейшем обрабатывается исключением .

пойду тогда 1с негов пытать как всетаки у них обрабатывается событие при разрыве соедениения .

PS: Спасибо за madExcept. Интересная вещь
SolidSnake вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка строк в Delphi Onill Помощь студентам 10 03.05.2012 11:46
Обработка Image в Delphi LilliPut Помощь студентам 11 16.05.2011 18:00
Delphi обработка ошибок world12_tk Помощь студентам 3 20.09.2009 14:58
обработка изображений в Delphi Астер Мультимедиа в Delphi 0 26.04.2009 12:33
Обработка ошибок в Delphi 7 Наташкин БД в Delphi 3 21.12.2007 22:07