⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_prov_agenti.pas

📁 基于OOP设计的一套较好的ERP系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit u_prov_agenti;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Db, DBTables, ComCtrls;

type
  TProv_agenti = class(TForm)
    Button1: TButton;
    Label2: TLabel;
    dalPick: TDateTimePicker;
    Label1: TLabel;
    Label3: TLabel;
    alPick: TDateTimePicker;
    Table1: TTable;
    QGruppi: TQuery;
    QGruppiSoggetto: TStringField;
    QGruppiGruppo: TFloatField;
    QGruppiValuta: TStringField;
    dsGruppi: TDataSource;
    QDettaglio: TQuery;
    QDettaglioRECORD_ID: TFloatField;
    QDettaglioSOGGETTO: TStringField;
    QDettaglioARTICOLO: TStringField;
    QDettaglioDESCRIZION: TStringField;
    QDettaglioUM: TStringField;
    QDettaglioQTA: TFloatField;
    QDettaglioPREZZO: TFloatField;
    QDettaglioVALUTA: TStringField;
    QDettaglioTIP_PREZZO: TStringField;
    QDettaglioSCONTO: TFloatField;
    QDettaglioSCONTO2: TFloatField;
    QDettaglioSCONTO3: TFloatField;
    QDettaglioIVA: TStringField;
    QDettaglioGRUPPO: TFloatField;
    QDettaglioDATA_DOCUM: TDateField;
    QDettaglioNUMERO_DOC: TFloatField;
    QDettaglioSERIE_DOC: TStringField;
    Plug2: TTable;
    Plug2Documento: TIntegerField;
    Progress: TProgressBar;
    Button2: TButton;
    QDettaglioPADRE_DOC: TFloatField;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    function seleziona: integer;
    function smarca(ID:word;Soggetto:String): boolean;
    { Public declarations }
  end;

var
  Prov_agenti: TProv_agenti;

implementation

uses Doc_mod, ana_mod, plug_doc_gen;

{$R *.DFM}


procedure TProv_agenti.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
     release ;
end;

function TProv_agenti.seleziona: integer;
var Appoggio, Tdoc, Ddoc, Econto, Agente, Ag_doc, Ag_prov, Ag_prov_art, sog, Art, TipiDoc,
    Area_doc, Area_prov, Area_prov_art, Gruppo_doc, Gruppo_prov, Gruppo_prov_art, Ag_premio : Ttable ;
    id_gruppo : integer ;
    Provvigione_doc : real ;
    Importo, qta_riga : real ;
    max_agenti : integer ;
    Calcolata : Boolean ;
    Importo_pagato, Percentuale_pagata : real ;
    ok : boolean ;
    Ag_prov_trovato, Area_prov_trovato, Gruppo_prov_trovato : boolean ;
    Prima_provvigione : boolean ;
    Importo_dettaglio : currency ;
    Gruppo : String ;
    Saldato : boolean ;
    Provvigione_x_articolo, provvigione_x_tipo_articolo : boolean ;
    premio : boolean ;

     procedure calcola_agente ;
      begin
        if Ag_doc.FindKey([Agente.FieldByName('Codice').AsString,Tdoc.FieldByname('Tipo').AsString]) then
         begin
          Calcolata := False ;

          // Stefano 15/01/2002
          if Ddoc.FindKey([Tdoc.FieldByName('Documento').AsString]) then
            begin

               Provvigione_x_Articolo := False ;
               Provvigione_x_tipo_articolo := False ;
               Premio := True ; // Il premio diventa falso quando la provvgione non viene calcolata sul documento
               while (not Ddoc.Eof) and (Ddoc.FieldByName('Documento').AsString = Tdoc.FieldByName('Documento').AsString) do
                 begin
                  if Sog.FindKey([TDoc.FieldByName('Soggetto').AsString]) then
                    begin
                       if Ag_prov_art.FindKey([Agente.FieldByName('Codice').AsString,Sog.FieldByName('Tipo Rapporto').AsString,Ddoc.FieldByName('Articolo interno').AsString]) then
                         Provvigione_x_articolo := True ;
                       if (Art.FindKey([Ddoc.FieldByName('Articolo interno').AsString])) then
                         begin
                           if Ag_prov.FindKey([Agente.FieldByName('Codice').AsString,Sog.FieldByName('Tipo rapporto').AsString,Art.FieldByName('Tipo articolo').AsString]) then
                             Provvigione_x_tipo_articolo := True
                           else
                             begin
                               if Ag_prov.FindKey([Agente.FieldByName('Codice').AsString,Sog.FieldByName('Tipo rapporto').AsString]) then
                                 while (not Ag_prov.Eof) and (Ag_prov.FieldByName('Tipo articolo').AsString = '') do
                                   begin
                                      Ag_prov.Next ;
                                   end ;
                               if (Ag_Prov.FieldByName('Agente').AsString = Agente.FieldByName('Codice').AsString) and
                                  (Ag_Prov.FieldByName('Tipo soggetto').AsString = Sog.FieldByName('Tipo rapporto').AsString) and
                                  (Ag_Prov.FieldByName('Tipo articolo').AsString = '') then
                                    Provvigione_x_tipo_articolo := True ;
                             end ;
                         end ;
                     end ;
                   Ddoc.Next
                 end ;
            end ;
          // Stefano 15/01/2002

          if Ddoc.FindKey([Tdoc.FieldByName('Documento').AsString]) then
            begin
               Provvigione_doc := 0 ;
               while (not Ddoc.Eof) and (Ddoc.FieldByName('Documento').AsString = Tdoc.FieldByName('Documento').AsString) do
                 begin
                    if Ddoc.FieldByName('Articolo interno').AsString <> '' then
                      begin
                        Importo_dettaglio := 0 ;
                        if (Ag_doc.FieldByName('Tipo provvigione').AsString <> 'N') and (Sog.FindKey([TDoc.FieldByName('Soggetto').AsString])) and (Art.FindKey([Ddoc.FieldByName('Articolo interno').AsString])) then
                          begin
                             if {(sog.FieldByName('Prima provvigione').AsBoolean) or} (Tdoc.FieldByName('Primo Doc').AsBoolean) then
                               Prima_provvigione := true
                             else
                               Prima_provvigione := False ;
                                             // Calcolo IMPORTO
                             if (Ag_Doc.FieldByName('Sconto').AsString = 'N') or (Ag_Doc.FieldByName('Sconto').AsString = 'n') then
                               begin
                                 importo := Ddoc.FieldByName('qta').AsFloat * Ddoc.FieldByName('Prezzo').AsFloat ;
                                 qta_riga := Ddoc.FieldByName('qta').AsFloat ;
                               end
                             else
                               begin
                                 importo := Ddoc.FieldByName('qta').AsFloat * (Ddoc.FieldByName('Prezzo').AsFloat*(1-Ddoc.FieldByName('Sconto').AsFloat/100)*(1-Ddoc.FieldByName('Sconto2').AsFloat/100)*(1-Ddoc.FieldByName('Sconto3').AsFloat/100)) ;
                                 qta_riga := Ddoc.FieldByName('qta').AsFloat ;
                                   // Sconto generale
                                 if Tdoc.FieldByName('Sconto %').AsString <> '' then
                                   begin
                                     importo := importo * (1-Tdoc.FieldByName('Sconto %').AsFloat/100) ;
                                   end ;
                               end ;



                               // Inizializzo la variabile a 100 (Importo non in percentuale di provvigione considera la Percentuale_pagata)
                             Percentuale_pagata := 100 ;

                                       // SE LA PROVVIGIONE DEVE ESSERE CALCOLATA SUL SALDATO
                             if Ag_doc.FieldByName('Tipo provvigione').AsString = 'S' then
                               begin
                                  if Econto.FindKey([Tdoc.FieldByName('Documento').AsString]) then
                                    begin
                                      Saldato := True ;
                                      while (not Econto.Eof) and (Econto.FieldByName('Documento').AsString = Tdoc.FieldByName('Documento').AsString) do
                                        begin
                                          if not Econto.FieldByName('Saldato').AsBoolean then
                                             Saldato := False ;
                                          Econto.Next ;
                                        end ;
                                      if not Saldato then
                                        Importo := 0 ;
                                    end
                                  else
                                    importo := 0 ;
                               end ;

                                        // SE LA PROVVIGIONE DEVE ESSERE CALCOLATA SUL PAGATO
                             if Ag_doc.FieldByName('Tipo provvigione').AsString = 'P' then
                               begin
                                 if Econto.FindKey([Tdoc.FieldByName('Documento').AsString]) then
                                   begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -