Přizpůsobení prohlížečů - reálné úlohy

Top  Previous  Next

Seznam témat:

řešení

 

Řešení

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