AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Lagerreichweite und Fertigungsauftragsendtermin Berechnung
Thema durchsuchen
Ansicht
Themen-Optionen

Lagerreichweite und Fertigungsauftragsendtermin Berechnung

Ein Thema von Ykcim · begonnen am 9. Feb 2009 · letzter Beitrag vom 13. Feb 2009
Antwort Antwort
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#1

Re: Lagerreichweite und Fertigungsauftragsendtermin Berechnu

  Alt 12. Feb 2009, 08:27
So sieht die Lösung aus. Ich habe es noch etwas erweitert, dass die varhandenen Fertigungsaufträge ausgegeben werden und das erforderliche Fertigstellungsdatum abhängig von Kundenbedarf und Fertigungsauftragsmenge...

Es war mir nicht möglich, das ganze auf dem MySQL-Server zu lösen, sondern nur in dem Delphi-Programm...

Delphi-Quellcode:
procedure TTest3.LagerzugangClick(Sender: TObject);
var query, query1, query2 : string;
    Cols, Cols1, Cols2 : TCols;
    Rows, Rows1, Rows2 : TRows;
    i, j :integer;
begin
//Lagerbestand
query:= 'select sum(lslgbe)from oms14 '+
        'where watenr=10013054';
unit1.connect;
unit1.ExecQuery(DB, query, cols, Rows);
//======================================}
//Kundenbedarf
query1:= 'select watenr, ltbdmg, DATE_FORMAT(ltlite,'+#39+'%d.%m.%Y'+#39+'), ltbdmg*0 as kumuliert from omslp '+
          'where watenr=10013054 '+
          'order by ltlite';
unit1.ExecQuery(DB, query1, cols1, Rows1);
//======================================}
//Fertigungsaufträge
query2:= 'Select WAAUNR as FA_Nr, WATENR as ArtikelNr, TEBEZ1 as Bezeichnung, OAAGNR as AG, OAAGBZ as Arbeitsgang, '+
          'OAAGNR*0 as Lagerzugang, WAFEMG from as400 '+
          'where OATLKZ <> 9 and WATENR=10013054 '+
          'GROUP BY WATENR, WAAUNR '+
          'ORDER BY WATENR, OAAGNR DESC';
unit1.ExecQuery(DB, query2, cols2, Rows2);
//======================================}
//Lagerzugangsdatum
i:=0; j:=0;
rows1[3,i]:=inttostr(strtoint(rows[0,0])-strtoint(rows1[1,0]));
for i := 1 to length(rows1[0]) - 1 do
  begin
    rows1[3,i]:=inttostr(strtoint(rows1[3,i-1])-strtoint(rows1[1,i]));
    if (strtoint(rows1[3,i])<0) and (strtoint(rows1[3,i-1])>=0) then
      begin
            while (strtoint(rows1[3,i])<0) and (j<length(rows2[0])) do
              begin
                //Lieferdatum zu FA
                rows2[5,j]:=rows1[2,i];
                //Fertigungsmenge zu rows1[3,i] addieren
                rows1[3,i]:=inttostr(strtoint(rows1[3,i])+strtoint(rows2[6,j]));
                // j+1
                j:=j+1;
              end;
      end;
  end;
unit1.disconnect;
//======================================}
//Datenausgabe
unit1.FillGrid(StringGrid5, Cols2, Rows2);
end;
Das ist die ExecQuery:

Delphi-Quellcode:
function ExecQuery(const Datenbank, query: string; var Cols: TCols; var Rows: TRows): Boolean;
var
   MySQLRes: PMYSQL_RES;
   MySQLRow: PMYSQL_ROW;
   AffectedRows: Int64;
   ColCount: Cardinal;
   Field: PMYSQL_FIELD;
   i: Integer;
   j: Integer;
   ErrorCode: Integer;
begin
   // Datenbank auswählen
   ErrorCode := mysql_select_db(_mycon, PChar(Datenbank));
   if ErrorCode = 0 then
   begin
     // Query ausführen
     ErrorCode := mysql_real_query(_mycon, PChar(query), length(query));
     if ErrorCode = 0 then
     begin
       // Query speichern
       MySQLRes := mysql_store_result(_mycon);
       if Assigned(MySQLRes) then
       begin
         // zurückgelieferte Anzahl der Spalten
         ColCount := mysql_num_fields(MySQLRes);
         SetLength(Cols, ColCount);
         // Spalten-Array füllen
         for i := 0 to ColCount - 1 do
         begin
           Field := mysql_fetch_field_direct(MySQLRes, i);
           Cols[i] := Field.Name;
         end;
         // Anzahl der betroffenen Zeilen ermitteln
         AffectedRows := mysql_affected_rows(_mycon);
         SetLength(Rows, ColCount, AffectedRows);
         // neu ->
         // Zeilen-array füllen
         // alle Zeilen ...
         for j := 0 to AffectedRows - 1 do
         begin
           // ... werden eingelesen
           MySQLRow := mysql_fetch_row(MySQLRes);
           // alle Spalten ...
           for i := 0 to ColCount - 1 do
           begin
             // ... werden in Rows[] übertragen
             Rows[i, j] := MySQLRow[i];

           end;
         end;
         // gespeicherte Abfrage wieder freigeben
         {mysql_free_result(MySQLRes);}
       end
     end
   end;
   result := ErrorCode = 0;
end;
und das die Fillgrid:

Delphi-Quellcode:
procedure FillGrid(SG: TStringGrid; Cols: TCols; Rows: TRows);
var
  i, j: Integer;
begin
  SG.ColCount := 0;
  SG.RowCount := 0;
  if Assigned(Rows) then
  begin
    // Wir brauchen eine Zeile mehr für die Spaltenüberschriften
    SG.RowCount := length(Rows[0]) + 1;
    SG.ColCount := length(Cols);
    SG.FixedRows := 0;
    // Spaltenüberschriften in die erste Zeile schreiben
    for i := 0 to length(Cols) - 1 do
    begin
      SG.Cols[i].Add(Cols[i]);
      SG.Cells[i, 0] := Cols[i];
    end;
    // zwei-dimensionales Zeilen-Array in den Zellen ausgeben
    for i := 0 to length(Cols) - 1 do
    begin
      for j := 0 to length(Rows[0]) - 1 do
      begin
        SG.Cells[i, j + 1] := Rows[i, j];
      end;
    end;
  end;
end;
Patrick
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz