📄 u_analisi_scorte_imp.pas
字号:
unit u_analisi_scorte_imp;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ActnList, Db, DBTables, StdCtrls, Buttons, DBCtrls, ExtCtrls, Grids,
DBGrids, ComCtrls, ImgList, ToolWin, DBGridEh;
type
TAnalisi_scorte_imp = class(TForm)
TTSitArt: TTable;
TTSitArtArticoloetichetta: TStringField;
TTSitArtQtamagazzino: TFloatField;
TTSitArtQtaordforn: TFloatField;
TTSitArtQtaordcli: TFloatField;
TTSitArtQtaimplista: TFloatField;
TTSitArtQtaprenolista: TFloatField;
ActionList1: TActionList;
Aggiorna_situazione: TAction;
QFornitori: TQuery;
QFornitoricodice: TStringField;
QFornitoriRagionesociale: TStringField;
QSitArt: TQuery;
DSQFornitori: TDataSource;
DSQSitArt: TDataSource;
Label1: TLabel;
ToolBar1: TToolBar;
Panel1: TPanel;
DBNavigator1: TDBNavigator;
ImageList1: TImageList;
Chiudi: TAction;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
Panel3: TPanel;
StatusBar1: TStatusBar;
ProgressBar: TProgressBar;
Genera_Ordine: TAction;
ToolButton3: TToolButton;
DBGridEh1: TDBGridEh;
TTSitArtIdGiornale: TStringField;
DBGridEh2: TDBGridEh;
QSitArtArticolofornitore: TStringField;
QSitArtArticolo: TStringField;
QSitArtDescrizione: TStringField;
QSitArtFornitore: TStringField;
QSitArtGiacenza: TFloatField;
QSitArtOrdiniFornitore: TFloatField;
QSitArtOrdiniCliente: TFloatField;
QSitArtImpLista: TFloatField;
QSitArtPrenoLista: TFloatField;
QVarianti: TQuery;
QVariantiArticoloetichetta: TStringField;
QVariantiQtamagazzino: TFloatField;
QVariantiQtaordforn: TFloatField;
QVariantiQtaordcli: TFloatField;
QVariantiQtaimplista: TFloatField;
QVariantiQtaprenolista: TFloatField;
QVariantiArticolointerno: TStringField;
QVariantiCodvar1: TStringField;
QVariantiCodvar2: TStringField;
QVariantiVariante1: TStringField;
QVariantiVariante2: TStringField;
QVariantiDenominazioneVariante1: TStringField;
QVariantiDenominazioneVariante2: TStringField;
QGiacenza: TQuery;
QGiacenzaArticoloetichetta: TStringField;
QGiacenzaQtaIniziale: TFloatField;
QGiacenzaQtaCarico: TFloatField;
QGiacenzaQtaScarico: TFloatField;
Solo_da_ordinare: TAction;
ToolButton4: TToolButton;
QSitArtImportoOrdine: TCurrencyField;
QSitArtRiordino: TFloatField;
QSitArtPrezzo: TCurrencyField;
QVariantiQtaRiordino: TFloatField;
QVariantiQtaOrdine: TFloatField;
QVariantiMinimomagazzino: TFloatField;
QVariantiSottoscorta: TFloatField;
Qriordino: TQuery;
QriordinoArticoloetichetta: TStringField;
QriordinoArticolointerno: TStringField;
QriordinoCodvar1: TStringField;
QriordinoCodvar2: TStringField;
QriordinoVariante1: TStringField;
QriordinoVariante2: TStringField;
QriordinoDenominazioneVariante1: TStringField;
QriordinoDenominazioneVariante2: TStringField;
QriordinoIdGiornale: TStringField;
QriordinoMinimomagazzino: TFloatField;
QriordinoSottoscorta: TFloatField;
QriordinoMinimoordine: TFloatField;
QriordinoGiornoInizio: TSmallintField;
QriordinoGiornoFine: TSmallintField;
QriordinoMeseinizio: TSmallintField;
QriordinoMesefine: TSmallintField;
TTSitArtQtaRiordino: TFloatField;
TTSitArtQtaOrdine: TFloatField;
QriordinoStagione: TStringField;
QSitArtQtaOrdine: TFloatField;
Mostra_Ordine: TAction;
Stampa_Ordine: TAction;
QFornitoriUltimodocumento: TFloatField;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
procedure Aggiorna_situazioneExecute(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure TTSitArtAfterInsert(DataSet: TDataSet);
procedure ChiudiExecute(Sender: TObject);
procedure Genera_OrdineExecute(Sender: TObject);
procedure Solo_da_ordinareExecute(Sender: TObject);
procedure QSitArtCalcFields(DataSet: TDataSet);
procedure Mostra_OrdineExecute(Sender: TObject);
procedure Stampa_OrdineExecute(Sender: TObject);
procedure DSQFornitoriDataChange(Sender: TObject; Field: TField);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Analisi_scorte_imp: TAnalisi_scorte_imp;
implementation
uses ana_mod, Doc_mod, Umenu;
{$R *.DFM}
procedure TAnalisi_scorte_imp.Aggiorna_situazioneExecute(Sender: TObject);
var
lista : Ttable ;
riordina : boolean ;
QtaRiordino : Real ;
QtaOrdine : Real ;
QtaMagazzino: Real ;
Function GiornoDellAnno(Anno,Mese,Giorno:integer) : integer ;
Var
Mesi : Array[1..12] of integer ;
i,giorni : integer ;
begin
result := 0 ;
Mesi[1] := 31 ;
Mesi[2] := 28 ;
Mesi[3] := 31 ;
Mesi[4] := 30 ;
Mesi[5] := 31 ;
Mesi[6] := 30 ;
Mesi[7] := 31 ;
Mesi[8] := 31 ;
Mesi[9] := 30 ;
Mesi[10]:= 31 ;
Mesi[11]:= 30 ;
Mesi[12]:= 31 ;
// Anno bisestile ??
If Int(Anno/4) = (Anno/4) then Mesi[2] := 29 ;
giorni := 0 ;
for i:= 1 to Mese - 1 do
giorni := giorni + Mesi[i] ;
result := giorni + giorno ;
end; //giornoDellAnno
Function SiamoInStagione(Gi,Mi,Gf,Mf:integer) : Boolean ;
Var
GAInizio, GAFine , GAttuale,GiorniTotali : Integer;
Anno,Mese,Giorno : Word ;
begin
Result := False ;
DecodeDate(Now,Anno,Mese,Giorno) ;
GAttuale := GiornoDellAnno(Anno,Mese,Giorno) ;
GAInizio := GiornoDellAnno(Anno,Mi,Gi) ;
GiorniTotali := GiornoDellAnno(Anno,12,31) ;
If Mf < Mi then Anno := Anno + 1 ;
GAFine := GiornoDellAnno(Anno,Mf,Gf) ;
If Gafine < GaInizio then
// Qui consideriamo intervalli a cavallo della fine dell'anno
Result := ((GAttuale >= 1) and (GAttuale <= GAFine)) or
((GAttuale <= GiorniTotali) and (GAttuale >= GAInizio))
else
// Qui consideriamo intervalli entro l'anno
Result := (GAttuale >= GAInizio) and (Gattuale <= GAFine) ;
end; // SiamoInStagione
begin
while not (TTSitArt.IsEmpty) do
TTSitArt.Delete ;
Solo_Da_ordinare.Checked := False ;
QFornitori.Active := False ;
Qfornitori.ParamByName('Tutti').asBoolean := True ;
QSitArt.Active := False ;
ModuloDatiDocumenti.TTTestata.Filtered := False ;
ModuloDatiDocumenti.TTTestata.Filter := '(Evaso = False) and (Annullato = False)' ;
ModuloDatiDocumenti.TTTestata.Filtered := True ;
ModuloDatiDocumenti.TTTestata.First ;
lista := TTable.create(self);
lista.DatabaseName := 'euro2000';
lista.TableName := 'lista.db';
lista.open;
lista.Filtered := False ;
lista.Filter := 'Qtarimasta2 <> 0 or [Qta prenota]<> 0' ;
lista.Filtered := True ;
ProgressBar.Step := 1;
// CONTO LE QTA DI MAGAZZINO
QGiacenza.Open ;
progressbar.Max := Qgiacenza.RecordCount ;
progressbar.Position := 0 ;
While not QGiacenza.Eof do
begin
TTSitArt.Insert ;
TTSitArtArticoloEtichetta.AsString := QgiacenzaArticoloEtichetta.AsString ;
TTSitArtQtaMagazzino.AsFloat := QGiacenzaQtaIniziale.AsFloat + QGiacenzaQtaCarico.AsFloat - QGiacenzaQtaScarico.AsFloat ;
TTSitArt.Post ;
QGiacenza.Next ;
ProgressBar.StepIt;
Application.ProcessMessages ;
end ;
QGiacenza.Close ;
// CONTO LE QTA ORDINATE
progressbar.Max := ModuloDatiDocumenti.TTTestata.RecordCount ;
progressbar.Position := 0 ;
with ModuloDatiDocumenti do
begin
// Testata filtrata
TTTestata.First ;
while not TTTestata.Eof do
begin
if TTTestataTipoImpegno.AsString = 'F' then
begin
TTDettaglio.First ;
while not TTDettaglio.Eof do
begin
if not TTDettaglioEvaso.AsBoolean then
begin
if ModuloDatiAnagrafiche.TTarticoli.FindKey([TTDettaglioArticoloInterno.asString]) then
begin
If not ModuloDatiAnagrafiche.TTArticoliGestioneVarianti.AsBoolean then
begin
if TTSitArt.FindKey([TTdettaglioArticoloEtichetta.asString]) then
begin
TTSitArt.Edit ;
TTSitArtQtaOrdForn.AsFloat := TTSitArtQtaOrdForn.AsFloat + TTDettaglioQta.AsFloat - TTDettaglioQtaEvasa.asFloat;
TTSitArt.Post ;
end
else
begin
TTSitArt.Insert ;
TTSitArtArticoloEtichetta.AsString := TTDettaglioArticoloEtichetta.AsString ;
TTSitArtQtaOrdForn.AsFloat := TTSitArtQtaOrdForn.AsFloat + TTDettaglioQta.AsFloat - TTDettaglioQtaEvasa.asFloat;
TTSitArt.Post ;
end;
end
else
begin
// Carico i dati dal dettaglio varianti...
TTdocVar.First ;
While Not TTDocVar.Eof do
begin
if not TTDocVarEvaso.AsBoolean then
begin
if TTSitArt.FindKey([TTDocVarArticoloEtichetta.asString]) then
begin
TTSitArt.Edit ;
TTSitArtQtaOrdForn.AsFloat := TTSitArtQtaOrdForn.AsFloat + TTDocVarQta.AsFloat - TTDocVarQtaEvasa.asFloat;
TTSitArt.Post ;
end
else
begin
TTSitArt.Insert ;
TTSitArtArticoloEtichetta.AsString := TTDocVarArticoloEtichetta.AsString ;
TTSitArtQtaOrdForn.AsFloat := TTSitArtQtaOrdForn.AsFloat + TTDocVarQta.AsFloat - TTDocvarQtaEvasa.asFloat;
TTSitArt.Post ;
end ;
end ;
TTDocVar.Next ;
end ; // while varianti
end ; // if gestione varianti
end; // if esiste articolo
end ; // if non evaso
TTDettaglio.Next ;
Application.ProcessMessages ;
end ; // while dettaglio
end ; // if Tipo impegno = fornitore
if TTTestataTipoImpegno.AsString = 'C' then
begin
TTDettaglio.First ;
while not TTDettaglio.Eof do
begin
if not TTDettaglioEvaso.AsBoolean then
begin
if ModuloDatiAnagrafiche.TTarticoli.FindKey([TTDettaglioArticoloInterno.asString]) then
begin
If not ModuloDatiAnagrafiche.TTArticoliGestioneVarianti.AsBoolean then
begin
if TTSitArt.FindKey([TTdettaglioArticoloEtichetta.asString]) then
begin
TTSitArt.Edit ;
TTSitArtQtaOrdCli.AsFloat := TTSitArtQtaOrdCli.AsFloat + TTDettaglioQta.AsFloat - TTDettaglioQtaEvasa.asFloat;
TTSitArt.Post ;
end
else
begin
TTSitArt.Insert ;
TTSitArtArticoloEtichetta.AsString := TTDettaglioArticoloEtichetta.AsString ;
TTSitArtQtaOrdCli.AsFloat := TTSitArtQtaOrdCli.AsFloat + TTDettaglioQta.AsFloat - TTDettaglioQtaEvasa.asFloat;
TTSitArt.Post ;
end;
end
else
begin
// Carico i dati dal dettaglio varianti...
TTdocVar.First ;
While Not TTDocVar.Eof do
begin
if not TTDocVarEvaso.AsBoolean then
begin
if TTSitArt.FindKey([TTDocVarArticoloEtichetta.asString]) then
begin
TTSitArt.Edit ;
TTSitArtQtaOrdCli.AsFloat := TTSitArtQtaOrdCli.AsFloat + TTDocVarQta.AsFloat - TTDocVarQtaEvasa.asFloat;
TTSitArt.Post ;
end
else
begin
TTSitArt.Insert ;
TTSitArtArticoloEtichetta.AsString := TTDocVarArticoloEtichetta.AsString ;
TTSitArtQtaOrdCli.AsFloat := TTSitArtQtaOrdCli.AsFloat + TTDocVarQta.AsFloat - TTDocVarQtaEvasa.asFloat;
TTSitArt.Post ;
end ;
end ;
TTDocVar.Next ;
end ; // while varianti
end ; // if gestione varianti
end; // if esiste articolo
end ; // if non evaso
TTDettaglio.Next ;
Application.ProcessMessages ;
end ; // while dettaglio
end ; // if Tipo impegno = cliente
ProgressBar.StepIt;
TTTestata.Next ;
Application.ProcessMessages ;
end ; // while testata
TTTestata.Filtered := False ;
end ; // ModuloDatiDocumenti
// CONTO LE QTA IMPEGNATE E PRENOTATE DALLE LISTE NOZZE
progressbar.Max := lista.RecordCount;
progressbar.Position := 0 ;
lista.First ;
while not (lista.Eof) do
begin
if TTSitArt.FindKey([lista.FieldByName('ArticoloEtichetta').AsString]) then
begin
TTSitArt.Edit ;
TTSitArtQtaImpLista.AsInteger := TTSitArtQtaImpLista.AsInteger + lista.FieldByName('Qtarimasta2').AsInteger ;
TTSitArtQtaPrenoLista.AsInteger := TTSitArtQtaPrenoLista.AsInteger + lista.FieldByName('Qta prenota').AsInteger ;
TTSitArt.Post ;
end
else
begin
TTSitArt.Insert ;
TTSitArtArticoloEtichetta.AsString := lista.FieldByName('ArticoloEtichetta').AsString ;
TTSitArtQtaImpLista.AsInteger := TTSitArtQtaImpLista.AsInteger + lista.FieldByName('Qtarimasta2').AsInteger ;
TTSitArtQtaPrenoLista.AsInteger := TTSitArtQtaPrenoLista.AsInteger + lista.FieldByName('Qta prenota').AsInteger ;
TTSitArt.Post ;
end ;
// PROGRESS BAR
ProgressBar.StepIt;
lista.Next ;
Application.ProcessMessages ;
end ;
// Cashbit 4.01.2002
// Inserisco gli articoli da riordinare
QRiordino.Open ;
ProgressBar.Position := 0 ;
ProgressBar.Max := Qriordino.RecordCount ;
QRiordino.First ;
While Not QRiordino.Eof do
begin
Riordina := False ;
// controllo sulla stagione (se
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -