Files
LOVATO-plugin/frmUnit12.pas
2026-04-07 18:23:56 +02:00

1020 lines
31 KiB
ObjectPascal

unit frmUnit12;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ddPlugin_TLB, FireDAC.Comp.Client, FireDAC.Stan.Intf,
FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS,
FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Comp.DataSet,
JvExDBGrids, JvDBGrid, Vcl.Grids, Vcl.DBGrids, Data.DB, Vcl.StdCtrls;
const
tblRozpPrijStav = '[dbo].[_TabRozpadPrijStav]';
type
TfrmRozdelMat = class(TForm)
btnQuit: TButton;
dsRozpad: TDataSource;
tabRozpad: TFDMemTable;
btnPrevod: TButton;
dsRozpad2: TDataSource;
tabRozpad2: TFDMemTable;
gRozpad2: TJvDBGrid;
procedure FormShow (Sender: TObject);
procedure btnQuitClick (Sender: TObject);
procedure FormResize (Sender: TObject);
procedure gRozpad2KeyUp (Sender: TObject; var Key: Word; Shift: TShiftState);
procedure gRozpad2DrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure gRozpad2EditChange (Sender: TObject);
procedure gRozpad2MouseMove (Sender: TObject; Shift: TShiftState; X, Y: Integer);
private
function GetColumnIndexByFieldName (const grid: TJvDBGrid; const fieldName: string): integer;
function GetColumnByFieldName (const grid: TJvDBGrid; const fieldName: string): TColumn;
function GetVisibleColumnByIndex (const grid: TJvDBGrid; const idx: integer): TColumn;
procedure WMSyscommand (Var msg: TWmSysCommand); message WM_SYSCOMMAND;
procedure NactiUdaje;
// procedure DataDoTabulky;
procedure DataDoTabulky2;
// procedure OdectiDodani (celaTab: Boolean);
procedure OdectiDodani2 (celaTab: Boolean);
// procedure SirkySloupcu;
procedure SirkySloupcu2;
procedure VytvorRozpad2;
public
Helios: IHelios;
idDZ: integer; // id prijemky
idSS: Integer; // id stavu skladu
aIdDZ: WideString; // id vice prijemek
aIdSS: WideString; // id vice stavu skladu
end;
var
frmRozdelMat: TfrmRozdelMat;
vId, dId, vCol, vRow, iHintRec: Integer;
implementation
uses System.StrUtils, helUtils, myUtils;
{$R *.dfm}
procedure TfrmRozdelMat.WMSyscommand(var msg: TWmSysCommand);
begin
Case (msg.cmdtype and $FFF0) of
SC_MINIMIZE:
begin
msg.result := 0;
end;
SC_MAXIMIZE:
begin
Self.WindowState := wsMaximized;
msg.result := 0;
end;
SC_RESTORE:
begin
msg.result := 0;
end;
Else
inherited;
end;
end;
{
procedure TfrmRozdelMat.SirkySloupcu;
var idx: integer;
fName: string;
begin
idx:= 0;
while (idx<=vRozpad.VisibleColumnCount-1) do
begin
fName:= LeftStr(StringReplace(vRozpad.VisibleColumns[idx].Name,'vRozpad','',[rfReplaceAll]),4);
if (fName='Stav') or (fName='Preb') or (fName='Poza') or (fName='Doda') then
vRozpad.VisibleColumns[idx].Width:= 62;
Inc(idx);
end;
vRozpad.GetColumnByFieldName('CisloZbozi').Width:= 110;
vRozpad.GetColumnByFieldName('Mnozstvi').Width:= 60;
end;
}
procedure TfrmRozdelMat.SirkySloupcu2;
var idx: integer;
fName: string;
begin
idx:= 0;
while (idx<=gRozpad2.VisibleColCount-1) do
begin
fName:= LeftStr(StringReplace(GetVisibleColumnByIndex (gRozpad2, idx).FieldName,'vRozpad','',[rfReplaceAll]),4);
if (fName='Stav') or (fName='Preb') or (fName='Poza') or (fName='Doda') then
GetVisibleColumnByIndex (gRozpad2, idx).Width:= 62;
Inc(idx);
end;
GetColumnByFieldName (gRozpad2, 'CisloZbozi').Width:= 110;
GetColumnByFieldName (gRozpad2, 'Mnozstvi').Width:= 60;
end;
{
procedure TfrmRozdelMat.OdectiDodani (celaTab: Boolean);
var fName: string;
colNms: TArray<string>;
idx1, idx2: integer;
num: extended;
begin
SetLength(colNms,tabRozpad.FieldCount);
idx1:= 0;
idx2:= 0;
while (idx1<=tabRozpad.FieldCount-1) do
begin
fName:= tabRozpad.FieldDefs.Items[idx1].Name;
if Pos('Dodat',fName)>0 then
begin
colNms[idx2]:= fName;
Inc(idx2);
end;
Inc(idx1);
end;
idx1:= Length(colNms)-1;
while (idx1>=0) do
begin
if colNms[idx1]='' then
SetLength(colNms,Length(colNms)-1);
Dec(idx1);
end;
// Pocitej nad celou tabulkou, jinak jen nad vRozpad.DataController.FocusedRecordIndex
if (celaTab) then
begin
tabRozpad.First;
while not(tabRozpad.Eof) do
begin
num:= 0;
idx1:= 0;
while (idx1<=Length(colNms)-1) do
begin
num:= num + tabRozpad.FieldByName(colNms[idx1]).AsFloat;
Inc(idx1);
end;
tabRozpad.Edit;
tabRozpad.FieldByName('Zbytek').AsExtended:= tabRozpad.FieldByName('Mnozstvi').AsExtended - num;
tabRozpad.Post;
tabRozpad.Next;
end;
end
else
begin
num:= 0;
idx1:= 0;
while (idx1<=Length(colNms)-1) do
begin
num:= num + tabRozpad.FieldByName(colNms[idx1]).AsFloat;
Inc(idx1);
end;
tabRozpad.Edit;
tabRozpad.FieldByName('Zbytek').AsExtended:= tabRozpad.FieldByName('Mnozstvi').AsExtended - num;
tabRozpad.Post;
end;
vRozpad.DataController.Refresh;
end;
}
procedure TfrmRozdelMat.OdectiDodani2 (celaTab: Boolean);
var fName: string;
colNms: TArray<string>;
idx1, idx2: integer;
num: extended;
begin
SetLength(colNms, tabRozpad2.FieldCount);
idx1:= 0;
idx2:= 0;
while (idx1<=tabRozpad2.FieldCount-1) do
begin
fName:= tabRozpad.FieldDefs.Items[idx1].Name;
if Pos('Dodat',fName)>0 then
begin
colNms[idx2]:= fName;
Inc(idx2);
end;
Inc(idx1);
end;
idx1:= Length(colNms)-1;
while (idx1>=0) do
begin
if colNms[idx1]='' then
SetLength(colNms,Length(colNms)-1);
Dec(idx1);
end;
// Pocitej nad celou tabulkou, jinak jen nad vRozpad.DataController.FocusedRecordIndex
if (celaTab) then
begin
tabRozpad2.First;
while not(tabRozpad2.Eof) do
begin
num:= 0;
idx1:= 0;
while (idx1<=Length(colNms)-1) do
begin
num:= num + tabRozpad2.FieldByName(colNms[idx1]).AsFloat;
Inc(idx1);
end;
tabRozpad2.Edit;
tabRozpad2.FieldByName('Zbytek').AsExtended:= tabRozpad2.FieldByName('Mnozstvi').AsExtended - num;
tabRozpad2.Post;
tabRozpad2.Next;
end;
end
else
begin
num:= 0;
idx1:= 0;
while (idx1<=Length(colNms)-1) do
begin
num:= num + tabRozpad2.FieldByName(colNms[idx1]).AsFloat;
Inc(idx1);
end;
tabRozpad2.Edit;
tabRozpad2.FieldByName('Zbytek').AsExtended:= tabRozpad2.FieldByName('Mnozstvi').AsExtended - num;
tabRozpad2.Post;
end;
gRozpad2.DataSource.DataSet.Refresh;
end;
procedure TfrmRozdelMat.gRozpad2DrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var i: integer;
v: Extended;
fName: string;
begin
gRozpad2.Canvas.Font.Color:= clBlack;
gRozpad2.Canvas.Font.Style:= [];
if Odd(gRozpad2.DataSource.DataSet.RecNo) then
gRozpad2.Canvas.Brush.Color:= $00FFD2D2
else
gRozpad2.Brush.Color:= clWhite;
if (gdSelected in State) then
begin
// gRozpad2.Canvas.Brush.Color:= clHighlight;
// gRozpad2.Canvas.Font.Color:= clHighlightText;
gRozpad2.Canvas.Brush.Color:= $00FF9933;
gRozpad2.Canvas.Font.Color:= clWhite;
end;
{
else
begin
ACanvas
end;
}
fName:= Column.FieldName;
fName:= StringReplace(fName,'vRozpad','',[rfReplaceAll]);
i:= DataCol; // TcxGridDBTableView(Sender).GetColumnByFieldName(fName).Index;
SetLength(fName,Length(fName)-3);
if (fName='Dodat') then
begin
v:= Column.Field.AsExtended; // StrToFloat(VarToStr(AViewInfo.GridRecord.Values[i]));
if (v>0) then
begin
gRozpad2.Canvas.Font.Color:= clRed;
gRozpad2.Canvas.Font.Style:= [fsBold];
end;
end;
gRozpad2.DefaultDrawColumnCell (Rect, DataCol, Column, State);
end;
procedure TfrmRozdelMat.gRozpad2EditChange (Sender: TObject);
var i: Integer;
begin
i:= 0;
end;
{
procedure TfrmRozdelMat.vRozpadEditing (Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem; var AAllow: Boolean);
var fName: string;
begin
fName:= TcxGridDBTableView(Sender).Columns[AItem.Index].Name;
fName:= StringReplace(fName,'vRozpad','',[rfReplaceAll]);
SetLength(fName,Length(fName)-3);
if (fName='Dodat') then
AAllow:= true
else
AAllow:= false;
end;
}
procedure TfrmRozdelMat.gRozpad2KeyUp (Sender: TObject; var Key: Word; Shift: TShiftState);
var i: integer;
x, cName: string;
begin
if Key=VK_RETURN then
begin
vCol:= gRozpad2.Col;
i:= gRozpad2.Row;
cName:= StringReplace(gRozpad2.Columns.Items[vCol].FieldName ,'vRozpad','', [rfReplaceAll]);
tabRozpad2.RecNo:= gRozpad2.DataSource.DataSet.RecNo+1;
x:= tabRozpad2.FieldByName(cName).AsString;
tabRozpad2.Edit;
tabRozpad2.FieldByName(cName).AsFloat:= StrToFloat(x);
tabRozpad2.Post;
OdectiDodani2 (false);
gRozpad2.Row:= i;
gRozpad2.Col:= vCol;
end;
end;
procedure TfrmRozdelMat.gRozpad2MouseMove (Sender: TObject; Shift: TShiftState; X, Y: Integer);
var i: integer;
{
Site: TcxGridSite;
HitTest: TcxCustomGridHitTest;
Item: TcxCustomGridTableItem;
Rec: TcxCustomGridRecord;
}
sNewHint: string;
begin
{
i:= vRozpad.DataController.FocusedRecordIndex;
Site:= Sender as TcxGridSite;
HitTest:= Site.GridView.ViewInfo.GetHitTest(X, Y);
if HitTest is TcxGridRecordCellHitTest then
begin
Item:= TcxGridRecordCellHitTest(HitTest).Item;
Rec:= TcxGridRecordCellHitTest(HitTest).GridRecord;
if Item.Index= vRozpad.GetColumnByFieldName('Mnozstvi').Index then begin
sNewHint := 'New hint goes here';
if (gRozpad.Hint<>sNewHint) or (Rec.RecordIndex<>iHintRec) then
begin
iHintRec:= Rec.RecordIndex;
gRozpad.ShowHint:= false;
gRozpad.Hint:= sNewHint;
end
else
gRozpad.ShowHint:= true;
end
else begin
gRozpad.ShowHint:= false;
end;
end;
vRozpad.DataController.FocusedRecordIndex:= i;
}
end;
procedure TfrmRozdelMat.DataDoTabulky2;
var sql, fName: string;
flds: TArray<string>;
idx: integer;
begin
sql:= '';
idx:= 0;
SetLength(flds, gRozpad2.VisibleColCount);
while (idx<=gRozpad2.VisibleColCount-1) do
begin
fName:= StringReplace(GetVisibleColumnByIndex(gRozpad2, idx).FieldName, 'vRozpad','',[rfReplaceAll]);
flds[idx]:= StringReplace(GetVisibleColumnByIndex(gRozpad2, idx).FieldName, 'vRozpad','',[rfReplaceAll]);
sql:= sql + flds[idx] + ',';
Inc(idx);
end;
if (sql<>'') then
SetLength(sql,Length(sql)-1);
sql:= 'SELECT ' + sql + ' FROM ' + tblRozpPrijStav + ' WHERE Autor=SUSER_SNAME() ORDER BY CisloZbozi';
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
sql:= '';
while not(EOF) do
begin
idx:= 0;
tabRozpad2.Append;
while (idx<Length(flds)) do
begin
fName:= flds[idx];
tabRozpad2.FieldByName(fName).AsString:= VarToStr(FieldValues(idx));
// sql:= fName + ' = ' + VarToStr(FieldValues(idx)) + CRLF;
Inc(idx);
end;
tabRozpad2.FieldByName('Zbytek').AsExtended:= tabRozpad2.FieldByName('Mnozstvi').AsExtended;
tabRozpad2.Post;
Next;
end;
end;
tabRozpad2.First;
GetColumnByFieldName (gRozpad2, 'IdKmenZbozi').Visible:= false;
GetColumnByFieldName (gRozpad2, 'Mnozstvi').Visible:= false;
GetColumnByFieldName (gRozpad2, 'CisloZbozi').Title.Caption:= 'Č.zboží';
GetColumnByFieldName (gRozpad2, 'Zbytek').Title.Caption:= 'Zbývá';
end;
{
procedure TfrmRozdelMat.DataDoTabulky;
var sql, fName: string;
flds: TArray<string>;
idx: integer;
begin
sql:= '';
idx:= 0;
SetLength(flds,vRozpad.VisibleItemCount);
while (idx<=vRozpad.VisibleItemCount-1) do
begin
fName:= StringReplace(vRozpad.VisibleColumns[idx].Name,'vRozpad','',[rfReplaceAll]);
flds[idx]:= StringReplace(vRozpad.VisibleColumns[idx].Name,'vRozpad','',[rfReplaceAll]);
sql:= sql + flds[idx] + ',';
Inc(idx);
end;
if (sql<>'') then
SetLength(sql,Length(sql)-1);
sql:= 'SELECT ' + sql + ' FROM ' + tblRozpPrijStav + ' WHERE Autor=SUSER_SNAME() ORDER BY CisloZbozi';
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
sql:= '';
while not(EOF) do
begin
idx:= 0;
tabRozpad.Append;
while (idx<Length(flds)) do
begin
fName:= flds[idx];
tabRozpad.FieldByName(fName).AsString:= VarToStr(FieldValues(idx));
// sql:= fName + ' = ' + VarToStr(FieldValues(idx)) + CRLF;
Inc(idx);
end;
tabRozpad.FieldByName('Zbytek').AsExtended:= tabRozpad.FieldByName('Mnozstvi').AsExtended;
tabRozpad.Post;
Next;
end;
end;
tabRozpad.First;
vRozpad.GetColumnByFieldName('IdKmenZbozi').Visible:= false;
vRozpad.GetColumnByFieldName('Mnozstvi').Visible:= false;
vRozpad.GetColumnByFieldName('CisloZbozi').Caption:= 'Č.zboží';
vRozpad.GetColumnByFieldName('Zbytek').Caption:= 'Zbývá';
end;
}
procedure TfrmRozdelMat.NactiUdaje;
var sql, celkP, celkD, dodat, stred: string;
l_loop: integer;
chyba: boolean;
mn: Extended;
begin
chyba:= false;
sql:= '';
if (idDZ>0) then
aIdDZ:= IntToStr(idDZ);
if (idSS>0) then
aIdSS:= IntToStr(idSS);
sql:= 'IF OBJECT_ID(N' + QuotedStr(tblRozpPrijStav) + ') IS NOT NULL DROP TABLE ' + tblRozpPrijStav;
sql:= sql + CRLF + 'CREATE TABLE ' + tblRozpPrijStav + '(IdKmenZbozi INT NOT NULL, Mnozstvi NUMERIC(19,6)';
sql:= sql + ' NOT NULL DEFAULT 0.0, CisloZbozi NVARCHAR(33), Autor NVARCHAR(80) NOT NULL DEFAULT SUSER_SNAME(),';
sql:= sql + 'DatPorizeni DATETIME DEFAULT GETDATE(), Zbytek NUMERIC(19,6) DEFAULT 0.0 )';
Helios.ExecSQL(sql);
if (aIdDZ<>'') then
begin
sql:= 'INSERT ' + tblRozpPrijStav + ' (IdKmenZbozi,Mnozstvi,CisloZbozi)';
sql:= sql + ' SELECT DISTINCT(kz.id),SUM(pz.Mnozstvi),kz.CisloZbozi FROM ' + tblPZ + ' pz INNER JOIN ' + tblSS;
sql:= sql + ' ss ON (pz.IdZboSklad=ss.id) INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.id) WHERE';
sql:= sql + ' pz.IDDoklad IN (' + aIdDZ + ') GROUP BY kz.id,kz.CisloZbozi ORDER BY kz.id';
try
Helios.ExecSQL(sql);
except
chyba:= true;
end;
end;
if (aIdSS<>'') then
begin
sql:= 'INSERT ' + tblRozpPrijStav + ' (IdKmenZbozi,Mnozstvi,CisloZbozi)';
sql:= sql + ' SELECT DISTINCT(kz.id),SUM(ss.Mnozstvi),kz.CisloZbozi FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ;
sql:= sql + ' kz ON (ss.idKmenZbozi=kz.id) WHERE ss.id IN (' + aIdSS + ')';
sql:= sql + ' GROUP BY kz.id,kz.CisloZbozi ORDER BY kz.id';
try
Helios.ExecSQL(sql);
except
chyba:= true;
end;
end;
if not(chyba) then
begin
sql:= 'SELECT DISTINCT(RIGHT(vp.KmenoveStredisko,3)) FROM TabPrKVazby kv INNER JOIN TabPrikaz vp';
sql:= sql + ' ON (kv.IdPrikaz=vp.Id AND vp.StavPrikazu<=40) WHERE kv.mnoz_Nevydane>0 AND kv.nizsi IN';
sql:= sql + ' (SELECT IdKmenZbozi FROM ' + tblRozpPrijStav + ') ORDER BY RIGHT(vp.KmenoveStredisko,3)';
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
while (not(EOF) and not(chyba)) do
begin
stred:= VarToStr(FieldValues(0));
sql:= 'IF (COL_LENGTH(N' + QuotedStr(tblRozpPrijStav) + ',N' + QuotedStr('Stav' + stred);
sql:= sql + ') IS NULL) ALTER TABLE ' + tblRozpPrijStav + ' ADD Stav' + stred;
sql:= sql + ' NUMERIC(19,6) NOT NULL DEFAULT 0.0' + CRLF;
sql:= sql + 'IF (COL_LENGTH(N' + QuotedStr(tblRozpPrijStav) + ',N' + QuotedStr('Pozad' + stred);
sql:= sql + ') IS NULL) ALTER TABLE ' + tblRozpPrijStav + ' ADD Pozad' + stred;
sql:= sql + ' NUMERIC(19,6) NOT NULL DEFAULT 0.0' + CRLF;
try
Helios.ExecSQL(sql);
except
chyba:= true;
end;
if not(chyba) then
begin
sql:= sql + 'IF (COL_LENGTH(N' + QuotedStr(tblRozpPrijStav) + ',N' + QuotedStr('Prebyt' + stred);
sql:= sql + ') IS NULL) ALTER TABLE ' + tblRozpPrijStav + ' ADD Prebyt' + stred;
sql:= sql + ' AS ([Stav' + stred + ']-[Pozad' + stred + '])' + CRLF;
Helios.ExecSQL(sql);
sql:= sql + 'IF (COL_LENGTH(N' + QuotedStr(tblRozpPrijStav) + ',N' + QuotedStr('Dodat' + stred);
sql:= sql + ') IS NULL) ALTER TABLE ' + tblRozpPrijStav + ' ADD Dodat' + stred;
sql:= sql + ' AS (CASE WHEN [Pozad' + stred + ']-[Stav' + stred + ']<0 THEN 0 ELSE [Pozad' + stred;
sql:= sql + ']-[Stav' + stred + '] END)' + CRLF;
Helios.ExecSQL(sql);
sql:= 'SET NOCOUNT ON' + CRLF;
sql:= sql + 'DECLARE @idKZ INT,@MnS NUMERIC(19,6),@MnP NUMERIC(19,6),@Skl NVARCHAR(30)' + CRLF;
sql:= sql + 'DECLARE c CURSOR LOCAL FAST_FORWARD FOR SELECT IdKmenZbozi FROM ';
sql:= sql + tblRozpPrijStav + CRLF + 'OPEN c' + CRLF + 'WHILE (1=1) BEGIN FETCH NEXT FROM c INTO @idKZ' + CRLF;
sql:= sql + ' IF (@@FETCH_STATUS<>0) BREAK' + CRLF + 'SET @MnS=ISNULL((SELECT ISNULL(Mnozstvi,0) FROM ' + tblSS;
sql:= sql + ' WHERE IdKmenZbozi=@idKZ AND IDSklad';
if stred='200' then
sql:= sql + '=N' + QuotedStr('200')
else
sql:= sql + ' LIKE N' + QuotedStr('200%' + stred);
sql:= sql + '),0)' + CRLF;
sql:= sql + 'SET @MnP=ISNULL((SELECT ISNULL(SUM(kv.Mnoz_Nevydane),0) FROM ' + tblPrVaz + ' kv INNER JOIN' + tblPrikaz;
sql:= sql + ' vp ON (kv.IdPrikaz=vp.Id AND vp.StavPrikazu<=40) WHERE kv.Nizsi=@idKZ AND vp.KmenoveStredisko';
if stred='200' then
sql:= sql + '=N' + QuotedStr('200')
else
sql:= sql + ' LIKE N' + QuotedStr('200%' + stred);
sql:= sql + '),0)' + CRLF;
sql:= sql + 'UPDATE ' + tblRozpPrijStav + ' SET Stav' + stred + '=@MnS,Pozad' + stred;
sql:= sql + '=@MnP WHERE idKmenZbozi=@idKZ' + CRLF + 'END' + CRLF + 'CLOSE c' + CRLF + 'DEALLOCATE c';
try
Helios.ExecSQL(sql);
except
chyba:= true;
end;
end;
Next;
end;
// celkD:= 'IF (COL_LENGTH(N' + QuotedStr(tblRozpPrijStav) + ',N' + QuotedStr('CelkemDodat');
// celkD:= celkD + ') IS NULL) ALTER TABLE ' + tblRozpPrijStav + ' ADD CelkemDodat AS (';
// dodat:= 'IF (COL_LENGTH(N' + QuotedStr(tblRozpPrijStav) + ',N' + QuotedStr('Dodat' + stred);
// dodat:= dodat + ') IS NULL) ALTER TABLE ' + tblRozpPrijStav + ' ADD Dodat' + stred + ' AS (';
// celkem prebytek
// celkP:= 'IF (COL_LENGTH(N' + QuotedStr(tblRozpPrijStav) + ',N' + QuotedStr('CelkemPrebyt');
// celkP:= celkP + ') IS NULL) ALTER TABLE ' + tblRozpPrijStav + ' ADD CelkemPrebyt AS (';
// celkP:= celkP + 'CASE WHEN [Stav' + stred + ']-[Pozad' + stred + ']>0 THEN ([Stav' + stred + ']-';
// celkP:= celkP + '[Pozad' + stred + ']) ELSE 0 END + ';
// celkem dodat
// celkD:= celkD + 'CASE WHEN [Stav' + stred + ']-[Pozad' + stred + ']<0 THEN ABS([Stav' + stred + ']-';
// celkD:= celkD + '[Pozad' + stred + ']) ELSE 0 END + ';
// celkem Prebytek
mn:= 0;
sql:= 'SELECT [name] FROM sys.[columns] WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr(tblRozpPrijStav) + ')';
sql:= sql + ' AND [name] LIKE N' + QuotedStr('Prebyt%');
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
sql:= '[';
while not(EOF) do
begin
sql:= sql + VarToStr(FieldValues(0)) + ']+[';
Next;
end;
SetLength(sql,Length(sql)-2);
end;
celkP:= 'IF (COL_LENGTH(N' + QuotedStr(tblRozpPrijStav) + ',N' + QuotedStr('CelkemPrebyt');
celkP:= celkP + ') IS NULL) ALTER TABLE ' + tblRozpPrijStav + ' ADD CelkemPrebyt NUMERIC(19,6) DEFAULT 0.0';
Helios.ExecSQL(celkP);
sql:= 'UPDATE ' + tblRozpPrijStav + ' SET CelkemPrebyt=' + sql;
Helios.ExecSQL(sql);
// celkem Dodat
sql:= 'SELECT [name] FROM sys.[columns] WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr(tblRozpPrijStav) + ')';
sql:= sql + ' AND [name] LIKE N' + QuotedStr('Dodat%');
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
sql:= '[';
while not(EOF) do
begin
sql:= sql + VarToStr(FieldValues(0)) + ']+[';
Next;
end;
SetLength(sql,Length(sql)-2);
end;
celkD:= 'IF (COL_LENGTH(N' + QuotedStr(tblRozpPrijStav) + ',N' + QuotedStr('CelkemDodat');
celkD:= celkD + ') IS NULL) ALTER TABLE ' + tblRozpPrijStav + ' ADD CelkemDodat NUMERIC(19,6) DEFAULT 0.0';
Helios.ExecSQL(celkD);
sql:= 'UPDATE ' + tblRozpPrijStav + ' SET CelkemDodat=' + sql;
Helios.ExecSQL(sql);
end;
end;
end;
procedure TfrmRozdelMat.btnQuitClick (Sender: TObject);
begin
Close;
end;
procedure TfrmRozdelMat.FormResize (Sender: TObject);
var idx: integer;
w: integer;
begin
gRozpad2.BeginUpdate;
gRozpad2.Width:= Self.Width - 14;
gRozpad2.Height:= Self.Height - 90;
w:= gRozpad2.Width div gRozpad2.VisibleColCount;
idx:= 0;
while (idx<=gRozpad2.VisibleColCount-1) do
begin
GetVisibleColumnByIndex (gRozpad2, idx).Width:= w-1;
Inc (idx);
end;
btnQuit.Left:= Self.Width - btnQuit.Width - 40;
btnQuit.Top:= Self.Height - btnQuit.Height - 50;
btnPrevod.Left:= btnQuit.Left - 160;
btnPrevod.Top:= btnQuit.Top;
SirkySloupcu2;
gRozpad2.EndUpdate;
end;
function TfrmRozdelMat.GetVisibleColumnByIndex (const grid: TJvDBGrid; const idx: integer): TColumn;
var i, visIdx: integer;
begin
visIdx:= -1;
result:= nil;
for i:=0 to grid.Columns.Count-1 do
if (grid.Columns.Items[i].Visible) then
begin
Inc (visIdx);
if (visIdx=idx) then
begin
result:= grid.Columns.Items[i];
Break;
end;
end;
end;
function TfrmRozdelMat.GetColumnByFieldName (const grid: TJvDBGrid; const fieldName: string): TColumn;
var i: integer;
begin
result:= nil;
for i:=0 to grid.Columns.Count-1 do
begin
if (System.SysUtils.SameText(grid.Columns.Items[i].FieldName, fieldName)) then
begin
result:= grid.Columns.Items[i];
Break;
end;
end;
end;
function TfrmRozdelMat.GetColumnIndexByFieldName (const grid: TJvDBGrid; const fieldName: string): Integer;
var i: integer;
begin
result:= -1;
for i:=0 to grid.Columns.Count-1 do
if (System.SysUtils.SameText(grid.Columns.Items[i].FieldName, fieldName)) then
begin
result:= i;
Break;
end;
end;
procedure TfrmRozdelMat.VytvorRozpad2;
var sql, fName: string;
idx, cStr: integer;
begin
if (tabRozpad2.Active) then
if (tabRozpad2.RecordCount>0) then
tabRozpad2.EmptyDataSet;
if (tabRozpad2.Active) then
tabRozpad2.Close;
sql:= 'SELECT [name] FROM sys.[columns] WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr(tblRozpPrijStav) + ')';
sql:= sql + ' AND [name] LIKE N' + QuotedStr('Stav%');
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
tabRozpad2.FieldDefs.Clear;
First;
with tabRozpad.FieldDefs do
while not(EOF) do
begin
Add(VarToStr(FieldValues(0)),ftFloat,0,true);
Next;
end;
end;
sql:= 'SELECT [name] FROM sys.[columns] WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr(tblRozpPrijStav) + ')';
sql:= sql + ' AND [name] LIKE N' + QuotedStr('Pozad%');
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
with tabRozpad2.FieldDefs do
while not(EOF) do
begin
Add(VarToStr(FieldValues(0)),ftFloat,0,true);
Next;
end;
end;
sql:= 'SELECT [name] FROM sys.[columns] WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr(tblRozpPrijStav) + ')';
sql:= sql + ' AND [name] LIKE N' + QuotedStr('Prebyt%');
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
with tabRozpad2.FieldDefs do
while not(EOF) do
begin
Add(VarToStr(FieldValues(0)),ftFloat,0,true);
Next;
end;
end;
sql:= 'SELECT [name] FROM sys.[columns] WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr(tblRozpPrijStav) + ')';
sql:= sql + ' AND [name] LIKE N' + QuotedStr('Dodat%');
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
with tabRozpad2.FieldDefs do
while not(EOF) do
begin
Add(VarToStr(FieldValues(0)),ftFloat,0,true);
Next;
end;
end;
with tabRozpad2.FieldDefs do
begin
Add('IdKmenZbozi',ftInteger,0,true);
Add('CisloZbozi',ftString,33,true);
Add('Mnozstvi',ftFloat,0,true); // puvodni mnozstvi na vydejce/stavu skladu
Add('Zbytek',ftFloat,0,true); // zbytek po odecteni mnozstvi k dodani
Add('CelkemPrebyt',ftFloat,0,false);
end;
tabRozpad2.Open;
idx:= 0;
while (idx<=gRozpad2.Columns.Count-1) do
begin
gRozpad2.Columns.Items[idx].Width:= 60;
Inc(idx);
end;
idx:= 0;
GetColumnByFieldName(gRozpad2, 'CisloZbozi').Index:= idx;
Inc (idx);
GetColumnByFieldName(gRozpad2, 'Zbytek').Index:= idx;
Inc (idx);
sql:= 'SELECT [name] FROM sys.columns WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr('_TabRozpadPrijStav') + ') AND';
sql:= sql + ' [name] LIKE N' + QuotedStr('%200') + ' ORDER BY CASE LEFT([name],4) WHEN N''Stav'' THEN 1';
sql:= sql + ' WHEN N''Poza'' THEN 2 WHEN N''Preb'' THEN 3 WHEN N''Doda'' THEN 4 END';
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
while not(EOF) do
begin
GetColumnByFieldName(gRozpad2, VarToStr(FieldValues(0))).Index:= idx;
Inc (idx);
Next;
end;
end;
for cStr:=101 to 115 do
begin
sql:= 'SELECT [name] FROM sys.columns WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr('_TabRozpadPrijStav') + ') AND';
sql:= sql + ' [name] LIKE N' + QuotedStr('%' + IntToStr(cStr)) + ' ORDER BY CASE LEFT([name],4) WHEN N''Stav'' THEN 1';
sql:= sql + ' WHEN N''Poza'' THEN 2 WHEN N''Preb'' THEN 3 WHEN N''Doda'' THEN 4 END';
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
while not(EOF) do
begin
fName:= LeftStr(StringReplace(GetVisibleColumnByIndex (gRozpad2,idx).FieldName, 'vRozpad', '', [rfReplaceAll]), 5);
// fName:= LeftStr(StringReplace(vRozpad.VisibleColumns[idx].Name,'vRozpad','',[rfReplaceAll]),5);
GetVisibleColumnByIndex (gRozpad2, idx).ReadOnly:= (fName<>'Dodat');
GetColumnByFieldName(gRozpad2, VarToStr(FieldValues(0))).Index:= idx;
Inc (idx);
Next;
end;
end;
end;
end;
procedure TfrmRozdelMat.FormShow (Sender: TObject);
var sql, fName: string;
idx, cStr: integer;
begin
// cxSetResourceString(@scxGridGroupByBoxCaption,'Sem přetáhněte záhlaví sloupců, podle kterých chcete přehled seskupit.');
// cxSetResourceString(@scxGridGroupByBoxCaption,'');
if (idDZ>0) then
aIdDZ:= IntToStr (idDZ);
if (idSS>0) then
aIdSS:= IntToStr (idSS);
NactiUdaje;
{
if (tabRozpad.Active) then
if (tabRozpad.RecordCount>0) then
tabRozpad.EmptyDataSet;
if (tabRozpad.Active) then
tabRozpad.Close;
sql:= 'SELECT [name] FROM sys.[columns] WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr(tblRozpPrijStav) + ')';
sql:= sql + ' AND [name] LIKE N' + QuotedStr('Stav%');
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
tabRozpad.FieldDefs.Clear;
First;
with tabRozpad.FieldDefs do
while not(EOF) do
begin
Add(VarToStr(FieldValues(0)),ftFloat,0,true);
Next;
end;
end;
sql:= 'SELECT [name] FROM sys.[columns] WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr(tblRozpPrijStav) + ')';
sql:= sql + ' AND [name] LIKE N' + QuotedStr('Pozad%');
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
with tabRozpad.FieldDefs do
while not(EOF) do
begin
Add(VarToStr(FieldValues(0)),ftFloat,0,true);
Next;
end;
end;
sql:= 'SELECT [name] FROM sys.[columns] WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr(tblRozpPrijStav) + ')';
sql:= sql + ' AND [name] LIKE N' + QuotedStr('Prebyt%');
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
with tabRozpad.FieldDefs do
while not(EOF) do
begin
Add(VarToStr(FieldValues(0)),ftFloat,0,true);
Next;
end;
end;
sql:= 'SELECT [name] FROM sys.[columns] WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr(tblRozpPrijStav) + ')';
sql:= sql + ' AND [name] LIKE N' + QuotedStr('Dodat%');
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
with tabRozpad.FieldDefs do
while not(EOF) do
begin
Add(VarToStr(FieldValues(0)),ftFloat,0,true);
Next;
end;
end;
with tabRozpad.FieldDefs do
begin
Add('IdKmenZbozi',ftInteger,0,true);
Add('CisloZbozi',ftString,33,true);
Add('Mnozstvi',ftFloat,0,true); // puvodni mnozstvi na vydejce/stavu skladu
Add('Zbytek',ftFloat,0,true); // zbytek po odecteni mnozstvi k dodani
Add('CelkemPrebyt',ftFloat,0,false);
end;
tabRozpad.Open;
vRozpad.ClearItems;
vRozpad.DataController.CreateAllItems;
vRozpad.OptionsCustomize.ColumnFiltering:= false;
idx:= 0;
while (idx<=vRozpad.ColumnCount-1) do
begin
vRozpad.Columns[idx].Width:= 60;
Inc(idx);
end;
idx:= 0;
vRozpad.GetColumnByFieldName('CisloZbozi').Index:= idx;
Inc(idx);
vRozpad.GetColumnByFieldName('Zbytek').Index:= idx;
Inc(idx);
sql:= 'SELECT [name] FROM sys.columns WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr('_TabRozpadPrijStav') + ') AND';
sql:= sql + ' [name] LIKE N' + QuotedStr('%200') + ' ORDER BY CASE LEFT([name],4) WHEN N''Stav'' THEN 1';
sql:= sql + ' WHEN N''Poza'' THEN 2 WHEN N''Preb'' THEN 3 WHEN N''Doda'' THEN 4 END';
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
while not(EOF) do
begin
vRozpad.GetColumnByFieldName(VarToStr(FieldValues(0))).Index:= idx;
Inc(idx);
Next;
end;
end;
for cStr:=101 to 115 do
begin
sql:= 'SELECT [name] FROM sys.columns WHERE OBJECT_ID=OBJECT_ID(N' + QuotedStr('_TabRozpadPrijStav') + ') AND';
sql:= sql + ' [name] LIKE N' + QuotedStr('%' + IntToStr(cStr)) + ' ORDER BY CASE LEFT([name],4) WHEN N''Stav'' THEN 1';
sql:= sql + ' WHEN N''Poza'' THEN 2 WHEN N''Preb'' THEN 3 WHEN N''Doda'' THEN 4 END';
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
while not(EOF) do
begin
fName:= LeftStr(StringReplace(vRozpad.VisibleColumns[idx].Name,'vRozpad','',[rfReplaceAll]),5);
if (fName='Dodat') then
vRozpad.VisibleColumns[idx].Editing:= true;
vRozpad.GetColumnByFieldName(VarToStr(FieldValues(0))).Index:= idx;
Inc(idx);
Next;
end;
end;
end;
}
VytvorRozpad2;
DataDoTabulky2;
SirkySloupcu2;
Self.WindowState:= wsMaximized;
Resize;
OdectiDodani2 (True);
end;
end.