Přizpůsobení prohlížečů - reálné úlohy |
Top Previous Next |
Seznam témat:
Kontrola souhlasu měny vlastního bank. účtu a měny faktury v uskutečněném plnění Tento skript zkontroluje při ukládání vydané faktury jestli měna vlastního bank. účtu (na který to má odběratel zaplatit - pole ovydfakthd.buvl) odpovídá měně faktury. V negativním případě nabídne možnost změny. Určeno pro browser uskutečněného plnění, do události OnValidate.
var BrVlUcet: TBrowserLookUpEdit; BrFaMena: TBrowserCurrEdit; FaMena,UcetMena,FaVlUcet: string; begin //najdi prvek s vlastním účtem BrVlUcet := TBrowserLookUpEdit(BrowserDialog.FindComponent('BrLEditUcet')); if BrVlUcet = nil then Exit;
//zjisti měnu pro vlastní účet UcetMena := Query('select mena from dba.ubuvl where buvl=:p1', [BrVlUcet.Text]);
//najdi prvek pro měnu a kurz BrFaMena := TBrowserCurrEdit(BrowserDialog.FindComponent('BrCEditMena')); if BrFaMena = nil then Exit;
//zjisti zadanou měnu FaMena := BrFaMena.Mena;
//pokud se měny liší, nabídni přenastavení měny if UcetMena <> FaMena then if MsgBox('Vlastní účet', Format('Měna faktury (%s) neodpovídá měně bankovního účtu (%s) - změnit bankovní účet?', [FaMena, UcetMena]), mtConfirmation, mbYes+mbNo) = mrYes then begin FaVlUcet := LookupBox('Vyberte nový bankovní účet', 'buvl', 'select buvl, bucet+''/''+banka as ucet, nazev from dba.ubuvl where mena=:p1', [FaMena]); if FaVlUcet <> '' then BrVlUcet.Text := FaVlUcet; end; end.
Změna typu poplatku při ukládání převodního příkazu Tento skript při updatu převodního příkazu před uložením zkontroluje, zda příkaz obsahuje položky v jiných měnách než je domácí. V případě, že ano, nabídne možnost změnit u těchto položek typ poplatku. Určeno pro browser převodních příkazů, do události OnValidate.
var Mena: string; PocetCizich, Popl: integer; begin if BrowserCommand = cmUpdate then begin Mena := GetAppParam('currency'); PocetCizich := Query('select count(*) from dba.uppit where pphd= :p1 and data_id= :p2 and mena <> :p3', [BrowserData.FieldByName('pphd').AsInteger, BrowserData.FieldByName('data_id').AsInteger, Mena]);
if PocetCizich > 0 then if YesNoBox('Příkaz obsahuje položky s cizí měnou. Přejete si u nich změnit typ poplatku?') then begin Popl := ComboBox('Zvolte typ poplatku', 'BEN;OUR;BN1;SHA;COL', 3); if Popl >= 0 then ExecuteSQL('update dba.uppit set popl_hradi= :p1 where pphd= :p2 and data_id= :p3 and mena <> :p4', [Popl, BrowserData.FieldByName('pphd').AsInteger, BrowserData.FieldByName('data_id').AsInteger, Mena]); end; end; end.
Nastavení jiné výchozí záložky na dialogu nabídek Skript zajistí, že při každém otevření editačního dialogu nabídky bude ve spodní části vždy aktivní záložka Parametry-Dokumenty, namísto Položky nabídky. Skript je nutno umístit do události OnSyncData, což je okamžik kdy byl právě dialog naplněn hodnotami z aktuálního záznamu (v případě operace update), resp. výchozími hodnotami (v případě insertu).
Událost OnSyncDatase volá vícekrát během existence dialogu tak, jak se uživatel přepíná mezi záložkami. Takže je nutné testovat proměnnou BrowserSyncIndexRange, která obsahuje nulu jen při prvotní synchronizaci. Současně je pomocí volání metody SyncControls nutné zajistit aktualizaci dat na příslušné záložce. Hodnota parametru (14) vyplývá z vlastnosti GroupIndex kteréhokoliv prvku na záložce.
var Pages: TPageControl; TabSheet: TTabSheet; begin if BrowserSyncIndexRange = 0 then begin Pages := TPageControl(BrowserDialog.FindComponent('PageCtrlPol')); TabSheet := TTabSheet(BrowserDialog.FindComponent('TabSheetParamDokum')); if (Pages <> nil) and (TabSheet <> nil) then begin Browser.SyncControls(14); Pages.ActivePage := TabSheet; end; end; end.
Pořízení kopie jednání z obchodní příležitosti Pořízení kopie jednání z obchodní příležitosti Příklad zajistí, že se na příkaz Insert (F3 Přidat jednání) program pokusí dohledat v historii jednání předchozí záznam s vazbou na danou obchodní příležitost. Pokud takový záznam najde, zkopíruje jej do nového záznamu a zároveň převezme jeho obchodní parametry. Pokud takový záznam nenajde, pokračuje dál standardním pořízením nového záznamu jednání...
var rada: String; dokl, dataid, poradi, dataid_old, poradi_old: Integer; primKlic: Variant; begin if BrowserCommand = cmInsert then if not BrowserData.Params.ParamByName ('dokl').IsNull then begin // zjistí identifikaci obchodní příležitosti (z parametrů DetailBrowseru) rada := BrowserData.Params.ParamByName ('rada').AsString; dokl := BrowserData.Params.ParamByName ('dokl').AsInteger; poradi_old := -1;
// předchozí záznam v historii jednání s vazbou na danou obchodní příležitost with TQuery.Create (nil) do try DatabaseName := DefaultDatabaseName; SQL.Text := 'SELECT FIRST data_id, id_poradi, ggetdataid (*) as defdataid ' + 'FROM DBA.opobjhistjedn ' + 'WHERE oprada = :rada AND opdokl = :dokl ' + 'ORDER BY datum DESC, id_poradi DESC'; ParamByName ('rada').AsString := rada; ParamByName ('dokl').AsInteger := dokl; Open; if not FieldByName ('id_poradi').IsNull then // předchozí záznam existuje begin dataid_old := FieldByName ('data_id').AsInteger; poradi_old := FieldByName ('id_poradi').AsInteger; dataid := FieldByName ('defdataid').AsInteger; end; finally Free; end;
if poradi_old <> -1 then // byl nalezen předchozí záznam v historii jednání s vazbou na danou obchodní příležitost begin // spuštění transakce DefaultDatabase.StartTransaction; try
// pořízení kopie předchozího záznamu jednání with TQuery.Create (nil) do try DatabaseName := DefaultDatabaseName; SQL.Text := 'INSERT INTO DBA.opobjhistjedn (data_id, datum, jednalico_id, jednalmulti_id, jednaldata_id, jednalkontakt_id, povereny, infokomu, priorita, jednanivedl, typ, oprada, opdokl) ' + 'SELECT :dataid, x_currentdate(*), jednalico_id, jednalmulti_id, jednaldata_id, jednalkontakt_id, povereny, infokomu, priorita, jednanivedl, typ, :rada, :dokl ' + 'FROM DBA.opobjhistjedn WHERE data_id = :dataid_old AND id_poradi = :poradi_old'; ParamByName ('dataid').AsInteger := dataid; ParamByName ('rada').AsString := rada; ParamByName ('dokl').AsInteger := dokl; ParamByName ('dataid_old').AsInteger := dataid_old; ParamByName ('poradi_old').AsInteger := poradi_old; ExecSQL; finally Free; end;
// identifikace aktuálně vloženého záznamu (posledního s vazbou na danou obchodní příležitost) - nelze řešit přes @@identity, šlo by předělat na "gidents"... with TQuery.Create (nil) do try DatabaseName := DefaultDatabaseName; SQL.Text := 'SELECT id_poradi ' + 'FROM DBA.opobjhistjedn ' + 'WHERE oprada = :rada AND opdokl = :dokl ' + 'ORDER BY id_poradi DESC'; ParamByName ('rada').AsString := rada; ParamByName ('dokl').AsInteger := dokl; Open; poradi := FieldByName ('id_poradi').AsInteger; finally Free; end;
// úprava hodnot parametrů vygenerovaných automaticky with TQuery.Create (nil) do try DatabaseName := DefaultDatabaseName; SQL.Text := 'UPDATE DBA.obparamshodn as p2, DBA.obparamshodn as p1 ' + 'SET p2.h_str = p1.h_str, p2.h_num = p1.h_num, p2.h_dat = p1.h_dat, p2.h_memo = p1.h_memo ' + 'WHERE p2.jedndataid = :dataid AND p2.jednporadi = :poradi AND p1.jedndataid = :dataid_old AND p1.jednporadi = :poradi_old AND p2.kod = p1.kod'; ParamByName ('dataid').AsInteger := dataid; ParamByName ('poradi').AsInteger := poradi; ParamByName ('dataid_old').AsInteger := dataid_old; ParamByName ('poradi_old').AsInteger := poradi_old; ExecSQL; finally Free; end;
// kopie nových parametrů historie jednání with TQuery.Create (nil) do try DatabaseName := DefaultDatabaseName; SQL.Text := 'INSERT INTO DBA.obparamshodn (dataid, kod, jedndataid, jednporadi, h_str, h_num, h_dat, h_memo) ' + 'SELECT :dataid, kod, :dataid, :poradi, h_str, h_num, h_dat, h_memo ' + 'FROM DBA.obparamshodn as p1 ' + 'WHERE jedndataid = :dataid_old AND jednporadi = :poradi_old AND ' + 'NOT EXISTS (SELECT * FROM DBA.obparamshodn as p2 WHERE p2.jedndataid = :dataid AND p2.jednporadi = :poradi AND p2.kod = p1.kod)'; ParamByName ('dataid').AsInteger := dataid; ParamByName ('poradi').AsInteger := poradi; ParamByName ('dataid_old').AsInteger := dataid_old; ParamByName ('poradi_old').AsInteger := poradi_old; ExecSQL; finally Free; end;
// commit (potvrzení) transakce DefaultDatabase.Commit; // daný Command (zde Insert) již dál (znovu) neprovádět BrowserCommand := 0; // refresh prohlížeče jednání s vazbou na obch. příležitost Browser.DoCommand (nil, cmRefresh); primKlic := VarArrayCreate ([0, 1], varVariant); primKlic [0] := dataid; primKlic [1] := poradi; // dohledání vytvořeného záznamu dle primárního klíče if Browser.Query.Locate ('data_id;id_poradi', primKlic, nil) then begin // otevření (update) vytvořeného záznamu Browser.DoCommand (nil, cmUpdate); // daný Command (zde Update) již dál (znovu) neprovádět BrowserCommand := 0; end; finally if DefaultDatabase.InTransaction then DefaultDatabase.Rollback; // rollback transakce (pokud transakce neskončila úspěšně) end; end; end; end.
Související témata |