Tracer 1C

04.08.09

Разработка - Разработка внешних компонент

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

Скачать файлы

Наименование Файл Версия Размер
Внешняя компонента
.1225901920 71,95Kb
773
.1225901920 71,95Kb 773 Скачать
Исходники Tracer 1C на Delphi 7
.1225902089 17,78Kb
498
.1225902089 17,78Kb 498 Скачать
Мой пример реализации внешней трассировки
.1226279216 44,00Kb
569
.1226279216 44,00Kb 569 Скачать

ОПИСАНИЕ

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

Предлагаю свое решение проблемы автоматизации трассировки программных модулей на базе внешней компоненты.

Tracer автоматически формирует сообщения:

- о входе-выходе из процедур и функций,
- о возвращаемых значениях функций
- о входе в условные операторы
- о вычисляемых значениях локальных переменных модуля

Все сообщения формируются динамически, в процессе работы, т.е. НЕ ТРЕБУЕТСЯ вручную вносить каких-либо изменений в программные модули справочников, документов и отчетов. Также Tracer не портит Ваши модули: внесенные изменения не сохраняются.

В качестве примера поместил в "Подробное описание" лог трассировки проведения расходной накладной из демо-базы 1С:Торговля и склад 7.7

ВЫКЛАДЫВАЮ ИСХОДНИКИ для желающих что-либо доработать под себя, поскольку тема трассировки достаточно интересна, и идей тут может быть сколько угодно: умная трассирочка таблиц значений, окно настройки и т.д. Я решил задачу лишь в общем. Платформа - Delphi 7

Кто уже понял, прототипом был взят метод, описанный в "OnSave" romix-ом. Кстати, с этим связана одна проблема, о которой я скажу чуть ниже...

УСТАНОВКА

1. Скопировать Tracer1C.dll в каталог информационной базы
2. В глобальный модуль внести небольшие изменения

// В начале модуля добавляем
Перем глТрейсер Экспорт;
...

Процедура ПриНачалеРаботыСистемы()
...
// В конце процедуры добавляем
ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"Tracer1C.dll");
  глТрейсер=СоздатьОбъект("AddIn.Tracer1C");
  глТрейсер.Open();
// Если используется внешняя обработка трассировки, то включить строку:
глТрейсер.ExtTracer();
// Если необходимо трассировать не все, а лишь те модули, где вначале стоит
//TRACER ON, то включить строку:
глТрейсер.TraceAll(0);
КонецПроцедуры  

Процедура ПриЗавершенииРаботыСистемы()
// В начале процедуры добавляем
глТрейсер.Close();
...

КонецПроцедуры  



После этого просто работайте в своей программе, а сообщения трассировки будут появляться в окне сообщений. Конечно, ни что не мешает их выводить в файл.

РЕЖИМЫ РАБОТЫ И РАСШИРЕНИЯ

Метод TraceAll позволяет управлять работой внешней компоненты. По умолчанию происходит трассировка всех модулей. После вызова глТрейсер.TraceAll(0) трассируются только те модули, первой строчкой которых стоит комментарий

//TRACER ON

Соответственно, вызов глТрейсер.TraceAll(1) возвращает режим трассировки всех модулей

Текущая реализация позволяет направлять формируемые компонентой сообщения трассировки на вход процедуры в глобальном модуле и соответственно, обрабатывать на уровне 1С. Включение метода глТрейсер.ExtTracer() говорит трейсеру о том, что в состав глобального модуля включена функция

глСформироватьСообщениеТрассировки(Ключ,Имя,Значение).

Выкладываю свой пример реализации расширения трассировки, позволяющий формировать печатную таблицу сообщений трассировки, направлять вывод в файл и в окно сообщений, а также включать/отключать различные режимы трассировки. Подробное описание по использованию смотреть в модуле Трассировка.ert Разумеется, каждый может взять за основу эту обработку и сделать нечто свое, супер навороченное. С удовольствием дам ссылки на такие разработки и выложу их здесь по желанию авторов.

БЫЛА ПРОБЛЕМА, НАДЕЮСЬ РЕШИЛИ

Иногда в процессе работы выпадал из адресного пространства 1С, и платформа свертывалась, вылетая по ошибке, при попытке записать что-то в пустоту. Происходило не часто, но неприятно. Похоже, всеобщими усилиями проблему решили, но стоит потестить. По крайней мере, у меня не вылетает больше.

Особые благодарности в виде рукопожатий, пива, поцелуев при встрече (девушки) и всяческих похвал, А ТАКЖЕ плюсиков в комментах и веб-маней (особо благодарные) выражаем slavapil, artbear и MMF, без чьего участия ничего бы не получилось

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

slavapil: //infostart.ru/projects/2826/rate.php?rate=1&cid=63&cp=all
artbear: //infostart.ru/projects/2826/rate.php?rate=1&cid=32&cp=all
MMF: //infostart.ru/projects/2826/rate.php?rate=1&cid=13&cp=all

Если разработка действительно окажется кому-то полезной, то справедливости ради стоит упомянуть fixin-а. Если бы он не создал тот топик, за который, кстати, нахватал минусов, то ничего бы не было, ни моей идеи, ни дружной работы по устранению бага.

Тема нашла продолжение здесь: http://www.1cpp.ru/forum/YaBB.pl?num=1232197179

Купи премиум доступ - поддержи наше Сообщество!

Если Вы приобретаете премиум-аккаунт с этой страницы, то я, как автор, предоставляю Вам гарантированную скидку 10 % на все мои платные разработки, которые Вас заинтересуют...  Для приобретения премиум-аккаунта перейдите по этой С С Ы Л К Е

________________
Буду рад услышать комментарии, пожелания по доработке!

См. также

HTTP сервер 1С 7.7 + HTTP асинхронный клиент: внешние компоненты для 1С 7.7

Разработка внешних компонент WEB-интеграция Платформа 1С v7.7 Конфигурации 1cv7 Платные (руб)

Компонента HttpSrv7 позволяет создавать веб-сервисы в среде 1С 7.7 и даже, используя файлы HTML, несложные веб-сайты. С помощью нее можно обеспечить доступ к данным 1С 7.7 из браузера. Дополнительно используя компоненту HTTP_Async или синхронный клиент HTTP для 1С 7.7 (публикация № 1152364) можно наладить обмен данными между удаленными информационными базами. С помощью компоненты HTTP_Async можно параллельно посылать много запросов к сайтам, веб-сервисам (в т.ч. к HttpSrv7), а затем обрабатывать данные по мере их поступления.

2000 руб.

27.05.2022    7810    19    13    

31

Компонента ExchangeStruc (Структура Обмена). Прямой обмен данными между потоками, сессиями и окнами.

Разработка внешних компонент Платформа 1С v7.7 Платформа 1С v8.3 Платформа 1C v8.2 Платформа 1С v8.1 Россия Платные (руб)

Аддон "Структура Обмена" (ExchangeStruc) - это компонента, которая обеспечивает доступ к разделяемым процессом структурам, аналогичным структурам 1С. Обеспечивает прозрачную передачу данных примитивных типов, в том числе Двоичных данных, в режиме Реального времени между разными контекстами (формами) или потоками одного процесса. В перспективе функционал будет расширен для обмена между процессами, даже разных версий платформ. Совместим с версиями Windows рабочих станций и серверов, с платформами 1С разных версий и релизов в режиме Native начиная с 8.2, и в режиме COM начиная с версий 7.7. По скорости чтения и записи лишь немногим уступает стандартной структуре 1С. НОВОЕ: Добавлен функционал регистрации компоненты COM в качестве OLE Auto (COMОбъект) для поддержки её работы в серверах старых версий 1С: 8.0 и 8.1, где работа с компонентами исключена. Теперь можно коммуникацию с Фоновыми заданиями на этих версиях проводить.

7200 руб.

19.04.2023    4799    1    0    

3

Выбор из большого списка (для 1С 7.7)

Разработка внешних компонент Платформа 1С v7.7 Платные (руб)

Компонента для выбора значения из больших списков значений.

1200 руб.

02.12.2021    5776    2    19    

4

Форма для ввода количества товаров

Разработка внешних компонент Оптовая торговля Платформа 1С v7.7 Конфигурации 1cv7 Управленческий учет Платные (руб)

Расширяем уровень взаимодействия c пользователем с помощью новых возможностей - форма для ввода количества для перемещений и форма ввода количества с упаковками и штуками.

1200 руб.

08.09.2021    7389    0    2    

1

Внешняя компонента для преобразования файлов из/в кодировку Base64 в 1С 7.7

Разработка внешних компонент Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Эта внешняя компонента Base64.dll предназначена для платформы 1С версии 7.7. Используется для преобразования файлов из/в кодировку Base64 из встроенного языка 1С Предприятие. Компонента тестировалась на базе конфигурации Бухгалтерский учет для Казахстана, редакции 7.70.257.

10 стартмани

06.04.2021    9445    14    softmaker    12    

5

Криптография: внешняя компонента для 1С 7.7

Разработка внешних компонент Защита ПО и шифрование Платформа 1С v7.7 Абонемент ($m)

Цифровые подписи, шифрование, просмотр сертификатов ключей ЭЦП, работа с различными криптопровайдерами (в т.ч. КриптоПРО ГОСТ 2012) в 1С 7.7.

1 стартмани

08.06.2020    9048    27    mdbruyfn    10    

9

Протокол UDP: внешняя компонента для 1С 7.7

Разработка внешних компонент Платформа 1С v7.7 Абонемент ($m)

Обмен сообщениями и небольшими файлами по протоколу UDP с 1С и внешними приложениями в локальной сети или сети VPN.

1 стартмани

23.05.2020    7316    5    mdbruyfn    0    

6
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
91. O-Planet 6431 07.11.08 04:03 Сейчас в теме
(90) Это получится какая-то жесть. Можно будет смело ставить клиентам и при умелом обращении, обычная трассировка превращается в планомерное убисство. Хочет впечатлительная девушка, например, открыть накладную, а накладная на ее глазах помечается на удаление, из нее пропадают строки, меняются цифры...
92. Abadonna 3958 07.11.08 05:04 Сейчас в теме
(91) Ну ты ж для проггеров пишешь, а кто кроме них обработает событие как надо? А вот по событиям можно лог, например, вести и т.п. Запустил прогу вечером, а утром спокойно в файле посмотрел чаво она там
93. O-Planet 6431 07.11.08 05:13 Сейчас в теме
(92) Мож когда дойдем. Если кто сделает и выложит - не расстроюсь, код ведь открыт. Все по порядку. Обсуждали с Чебуратором возможность писать к этому плагины. Вот это и ждите на днях.
96. O-Planet 6431 07.11.08 07:02 Сейчас в теме
Про ЗагрузитьИзФайла я думал в ключе побеждения глюка с вылетом. Если бы не победили, то ставил бы его вместо кода, не создавая нового модуля, а трассировку кидал бы в temp. Поправлю, ибо нефиг загружать. Но можно оттрасировать и из файла ;)
97. Abadonna 3958 07.11.08 07:12 Сейчас в теме
(96)>ибо нефиг загружать.
А вот тут ты не прав ;) Я абсолютно точно знаю документы, которые мне ОЧЕНЬ часто приходится переделывать (например ЗаявкаПокупателя, Реализация). Выгонять каждый раз 60 юзверей для внесения иногда копеечных изменений - не мой подход. А тут подправил модуль на лету - и готово. Задержка (если и есть) при загрузке текста модуля настолько микроскопическая, что я даже и обсуждать тему быстродействия в данном ключе не хочу.
100. JohnyDeath 301 07.11.08 09:53 Сейчас в теме
Можно ещё добавить _GetPerfomanceCounter() перед каждым сообщением.
Можно сделать, чтобы вызывалась ОбработкаВнешнегоСобытия(...)
Или сделать формат like "журнал регистрации 1С" - для него уже сделан поставщик данных для ТП ;)
101. artbear 1448 07.11.08 10:23 Сейчас в теме
1. Да, ОбработкаВнешнегоСобытия() нужна для возможности универсальной обработки пользователями.
В этом случае пользователь сам может строить любые собственные схемы хранения/получения данных трассировки.
Например, с помощью моего Перехватчика из 1С++ :)
.
2. Также можно сделать спец.метод для вызова спец.метода специального объекта-трассировщика.
Типа УстановитьРегистраторТрассировки(ОбъектРегистратор, ИмяМетодаРегистрации)
ОбъектРегистратор должен иметь метод с именем "ИмяМетодаРегистрации" и спец.параметрами
.
Например, можно будет сделать плагины на любом языке, хоть Дельфи, хоть С++, хоть на классах 1С++ :)
.
ИМХО ОбработкаВнешнегоСобытия слишком медленная для этого, с объектом должно быть побыстрее.
Хотя для универсальности должны быть оба варианта - например, по настройке.
slavapil; +1 Ответить
102. Душелов 4013 07.11.08 10:26 Сейчас в теме
(101) А генерировать события самому - активикс, с подпиской на него в 1с-е?
110. artbear 1448 07.11.08 13:42 Сейчас в теме
(102) Про АктивИкс и генерацию события подробнее расскажи.
Пока не пойму, как подобный АктивИкс сможет прицепиться к 1С - ведь юзаем перехват методов библиотек 1С.
114. Душелов 4013 07.11.08 13:49 Сейчас в теме
(110) >Про АктивИкс и генерацию события подробнее расскажи.
Я просто не знаю, как эта компонента работает, просто как вариант, создание объекта не как компоненту обычную "СоздатьОбъект", а оформить в качестве активикса, соответственно подписаться к его событиям, но тут уже как 1С++ работает по созданию активиксов. Можно с ее помощью создать объект без создания формы?
104. АЛьФ 07.11.08 11:25 Сейчас в теме
Еще раз советую перебираться на VC++. Куча проблем отпадет автоматически.
105. O-Planet 6431 07.11.08 13:27 Сейчас в теме
(104) Альф, а исходники RainBow для общего развития можно где поиметь?
106. artbear 1448 07.11.08 13:34 Сейчас в теме
(105) Исходники Рейнбоу сильно устарели. Рекомендую изучать исходники ВК 1С++, там мы много нового открыли в 1С и доработали.
108. O-Planet 6431 07.11.08 13:38 Сейчас в теме
(106) Мож и устарели. Но они проще. Главное - метод, а не нюансы.
111. artbear 1448 07.11.08 13:43 Сейчас в теме
(108) Ты точно сравнивал исходники Рейнбоу и 1С++?
ИМХО 1С++ как раз проще изучать :)
107. artbear 1448 07.11.08 13:36 Сейчас в теме
(105) Ошибся плюсом :) - хотел на 104
109. O-Planet 6431 07.11.08 13:40 Сейчас в теме
Кстати, всегда мучался вопросом, а на буилдере кто-нибудь ВК создавал? Поскольку я страстный почитатель Борланда и не почитатель гадкого капиталлиста Билла.
112. artbear 1448 07.11.08 13:45 Сейчас в теме
(109) То же самое, что и на Дельфи :)
Я после Дельфи некоторое время юзал Билдер, аналог Дельфи, только язык С++ помощнее, чем Дельфи.
ЗЫ но сам я не создавал подобных ВК :)
113. АЛьФ 07.11.08 13:46 Сейчас в теме
2(109) Валялся у меня где-то шаблон компоненты на билдере. Но там будут те же проблемы. Если хочешь с 1С работать на сабжевом уровне, то лучше VC++ не найдешь инструмента. Сначала, конечно, придется чуток попариться и пообвыкнуть, но после сам будешь удивляться простоте с которой 1С можно вывернуть наизнанку.
Donat; artbear; +2 Ответить
115. O-Planet 6431 07.11.08 13:55 Сейчас в теме
(113) Угу. А я когда-то весь инет перелазил, ища такой шаблон :) Вот поэтому и Delphi, что под него были примеры.
116. maljaev 789 07.11.08 14:02 Сейчас в теме
Блин, спасибище за компоненту!
117. kubiky 138 07.11.08 15:16 Сейчас в теме
Плюсанул.
Однако вариант ВК для автоматической трассировки всех модулей - вышибает 1С, а к-рый для выборочной (при наличии //TRACE ON) - работает
Конфа правда жутко переписанная (ТиС)
118. AeDen 07.11.08 16:37 Сейчас в теме
(117) У меня наоборот.

Плюс не работает Close();, нет проверки на длину выводимой в окно сообщений строки.
119. Velostrannik 202 07.11.08 19:47 Сейчас в теме
Однако, в почти пустой и чистой базе не работает - вылетает, при чём сразу.
120. O-Planet 6431 08.11.08 03:35 Сейчас в теме
(119) Не подтвердилось. Создал чистую базу. Сделал справочник Новый1. Поместил в форму списка процедуру

Процедура ПриОткрытии()
Сообщить(1);
КонецПроцедуры

В глобальник поместил тоже, что и ты. Все работает.
121. O-Planet 6431 08.11.08 03:37 Сейчас в теме
Вижу 56 скачиваний dll от MMF. Может, ее юзаешь? Уберу из списка.
122. Velostrannik 202 08.11.08 21:29 Сейчас в теме
Возможно из-за того что я использую не справочник, а обработку.
123. Velostrannik 202 08.11.08 21:35 Сейчас в теме
В целом молодец!!!
Все кто помогал тоже молодцы!
Давно не видел как оперативно со всех концов страны решили проблему и создали разработку года.
Последний раз я такое видел в каком-то фантастическом фильме, по моему фильм называется "Хакеры".
Там тоже хакеры объединились для того чтобы замочить какого-то урода который людей через Интернет убивал. В одиночку никто не мог его завалить.
JohnyDeath; support; +2 Ответить
124. CheBurator 3119 09.11.08 16:04 Сейчас в теме
...убийцы... ахррр... умираю, но не сдаюсь...
125. O-Planet 6431 09.11.08 17:32 Сейчас в теме
Вообще, при более глубоком рассмотрении я тоже наткнулся на странное поведение перехвата в чистой базе (думаю, и в остальных тоже). А именно, если перед использованием Tracer открыть что-то еще в нормальном режиме без перехвата, например, журнал, отчет, обработку, то все работает. Если же сразу запустить tracer, то начинает вылетать. В типовых в процедуре ПриНачалеРаботыСистемы происходит обращение к разным обработкам, поэтому потом, когда в конце процедуры запускаем dll, все работает нормально. С чем связано это - могу только предположить. Возможно, при первом открытии программного модуля в 1С происходят какие-то установки, которые перехват не учитывает. Возможно, кто-то знает более точное объяснение. Поэтому, чтобы использовать нормально эту разработку в нетиповой конфе, нужно в ПриНачалеРаботыСистемы вставить перед "ЗагрузитьВнешнююКомпоненту" ОткрытьФорму чего-либо.
129. CheBurator 3119 09.11.08 21:53 Сейчас в теме
(125) совет как использовать в нетиповой конфе - это уже шаманство... не вижу никаких отличий работы трасера в типовой и нетиповой конфах... шевелите мозгами, господин Программист! ;-)
126. slavapil 132 09.11.08 20:09 Сейчас в теме
O-Planet, надо использовать мои функции !!!

Вместо:
ll:=Length(NewUnitText);
c_free(t);
t:=c_malloc(ll+13);
StrCopy(t,@NewUnitText[1]);
t[ll+1]:=#0;

Надо:
CString_Done(t);
t:=CString_Init(nil, NewUnitText);

Убедился при отлове внешних обработок ;)
127. slavapil 132 09.11.08 20:43 Сейчас в теме
Типовая торговля, ошибка при разборе текста отчета "Печать прайса".

function Prostoe(var s:string):boolean;
//ошибка на if
if (s[1]='"')and(((s[ll-1]='"')and(s[ll]=';'))or(s[ll]='"')) then
131. O-Planet 6431 10.11.08 03:17 Сейчас в теме
Обновляю...

Добавил возможность управлять выводом трассировки на уровне 1С

(127) Исправил

(128) >> Вылетает (любая версия) при попытке зайти в "Параметры" и смене закладки в них.

Думаю, пропадет, когда добавлю окно настроек.

(123) >> Там тоже хакеры объединились для того чтобы замочить какого-то урода который людей через Интернет убивал.

Весь вечер думал над этим... особенно над "тоже"... :(
128. maljaev 789 09.11.08 21:48 Сейчас в теме
Погонял. Для начала:

1. Вылетает (любая версия) при попытке зайти в "Параметры" и смене закладки в них.
2. Хотелось бы более управляемый процесс включения/выключения трассировки (например по горячей клавише).
3. Лучше бы выводить результаты трассировки не в окно сообщений, а в отдельное плавающее немодальное окошко. Тогда можно дополнительно продумать структуризацию результатов (например иерархию, свертка блоков, разные пиктограмы, цветовое выделение и т.д.).
130. O-Planet 6431 10.11.08 01:23 Сейчас в теме
А зацените картиночку ;)
132. CheBurator 3119 10.11.08 03:56 Сейчас в теме
134. O-Planet 6431 10.11.08 03:58 Сейчас в теме
137. CheBurator 3119 10.11.08 04:11 Сейчас в теме
Пожелание уже высказывали (возможно немного расширю)
- на концах блоков процедур и функций (там где "КонецПроцедуры", "КонецФункции" - выдавать в секундах время исполнения процедуры.. а ввиду того, что функции/процедуры могут выполняться неоднократно - выводить два счетчика, первый = суммарное время выполнения этой процедуры, второй - время выполнения данного вызова процедуры...как-то типа
КонецПроцедуры РекурсияВычисления [0.500,0.008]
...типа такое вот пожелание...
138. O-Planet 6431 10.11.08 04:13 Сейчас в теме
Обновил, проверяйте.
(137) не обещаю, но можно подумать.
139. Velostrannik 202 10.11.08 09:29 Сейчас в теме
О-о-о-о-о-о! Вот теперь всё работает!
Отлично!!!
Молодец!!!
141. slavapil 132 10.11.08 09:53 Сейчас в теме
Вроде ты перепутал #10#13 с #13#10.
142. Ёпрст 1063 10.11.08 10:51 Сейчас в теме
143. slavapil 132 10.11.08 11:04 Сейчас в теме
В обработку первой строкой надо:
//*** Traced by O-Planet

вместо:
//TRACER OFF

Если добавишь перехват внешних обработок :)
144. artbear 1448 10.11.08 11:13 Сейчас в теме
(143) По перехвату внешних обработок подсказки еще нужны? :)
145. slavapil 132 10.11.08 11:24 Сейчас в теме
(144) с удовольствием приму любые подсказки, только не знаю в чем помощь нужна :)

Хочется тоже самое, но с классами 1С++ :)
Надо перехват переделывать :(
148. artbear 1448 10.11.08 13:22 Сейчас в теме
(Автор) По перехвату внешних обработок подсказки еще нужны? :)
.
(145) Я в 144 ошибся, вопрос был автору :)
.
(146) Да, в 1С++ также очень неплохо бы смотрелось :)
Но не хочется повторять авторский код по разбору модулей 1С.
Вот если бы автор дал аналогичный С++-шный код, я бы смог сделать ВК на С++ с открытыми исходниками и прямым доступом к 1С.

151. O-Planet 6431 10.11.08 17:54 Сейчас в теме
(148) На С... Не могу обещать, что это произойдет быстро, потому что оно требует времени. Как вариант, оформить в dll для начала. Разбор кода мой можно немного оптимизировать. Там в разных процедурах повторяются операции сравнения. Оставил так, чтобы было понятно, что оно делает.
(141,142) Угу, проверить было лень, а зря :) Сейчас исправлю. По перехвату внешних обработок смотрю...
146. slavapil 132 10.11.08 11:27 Сейчас в теме
artbear, ты случайно в 1С++ такую трассировку добавить не планируешь?
147. Jers 10.11.08 12:16 Сейчас в теме
Если в режиме предприятия зайти "Сервис-параметры", то при выходе (неважно, Ок или Отмена) 1С рушится.
149. tormozit 7136 10.11.08 15:58 Сейчас в теме
Про 8-ку я так понимаю такая тема очень труднореализуема?
150. slavapil 132 10.11.08 17:15 Сейчас в теме
artbear,
O-Planet код по перехвату я уже отправил, мне нужны подсказки :)

Хочется перехватывать 1С++, текущий метод перехвата для этого не подходит :(

BLang.?Compile@CBLModule@@QAEHXZ:
2100D3F0 8B4904 mov ecx,[ecx+$04]
2100D3F3 E9A8EEFFFF jmp $2100c2a0
2100D3F8 90 nop
2100D3F9 90 nop
2100D3FA 90 nop
2100D3FB 90 nop
2100D3FC 90 nop
2100D3FD 90 nop
2100D3FE 90 nop
2100D3FF 90 nop

В 1С++ Ставится HOOK на эту функцию?
Для перехвата правится код этой функции?

Если будет только мой jmp на мою процедуру, то 1С++ сможет правильно поставить HOOK, с учетом что там только мой jmp?
154. artbear 1448 11.11.08 08:38 Сейчас в теме
(150) Да, в 1С++ используется перехват этой функции - для работы препроцесора 1С++, например, и т.д.
1. ИМХО 1С++ без разницы, как осуществлен твой перехват, лишь бы он возвращал измененные файлы на место.
2. И желательно, чтобы 1С++ загружался первым.
.
Проверить правильность работы легко - используешь вызов любой директоры препроцессора 1С++, например, //#error, во встроенном модуле 1С - обработка, док и т.д.
155. artbear 1448 11.11.08 08:38 Сейчас в теме
(154) "Измененные файлы" читать как "измененные байты" :)
156. artbear 1448 11.11.08 08:40 Сейчас в теме
(150) Цитата: "Хочется перехватывать 1С++, текущий метод перехвата для этого не подходит :("
насчет перехвата 1С++ не понял - может быть, все-таки 1С?
Поясни, плиз.
159. slavapil 132 11.11.08 09:42 Сейчас в теме
(156) Я запутался, не ту функцию ловить собираюсь.
Если я поставлю перехват, за мной 1С++ установит свой, то я уже не смогу убрать свой, значит снимать уже нельзя.
Возможно, также трассировать классы 1С++?

1) Для этого придется загружаться раньше 1С++.
2) Ставить перехват и никогда уже не снимать.

На что можно поставить перехват, для правки (разбора) классов?
160. artbear 1448 11.11.08 18:35 Сейчас в теме
(159) Все зависит от используемого вами метода перехвата - т.е. код romix-а.
Если он возвращает тот код/те байты, который сохранил при установке исходного перехвата, это плохо, будет баг, если кто-то другой перехватывает этот же метод.
Если же используется механизм обмена, т.е. код/байты сохраняются каждый раз при установке/снятии перехвата, тогда все путем, и можно юзать любое количество перехватов.
.
ЗЫ мы в 1С++ с этим давно разобрались, раньше некоторые перехваты у нас также неверно работали :( Сейчас все путем.
161. CheBurator 3119 11.11.08 18:56 Сейчас в теме
(160) Нехватало, чтобы сейчас неверно работало ;-)...
152. O-Planet 6431 10.11.08 18:06 Сейчас в теме
153. O-Planet 6431 10.11.08 18:14 Сейчас в теме
А ни кто не знает вот чего: например, я нажимаю кнопку в 1С или выбираю что-то на форме. В какой-то момент 1С начинает выполнять кусок программы и "не откликается", затем снова переходит в режим ожидания моих действий. Вот этот момент в режим ожидания можно как-то фиксировать, через, скажем, событие, чтобы я к нему привязал вывод таблицы, допустим, обнуление прошлой трассировки? Наверное, в 1С++ это реализовано?
157. artbear 1448 11.11.08 08:44 Сейчас в теме
(153) Нет, в 1С++ такого не реализовано.
Можно попробовать решить несколькими способами
1. Обрабатывать событие окон 1С WM_OnIdle - как раз ожидание
Или пойти более простым путем
2. Запустить таймер, в обработчике таймера проверять время простоя пользователя системной функцией Винды.
Если это время превышает, например, полсекунды или секунду, значит, 1С ждет реакции пользвателя и можно выполнять свои действия.
158. artbear 1448 11.11.08 08:46 Сейчас в теме
(154+) Проверить правильность работы 1С++ еще можно через вызов процедур модуля через контекст модуля - т.к. ТурбоБЛ внутри 1С++ перехватывает эту функцию.
Т.е. если вызов КонтОбработки.СпецПроцедура() не срабатывает, то есть косяк с перехватом :)
162. O-Planet 6431 12.11.08 01:15 Сейчас в теме
Кто-нить внешнюю трассировку заюзал? Оно рулит или так? Просто не понятно: идея коснулась масс?
163. DARKDEAD 12.11.08 09:33 Сейчас в теме
ни кто не пробывал ее на КЗК? :)
164. JohnyDeath 301 12.11.08 09:54 Сейчас в теме
(163) кстати да, прикольно было б посмотреть ;) (хотя весь модуль ты таким способом не получишь)
165. slavapil 132 12.11.08 11:15 Сейчас в теме
(163) Для КЗК можно, для КЗК2 нет :)

(164) "(хотя весь модуль ты таким способом не получишь)", подробнее объясни пожалуйста.
166. JohnyDeath 301 12.11.08 11:53 Сейчас в теме
(165) "(хотя весь модуль ты таким способом не получишь)", подробнее объясни пожалуйста.
ну если б даже и показывалась трассировка модуля, то мы бы видели только то, что работает именно сейчас.
т.е. если в модуле было:
Код
Если Дата=ДатаМоегоРождения ТОгда
  МояСуперФункция();
Иначе ОбычнаяФункция();
Показать полностью

Здесь мы будем попадать в раздел "Иначе" и ф-ию "МояСуперФункция();" не увидим.
167. slavapil 132 12.11.08 13:20 Сейчас в теме
(166) Если нужен модуль то можно просто в файл сохранить (без трассировки, смотри исходники) ;)
168. JohnyDeath 301 12.11.08 14:15 Сейчас в теме
(167) теперь будем знать. Спсб. ;)
169. slavapil 132 12.11.08 16:15 Сейчас в теме
O-Planet, тот код перехвата ERT не правильный, разберусь, пришлю рабочий.
171. O-Planet 6431 12.11.08 23:06 Сейчас в теме
(169) А я и подозревал, что неправильный, поэтому и не выложил ;)
170. slavapil 132 12.11.08 22:33 Сейчас в теме
Код перехвата ERT и 1С++, уже отправлен O-Planet.

После проверки, возможно, будем трассировать ВСЁ :)
172. O-Planet 6431 13.11.08 04:13 Сейчас в теме
На Проклубе написал чел: "Валит 1С при загрузке компоненты. На строке глТрейсер.Open() 1С задумывается висит секунд 10 и закрывается. Проверял на 14 и 25 релизе - одинаковое поведение. Ос Win 2000 Server + терминал" Проблема - в том, что Delphi 7 или под Win 2000 Server + терминал есть какие-то особенности работы? Ни кто не сталкивался?
176. slavapil 132 13.11.08 09:12 Сейчас в теме
(172) Не сталкивался, но теперь не проверю (Win 2003).

У кого есть BLang.dll, 14 - 25 релизов пришлите, пожалуйста, на мыло slavapil@yandex.ru.
173. CheBurator 3119 13.11.08 04:21 Сейчас в теме
хз.. я максимум смогу попробовать на О! у меня вроде 2000 сервак на работе!!! кинь в личку напоминалку завтра в районе 14-00 по МСК - попробую "потрахать кассирочку"...
174. CheBurator 3119 13.11.08 04:27 Сейчас в теме
залез посмотрел.. фиг там.. 2003
175. O-Planet 6431 13.11.08 06:49 Сейчас в теме
177. JohnyDeath 301 13.11.08 09:39 Сейчас в теме
Олег, ну как там, уже можно качать? Всё трассирует?
178. slavapil 132 13.11.08 09:49 Сейчас в теме
(177) Олегу ещё надо будет переделать разбор модулей с учетом классов 1С++, так как текущая реализация не учитывает их синтаксис.
179. O-Planet 6431 13.11.08 15:06 Сейчас в теме
(177) Качать можно давно. Пока не выкладывал вариант под 1С++
(178) В том-то и дело, что с 1С++ не работал. Там как синтаксис отличается? Выпадала какая-то конкретная ошибка?
180. slavapil 132 13.11.08 16:45 Сейчас в теме
(179) JohnyDeath, наверное имел ввиду ERT и 1С++ :)
181. slavapil 132 13.11.08 16:56 Сейчас в теме
Интересно такая конструкция пройдет:
Если фОК=1 Тогда Возврат; КонецЕсли;

1С++ :

//# ClassBegin <ClassName>;
а после окончания кода класса - строку
//# ClassEnd <ClassName>;
где вместо <ClassName> нужно указать имя класса (без угловых скобок). Пробелы имеют значение.

//#if symbol
//#else
//#elif symbol
//#define symbol

и т.д. //#
182. slavapil 132 13.11.08 21:22 Сейчас в теме
(181+)
Было:
Сообщить("// "+Атрибут.Идентификатор);
Сообщить("Атрибут.Идентификатор="""+Атрибут.Идентификатор+""";");

Получаем :
Сообщить("
Сообщить("Атрибут.Идентификатор="""+Атрибут.Идентификатор+""";");

Может не удалять комментарии?
Или удалять только если вначале строки // и не равно //#?

Всё, остальные ошибки после исправления этих :)
183. slavapil 132 13.11.08 21:30 Сейчас в теме
Олег, стоит оставлять все комментарии, может сторонний разработчик тоже, будет использовать комментарии в своих целях!
184. O-Planet 6431 13.11.08 23:34 Сейчас в теме
185. Valet 56 22.12.08 16:06 Сейчас в теме
Стоит ли надеяться желающим трассировать внешнюю обработку или работающим с TurboMD, что и на их улице наступит праздник? :)
187. slavapil 132 16.01.09 10:16 Сейчас в теме
(185)
Как только O-Planet переделает разбор модуля. :)
Но видимо времени у него совсем нет или (186) :(
186. CheBurator 3119 22.12.08 16:23 Сейчас в теме
Ну.. насколько я себе представляю "идеологию поведения" разработчиков внешних компонент и прочих примочек (за исключением некоторых авторов) - то вряд ли...
188. O-Planet 6431 16.01.09 14:35 Сейчас в теме
Вообще :( Лежит куча наработок, которые еще хотел в прошлом году сюда выложить, дело встало только за описанием. Но из-за кризиса приходится крутиться. Тем не менее, медленно, но верно все однажды добью.
189. slavapil 132 17.01.09 15:54 Сейчас в теме
Добавлено:
Трассировка ERT и классов 1с++.

http://www.1cpp.ru/forum/YaBB.pl?num=1232197179
JohnyDeath; artbear; +2 Ответить
190. slavapil 132 17.01.09 16:19 Сейчас в теме
(189)+

"Если в режиме предприятия зайти "Сервис-параметры", то при выходе (неважно, Ок или Отмена) 1С рушится."

Не падает ;)
191. O-Planet 6431 18.01.09 00:41 Сейчас в теме
Ты бы кинул это сюда и под своим именем, и все бы счастливы были. Проект же открытый, т.е. каждый может брать, что-то добавлять и выкладывать свою версию. ;)
192. slavapil 132 18.01.09 02:53 Сейчас в теме
(191) Пришлю тебе исходники, выложи здесь :)
193. slavapil 132 01.02.09 19:50 Сейчас в теме
v 1.0.0.2:
[-] ошибки разбора программных модулей (проверено на типовых ТиС и Бух)

http://www.1cpp.ru/forum/YaBB.pl?num=1232197179
194. slavapil 132 01.02.09 20:54 Сейчас в теме
Можно воспользоваться Авто добавлением кода в глоб. модуль ;)
http://infostart.ru/projects/3346/
195. slavapil 132 03.02.09 14:54 Сейчас в теме
v 1.0.0.3:
[-] ошибки разбора программных модулей (массивы в объявлении функций и процедур:
Функция ПроверитьСтавки(Ставки[])
Теперь выводится просто строка "Ставки[]")
196. buzzzard 51 08.02.09 23:26 Сейчас в теме
v 1.0.0.3: Попробовал на 1С++Классах.
Вывалилась ошибка:
Строка №21 Сообщит<<?>>("Возврат из МеткаВремени: "+Строка(Tracer___Ret));
Процедура не обнаружена (Сообщит)
МеткаВремени - функция в классе
197. buzzzard 51 14.02.09 00:31 Сейчас в теме
Еще вопрос:
//TRACER ON - есть, а есть ли //TRACER OFF?
198. O-Planet 6431 14.02.09 01:18 Сейчас в теме
199. mrd2008 62 26.03.09 08:32 Сейчас в теме
Делаю как написано:
в процедуре ПриНачалеРаботыСистемы
ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"Tracer1C.dll");
глТрейсер=СоздатьОбъект("AddIn.Tracer1C");

При попытке создания объекта пишет:
глТрейсер=СоздатьОбъект("AddIn.Tracer1C");
{Глобальный модуль(4510)}: Неудачная попытка создания объекта (AddIn.Tracer1C)
Проверил имя файла соответствует тому, что в каталоге bin

Чего я делаю не так?
Оставьте свое сообщение