Необычная проблема с OLE на 1С 7.7
20.04.2006
06:40
#1
"Ситуация. <br>Осуществляется OLE синхронизация базы на одном сервере с другой базой на другом (ОС - Win 2003 /лиц./, железо хорошее. 1С 7.7 /лиц./, сетевая, 25 релиз). <br>Кроме того после установления коннекта через OLE для ускорения некоторых операций синхронизации цепляемся к другой базе на уровне dbf-файлов через ODBC. <br>И понеслась ...<br>Это все происходит по ночам после сохранения базы и ее переиндексации (по событию "ОбработкаОжидания"). <br>По ночам у нас никто не работает. <br>После того как синхронизация отрабатывает 1С закрывается. <br><br>Все прекрасно работало уже больше года до предыдущих выходных. <br>После них при ночном старте обработки по расписанию появляется сообщение <br>Заголовок окна - "Сервер занят" <br>Само сообщение - <br>"Действие не может быть завершено, так как другая программа занята<br> Для перехода к этой программе воспользуйтесь кнопкой "Переключится"""" <br>и три кнопки "Переключится", "Повторить" и "Отмена" (неактивная)<br> <br>После нажатия клавиши "Переключится" все замечательно работает. В ручном режиме<br>когда запускаешь обработку никаких впоросов и сообщений не возникает - в не зависимости<br>от того сколько пользователей в какой базе работает.<br><br>Вопрос.<br>Как сделать так чтобы это окошко не появлялось или автоматически в нем нажималась бы кнопка "переключится"?<br>Из-за чего оно стало появлятся если в исходном коде и в расписании синхронизаций никто ничего не менял?<br><br>// 1) Запуск OLE<br>---------------<br>Если ФС.СуществуетФайл(Пут+"1Cv7.md")=1 Тогда<br>Попытка<br> Открыта=База.Initialize(База.RMTrade," /d"+Пут+" /N" + ПользовательДиалог+ " /P" +Пароль, "NO_SPLASH_SHOW");<br> ...<br>---------------<br><br>// 2) Цепляемся через ODBC драйвер<br>---------------<br>Попытка<br> конект_l1 = СоздатьОбъект("ODBCRecordSet");<br>Исключение<br> Если ЗагрузитьВнешнююКомпоненту("1cpp.dll")=0 тогда<br> Предупреждение ("Компонента 1с++ не найдена");<br> СтатусВозврата(0);<br> Возврат;<br> КонецЕсли;<br> конект_l1 = СоздатьОбъект("ODBCRecordSet");<br>КонецПопытки;<br><br> м = СоздатьОбъект("MetaInfoClasses");<br> Если м.ЭтоSQL_Версия()=0 тогда<br> СтрокаПодключения = "driver=Microsoft Visual FoxPro Driver;Exclusive=No;SourceType=DBF;SourceDB="+СокрЛП(Пут);<br> Одбс = СоздатьОбъект("ODBCDatabase");<br> ДрК = Одбс.DriverConnect(СтрокаПодключения);<br> Если ДрК = 0 Тогда<br> Сообщить(Одбс.ПолучитьОписаниеОшибки());<br> КонецЕсли;<br> конект_l1.УстБД(Одбс);<br> <br> КонецЕсли;<br>---------------<br>"
26.04.2006
17:26
#2
Как вариант: написать свою резидентную приблуду, пусть в памяти висит и ждет окна с заголовком "Сервер занят", как находит отлавливает хендл нужной кнопки в окне и постит ей сообщения wm_LButtonDown и за ним wm_LButtonUp.
26.04.2006
20:04
#3
Сталкивался с аналогичной проблемой. Пока обработка OLE проходила не слишком долго (конкретное время не помню) все было хорошо. Как только длительность обработки превысила некоторое критическое значение, стало вываливаться аналогичное сообщение. Вылечилось оптимизацией обработки по времени выполнения.
28.04.2006
04:14
#4
Лучше эмулировать нажатие кнопки через событие BM_CLICK. Могу тебе заслать програмульку, которая это делает, думаю, дописать не проблема. А вообще это борьба со следствием, а не с причиной...
Ответили:
пост #5
24.10.2016
15:55
#5
Ответ на
пост №4
Feanor, просьба отправить программу на почту, которая кликает через событие BM_CLICK Ответили:
пост #6
Ошибка при работе с сервисом автоматического заполнения реквизитов контрагента.Мамочки, ФСС, обособленные подразделения и вариант ↑ сумм пособий до 1.5 лет
Читают тему
(гостей: 1)