|  25.12.2006, 12:58 | #1 | 
| Участник | 
			
			Добрый день. Возможно сделать такое - из кода получить список всех объектов запущенных на данный момент в Navision ? | 
|  | 
|  25.12.2006, 14:50 | #2 | 
| Участник | Цитата: Для этого, конечно нужно иметь права администратора. Один из способов просмотр некой истории использования объектов пользователем. Посмотреть можно так: Администрирование-Пользователи-Настройки пользователя-Использование данных-вкладки формы и кнопка Данные. Удачи! | 
|  | 
|  25.12.2006, 17:45 | #3 | 
| Участник | 
			
			Мне необходимо программно получить список.
		 | 
|  | 
|  25.12.2006, 17:54 | #4 | 
| Участник | |
|  | 
|  25.12.2006, 18:30 | #5 | 
| Участник | 
			
			Очень жаль !!!!
		 | 
|  | 
|  26.12.2006, 10:58 | #6 | 
| Участник | |
|  | 
|  26.12.2006, 11:42 | #7 | 
| Участник | 
			
			Можно кодом посмотреть и список загруженных объектов и сам код объектов и код который выполнялся, а который нет. Это делается с помощью таблички Code Coverage №=2000000049. Например этот код выводит собственный исходный код. (откуда был запущен, какой триггер)(сообщениями) Код: CodeCoverage.RESET;
CodeCoverage.DELETEALL;
IF CODECOVERAGELOG(TRUE) THEN BEGIN
  CodeCoverage.RESET;
  IF CodeCoverage.FIND('-') THEN
	REPEAT
	  MESSAGE(CodeCoverage.Line);
	UNTIL CodeCoverage.NEXT = 0;
  CODECOVERAGELOG(FALSE);
END;
				__________________ Должен остаться только один. | 
|  | 
|  26.12.2006, 12:25 | #8 | 
| Участник | 
			
			Тогда - вопрос в другом - возможно ли добраться до тригерра OnINsert Code Coverage №=2000000049 ???
		 | 
|  | 
|  26.12.2006, 12:31 | #9 | 
| Участник | 
			
			Можно добратся до любого объекта, тригера, кода, которые вызывались после  включения  CODECOVERAGELOG(TRUE). Создайте форму с SourceTable = Code Coverage. включите механизм через меню Дебаггер -> Выполение Кода. И в этой форме посмотреите какие поля, чем заполенены и т.д. Аналогично работает форма 566 в ней можно посмотреть, как в коде определяется выполнялся код или нет и т.д. p.s. Если нужно менять исходный код в коде, то все несколько сложнее. 
				__________________ Должен остаться только один. | 
|  | 
|  26.12.2006, 13:31 | #10 | 
| Участник | 
			
			в таблице Code Coverage - нет данных по работе с самой собой.
		 | 
|  | 
|  26.12.2006, 14:28 | #11 | 
| Участник | 
			
			Что значит "с самой собой"? Какие вам нужны данные? 
				__________________ Должен остаться только один. | 
|  | 
|  26.12.2006, 15:56 | #12 | 
| Участник | 
			
			Объясню всю задачу. Мне необходимо записывать в специальную таблицу номера отчетов, название отчетов, кто-вызывал отчет и когда вызывал отчет. То есть вести лог вызова отчетов. Все отчеты (за которыми необходимо следить) - указываются в созданной мной таблице. Есть два типа отчетов, которые работают у клиента - 1. это отчеты созданные в Navision 2.это отчеты которые выгружаются в Excel. Если запускать отчет 1-типа - то при каждом вызове такого отчета запускается функция FindPrinter из кодюнита1. При вызове этой функции указывается параметр функции ReportID. Таким образом логирование за 1 - тпиом отчетов осуществляется очень легко. Если запускать отечет 2 - типа - то функция FindPrinter не запускается. Но, постоянно запускается функция GetGlodalTableTriggerMask. И вот теперь возникает проблема с логированием таких отчетов, так как не известно номер запускаемого отчета. Для этого я использую CODECOVERAGELOG. При запуске формы "Главного меню" - запускается функция из CU1.LogInStart. В это функции я добавил код CODECOVERAGELOG(TRUE); Таким образом я слежу за каждым действием пользователя. Когда пользователь запускает отчет 2 типа - запускается GetGlodalTableTriggerMask. Из него запускается мой кодюнит. Внутри моего кодюнита происходит следующее - CoverageLine.RESET; CoverageLine.SETRANGE(CoverageLine."Object Type",CoverageLine."Object Type"::Report); IF CoverageLine.FIND('-') = TRUE THEN BEGIN Object.SETRANGE(Object.Type,Object.Type::Report); Object.SETRANGE(Object.ID,CoverageLine."Object ID"); IF Object.FIND('-') = TRUE THEN BEGIN "ChangeLogSetup(Report)".RESET; "ChangeLogSetup(Report)".SETRANGE("ChangeLogSetup(Report)"."Report No.",Object.ID); IF "ChangeLogSetup(Report)".FIND('-') = TRUE THEN MESSAGE(Object.Name + ' Отчет добавлен в таблицу логирования.'); // здесь будет происходить запись данных в таблицу для логирования END; END; CODECOVERAGELOG(FALSE); CoverageLine.RESET; CoverageLine.DELETEALL; CODECOVERAGELOG(TRUE); // удаление делаю обязательно по двум причинам - 1. что бы база не увеличивалачь до гигагнских размеров в течении все го рабочего дня; 2. В CoverageLine должна быть только одна строка с типом Report, так как определить какой отчет был запущен последним и записать про него данные в таблицу для логирования - не получается , не получается из-за того что данные в CoverageLine сортируются по типу, а, потом по своему уникальному ID номеру. Проблема в том, что после удаления данные из таблицы удаляются !!!!! Я снова запускаю CODECOVERAGELOG. Но, после того как данные были удаленны из CoverageLine, там появляются новые записи. И В ЭТИХ ЗАПИСЯХ УКАЗЫВАЮТСЯ ВСЕ объекты КОТОРЫЕ УЖЕ БЫЛИ ЗАПУЩЕННЫ ДО запуска CODECOVERAGELOG(TRUE)( Хотя должно быть по другому - все объекты которые были запущенны до CODECOVERAGELOG(TRUE) - не должно попасть CoverageLine). Таким образом там появляется отчет который я уже добавил в лог таблицу. и при следующем запуске другого отчета, в таблице CoverageLine - появляется две записи с типом REPORT. И выяснить - какой именно отчет был запущен последним невозможно. Поэтому я и спрашиваю - возможно ли доступиться до тригерра OnInsert таблицы Code Coverage №=2000000049, для того чтобы при добавлении записи производить пр определенных услових удаление записей с типом REPORT. Вот такая простая задача. | 
|  | 
|  26.12.2006, 16:37 | #13 | 
| Участник | |
|  | 
|  26.12.2006, 17:14 | #14 | 
| Участник | 
			
			CODE COVERAGE не совсем табличка, физически ее нет. Вы решаете простую задачу сложными методами  или методами не свойственными Navision. Для того чтобы контролировать запуск отчетов достаточно добавить код контроля в место откуда они вызываются или в сами отчеты.  Тупо, но будет работать. 
				__________________ Должен остаться только один. | 
|  | 
|  26.12.2006, 17:41 | #15 | 
| Участник | 
			
			В том то и дело - что необходимо написать динамическое логирование (чтобы небыло необходимости в каждый отчет добавлять даже строчку программного кода). А, сделать так чтобы Администратору необходио было бы просто добавить номер отчета, и все. А, преставте что у вас уж есть 500 отчетов - сидеть и в каждый добавлять отчет строчку программы ????      | 
|  | 
|  26.12.2006, 17:54 | #16 | 
| Участник | 
			
			Если нельзя добавить код в то место откуда отчеты вызываются, то добавлять в каждый.  Реплейсом за 5 минут. А лучше создать единое место вызова отчетов. 
				__________________ Должен остаться только один. | 
|  | 
|  26.12.2006, 18:25 | #17 | 
| Участник | 
			
			Эти все варианты рассматривались с самого начала. Но, у клиентов есть возможность добавлять свои отчеты путем импорта, и добавлять код внутрь отчета, возможности у них нет.
		 | 
|  |