[ОТВЕТИТЬ]
15.11.2006 10:27
cb
 
Когда создается отчет(oracle report), в нем есть форма ввода параметров. Когда это отчет вызывается из СМ без параметров- вызывается стандартный диалог ввода параметров самого СМ. Как сделать чтоб вызывалась форма ввода параметров самого отчета, а не СМ?
15.11.2006 10:43
OlegON
 
Думаю подсунуть ему липовую пустую форму, ибо технология отчетов подразумевает запуск формы, которая в СМ возвращает параметры, а уж СМ запускает отчет. Кстати, интересная тема, чтобы пользоваться формой самих репортсов... Я с ними не работаю, т.ч. просто интересно, пробовал кто?
15.11.2006 10:53
cb
 
А можно изменить стандартную форму ввода параметров(например сделать часть параметров неактивной)?
С самими репотами можно работать если только научиться передавать параметры...
15.11.2006 12:09
OlegON
 
Пример формы тоже где-то в примерах лежит... Можно.
15.11.2006 12:31
kadr
 
Насколько мне известно изменить стандартную форму параметров, без вмешательства в код СМ невозможно.
Можно писать самостоятельную форму параемтров, которая будет вызывать отчёт и подключать отчёты с собственно формой параметров, Но тут один большой подводный камень, заключающийся в том что СМ не передаёт в стороннюю форму параметров имя пользователя и пароль с которыми он работает с БД. Можно конечно всё делать от имени supermag либо др. пользователя, но не хочется лишаться такого мощного разграничения прав на уровне пользователя.
Спасибо cb, что поднял этот вопрос, а то я уже второй день пытался вспомнить свои "хотелки" по СМ.
15.11.2006 12:41
OlegON
 
Да, прошу прощения, я про пользовательские отчеты говорил.
15.11.2006 12:52
kadr
 
пользовательская программа ввода параметров должна передавать в СМ параметры через MailSlot, в своих изысканиях на эту тему я столкнулся с таким поведением, что СМ считывает из MailSlotа только после закрытия программы ввода параметров, а потом заново её открывает. Можно попробовать написать программу, которая при запуске будет передавать самый минимум в MailSlot, а потом сама закрываться. Но отсюда законный вопрос: как реализовать удобную форму ввода параметров через Репортсы? насколько я знаю в форму самого отчёта необходимо вводить уже готовые значения, а не выбирать из большого множества.
17.11.2006 08:39
cb
 
нет. в форме самого отчета можно выбирать множества значений.
конечно можно написать приложение для обработки значений, только не охота плодить ехешники.
31.03.2008 11:44
Aragorn
 
Цитата:
cb Когда создается отчет(oracle report), в нем есть форма ввода параметров. Когда это отчет вызывается из СМ без параметров- вызывается стандартный диалог ввода параметров самого СМ. Как сделать чтоб вызывалась форма ввода параметров самого отчета, а не СМ?
поднимаю старую тему...
в ней так и не был дан ответ топикстартеру, а я столкнулся с такой же проблемой.. :(
возможно ли показать форму параметров самого отчета после формы параметров СУПЕРМАГА?
31.03.2008 11:53
kadr
 
Никогда не заморачивался с этой формой, если не хватает стандартной формы, то накидывал свою на дельфях и в путь.
31.03.2008 12:00
Aragorn
 
Цитата:
kadr Никогда не заморачивался с этой формой, если не хватает стандартной формы, то накидывал свою на дельфях и в путь.
а вы придерживаетесь концепции OpenSource? :)
31.03.2008 12:02
kadr
 
Я придерживаюсь концепции разобрался сам расскажи другим, данный вопрос озвучивался здесь, так что в поиск
31.03.2008 12:25
Mihon
 
Польз. форма параметов должна писаться отдельно, на чем - ваше дело.
Та форма, что в Oracle Reports - показываться не будет, как ни старайся. Там мы только указываем параметры.
В настройках отчета в СМ2000 прописываешь exe-шник формы параметров, которую сам должен написать.
Есть пример на С++ в станд. примерах отчетов и всего другого.
Вся загвоздка в корректном использовании mailslot'а.
Вот пример на делфе, из своих форм на скорую руку вытащил:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  MailSlotName := GetCommandLine();
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  st:string;
  hfile:Thandle;
  ZapisanoBytes : Cardinal;
  bol,i : integer;
begin
  if VozvrBox.Checked then bol:=1 else bol:=0;
  hfile:=CreateFile( pchar(MailSlotName),GENERIC_WRITE,FILE_SHARE_READ,Nil,OPEN_EXISTING,0,0);
  st:='P_DATE='+datetostr(DateTimePicker1.DateTime)+' P_LASTDATE='+datetostr(DateTimePicker2.DateTime)+' P_StoreLoc='+inttostr(StoreID[Combobox1.ItemIndex+1])+' P_VOZVR='+inttostr(bol)+' P_GROUP_TREE='+tree;
  SetLength(st, Length(st));
  if not WriteFile(hFile,Pansichar(st)^,Length(st),ZapisanoBytes,NIL) then showmessage('Ошибка');
  CloseHandle(hFile);
  close;
end;
31.03.2008 12:38
Aragorn
 
Спасибо!
Осталось поставить себе Delphi и буду разбираться :)
осталось 2 вопроса:
1)Какие компоненты посоветуете для доступа к Oracle?
2) я так понял, поюзав поиск по форуму, что в форму параметров настройки доступа к базе не передаются и придется либо выдавать пользователю окно доступа к базе в момент запуска отчета, либо пускать под SUPERMAG?
31.03.2008 12:46
kadr
 
Цитата:
Aragorn Спасибо!
Осталось поставить себе Delphi и буду разбираться :)
осталось 2 вопроса:
1)Какие компоненты посоветуете для доступа к Oracle?
DOA, ODAC
Цитата:
Aragorn 2) я так понял, поюзав поиск по форуму, что в форму параметров настройки доступа к базе не передаются и придется либо выдавать пользователю окно доступа к базе в момент запуска отчета, либо пускать под SUPERMAG?
совершенно верно, в С+ утверждали что передачу параметров не трудно сделать, но уже 3 версии с тех пор минуло так и не сделали.
31.03.2008 12:51
Aragorn
 
Цитата:
kadr совершенно верно, в С+ утверждали что передачу параметров не трудно сделать, но уже 3 версии с тех пор минуло так и не сделали.
написал по этому поводу в поддержку, сказали, что делать это не планируется, но возможно при наличии ТЗ и оплаты с нашей стороны
:(:(:(
31.03.2008 12:59
Mihon
 
Я думаю, по поводу пользователя не будет заморочки - есть универсальный SUPERMAG или SYS.
А вот по поводу того, откуда взять имя базы - 2 варианта:
1. Т.к. форма параметров запускается из СМ, то можно брать из заголовка окна:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  i:integer;
  Wnd : hWnd;
  buff: ARRAY [0..255] OF Char;
  st:string;
  b:boolean;
begin
// определение имени текущей БД для коннекта
  magbase:='';
  Wnd := GetWindow(Handle, gw_HWndFirst);
  WHILE Wnd <> 0 DO
  BEGIN {Не показываем:}
    IF (Wnd <> Application.Handle) AND {-Собственное окно}
    IsWindowVisible(Wnd) AND {-Невидимые окна}
    (GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна}
    (GetWindowText(Wnd, buff, sizeof(buff)) <> 0)
    THEN
    BEGIN
      GetWindowText(Wnd, buff, sizeof(buff));
      st:=StrPas(buff);
      if copy(st,1,8)='Супермаг' then
      begin
        for i:=8 to length(st) do
        begin
          if st[i]='@' then b:=true;
          if st[i]=' ' then b:=false;
          if b=true then magbase:=magbase+st[i];
        end;
        break;
      end;
    END;
    Wnd := GetWindow(Wnd, gw_hWndNext);
  END;
  magbase:=copy(magbase,2,length(magbase)-1);
  OracleSession1.LogonDatabase:=magbase;
//еще указываем имя польз. и пароль
  OracleSession1.Connected:=true;
end;
2 вариант:
В реестре хранится название БД, в которую заходили последний раз:
Код:
//  В Uses дописываем Registry;
// в var -   Registry: TRegistry;

  Registry:=TRegistry.Create;
  Registry.RootKey:=HKEY_CURRENT_USER;
  Registry.OpenKeyReadOnly('SOFTWARE');
  Registry.OpenKeyReadOnly('Service Plus');
  Registry.OpenKeyReadOnly('SuperMag2000');
  Registry.OpenKeyReadOnly('Супермаг 2000');
  Registry.OpenKeyReadOnly('LastLogin');
  magbase:=Registry.ReadString('Database');
  Registry.Free;
31.03.2008 13:14
kadr
 
Цитата:
Mihon Я думаю, по поводу пользователя не будет заморочки - есть универсальный SUPERMAG или SYS.
А ещё можно пароли этих пользователей на стеночке повесить.
Права пользователю должны быть даны только те которые ему необходимы, всё остальное он не должен иметь даже случайно сделать.
31.03.2008 13:36
Mihon
 
Цитата:
kadr А ещё можно пароли этих пользователей на стеночке повесить.
Права пользователю должны быть даны только те которые ему необходимы, всё остальное он не должен иметь даже случайно сделать.
Пользователь, по сути, не знает о существовании таких пользователей.
А он и не сможет "случайно сделать".
Пользователь что, кульный хацкер, перехватит соединение прикладной программы и ужасные запросы будет слать? Ничего страшного, если от SUPERMAG'а прога приконнектится.

p/s/ у нас 1,5 года операторы от имени этого пользователя Расчет ТД делали, сейчас мы SUPERMAG-у пароль поменяли, нового сделали, а то они себе права раздавать научились. А так проблем не было. Вот.
31.03.2008 14:07
kadr
 
Один раз встретились с проблемой и не взяли на заметку?
А пользователей не надо недооценивать.
Но это уже разговоры за безопасность, так что в этой теме развитие этого вопроса будет оффтоп.
31.03.2008 15:21
Aragorn
 
Цитата:
Mihon 1. Т.к. форма параметров запускается из СМ, то можно брать из заголовка окна:

2 вариант:
В реестре хранится название БД, в которую заходили последний раз:
Спасибо! Пригодится!
Опции темы


Часовой пояс GMT +3, время: 03:44.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.