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

📄 u_analisi_scorte_imp.pas

📁 基于OOP设计的一套较好的ERP系统
💻 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 + -