Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Подмена модуля внешнего отчета на лету? (число прочтений - 8484 )
novichek
Экс-Участник


Подмена модуля внешнего отчета на лету?
11. Июня 2008 :: 06:34
Печать  
В качестве бреда. Есть такая возможность?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подмена модуля внешнего отчета на лету?
Ответ #1 - 11. Июня 2008 :: 06:35
Печать  
На лету это как?
Давай подробнее, что нужно.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
tvm
Junior Member
**
Отсутствует


aka slavka

Сообщений: 68
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: Подмена модуля внешнего отчета на лету?
Ответ #2 - 11. Июня 2008 :: 06:57
Печать  
turbomd?
  
Наверх
 
IP записан
 
novichek
Экс-Участник


Re: Подмена модуля внешнего отчета на лету?
Ответ #3 - 11. Июня 2008 :: 06:57
Печать  
artbear писал(а) 11. Июня 2008 :: 06:35:
На лету это как?
Давай подробнее, что нужно.


Задумка следующая: в глобальнике ловим открытие внешнего отчета/обработки. Получаем его модуль. Парсим.
Если находим спец метки, заменяем их на вызов глобальных процедур (для логирования выполнения кусков кода).

Почему сразу не вставить этот код? Потому что в качестве параметра он еще получает ид отчета
http://www.1cpp.ru/forum/YaBB.pl?num=1212727824
о котором самому отчету знать как бы и не надо.
  
Наверх
 
IP записан
 
nikolka
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 83
Зарегистрирован: 15. Января 2007
Re: Подмена модуля внешнего отчета на лету?
Ответ #4 - 11. Июня 2008 :: 08:24
Печать  
Цитата:
В качестве бреда. Есть такая возможность?

Есть возможность подмены процедуры на лету
(без переоткрытия формы).
http://www.1cpp.ru/forum/YaBB.pl?num=1209400544
Возможно  это не совсем то, возможно будет интересно.

В чем смысл подмены модуля внешнего отчета на лету?
Внутреннего что бы не выгонять пользователей а внешнего ?

Веть и так если вы его измените то при следуюшей загрузке, он будет работат так как вы изменили.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подмена модуля внешнего отчета на лету?
Ответ #5 - 11. Июня 2008 :: 08:43
Печать  
Цитата:
Задумка следующая: в глобальнике ловим открытие внешнего отчета/обработки. Получаем его модуль. Парсим.
Если находим спец метки, заменяем их на вызов глобальных процедур (для логирования выполнения кусков кода).

Почему сразу не вставить этот код? Потому что в качестве параметра он еще получает ид отчета
http://www.1cpp.ru/forum/YaBB.pl?num=1212727824
о котором самому отчету знать как бы и не надо.

Я всё равно не пойму, почему можно вставить спецметки, но нельзя вставить вызов глобальной процедуры, которая сама получала этот ИД по вх. контексту?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подмена модуля внешнего отчета на лету?
Ответ #6 - 11. Июня 2008 :: 08:49
Печать  
1. Смысл замены все равно непонятен Печаль
2. Есть ТурбоМД, можно с его помощью подменять, но ИМХО боевое применение для всех форм желательно, все-таки лучше хранить формы в конфигураторе.
3. В ФормЕкс есть событие по подмене модулей и диалогов форм.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
novichek
Экс-Участник


Re: Подмена модуля внешнего отчета на лету?
Ответ #7 - 11. Июня 2008 :: 09:01
Печать  
JohnyDeath писал(а) 11. Июня 2008 :: 08:43:
Я всё равно не пойму, почему можно вставить спецметки, но нельзя вставить вызов глобальной процедуры, которая сама получала этот ИД по вх. контексту?

В моем случае сам контекст ни чего об id'е не знает. Есть вариант каждый раз по контексту получать расположение файла, и уже из файла компаундом вытаскивать ид - ИМХО громоздко. Напрашивается получить 1 раз и потом уже юзать.

artbear: да, турбоМД, тут не лучшее решение. А про формекс: если я правильно понял из документации, там можно н.р. вместо одного модуля формы подсунуть другой, уже имеющийся в конфигурации. Но нельзя получить модуль в виде текста/строки, подправить и подставить вместо исходного.


Честно говоря, я уже сомневаюсь в правильности такого подхода. Будем думать дальше.
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Подмена модуля внешнего отчета на лету?
Ответ #8 - 11. Июня 2008 :: 09:46
Печать  
Да, непонятна суть  Озадачен
Если это защита, то только от чайников  Подмигивание

ИМХО, лучшей технологии чем КЗК2 нет и возможно не будет!

Все остальное ломается  Смех
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Подмена модуля внешнего отчета на лету?
Ответ #9 - 11. Июня 2008 :: 10:04
Печать  
Что то у вас с методологие не то Подмигивание
Можно подробнее задачу описать?
  
Наверх
ICQ  
IP записан
 
novichek
Экс-Участник


Re: Подмена модуля внешнего отчета на лету?
Ответ #10 - 11. Июня 2008 :: 10:10
Печать  
нет, это не совсем защита.

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

Кроме того по иду настраиватеся доступ к отчетам (именной или по должности).

Естественно многое устаревает и перестает использоваться. В связи с этим интересно просматривать по логам чего когда кто и сколько раз пускал.

Постоянно появляются новые отчеты. Вот и появилось желание максимально упростить обслуживание всей этой кухни.

ЗЫ:
Сейчас регистрация отчета выглядит следующим образом.
Есть обработка которая правит модуль отчета, добавля туда переменную Ид, присваивает ей уникальное значение. добавляет переменную класса, инициализацию класса и вызов процедуры <экКласса>.ПриОткрытииФормы(Контекст) в процедуре ПриОткрытии отчета.
ПриОткрытииФормы выполняет все проверки, пишет логи и в случае чего запрещает доступ к отчету.
Все отчеты открываются из  СпецОбработки, которая пользователю показывает только то что ему доступно в соответствие с его правами.
вот примерно как-то так.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подмена модуля внешнего отчета на лету?
Ответ #11 - 11. Июня 2008 :: 10:27
Печать  
А что мешает раздавать права на отчеты тупо по имени(пути) этого отчета? Если он открывает отчет, а он у него не зарегестрирован как "можно открывать", то говорим ему, чтоб не открывал то, что ему не следует.
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Подмена модуля внешнего отчета на лету?
Ответ #12 - 11. Июня 2008 :: 10:54
Печать  
ИМХО, для такой задачи лучше использовать спец.справочник и классы, а не хм...
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подмена модуля внешнего отчета на лету?
Ответ #13 - 11. Июня 2008 :: 11:03
Печать  
Цитата:
В связи с этим интересно просматривать по логам чего когда кто и сколько раз пускал.


В начало каждой процедуры Сформировать() ставишь вот такой вызов
глЗапомнитьРеквизитыОтчета("Ведомость004", Форма);

В глобник пишешь

Код
Выбрать все
Процедура глЗапомнитьРеквизитыОтчета(ИмяОтчета, ФормаОтчета) Экспорт

	Если глПользователь.АнализироватьОтчеты = 0 Тогда
		Возврат;
	КонецЕсли;

	Т = СоздатьОбъект("Текст");
	Попытка
		Т.Открыть(КаталогПользователя()+"reports_log.txt");
	Исключение
	КонецПопытки;

	ТСЗ = СоздатьОбъект("СписокЗначений");

	ИД = ""+Формат(ТекущаяДата(), "ДГГГГММДД")+СтрЗаменить(ТекущееВремя(),":","")+_GetPerformanceCounter();

	ФЕ = СоздатьОбъект("РасширениеФормы");
	ФЕ.УстановитьФорму(ФормаОтчета);
	Для С=1 По ФЕ.КоличествоАтрибутов() Цикл
		Аттр = ФЕ.ПолучитьАтрибут(С-1);
		Если ПустоеЗначение(Аттр.Идентификатор) = 1 Тогда
			Продолжить;
		КонецЕсли;

		ТСЗ.ДобавитьЗначение(ИД);
		ТСЗ.ДобавитьЗначение(глПользователь.Код);
		ТСЗ.ДобавитьЗначение(ИмяОтчета);
		ТСЗ.ДобавитьЗначение(Аттр.Идентификатор);
		ТСЗ.ДобавитьЗначение(Аттр.Значение);
		Т.ДобавитьСтроку(ТСЗ.ВСтрокуСРазделителями());
		ТСЗ.УдалитьВсе();
	КонецЦикла;

	Т.Записать(КаталогПользователя()+"reports_log.txt");

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



Потом анализируешь логи.
А вообще, если пользователь активно начинает пользоваться внешним отчетом, то это отличный повод включить этот отчет в конфигурацию. У меня ни у кого нет прав запускать произвольные внешние отчеты, а за содержимым папки ExtFoms я пристально слежу. Помогает в деле недопущения бардака.
  
Наверх
www  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подмена модуля внешнего отчета на лету?
Ответ #14 - 11. Июня 2008 :: 11:13
Печать  
Даже в отчеты ничего вставлять не надо. В FormEx усть такое:
Цитата:
Процедура ПриЗагрузкеВнешнегоОтчета(<?>)КонецПроцедуры
СИНТАКСИС:
Процедура ПриЗагрузкеВнешнегоОтчета(<ИмяФайлаОтчета>)КонецПроцедуры
ЗАМЕЧАНИЕ:
Если в процедуре установить статус возврата в ноль, то внешний отчет не будет загружен.
НАЗНАЧЕНИЕ:
Предопределенная процедура вызывается при загрузке внешнего отчета.
ПАРАМЕТРЫ:
<ИмяФайлаОтчета> - (Строка) Передается по значению.  полный путь к файлу отчета (вместе с собственно именем файла)

Я так давно виду логгирование внеш. отчетов.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать