📄 u_prov_agenti.pas
字号:
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 + -