Как это нету?
Подключайте объектный интерфейс, пишите небольшой фейсик и в пункте ФРО-Отчеты-Отчеты пользователя появится этот интерфейс. А при нажатии на него уже вызывайте что хотите.
На форуме уже обсужадлось, воспользуйтесь поиском.
//------------------------------------------------------------------------------
// (c) Корпорация ГАЛАКТИКА
// (c) Галактика - Киев
//------------------------------------------------------------------------------
// Галактика 5.8x - 7.1x - 8.0 - 8.1
// Пример пользовательского отчета
//------------------------------------------------------------------------------
#include UserReport.vih
// Для попадания примера в список отчетов -
// раскомментировать конструкцию VipInterface (Implements для Атлантиса 5.1)
#ifdef Atl51
VipInterface UserReport_Sample1
! Implements IUserReport
Licensed(Free)
;
#else
!VipInterface UserReport_Sample1 Implements IUserReport;
#end
#doc
Пример пользовательского отчета #1
#end
Interface UserReport_Sample1;
create view;
!-------------------------------------------------------------------------------
// Запуск отчета на выполнение при выборе его из списка отчетов
procedure Run;
begin
Message('Запуск отчета №1');
end;
!-------------------------------------------------------------------------------
// Наименование отчета в списке
function GetReportName: String;
begin
GetReportName := 'Отчет №1';
end;
!-------------------------------------------------------------------------------
// Наименования групп, в которые входит отчет
// Группа n+1 делается подчиненной группе n
// В данном случае будет иерархия:
// [+] Группа 1
// [+] Группа 2
// Отчет 1
function GetGroupName (Level : Word) : String;
begin
GetGroupName := '';
case Level of
1 : GetGroupName := 'Группа 1';
2 : GetGroupName := 'Группа 2';
end;
end;
!-------------------------------------------------------------------------------
// Приоритет отчета - сортировка внутри группы выполняется сначала
// по приоритету, а затем по наименованию
function GetPriority : Integer;
begin
GetPriority := 0;
end;
!-------------------------------------------------------------------------------
// ModuleID модулей, в которых будет виден отчет
// '*' - отчет будет виден в любом модуле
function VisibleInModule(Ind : Byte) : String;
begin
VisibleInModule := '';
case Ind of
1 : VisibleInModule := 'B_Finans';
2 : VisibleInModule := 'MenuZarp';
end;
end;
!-------------------------------------------------------------------------------
end.