Видимое OLE соединение

1. 16.06.15 18:20 Сейчас в теме
Можно ли сделать OLE соединение видимым, что бы глазами увидеть ошибку в окне сообщений? Необходимо для отладки. По OLE будет запускаться обработка.
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. _Z1 38 16.06.15 19:25 Сейчас в теме
(0) По моему нельзя.
Можно отладить глобальную функцию в локальной базе
а потом эту функцию вызывать по OLE
3. CheBurator 3372 16.06.15 21:52 Сейчас в теме
можно настроить программнымиметодами перехват в оле/программе окна сообщений. все что туда выводится - будет писаться в текстовый лог.
.
если ошибка синтаксическая/времени выполнения - оттопырь журнал регистрации и посмотри записи. Если ошибка типа "документ не проведен, потому что не хватает товара" - то в ЖР ничего не будет
4. eshtrey 17.06.15 09:09 Сейчас в теме
Может у ЕПРСТ есть ответ, про что то похожее он писал тут http://www.forum.mista.ru/topic.php?id=345728
6ое сообщение
5. VitusBering 5 17.06.15 09:10 Сейчас в теме
Можно временно в модуль добавить код для записи в текстовый файл строк со значениями контролируемых переменных (займет несколько строк). По ним отлавливать ошибки.
6. eshtrey 17.06.15 09:30 Сейчас в теме
(5) VitusBering, пока так и делаю, но это не очень удобно
7. Serginio 870 17.06.15 11:53 Сейчас в теме
Посмотри Show1c.exe или самому недолго написать
10. Gkmy 29 17.06.15 13:16 Сейчас в теме
9. Serginio 870 17.06.15 12:19 Сейчас в теме
Для упрощения поиска окна можно прописать его
v7.EvalExpr("ЗаголовокСистемы(""Заголовок Для Поиска Окна"")");
Тогда Названия окна для поиска будет
"1С: Предприятие - "+СокрЛП(Метаданные.Идентификатор)+": "+ЗаголовокСистемы()
11. Gkmy 29 17.06.15 13:19 Сейчас в теме
Утилита Show1c.exe разворачивает окно (SW_MAXIMIZE) последнего запущенного экземпляра 1c-Предприятия.

Поясню, зачем это надо.

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

Следующий кусок кода позволить сделать "видимой" открытую через OLE 1С:
о=СоздатьОбъект("V77.Application");       // это собственно
о.Initialize(в77.RMTrade,"/D","");        // вызов 1С через OLE
КомандаСистемы(КаталогИБ()+"Show1c.exe"); // а это мы запускаем утилитку "борьбы с невидимками",
                                          // естественно, путь к утилитке у вас может 
                                          // быть собственный


2. Как это реализовано?

Алгоритм этой утилитки достаточно прост: при помощи EnumWndProc находим все окна со строкой "Предприятие"
в названии, получаем для каждого окна процесс (GetWindowThreadProcessId, потом OpenProcess).
При помощи GetProcessTimes получаем для каждого время прошедшее с момента запуска. Выбираем процесс
с наименьшим временем жизни (вроде как только что запущенный), говорим ему ShowWindow(hWnd,SW_MAXIMIZE)...

Все.

Все вопросы и предложения: fastcode@fromru.com,
также кому надо могу выслать сырцы для MsVC.
12. eshtrey 17.06.15 14:30 Сейчас в теме
(11) Gkmy, то что надо, спасибо
13. Serginio 870 17.06.15 16:13 Сейчас в теме
(11) В принципе можно показать и невидимое окно

public static void ПоказатьОкно(string НазваниеОкна)
        {
           string Заголовок="1С:Предприятие";

            foreach (var processRunning in System.Diagnostics.Process.GetProcesses())
            {
                if (processRunning.ProcessName.StartsWith("1cv7"))
                    foreach (IntPtr handle in EnumerateProcessWindowHandles(processRunning))
            {
                var wndCaption = new StringBuilder(1000);
                SendMessage(handle, WM_GETTEXT, wndCaption.Capacity, wndCaption);
                if (wndCaption.Length >= Заголовок.Length)
                        if (wndCaption.ToString(0,Заголовок.Length)==Заголовок)
                            if (!IsWindowVisible(handle))
                             ShowWindow(handle, 5);

         

         
            }
         
            }
        }
Показать
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Программист 1С
Москва
зарплата от 140 000 руб. до 180 000 руб.
Полный день

Консультант 1С (переквалификация для бухгалтеров)
Пермь
зарплата от 50 000 руб.
Полный день

Консультант 1С (переквалификация для бухгалтеров)
Нижний Новгород
зарплата от 50 000 руб.
Полный день

Консультант 1С (переквалификация для бухгалтеров)
Ульяновск
зарплата от 50 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день