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

1790 lines
70 KiB
ObjectPascal

unit frmOdvedPrikaz;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Mask, RzEdit, RzBtnEdt, ddPlugin_TLB, Vcl.ComCtrls,
NxGrid6, NxCustomGrid6, NxColumns6, Vcl.Buttons, Vcl.Menus, RzDTP, NxGridView6, NxControls6, NxVirtualGrid6,
Vcl.WinXCtrls;
const
clYellowLight = $0078F8E8;
DesignTimePixelsPerInch = 120;
KLF_ACTIVATE = $00000001;
KLF_SETFORPROCESS = $00000100;
radaVPNadvyroba = '400';
radaVPRekl = '090';
radaVPVyroba = '100';
sklVyr = '200';
sklFin = '210';
sklObch = '100';
sklDP = '20000105'; // nadvyroba
bidHrOdvod = 100053;
bidFrontaPrace = 11109;
radaOdved = '220';
radaOdvedO = '150';
radaOdvedNad = '240';
rDoklVydMat = '400';
rDoklVydMatO = '350';
tblEvidOp = '[dbo].[_TabEvidOperaci_Barcode]';
tblEvidOpPol = '[dbo].[_TabEvidOpPolozky]';
tblEvidOpVPr = '[dbo].[_TabEvidOpPrikazy]';
tblEvidNadvyr = '[dbo].[_TabEvidNadvyroby]';
tblEvidNadPrij = '[dbo].[_TabEvidNadvyrPrijmy]';
tblEvidNadvyrVPr = '[dbo].[_TabEvidNadvyrPrikaz]';
errPlg = #13#10 + '(plgLOVATO.u10)';
sklVyroba = '200'; // přidáno 8.11.2018
type
TidVPs = record
id: integer;
radaPrikaz: string[20];
idKZ: integer;
ks: Extended;
end;
TOperace = record
idVP: integer;
doklad: integer;
operace: integer;
casS: extended;
ks: extended;
koef: extended;
end;
TcasKoef = record
operace: ShortString;
koef: extended;
end;
TformOdvedeniPrikazu = class(TForm)
selPrikaz: TRzButtonEdit;
lblDilec: TLabel;
Label2: TLabel;
Label3: TLabel;
lblZadane: TLabel;
lblZive: TLabel;
selBarCode: TRzButtonEdit;
edtKusu: TRzNumericEdit;
Label1: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
edtCasMin: TRzNumericEdit;
selZamest: TRzButtonEdit;
lblZamest: TLabel;
cbCasMzda: TCheckBox;
edtCasHod: TRzNumericEdit;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
lblEvid: TLabel;
GroupBox2: TGroupBox;
selDilec: TRzButtonEdit;
Label10: TLabel;
selSmena: TRzButtonEdit;
gOperace: TNextGrid6;
colOper: TNxNumberColumn6;
colPopis: TNxTextColumn6;
colEvid: TNxCheckBoxColumn6;
btnSave: TBitBtn;
btnCancel: TBitBtn;
pOperace: TPopupMenu;
pOdznacVse: TMenuItem;
pVyberVse: TMenuItem;
Label11: TLabel;
Label12: TLabel;
colIdPostup: TNxNumberColumn6;
colNormCasS: TNxNumberColumn6;
Label13: TLabel;
cbSklad: TComboBox;
dtDatum: TRzDateTimePicker;
grpTampo: TGroupBox;
grpNadvyroba: TGroupBox;
Label14: TLabel;
selVydejMat: TRzButtonEdit;
Label15: TLabel;
selFronta: TRzButtonEdit;
gView: TNxReportGridView6;
procedure selPrikazButtonClick(Sender: TObject);
procedure selBarCodeKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormShow(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure selZamestButtonClick(Sender: TObject);
procedure selZamestKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure edtCasMinKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure selZamestExit(Sender: TObject);
procedure Label6MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure edtCasHodKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure selDilecButtonClick(Sender: TObject);
procedure selDilecKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure selDilecExit(Sender: TObject);
procedure edtKusuExit(Sender: TObject);
procedure edtKusuKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure pOdznacVseClick(Sender: TObject);
procedure pVyberVseClick(Sender: TObject);
procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure selDilecKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure selVydejMatButtonClick(Sender: TObject);
procedure selVydejMatExit(Sender: TObject);
procedure selPrikazExit(Sender: TObject);
procedure selBarCodeExit(Sender: TObject);
procedure selFrontaExit(Sender: TObject);
procedure selFrontaButtonClick(Sender: TObject);
procedure selPrikazKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormResize(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure selZamestEnter(Sender: TObject);
procedure edtKusuEnter(Sender: TObject);
procedure selDilecEnter(Sender: TObject);
procedure ZadejVyrPrikazNaVydejku(const Helios: IHelios; idVPr: Integer; MnozstviNaVydejku: double); // přidáno 8.11.2018
procedure UlozChybu(const Helios: IHelios; msg: string; E:Exception); // přidáno 8.11.2018
private
// procedure WMNCLBUTTONDOWN(var msg: TMessage); message WM_NCLBUTTONDOWN;
function TestFormulareOK: Boolean;
function VlastniSkladySQL(const datum: string): string;
procedure VyplnPrikaz;
procedure VyplnDleDilce;
procedure VyplnFrontuPrace;
procedure NastavGrid;
public
Helios: IHelios;
typOdvodu: byte;
jeTest: boolean;
end;
var
verText: string;
formOdvedeniPrikazu: TformOdvedeniPrikazu;
idPrikaz, idKZ, idDZ, idPZ, idVydej, idNadvyr, idPrPostup: integer;
sklProOdvod, dokl, kmen, cZam, idZam, operaceFP: string;
vOle1,vOle2: OleVariant;
casTPVs,casTPVm: Extended;
canCont, nadvyroba: boolean;
layName: array[0..KL_NAMELENGTH+1] of Char;
implementation
uses Vcl.Clipbrd, System.StrUtils, System.Threading, helUtils, myUtils;
{$R *.dfm}
{
procedure TformOdvedeniPrikazu.WMNCLBUTTONDOWN(var msg: TMessage);
var txt: string;
begin
if (msg.WParam=HTCAPTION) and (HiWord(GetKeyState(VK_SHIFT))<>0) then
begin
txt:= 'Scr ' + IntToStr(Screen.Width) + ' w / ' + IntToStr(Screen.Height) + ' h' + CRLF;
txt:= txt + 'Frm ' + IntToStr(Self.Width) + ' w / ' + IntToStr(Self.Height) + ' h' + CRLF;
txt:= txt + IntToStr(Screen.PixelsPerInch) + ' PPI mon / ' + IntToStr(Self.PixelsPerInch) + ' PPI frm' + CRLF;
Helios.Info(txt);
end;
end;
}
function TformOdvedeniPrikazu.VlastniSkladySQL(const datum: string): string;
var sql: string;
begin
result:= 'N' + QuotedStr('');
sql:= 'DECLARE @dt DATETIME; DECLARE @i INT;';
if (datum<>'') then
sql:= sql + ' SET @dt=CONVERT(datetime,N' + QuotedStr(datum) + ',104); EXEC @i=dbo.hp_GetObdobiDleDatumu @Datum=@dt, @JakyDatum=1'
else
sql:= sql + ' SET @i=' + IntToStr(Helios.Obdobi);
sql:= sql + '; SELECT s.Cislo FROM ' + tblStrom + ' s INNER JOIN dbo.TabStromDef d ON (d.IdStrom=s.Id) WHERE d.Blokovano=0 AND d.Zakazano=0';
sql:= sql + ' AND s.Cislo LIKE N' + QuotedStr('2%') + ' AND s.Nazev LIKE N' + QuotedStr('%LOV') + ' AND d.IdObdobi=@i ORDER BY s.Cislo';
with Helios.OpenSQL(sql) do
if (RecordCount>0) then
begin
First;
result:= '';
while not(EOF) do
begin
result:= result + 'N' + QuotedStr(FieldValues(0)) + ',';
Next;
end;
if (RightStr(result,1)=',') then
result:= LeftStr(Result, Length(Result)-1);
end;
end;
procedure TformOdvedeniPrikazu.NastavGrid;
begin
// gOperace.HeaderSize:= Screen.PixelsPerInch
if (gOperace.RowCount<1) then
gOperace.ClearRows;
gOperace.Width:= Self.Width - 30;
gOperace.Height:= btnSave.Top - gOperace.Top - 10;
gOperace.Left:= 10;
gOperace.RowHeight:= 24;
// gOperace.RowSize:= 24;
gOperace.Columns.Item[0].Width:= Round(gOperace.Width*0.12);
gOperace.Columns.Item[1].Width:= Round(gOperace.Width*0.12);
gOperace.Columns.Item[2].Width:= gOperace.Width - gOperace.Columns.Item[0].Width - gOperace.Columns.Item[1].Width - 20;
btnSave.Top:= Self.Height - 2*btnSave.Height - Round(Self.Height*0.03);
btnCancel.Top:= btnSave.Top;
end;
procedure TformOdvedeniPrikazu.pOdznacVseClick(Sender: TObject);
var i: Integer;
begin
for i:=0 to gOperace.RowCount-1 do
gOperace.Cell[1,i].AsBoolean:= false;
end;
function TformOdvedeniPrikazu.TestFormulareOK;
var lSQL: string;
begin
result:= false;
if (Pos('%',selDilec.Text)>0) and (typOdvodu=2) then
Exit;
result:= true;
if (edtKusu.Value<=0) or (edtKusu.Value>StrToFloat(lblZive.Caption)) then
begin
Helios.Error(#1'Chybné množství odváděných kusů.'#1);
edtKusu.SetFocus;
result:= false;
end;
if (idVydej>0) and (result) then
begin
lSQL:= 'SELECT id FROM ' + tblEvidNadvyr + ' WHERE IdVydejkaMat=' + IntToStr(idVydej) + ' AND Mnozstvi<Zaevidovano+';
lSQL:= lSQL + StringReplace(FloatToStr(edtKusu.Value),',','.',[rfReplaceAll]);
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
Helios.Error(#1'Zadané množství by přesáhlo množství zbývající (objednáno-zaevidováno).'#1);
edtKusu.Value:= 0;
edtKusu.SetFocus;
result:= false;
end;
end;
{
if (edtCasHod.Value<0) then
begin
Helios.Error(#1'Chybný evidovaný čas (v hodinách).'#1);
result:= false;
end;
if (edtCasMin.Value<0) then
begin
Helios.Error(#1'Chybný evidovaný čas (v minutách).'#1);
result:= false;
end;
if (edtCasHod.Value<=0) and (edtCasMin.Value<=0) and (not nadvyroba) then
begin
Helios.Error(#1'Chybný evidovaný čas.'#1);
result:= false;
end;
}
if ((idZam='') or (idZam='0')) and (result) then
begin
Helios.Error(#1'Nebyl vybrán zaměstnanec.'#1);
result:= false;
end;
{
if (nadvyroba) then
begin
Helios.Error(#1'Nebyla vybrána materiálový výdejka ("Objednávka nadvýroby").'#1);
result:= false;
end;
}
end;
procedure TformOdvedeniPrikazu.VyplnFrontuPrace;
var lSQL: string;
r: integer;
begin
if (idPrPostup>0) then
begin
gOperace.RowCount:= gOperace.RowCount + 1;
r:= gOperace.RowCount-1;
with Helios.OpenSQL('SELECT Operace,Nazev FROM ' + tblPrPost + ' WHERE id=' + IntToStr(idPrPostup)) do
if (gOperace.Cells[3,r]<>IntToStr(idPrPostup)) then
begin
gOperace.Cell[0,r].AsString:= VarToStr(FieldValues(0));
gOperace.Cell[1,r].AsBoolean:= true;
gOperace.Cell[2,r].AsString:= VarToStr(FieldValues(1));
gOperace.Cell[3,r].AsInteger:= idPrPostup;
end;
end;
end;
procedure TformOdvedeniPrikazu.VyplnPrikaz;
var lSQL, podm: string;
begin
selPrikaz.Text:= Trim(selPrikaz.Text);
selPrikaz.Text:= StringReplace(selPrikaz.Text,' ','',[rfReplaceAll]);
if (selPrikaz.Text<>'') then
begin
podm:= 'p.Rada=N' + QuotedStr(LeftStr(selPrikaz.Text, Pos('-', selPrikaz.Text)-1));
podm:= podm + ' AND p.Prikaz=' + MidStr(selPrikaz.Text,Pos('-', selPrikaz.Text)+1,255);
lSQL:= 'SELECT kz.SkupZbo,kz.RegCis,kz.Nazev1,p.kusy_zad,p.kusy_zive,p.kusy_odved,kz.id,pp.Doklad FROM ' + tblPrikaz + ' p INNER JOIN ';
lSQL:= lSQL + tblKZ + ' kz ON (p.IdTabKmen=kz.id) INNER JOIN ' + tblPrPost + ' pp ON (p.id=pp.IDPrikaz AND pp.Odvadeci=1)';
lSQL:= lSQL + ' WHERE ' + podm;
with Helios.OpenSQL(lSQL) do
if (RecordCount=1) then
begin
lblDilec.Caption:= VarToStr(FieldValues(0)) + ' ' + VarToStr(FieldValues(1)) + ' ' + VarToStr(FieldValues(2));
lblZadane.Caption:= VarToStr(FieldValues(3));
lblZive.Caption:= VarToStr(FieldValues(4));
if (lblZive.Caption='0') then
lblZive.Font.Color:= clRed
else
lblZive.Font.Color:= clWindowText;
lblEvid.Caption:= VarToStr(FieldValues(5));
idKZ:= StrToInt(VarToStr(FieldValues(6)));
dokl:= VarToStr(FieldValues(7));
with Helios.OpenSQL('SELECT VychoziSklad FROM ' + tblParKZ + ' WHERE IdKmenZbozi=' + IntToStr(idKZ)) do
if (RecordCount>0) then
sklProOdvod:= VarToStr(FieldValues(0));
end;
if (idPrikaz>0) then
begin
if (selBarCode.Text='') then
begin
with Helios.OpenSQL('SELECT TOP(1) BarCode FROM ' + tblPrPost + ' WHERE idPrikaz=' + IntToStr(idPrikaz) + ' AND Odvadeci=1') do
if RecordCount>0 then
selBarCode.Text:= VarToStr(FieldValues(0));
selZamest.SetFocus;
end;
with Helios.OpenSQL('SELECT ISNULL(SUM(TAC_S),0),ISNULL(SUM(TAC_N),0) FROM ' + tblPrPost + ' WHERE IdPrikaz=' + IntToStr(idPrikaz)) do
if (RecordCount>0) then
begin
casTPVs:= RoundToEX(StrToFloat(VarToStr(FieldValues(0))),-1);
casTPVm:= RoundToEX(StrToFloat(VarToStr(FieldValues(1))),-1);
with Helios.OpenSQL('SELECT id,Operace,nazev,TAC_Obsluhy_S FROM ' + tblPrPost + ' WHERE IdPrikaz=' + IntToStr(idPrikaz)) do
begin
First;
gOperace.ClearRows;
while not(EOF) do
begin
gOperace.AddRow;
gOperace.Cell[0,gOperace.RowCount-1].AsString:= VarToStr(FieldValues(1));
gOperace.Cell[1,gOperace.RowCount-1].AsBoolean:= true;
gOperace.Cell[2,gOperace.RowCount-1].AsString:= VarToStr(FieldValues(2));
gOperace.Cell[3,gOperace.RowCount-1].AsInteger:= StrToInt(VarToStr(FieldValues(0)));
gOperace.Cell[4,gOperace.RowCount-1].AsFloat:= StrToFloat(VarToStr(FieldValues(3)));
Next;
end;
end;
end;
end;
end;
end;
procedure TformOdvedeniPrikazu.btnSaveClick(Sender: TObject);
var lSQL, podm, SQLko: string;
idx, idx2, idx3, idDZshift, idPMZ, idDZV, idDZP,idKJ,idxTPV,idOdv: integer;
GidSS,Gdokl,lDokl,sTemp: string;
GidKZ,idPrKVaz: integer;
mnoz, mnReal, kszbyt, kszive, VPcas, Pcas, NormCasAll, SkCas, koef: Extended;
genVO, realVyd, realPrij, cont: boolean;
ks, ks2, dt, smena, regC, radaVPr, sklOdv, sklMat, rOdv, rPri, rPrik: string;
idVPs: TArray<TidVPs>;
operace: TArray<TOperace>;
casKoef: TArray<TcasKoef>;
tblOdv, tblOdvPr, tblOdvOp: string;
idVPr: integer; // přidáno 8.11.2018
MnozzstviOdvadene: double; // přidáno 8.11.2018
begin
ReseedTable(Helios, tblMzdZm);
ReseedTable(Helios, tblDZ);
ReseedTable(Helios, tblPZ);
ReseedTable(Helios, tblEvidOp);
ReseedTable(Helios, tblEvidOpPol);
ReseedTable(Helios, tblEvidOpVPr);
ReseedTable(Helios, tblEvidNadPrij);
genVO:= false;
tblOdv:= 'dbo._TabNTSEvidOpBC';
tblOdvPr:= 'dbo._TabNTSOdvodPrikazu';
tblOdvOp:= 'dbo._TabNTSOdvodOperaci';
Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr(tblOdv) + ') IS NOT NULL DROP TABLE ' + tblOdv);
Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr(tblOdvPr) + ') IS NOT NULL DROP TABLE ' + tblOdvPr);
Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr(tblOdvOp) + ') IS NOT NULL DROP TABLE ' + tblOdvOp);
if not(jeTest) then // pokud je test, udelej tabulky typu dbo._TabNTS.....
begin
tblOdv:= StringReplace(tblOdv,'dbo._','#',[rfReplaceAll]);
tblOdvPr:= StringReplace(tblOdvPr,'dbo._','#',[rfReplaceAll]);
tblOdvOp:= StringReplace(tblOdvOp,'dbo._','#',[rfReplaceAll]);
end;
if (TestFormulareOK) then
begin
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - klik OK uloz'));
edtKusu.Color:= clWindow;
lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabExtKom') + ',N' + QuotedStr('U') + ') IS NULL' + CRLF;
lSQL:= lSQL + 'CREATE TABLE #TabExtKom(Poznamka NVARCHAR(250) NOT NULL)';
try
Helios.ExecSQL(lSQL);
except
end;
lSQL:= 'IF OBJECT_ID(N' + QuotedStr(IfThen(jeTest,tblOdv, 'tempdb..' + tblOdv)) + ') IS NOT NULL DROP TABLE ' + tblOdv + CRLF;
lSQL:= lSQL + 'CREATE TABLE ' + tblOdv + ' (IdPrikaz INT, IdKmenZbozi INT, CisloZbozi NVARCHAR(33),';
lSQL:= lSQL + 'Datum DATETIME, Mnozstvi NUMERIC(19,6), CisloZamest INT, CasHod NUMERIC(9,4), CasMin NUMERIC(9,4),';
lSQL:= lSQL + 'IdNadvyroba INT NULL, Poznamka NTEXT, Sklad NVARCHAR(30) NOT NULL, IDUziv INT NOT NULL, IdVydejMat INT)';
Helios.ExecSQL(lSQL);
lSQL:= 'IF OBJECT_ID(N' + QuotedStr(IfThen(jeTest,tblOdvPr,'tempdb..' + tblOdvPr)) + ') IS NOT NULL DROP TABLE ' + tblOdvPr + CRLF;
lSQL:= lSQL + 'CREATE TABLE ' + tblOdvPr + ' (idPrikaz INT, RadaPrikaz NVARCHAR(20), idKmenZbozi INT, Datum DATETIME DEFAULT GETDATE(),';
lSQL:= lSQL + 'Mnozstvi NUMERIC(19,6) DEFAULT 0, CisloZamest INT, CasHod TINYINT, CasMin TINYINT, SkladOdv NVARCHAR(30), SkladMat NVARCHAR(30))';
Helios.ExecSQL(lSQL);
lSQL:= 'IF OBJECT_ID(N' + QuotedStr(IfThen(jeTest,tblOdvOp,'tempdb..' + tblOdvOp)) + ') IS NOT NULL DROP TABLE ' + tblOdvOp + CRLF;
lSQL:= lSQL + 'CREATE TABLE ' + tblOdvOp + ' (Operace NVARCHAR(4), idPostup INT NOT NULL, IDPrikaz INT NULL, Mnozstvi NUMERIC(19,6), NormCasS NUMERIC(10,2))';
Helios.ExecSQL(lSQL);
if (LeftStr(selPrikaz.Text,3)='010') then
//cbSklad.ItemIndex:= GetItemIndexStartingWith(cbSklad,'100');
cbSklad.ItemIndex:= 3;//GetItemIndexStartingWith(cbSklad,'100'); //upraveno 26.6.2018
sklProOdvod:= StringReplace(cbSklad.Text,'.','',[rfReplaceAll]);
if (nadvyroba) then
sklProOdvod:= sklFin;
regC:= '';
idOdv:= 0;
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - info o porizene evidenci'));
// ReseedTable(Helios, tblEvidOp);
lSQL:= 'INSERT ' + tblOdv + ' (IdPrikaz,IdKmenZbozi,CisloZbozi,Datum,Mnozstvi,CisloZamest,CasHod,CasMin,Sklad';
lSQL:= lSQL + ',IdNadvyroba,Poznamka,IDUziv,IdVydejMat) VALUES (';
if (selPrikaz.Text<>'') then
lSQL:= lSQL + IntToStr(idPrikaz)
else
lSQL:= lSQL + 'NULL';
lSQL:= lSQL + ',';
if (selDilec.Text<>'') or (idPrikaz>0) then
begin
lSQL:= lSQL + IntToStr(idKZ);
with Helios.OpenSQL('SELECT CisloZbozi FROM ' + tblKZ + ' WHERE id=' + IntToStr(idKZ)) do
if (RecordCount>0) and not VarIsNull(FieldValues(0)) then
begin
lSQL:= lSQL + ',N' + QuotedStr(VarToStr(FieldValues(0)));
regC:= VarToStr(FieldValues(0));
end
else
lSQL:= lSQL + ',NULL'
end
else
lSQL:= lSQL + 'NULL,NULL';
podm:= DateToStr(dtDatum.Date) + ' ' + TimeToStr(Now);
lSQL:= lSQL + ',CONVERT(datetime,N' + QuotedStr(podm) + ',104),';
lSQL:= lSQL + StringReplace(FloatToStr(edtKusu.Value),',','.',[rfReplaceAll]) + ',' + selZamest.Text + ',';
lSQL:= lSQL + StringReplace(IfThen(edtCasHod.Text<>'',edtCasHod.Text,'0'),',','.',[rfReplaceAll]) + ',';
lSQL:= lSQL + StringReplace(IfThen(edtCasMin.Text<>'',edtCasMin.Text,'0'),',','.',[rfReplaceAll]) + ',N';
lSQL:= lSQL + QuotedStr(sklProOdvod) + ',';
if (nadvyroba) then
lSQL:= lSQL + IntToStr(idNadvyr)
else
lSQL:= lSQL + 'NULL';
lSQL:= lSQL + ',N' + QuotedStr('') + ',' + IntToStr(Helios.UserId) + ',' + IntToStr(idVydej) + ')'; // QuotedStr(verText)
try
Helios.ExecSQL(lSQL)
except on E:Exception do
begin
Helios.Error(#1'Informace - nelze uložit údaj o pořizované evidenci.'#1 + CRLF + errPlg + CRLF + E.Message + CRLF + lSQL);
Exit;
end;
end;
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - zapis operaci'));
// zapis operaci do nove tabulky
podm:= StringReplace(FloatToStr(edtKusu.Value),',','.',[rfReplaceAll]); // evidovane kusy
for idx:=0 to gOperace.RowCount-1 do
try
if (gOperace.Cell[1,idx].AsBoolean=true) then
begin
lSQL:= 'INSERT ' + tblOdvOp + ' (Operace, idPostup, Mnozstvi, NormCasS) VALUES (N';
lSQL:= lSQL + QuotedStr(gOperace.Cell[0,idx].AsString) + ',';
lSQL:= lSQL + gOperace.Cell[3,idx].AsString + ',' + podm + ',';
lSQL:= lSQL + StringReplace(FloatToStr(gOperace.Cell[4,idx].AsFloat*edtKusu.Value),',','.',[rfReplaceAll]) + ')';
Helios.ExecSQL(lSQL);
end;
except on E:Exception do
begin
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - chyba insertu operaci: ' + E.Message));
Helios.Error(#1'CHYBA: '#1 + E.Message + CRLF + lSQL);
Exit;
end;
end;
Helios.ExecSQL('MERGE ' + tblOdvOp + ' AS T USING dbo.TabPrPostup AS S ON (S.ID=T.IdPostup) WHEN MATCHED THEN UPDATE SET T.IdPrikaz=S.IdPrikaz;');
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - nacitani udaju o prikazech'));
// ziskej data o prikazu/prikazech
SetLength(idVPs,1);
if (idPrikaz>0) then
begin
idVPs[0].id:= idPrikaz;
with Helios.OpenSQL('SELECT RadaPrikaz FROM ' + tblPrikaz + ' WHERE id=' + IntToStr(idPrikaz)) do
idVPs[0].radaPrikaz:= VarToStr(FieldValues(0));
idVPs[0].idKZ:= idKZ;
idVPs[0].ks:= edtKusu.Value;
end
else
begin
lSQL:= 'SELECT id, kusy_zive, IDTabKmen, RadaPrikaz FROM ' + tblPrikaz + ' WHERE kusy_zive>0 AND StavPrikazu IN (30,40) AND ';
if (nadvyroba) then
lSQL:= lSQL + 'Rada IN (N' + QuotedStr('400') + ',N' + QuotedStr(radaVPVyroba) + ') AND KmenoveStredisko=N' + QuotedStr(sklDP)
else
lSQL:= lSQL + 'Rada IN (N' + QuotedStr(radaVPRekl) + ',N' + QuotedStr(radaVPVyroba) + ')';
lSQL:= lSQL + ' AND IDTabKmen=' + IntTOStr(idKZ) + ' ORDER BY Rada DESC,Plan_ukonceni'; // RadaPrikaz
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
SetLength(idVPs,RecordCount);
idx:= 0;
ksZbyt:= edtKusu.Value;
First;
while (not(EOF)) and (kszbyt>0) do
begin
ksZive:= StrToFloat(VarToStr(FieldValues(1)));
if (ksZive>=kszbyt) then
begin
ksZive:= kszbyt;
ksZbyt:= 0;
end;
if (ksZive>0) then
begin
idVPs[idx].id:= StrToInt(VarToStr(FieldValues(0)));
idVPs[idx].radaPrikaz:= VarToStr(FieldValues(3));
idVPs[idx].ks:= ksZive;
idVPs[idx].idKZ:= StrToInt(VarToStr(FieldValues(2)));
ksZbyt:= ksZbyt - ksZive;
end;
Inc(idx);
Next;
end;
end;
end;
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - prikazy do pomocne tabulky'));
// zapis prikazy do pracovni tabulky
for idx:=Low(idVPs) to High(idVPs) do
begin
idPrikaz:= idVPs[idx].id;
if (idPrikaz=0) then
Continue;
with Helios.OpenSQL('SELECT Rada FROM dbo.TabPrikaz WHERE Id=' + IntToStr(idPrikaz)) do
radaVPr:= VarToStr(FieldValues(0));
sklOdv:= '';
ks:= StringReplace(FloatToStr(idVPs[idx].ks),',','.',[rfReplaceAll]);
if (radaVPr='010') then
begin
if (sklOdv='') then
sklOdv:= sklObch;
end
else
begin
if (sklOdv='') then
sklOdv:= sklVyr;
end;
if (nadvyroba) then
sklOdv:= sklFin;
{
lSQL:= 'SELECT ISNULL(PrijemVyrDil_SkladProGenHlavDZ,N'''') /*, ISNULL(VydejMatPol_SkladProGenHlavDZ,N'''')*/ FROM dbo.TabRadyPrikazu';
lSQL:= lSQL + ' WHERE Rada=N' + QuotedStr(radaVPr);
with Helios.OpenSQL(lSQL) do
if (VarToStr(FieldValues(0))<>'') then
sklOdv:= VarToStr(FieldValues(0));
}
lSQL:= 'INSERT ' + tblOdvPr + ' (IdPrikaz,RadaPrikaz,IdKmenZbozi,Mnozstvi,Datum,CisloZamest,CasHod,CasMin,SkladOdv) SELECT ';
lSQL:= lSQL + IntToStr(idPrikaz) + ',N' + QuotedStr(idVPs[idx].radaPrikaz) + ',' + IntToStr(idKZ) + ',' + StringReplace(ks,',','.',[rfReplaceAll]);
lSQL:= lSQL + ',CONVERT(datetime,N' + QuotedStr(DateToStr(dtDatum.Date)) + ',104),' + IfThen(selZamest.Text<>'', Trim(selZamest.Text) ,'NULL');
lSQL:= lSQL + ',0,0,N' + QuotedStr(sklOdv);
Helios.ExecSQL(lSQL);
end;
if not(jeTest) then
begin
try
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - start procedury ep_NTS_plgOdvedeniPrikazu'));
Helios.ExecSQL('EXEC dbo.ep_NTS_plgOdvedeniPrikazu');
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - konec procedury ep_NTS_plgOdvedeniPrikazu'));
with Helios.OpenSQL('SELECT * FROM #TabExtKom') do
if (RecordCount>0) then begin
Helios.OpenBrowse(541,'');
exit;
end;
//přidáno 8.11.2018
SQLko := 'Select IdPrikaz,Mnozstvi/*,RadaPrikaz,IdKmenZbozi,Datum,CisloZamest,CasHod,CasMin,SkladOdv*/ from ' + tblOdvPr ;
with Helios.OpenSQL(SQLko) do begin
if (RecordCount>0) then
begin
First;
while (not(EOF)) do
begin
idVPr:= FieldValues(0) ;
MnozzstviOdvadene:= FieldValues(1) ;
ZadejVyrPrikazNaVydejku(Helios, idVPr, MnozzstviOdvadene);
//Helios.Info(idVPr.tostring);
Next;
end;
end;
// Helios.Info(recordcount.ToString)
end;
// Helios.Info('Dnešní verze 8.11.2018');
//konec přidání 8.11.2018
with Helios.OpenSQL('SELECT * FROM #TabExtKom') do
if (RecordCount>0) then Helios.OpenBrowse(541,'');
except on E:Exception do
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - chyba pri spusteni procedury dbo.ep_NTS_plgOdvedeniPrikazu: ' + E.Message));
end;
end
else
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - test, procedura dbo.ep_NTS_plgOdvedeniPrikazu nebude spustena'));
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - mazu temp tabulky'));
try
Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr('tempdb..#TabPrKVazbyGen') + ') IS NOT NULL DROP TABLE #TabPrKVazbyGen');
Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr('tempdb..#TabOdved') + ') IS NOT NULL DROP TABLE #TabOdved');
Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr('tempdb..#TabGenPrijem') + ') IS NOT NULL DROP TABLE #TabGenPrijem');
Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr('tempdb..#TabGenRezVyd') + ') IS NOT NULL DROP TABLE #TabGenRezVyd');
except on E:Exception do
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - chyba pri mazani temp tabulek: ' + E.Message));
end;
Helios.Refresh(true);
end;
// sBar.SimpleText:= '';
if not(jeTest) then
begin
try
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - mazu temp tabulky 2'));
Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr(IfThen(jeTest,tblOdv,'tempdb..' + tblOdv)) + ') IS NOT NULL DROP TABLE ' + tblOdv);
Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr(IfThen(jeTest,tblOdvPr,'tempdb..' + tblOdvPr)) + ') IS NOT NULL DROP TABLE ' + tblOdvPr);
Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr(IfThen(jeTest,tblOdvOp,'tempdb..' + tblOdvOp)) + ') IS NOT NULL DROP TABLE ' + tblOdvOp);
except on E:Exception do
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - chyba pri mazani temp tabulek 2: ' + E.Message));
end;
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - test podminky tisku: ' + LeftStr(selDilec.Text,3) + ' ' + lblDilec.Caption));
// pokud je to Rele a zbytek je >0, tiskni novou pruvodku
end;
if ((LeftStr(selDilec.Text,3)='PRF') or (LeftStr(selDilec.Text,3)='VRF') or
(LeftStr(lblDilec.Caption,3)='PRF') or (LeftStr(lblDilec.Caption,3)='VRF'))
and (StrToFloat(lblZive.Caption)-edtKusu.Value>0) then
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - podminka splnena, tisk by byl proveden'));
begin
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - tisk'));
try
Helios.PrintForm3(bidFrontaPrace,31,'TabPrPostup.IdPrikaz=' + IntToStr(idPrikaz));
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - konec tisku'));
except on E:Exception do
begin
Helios.Error(#1'Chyba'#1 + E.Message);
end;
end;
end;
// else
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - podminka tisku nesplnena'));
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - konec pluginu'));
Close;
{
try
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - nove form activate'));
FormActivate(Sender);
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - nove form show'));
FormShow(Sender);
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - po form show'));
except on E:Exception do
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Plg Odvod - chyba: ' + E.Message));
end;
}
end;
procedure TformOdvedeniPrikazu.edtCasHodKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key=VK_RETURN) then
edtCasMin.SetFocus;
end;
procedure TformOdvedeniPrikazu.edtCasMinKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key=VK_RETURN) then
btnSave.SetFocus;
end;
procedure TformOdvedeniPrikazu.edtKusuEnter(Sender: TObject);
begin
if (selZamest.Text<>'') and (lblZamest.Caption='') then
selZamestExit(Sender);
selDilec.Color:= clWindow;
selZamest.Color:= clWindow;
edtKusu.Color:= clYellowLight;
end;
procedure TformOdvedeniPrikazu.edtKusuExit(Sender: TObject);
begin
edtKusu.Color:= clWindow;
if (edtKusu.Value>0) then
begin
if (edtKusu.Value>StrToFloat(lblZive.Caption)) then
begin
Helios.Error(#1'Nelze odvést víc kusů než zbývá na příkaze.'#1);
edtKusu.Value:= 0;
edtKusu.Color:= clYellowLight;
edtKusu.SelectAll;
edtKusu.SetFocus;
end
else
btnSave.SetFocus;
end
else
if (gOperace.RowCount>1) then
Helios.Error(#1'Zadejte počet kusů'#1);
end;
procedure TformOdvedeniPrikazu.edtKusuKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key=VK_RETURN) then
btnSave.SetFocus;
end;
procedure TformOdvedeniPrikazu.FormActivate(Sender: TObject);
begin
canCont:= false;
verText:= GetFileVersion2(GetModuleName(HInstance));
if (Length(verText)=12) then
verText:= LeftStr(verText,9) + '0' + RightStr(verText,3);
selDilec.SetFocus;
Self.Caption:= Self.Caption + ' (verze ' + verText + ')';
btnSave.Top:= Self.Height - 2*btnSave.Height - Round(13/(Screen.Height/Self.Width));
btnCancel.Top:= btnSave.Top;
gOperace.Height:= btnSave.Top - gOperace.Top - 15;
case typOdvodu of
1: begin // podle prikazu
selDilec.Enabled:= false;
selFronta.Enabled:= false;
selPrikaz.Enabled:= true;
selPrikaz.SetFocus;
end;
2: begin // podle vyrobku
selPrikaz.Enabled:= false;
selFronta.Enabled:= false;
selDilec.Enabled:= true;
selDilec.SetFocus;
end;
3: begin // podle fronty prace
selDilec.Enabled:= false;
selPrikaz.Enabled:= false;
selFronta.Enabled:= true;
selFronta.SetFocus;
end;
end;
selDilec.Left:= Label12.Left + Label12.Width + 13;
selPrikaz.Left:= Label11.Left + Label11.Width + 8;
dtDatum.Left:= Label4.Left + Label4.Width + 8;
Label5.Left:= dtDatum.Left + dtDatum.Width + 8;
selZamest.Left:= Label5.Left + Label5.Width + 8;
lblZamest.Left:= selZamest.Left + selZamest.Width + 8;
edtKusu.Left:= Label1.Left + Label1.Width + 10;
// Self.Width:= Round(320/(Screen.Height/Screen.Width));
end;
procedure TformOdvedeniPrikazu.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (layName[0]<>'') then
LoadKeyboardLayout(@layName, KLF_ACTIVATE or KLF_SETFORPROCESS);
Action:= caFree;
end;
procedure TformOdvedeniPrikazu.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// if Key=VK_RETURN then
// Key:= 0;
end;
procedure TformOdvedeniPrikazu.FormResize(Sender: TObject);
begin
NastavGrid;
end;
procedure TformOdvedeniPrikazu.FormShow(Sender: TObject);
var lSQL: string;
idx, x: integer;
begin
if GetKeyboardLayoutName(@layName) then
LoadKeyboardLayout('00020409', KLF_ACTIVATE or KLF_SETFORPROCESS);
{
Application.Handle:= Helios.MainApplicationHandle;
Application.Icon.Handle:= Helios.MainApplicationIconHandle;
DefFontData.CharSet:= Helios.Charset;
DefFontData.Name:= Helios.Font;
DefFontData.Height:= Helios.FontHeight;
Screen.MenuFont.CharSet:= DefFontData.CharSet;
Screen.MenuFont.Name:= DefFontData.Name;
Screen.MenuFont.Height:= DefFontData.Height;
Self.Font.Name:= Helios.Font;
Self.Font.Size:= Helios.FontHeight;
}
// ignore changed DPI and keep dialog in originaly designed size
// if (Screen.PixelsPerInch<>PixelsPerInch) then
// ScaleBy(Screen.PixelsPerInch, PixelsPerInch);
idx:= 0;
x:= Helios.FontHeight-3;
while (idx<Self.ComponentCount-1) do
begin
if (Components[idx] is TLabel) then
begin
(Components[idx] as TLabel).Font.Name:= Helios.Font;
(Components[idx] as TLabel).Font.Height:= x;
end;
if (Components[idx] is TComboBox) then
begin
(Components[idx] as TComboBox).Font.Name:= Helios.Font;
(Components[idx] as TComboBox).Font.Height:= x;
end;
if (Components[idx] is TRzButtonEdit) then
begin
(Components[idx] as TRzButtonEdit).Font.Name:= Helios.Font;
(Components[idx] as TRzButtonEdit).Font.Height:= x;
end;
if (Components[idx] is TNextGrid6) then
begin
(Components[idx] as TNextGrid6).Font.Name:= Helios.Font;
(Components[idx] as TNextGrid6).Font.Height:= x+3;
end;
if (Components[idx] is TBitBtn) then
begin
(Components[idx] as TBitBtn).Font.Name:= Helios.Font;
(Components[idx] as TBitBtn).Font.Height:= x;
end;
if (Components[idx] is TRzDateTimePicker) then
begin
(Components[idx] as TRzDateTimePicker).Font.Name:= Helios.Font;
(Components[idx] as TRzDateTimePicker).Font.Height:= x;
end;
if (Components[idx] is TRzNumericEdit) then
begin
(Components[idx] as TRzNumericEdit).Font.Name:= Helios.Font;
(Components[idx] as TRzNumericEdit).Font.Height:= x;
end;
if (Components[idx] is TGroupBox) then
begin
(Components[idx] as TGroupBox).Font.Name:= Helios.Font;
(Components[idx] as TGroupBox).Font.Height:= x;
end;
Inc(idx);
end;
// SQL2012 with Helios.OpenSQL('SELECT FORMAT(GETDATE(),''d.M.yyyy'',''cs-CZ'')') do
try
// SQL2008 with Helios.OpenSQL('SELECT CONVERT(nvarchar(10), GETDATE(), 104)') do
with Helios.OpenSQL('SELECT FORMAT(GETDATE(),''d.M.yyyy'',''cs-CZ'')') do
dtDatum.Date:= StrToDate(VarToStr(FieldValues(0)));
except on E:Exception do
// Helios.Error(#1'Chyba při získávání datumu ze serveru...'#1 + CRLF + E.ClassName + CRLF + E.Message);
raise Exception.Create('Chyba při získávání datumu ze serveru...' + CRLF + E.ClassName + CRLF + E.Message);
end;
NastavGrid;
gOperace.RowCount:= 0;
// dtDatum.Enabled:= false;
idPrikaz:= 0;
idPrPostup:= 0;
idKZ:= 0;
idDZ:= 0;
idPZ:= 0;
dokl:= '';
cZam:= '0';
if (Helios.BrowseID=bidHrOdvod) then
cbSklad.ItemIndex:= 2
else
begin
cbSklad.ItemIndex:= 0;
for idx:=0 to cbSklad.Items.Count-1 do
begin
lSQL:= cbSklad.Items.Strings[idx];
lSQL:= Trim(LeftStr(lSQL, Pos('-',lSQL)-1));
lSQL:= StringReplace(lSQL,'.','',[rfReplaceAll]);
if (Helios.Sklad=lSQL) then
cbSklad.ItemIndex:= idx;
end;
end;
Self.Caption:= 'Odvedení příkazu / dílce';
nadvyroba:= false;
edtCasMin.Value:= 0;
edtCasHod.Value:= 0;
grpTampo.Visible:= false;
grpNadvyroba.Visible:= false;
// if (typOdvodu=1) then
// grpTampo.Visible:= true;
// if nadvyroba then
// grpNadvyroba.Visible:= true;
lSQL:= 'SELECT id FROM ' + tblObecPrehled + ' WHERE Cislo=' + IntToStr(Helios.BrowseID-100000);
lSQL:= lSQL + ' AND NazevSys=N' + QuotedStr('hvw_EvidenceNadvyroby');
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin // Nadvyroba
nadvyroba:= true;
Label11.Visible:= false;
selPrikaz.Visible:= false;
grpTampo.Visible:= false;
grpNadvyroba.Visible:= true;
cbSklad.ItemIndex:= 2;
cbSklad.Enabled:= false;
// edtCasHod.Enabled:= false;
// edtCasMin.Enabled:= false;
selSmena.Enabled:= false;
gOperace.PopupMenu:= nil;
selVydejMat.SetFocus;
Self.Caption:= 'Odvedení Nadvýroby';
end;
with Helios.OpenSQL('SELECT kod FROM ' + tblCSmen + ' WHERE Blokovano=0') do
if (RecordCount>0) then
begin
First;
selSmena.Text:= VarToStr(FieldValues(0));
end;
end;
procedure TformOdvedeniPrikazu.Label6MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,Y: Integer);
begin
if (ssShift in Shift) then
ShowMessage('Čas dle TPV: sek. ' + FloatToStr(casTPVs*edtKusu.Value) + ' / min. ' + FloatToStr(casTPVm*edtKusu.Value));
end;
procedure TformOdvedeniPrikazu.selBarCodeExit(Sender: TObject);
begin
selPrikazExit(Sender);
end;
procedure TformOdvedeniPrikazu.selBarCodeKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
selBarCode.Text:= Trim(selBarCode.Text);
if (selBarCode.Text<>'') then
begin
selDilec.Text:= '';
idKZ:= 0;
end;
if (Key=VK_RETURN) then
begin
with Helios.OpenSQL('SELECT idPrikaz FROM ' + tblPrPost + ' WHERE BarCode=N' + QuotedStr(selBarCode.Text)) do // and Odvadeci=1
if (RecordCount>0) then
begin
idPrikaz:= StrToInt(VarToStr(FieldValues(0)));
with Helios.OpenSQL('SELECT RadaPrikaz FROM ' + tblPrikaz + ' WHERE id=' + IntToStr(idPrikaz)) do
selPrikaz.Text:= VarToStr(FieldValues(0));
VyplnPrikaz;
selZamest.SetFocus;
end;
end;
end;
procedure TformOdvedeniPrikazu.pVyberVseClick(Sender: TObject);
var i: Integer;
begin
for i:=0 to gOperace.RowCount-1 do
gOperace.Cell[1,i].AsBoolean:= true;
end;
procedure TformOdvedeniPrikazu.VyplnDleDilce;
var lSQL: string;
idx: integer;
begin
if (idKZ>0) then
begin
with Helios.OpenSQL('SELECT SkupZbo,RegCis,Nazev1 FROM ' + tblKZ + ' WHERE id=' + IntToStR(idKZ)) do
begin
selDilec.Text:= VarToStr(FieldValues(0)) + ' ' + VarToStr(FieldValues(1));
lblDilec.Caption:= VarHodnota(FieldValues(2),'');
end;
lSQL:= 'SELECT SUM(kusy_zad), SUM(kusy_odved), SUM(kusy_zive) FROM ' + tblPrikaz;
lSQL:= lSQL + ' WHERE StavPrikazu=30 AND IDTabKmen=' + IntToStr(idKZ);
if (nadvyroba) then
lSQL:= lSQL + ' AND KmenoveStredisko=N' + QuotedStr(sklDP);
with Helios.OpenSQL(lSQL) do
if RecordCount>0 then
begin
if not VarIsNull(FieldValues(0)) then
lblZadane.Caption:= VarToStr(FieldValues(0));
if not VarIsNull(FieldValues(1)) then
lblEvid.Caption:= VarToStr(FieldValues(1));
if not VarIsNull(FieldValues(2)) then
lblZive.Caption:= VarToStr(FieldValues(2));
end;
with Helios.OpenSQL('SELECT CONVERT(int,operace),nazev,id,TAC_S FROM ' + tblPostup + ' WHERE dilec=' + IntToStr(idKZ)) do
if (RecordCount>0) then
begin
gOperace.ClearRows;
NastavGrid;
gOperace.RowCount:= RecordCount;
First;
idx:= -1;
while not(EOF) do
begin
Inc(idx);
gOperace.Cell[0,idx].AsInteger:= VarHodnota(FieldValues(0),0);
gOperace.Cell[1,idx].AsBoolean:= true;
gOperace.Cell[2,idx].AsString:= VarHodnota(FieldValues(1),'');
gOperace.Cell[3,idx].AsInteger:= VarHodnota(FieldValues(2),0);
gOperace.Cell[4,idx].AsFloat:= VarHodnota(FieldValues(3),0.0); // normovany cas v sek
Next;
end;
end;
selZamest.SetFocus;
end;
end;
procedure TformOdvedeniPrikazu.selDilecButtonClick(Sender: TObject);
var podm: string;
begin
idKZ:= 0;
podm:= 'TabKmenZbozi.id IN (SELECT IDTabKmen FROM ' + tblPrikaz + ' WHERE StavPrikazu=30 GROUP BY IDTabKmen)';
if Helios.Prenos(bidKZ,'id',vOle1,podm,'Vyráběné dílce',true) then
idKZ:= StrToInt(VarToStr(vOle1));
VyplnDleDilce;
end;
procedure TformOdvedeniPrikazu.selDilecEnter(Sender: TObject);
begin
selDilec.Color:= clYellowLight;
end;
procedure TformOdvedeniPrikazu.selDilecExit(Sender: TObject);
var podm: string;
begin
selDilec.Color:= clWindow;
selDilec.Text:= UpperCase(Trim(selDilec.Text));
// selDilec.Text:= StringReplace()
if (selDilec.Text<>'') then
begin
if Pos('%',selDilec.Text)>0 then
selDilec.Text:= StringReplace(selDilec.Text,'%','_',[rfReplaceAll]);
podm:= 'SELECT id FROM ' + tblKZ + ' WHERE UPPER(CisloZbozi) LIKE N' + QuotedStr('%' + StringReplace(selDilec.Text,' ','',[rfReplaceAll]) + '%' );
if (selDilec.Text<>'') and (idKZ=0) then
with Helios.OpenSQL(podm) do
begin
if (RecordCount>1) then
begin
podm:= 'TabKmenZbozi.id IN (' + podm + ')';
if Helios.Prenos(bidKZ,'id',vOle1,podm,'Vyráběné dílce',true) then
idKZ:= StrToInt(VarToStr(vOle1));
end;
if (RecordCount=1) then
idKZ:= StrToInt(VarToStr(FieldValues(0)));
if (RecordCount=0) then
begin
idKZ:= 0;
Helios.Error(#1'Zadaný dílec nebyl nalezen.'#1);
selDilec.Color:= clYellowLight;
selDilec.SelectAll;
selDilec.SetFocus;
end;
{
with Helios.OpenSQL('SELECT id FROM ' + tblPostup + ' WHERE dilec=' + IntTOStr(idKZ)) do
if RecordCount>1 then
begin
if not Helios.YesNo(#1'Pozor, tento dílec obsahuje více jak 1 operaci na kus.'#1 + CRLF + 'Chcete jej i přesto evidovat ?',true) then
Exit;
end;
}
if (idKZ>0) then
begin
VyplnDleDilce;
selZamest.Color:= clYellowLight;
selZamest.Text:= '';
selZamest.SelectAll;
end;
end;
end;
end;
procedure TformOdvedeniPrikazu.selDilecKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// if (Key=VK_RETURN) then
// Key:= 0;
end;
procedure TformOdvedeniPrikazu.selDilecKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
selDilec.Text:= Trim(selDilec.Text);
if (selDilec.Text<>'') then
begin
selBarCode.Text:= '';
selPrikaz.Text:= '';
idPrikaz:= 0;
end;
if (Key=VK_RETURN) then
begin
selDilec.Width:= Self.Canvas.TextWidth(selDilec.Text);
selDilecExit(Sender);
end;
end;
procedure TformOdvedeniPrikazu.selFrontaButtonClick(Sender: TObject);
var podm: string;
begin
idPrPostup:= 0;
idPrikaz:= 0;
operaceFP:= '';
podm:= 'TabPrPostup.Kusy_zive>0 AND TabPrPostup.Pracoviste IN (SELECT id FROM ' + tblCPrac + ' WHERE Pracoviste LIKE N';
podm:= podm + QuotedStr('RF%') + ')';
if Helios.Prenos(bidVyrOper,'Id',vOle1,podm,'Fronta práce',true) then
begin
idPrPostup:= StrToInt(VarToStr(vOle1));
podm:= 'SELECT vp.RadaPrikaz,pp.idPrikaz,pp.Operace FROM ' + tblPrPost + ' pp INNER JOIN ' + tblPrikaz;
podm:= podm + ' vp ON (vp.Id=pp.IdPrikaz) WHERE pp.id=' + IntToStr(idPrPostup);
with Helios.OpenSQL(podm) do
begin
selPrikaz.Text:= VarToStr(FieldValues(0));
idPrikaz:= StrToInt(VarToStr(FieldValues(1)));
operaceFP:= Trim(VarToStr(FieldValues(2)));
end;
selFronta.Text:= IntToStr(idPrPostup);
VyplnPrikaz;
VyplnFrontuPrace;
end;
end;
procedure TformOdvedeniPrikazu.selFrontaExit(Sender: TObject);
begin
selFronta.Text:= Trim(selFronta.Text);
if (selFronta.Text<>'') and IsNumeric(selFronta.Text) then
begin
if (idPrPostup=0) then
with Helios.OpenSQL('SELECT Id,IdPrikaz,Operace FROM ' + tblPrPost + ' WHERE id=' + selFronta.Text) do
if (RecordCount=1) then
begin
idPrPostup:= StrToInt(VarToStr(FieldValues(0)));
idPrikaz:= StrToInt(VarToStr(FieldValues(1)));
operaceFP:= Trim(VarToStr(FieldValues(2)));
VyplnPrikaz;
VyplnFrontuPrace;
end;
end
else
begin
idPrPostup:= 0;
idPrikaz:= 0;
operaceFP:= '';
Helios.Error(#1'Chybně zadané identifikační číslo operace.'#1);
end;
end;
procedure TformOdvedeniPrikazu.selPrikazButtonClick(Sender: TObject);
var podm: string;
begin
podm:= 'TabPrikaz.StavPrikazu=30 AND TabPrikaz.KmenoveStredisko IN (N' + QuotedStr(sklVyr) + ',N';
podm:= podm + QuotedStr(sklDP) +')';
if Helios.Prenos(bidVyrPrik,'RadaPrikaz',vOle1,podm,'Výrobní příkazy',true) then
begin
selPrikaz.Text:= VarToStr(vOle1);
with Helios.OpenSQL('SELECT id FROM ' + tblPrikaz + ' WHERE RadaPrikaz=N' + QuotedStr(selPrikaz.Text)) do
idPrikaz:= StrToInt(VarToStr(FieldValues(0)));
VyplnPrikaz;
end;
end;
procedure TformOdvedeniPrikazu.selPrikazExit(Sender: TObject);
var podm, r: string;
begin
r:= '';
selPrikaz.Text:= Trim(selPrikaz.Text);
selPrikaz.Text:= StringReplace(selPrikaz.Text,' ','',[rfReplaceAll]);
// if not IsNumeric(selPrikaz.Text) then
if (LeftStr(selPrikaz.Text,1)='A') then
Helios.Error(#1'Výrobní příkaz může mít jen numerické označení.' + #1 + CRLF + '(zadáváte opravdu příkaz ?]')
else
if (selPrikaz.Text<>'') then
begin
r:= LeftStr(selPrikaz.Text, Pos('-', selPrikaz.Text)-1);
podm:= 'Rada=N' + QuotedStr(r);
podm:= podm + ' AND Prikaz=' + MidStr(selPrikaz.Text,Pos('-', selPrikaz.Text)+1,255);
with Helios.OpenSQL('SELECT id,IdTabKmen FROM ' + tblPrikaz + ' WHERE StavPrikazu IN (30,40) AND ' + podm) do
if (RecordCount>0) then
begin
idPrikaz:= StrToInt(VarToStr(FieldValues(0)));
idKZ:= StrToInt(VarToStr(FieldValues(1)));
VyplnPrikaz;
selZamest.SetFocus;
end
else
begin
idPrikaz:= 0;
idKZ:= 0;
Helios.Error(#1'Nebyl nalezen odpovídající Výrobní příkaz'#1 + CRLF + '(může být již uzavřen nebo je neplatný)');
selPrikaz.SetFocus;
end;
if (r='010') then
begin
cbSklad.ItemIndex:= 2;
grpTampo.Visible:= true;
end;
end
else
begin
idPrikaz:= 0;
idKZ:= 0;
end;
end;
procedure TformOdvedeniPrikazu.selPrikazKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (selPrikaz.Text<>'') then
idKZ:= 0;
if (Key=VK_RETURN) then
selZamest.SetFocus;
end;
procedure TformOdvedeniPrikazu.selVydejMatButtonClick(Sender: TObject);
var podm: string;
begin
if (selZamest.Text='') then
begin
Helios.Error(#1'Před výběrem nejprve zadejte zaměstnance.'#1);
Exit;
end;
podm:= 'TabDokladyZbozi.DruhPohybuZbo=4 AND TabDokladyZbozi.Realizovano=1 AND TabDokladyZbozi.CisloZam=' + selZamest.Text;
if Helios.Prenos(bidDZVydej,'id',vOle1,podm,'Výdejky',true) then
idVydej:= StrToInt(VarToStr(vOle1))
else
idVydej:= 0;
with Helios.OpenSQL('SELECT RadaDokladu,PoradoveCislo FROM ' + tblDZ + ' WHERE id=' + IntToStr(idVydej)) do
if (RecordCount>0) then
selVydejMat.Text:= VarToStr(FieldValues(0)) + '-' + StringOfChar('0', 6-Length(VarToStr(FieldValues(1)))) + VarToStr(FieldValues(1))
else
selVydejMat.Text:= '';
selVydejMatExit(Sender);
end;
procedure TformOdvedeniPrikazu.selVydejMatExit(Sender: TObject);
var lSQL: string;
begin
selVydejMat.Text:= Trim(selVydejMat.Text);
if (selVydejMat.Text<>'') and (Pos('-',selVydejMat.Text)>0) then
begin
lSQL:= 'SELECT id FROM ' + tblDZ + ' WHERE RadaDokladu=N' + QuotedStr(LeftStr(selVydejMat.Text,Pos('-',selVydejMat.Text)-1));
lSQL:= lSQL + ' AND PoradoveCislo=CONVERT(int,N' + QuotedStr(MidStr(selVydejMat.Text,Pos('-',selVydejMat.Text)+1,20));
lSQL:= lSQL + ') AND DruhPohybuZbo=4 AND CisloOrg=2 AND IDSklad=N' + QuotedStr(sklFin); // IN (' + VlastniSkladySQL(DateToStr(dtDatum.Date)) + ')';
if (selZamest.Text<>'') then
lSQL:= lSQL + ' AND CisloZam=' + selZamest.Text;
with Helios.OpenSQL(lSQL) do
if (RecordCount=1) then
begin
if not(VarIsNull(FieldValues(0))) then
idVydej:= StrToInt(VarToStr(FieldValues(0)))
else
idVydej:= 0;
end;
if (idVydej=0) then
Helios.Error(#1'Nelze dohledat zadanou výdejku na Nadvýrobu.'#1)
else
begin
if (selDilec.Text='') then
begin
lSQL:= 'SELECT CisloZam,IdKmenZbozi,Mnozstvi-Zaevidovano,id FROM ' + tblEvidNadvyr + ' WHERE idVydejkaMat=' + IntToStr(idVydej);
with Helios.OpenSQL(lSQL) do
if (RecordCount=1) then
begin
if not(VarIsNull(FieldValues(0))) then
selZamest.Text:= StringOfChar('0',6-Length(VarToStr(FieldValues(0)))) + VarToStr(FieldValues(0));
idKZ:= StrToInt(VarToStr(FieldValues(1)));
with Helios.OpenSQL('SELECT PrijmeniJmeno, Id FROM ' + tblCZam + ' WHERE Cislo=' + VarToStr(FieldValues(0))) do
if (RecordCount=1) then
begin
lblZamest.Caption:= VarToStr(FieldValues(0));
idZam:= VarToStr(FieldValues(1));
end;
with Helios.OpenSQL('SELECT RegCis, Nazev1 FROM ' + tblKZ + ' WHERE id=' + IntToStr(idKZ)) do
if (RecordCount=1) then
begin
selDilec.Text:= VarToStr(FieldValues(0));
lblDilec.Caption:= VarToStr(FieldValues(1));
end;
VyplnDleDilce;
edtKusu.Value:= StrToFloat(VarToStr(FieldValues(2)));
idNadvyr:= StrToInt(VarToStr(FieldValues(3)));
edtKusu.SetFocus;
end
else
Helios.Error(#1'Dle zadané výdejky nelze dohledat údaje k evidenci Nadvýroby.'#1 + CRLF + 'Zadejte je ručně.');
end;
end;
end;
end;
procedure TformOdvedeniPrikazu.selZamestButtonClick(Sender: TObject);
begin
if Helios.Prenos2(bidCisZam,'PrijmeniJmeno','Cislo',vOle1,vOle2,'','Zaměstnanci',true,false,false,1) then
begin
lblZamest.Caption:= VarToStr(vOle1);
cZam:= VarToStr(vOle2);
with Helios.OpenSQL('SELECT id FROM ' + tblCZam + ' WHERE Cislo=' + cZam) do
idzam:= VarToStr(FieldValues(0));
selZamest.Text:= StringOfChar('0',6-Length(cZam)) + cZam;
edtKusu.SetFocus;
end
else
begin
lblZamest.Caption:= '';
cZam:= '0';
end;
end;
procedure TformOdvedeniPrikazu.selZamestEnter(Sender: TObject);
begin
selZamest.Color:= clYellowLight;
end;
procedure TformOdvedeniPrikazu.selZamestExit(Sender: TObject);
begin
if (selZamest.Text<>'') then
begin
selZamest.Text:= GetNumbersFromString(selZamest.Text);
selZamest.Text:= Trim(selZamest.Text);
cZam:= selZamest.Text;
with Helios.OpenSQL('SELECT PrijmeniJmeno,id FROM ' + tblCZam + ' WHERE Cislo=' + selZamest.Text) do
if (RecordCount>0) then
begin
lblZamest.Caption:= VarToStr(FieldValues(0));
idZam:= VarToStr(FieldValues(1));
selZamest.Text:= StringOfChar('0',6-Length(cZam)) + cZam;
// lblZamest.Left:= selZamest.Left + selZamest.Width + 5;
end
else
begin
Helios.Error(#1'Zadaný zaměstnanec nebyl nalezen, zkuste jej zadat znovu.'#1);
cZam:= '0';
idZam:= '0';
selZamest.SetFocus;
selZamest.Text:= '';
lblZamest.Caption:= '';
end;
end;
selZamest.Color:= clWindow;
end;
procedure TformOdvedeniPrikazu.selZamestKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key=VK_RETURN) then
begin
if (selZamest.Text<>'') then
begin
selZamest.Width:= Self.Canvas.TextWidth(selZamest.Text) + 5;
lblZamest.Left:= selZamest.Left + selZamest.Width + 8;
selZamestExit(Sender);
edtKusu.SetFocus;
end;
end;
end;
// přidáno 8.11.2018
procedure TformOdvedeniPrikazu.ZadejVyrPrikazNaVydejku(const Helios: IHelios; idVPr: Integer; MnozstviNaVydejku: double);
var lSQL, SQL, SQLko: string;
pz,mu: IHeQuery;
idVydej,idPolExpP,idExpPr,idNPol,sMU,sNO: string;
idx: Integer;
mn: extended;
PoloZkaVydejkyExistuje:boolean;
IdPolozkaVydeky:integer;
Zprava : string;
RegCis : string;
begin
if (idVPr>0) then
begin
lSQL:= 'SELECT kz.id, kz.RegCis FROM ' + tblPrikaz + ' p INNER JOIN ' + tblKZ + ' kz ON (p.IdTabKmen=kz.id)';
lSQL:= lSQL + ' WHERE kz.SkupZbo LIKE ' + QuotedStr('V%') + ' AND p.id=' + IntToStr(idVPr);
with Helios.OpenSQL(lSQL) do begin
if RecordCount=0 then
begin
//Helios.Error(#1'Výrobní příkaz není na finální výrobek.'#1); // zakomentováno 8.11.2018
Exit;
end;
regcis:= FieldValues(1);
end;
lSQL:= 'SELECT p.IdRezervace,kz.SkupZbo,kz.RegCis,kz.Nazev1 FROM ' + tblPrikaz + ' p INNER JOIN ' + tblKZ + ' kz ON (p.IdTabKmen=kz.id)';
lSQL:= lSQL + ' WHERE kz.SkupZbo LIKE ' + QuotedStr('V%') + ' AND p.IdRezervace IS NOT NULL AND p.id=' + IntToStr(idVPr);
pz:= Helios.OpenSQL(lSQL);
if (pz.RecordCount>0) then
begin
// if Helios.YesNo('Chcete dílec z výrobního příkazu uložit do výdejky exportu ?',false) then
// begin
lSQL:= 'TabDokladyZbozi.CisloOrg=1 AND TabDokladyZbozi.IDSklad=N' + QuotedStr(sklVyroba) + ' AND TabDokladyZbozi.DruhPohybuZbo IN (2,3,4)';
lSQL:= lSQL + ' AND TabDokladyZbozi.RadaDokladu IN (N' + QuotedStr('420') + ') AND TabDokladyZbozi.Realizovano=0';
// výběr výdejky
pz.First;
idPolExpP:= VarToStr(pz.FieldValues(0)); // ID polozky v ExpPr
SQLko:= '';
sNO:= '';
SQLko:= 'SELECT dz.NavaznaObjednavka FROM ' + tblPZ + ' pz INNER JOIN ' + tblDZ + ' dz ON (pz.idDoklad=dz.id)';
SQLko:= SQLko + ' WHERE pz.DruhPohybuZbo=9 AND pz.id=' + idPolExpP; // jen Exp.prikazy
with Helios.OpenSQL(SQLko) do
if (RecordCount>0) then
begin
sNO:= LeftStr(VarToStr(FieldValues(0)),2);
end else begin
Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku, protože není zadána návazná objednávka na expedičním příkaze. ';
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava));
exit; // a když nebude zadáno?
end;
SQLko:= 'Select id from TabDokladyZbozi where ';
SQLko:= SQLko + 'TabDokladyZbozi.CisloOrg=1 AND TabDokladyZbozi.IDSklad=N' + QuotedStr(sklVyroba) + ' AND TabDokladyZbozi.DruhPohybuZbo IN (2,3,4)';
SQLko:= SQLko + ' AND TabDokladyZbozi.RadaDokladu IN (N' + QuotedStr('420') + ') AND TabDokladyZbozi.Realizovano=0 AND TabDokladyZbozi.MistoUrceni= ' ;
if sNo='52' then SQLko:= SQLko + '3' else begin
if sNo='45' then SQLko:= SQLko + '1' else begin
//Helios.OpenSQL('SELECT * FROM #TabExtKom')
Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku, protože zadána návazná objednávka na expedičním příkaze nezačíná na 45 nebo 52. ';
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava));
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce='' Chyba při ukládání položky na výdejku: zadána návazná objednávka na expedičním příkaze nezačíná na 45 nebo 52. ''');
exit;
end;
end;
// kontrola na návaznpou objednávku na výdejce:
// SQLko:= SQLko + ' AND TabDokladyZbozi.NavaznaObjednavka like ' + QuotedStr(sNo + '%');
// helios.Info('3 ' + sNo + CRLF + SQLko);
with Helios.OpenSQL(SQLko) do
if (RecordCount>0) then
begin
if (RecordCount=1) then idVydej:= FieldValues(0) else begin
Helios.Info('Položka nebude uložena na výdejku. Bylo nalezeno více odpovídajících nerealizovaných výdejek.');
Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku. Bylo nalezeno více odpovídajících nerealizovaných výdejek. ';
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava));
exit;
end;
end else begin
helios.Info('Položka nebude uložena na výdejku. Nebyla nalezena žádná odpovídající nerealizovaná výdejka.');
Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku. Nebyla nalezena žádná odpovídající nerealizovaná výdejka. ';
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava));
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce='' Položka nebude uložena na výdejku. Nebyla nalezena žádná odpovídající nerealizovaná výdejka. ''');
exit;
end;
// konec výběru výdejky
// if Helios.Prenos(bidDZVydej,'id',vOle1,lSQL,'Výdejky pro Vývoz',true) then
begin
pz.First;
idPolExpP:= VarToStr(pz.FieldValues(0)); // ID polozky v ExpPr
sNO:= '';
sMU:= '';
// idVydej:= VarToStr(vOle1);
mu:= Helios.OpenSQL('SELECT ISNULL(MistoUrceni,0) FROM ' + tblDZ + ' WHERE id=' + idVydej);
if (mu.RecordCount>0) then
begin
sMU:= VarToStr(mu.FieldValues(0));
lSQL:= 'SELECT dz.NavaznaObjednavka FROM ' + tblPZ + ' pz INNER JOIN ' + tblDZ + ' dz ON (pz.idDoklad=dz.id)';
lSQL:= lSQL + ' WHERE pz.DruhPohybuZbo=9 AND pz.id=' + idPolExpP; // jen Exp.prikazy
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
sNO:= LeftStr(VarToStr(FieldValues(0)),2);
if ((sNO<>'52') and (sMU='3')) or ( ((sNO<>'45') and (sMU='1')) and ((sNO<>'50') and (sMU='1')) ) then
begin
Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku, protože místo určení na výdejce není určeno pro tuto řadu objednávek. ';
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava));
Helios.Error(#1'Místo určení na výdejce není určeno pro tuto řadu objednávek.'#1);
Exit;
end;
end;
end;
with Helios.OpenSQL('SELECT id FROM ' + tblDZ + ' WHERE BlokovaniEditoru IS NOT NULL AND id=' + idVydej) do
if (RecordCount=0) then // doklad neni blokovan
begin
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=' + IntToStr(Helios.UserId) + ' WHERE id=' + idVydej);
pz.First;
idx:= 0;
while not(pz.EOF) do
begin
idPolExpP:= VarToStr(pz.FieldValues(0)); // ID polozky v ExpPr
lSQL:= VarToStr(pz.FieldValues(1)) + ' ' + VarToStr(pz.FieldValues(2)) + ' - ' + VarToStr(pz.FieldValues(3));
// try
// mn:= StrToFloat(InputBox(lSQL,'Množství na výdejku:','0')); // 5.10.2018 přidáno ošetření na nečíslo
mn:= MnozstviNaVydejku; // změněno 8.11.2018
// except on E:Exception do begin
// helios.Error('Zadaná honota není číslo!');
// exit;
// end
// end;
if (mn>0) then
begin
lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL CREATE TABLE #TabTempUziv(Tabulka ';
lSQL:= lSQL + 'NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)' + CRLF;
lSQL:= lSQL + 'DECLARE @m NVARCHAR(3),@vc INT,@sDPH NUMERIC(5,2),@sSD NUMERIC(5,2),@kEUR NUMERIC(19,6),';
lSQL:= lSQL + '@jm INT,@k NUMERIC(19,6),@ss INT,@mn NUMERIC(19,6),@idOut INT,@d DATETIME' + CRLF;
// udaje z radky Exp. prikazu
lSQL:= lSQL + 'SELECT @sDPH=SazbaDPH,@sSD=SazbaSD,@mn=' + StringReplace(FloatToStr(mn),',','.',[rfReplaceAll]);
lSQL:= lSQL + ',@k=Kurz,@jm=JednotkaMeny,@ss=IDZboSklad,@kEUR=KurzEuro FROM ' + tblPZ + ' WHERE id=' + idPolExpP + CRLF;
// udaje z hlavicky Exp. prikazu
with Helios.OpenSQL('SELECT Mena,VstupniCena,Kurz,KurzEuro,DatPorizeni FROM ' + tblDZ + ' WHERE id=' + idVydej) do
begin
lSQL:= lSQL + 'SET @m=N' + QuotedStr(VarToStr(FieldValues(0))) + CRLF + 'SET @vc=' + VarToStr(FieldValues(1));
lSQL:= lSQL + CRLF + 'SET @k=' + StringReplace(VarToStr(FieldValues(2)),',','.',[rfReplaceAll]) + CRLF;
lSQL:= lSQL + 'SET @kEUR=' + StringReplace(VarToStr(FieldValues(3)),',','.',[rfReplaceAll]) + CRLF;
lSQL:= lSQL + 'SET @d=CONVERT(datetime,N' + QuotedStr(VarToStr(FieldValues(4))) + ',104)' + CRLF;
end;
// úpravy 8.11.2018
try
SQL:= 'DECLARE @n1 NVARCHAR(30),@n2 NVARCHAR(30),@jc NUMERIC(19,6),@jcV NUMERIC(19,6),@k NUMERIC(12,5), @idP INT,@idRez INT,@d DATETIME,@idDok INT' + CRLF;
SQL:= SQL + 'SELECT @n1=NazevSozNa1,@n2=NazevSozNa2,@d=PozadDatDod,@jc=JCbezDaniKC,@jcV=JCbezDaniVal,@idDok=IDDoklad FROM ' + tblPZ;
SQL:= SQL + ' WHERE id=' + idPolExpP + CRLF;
SQL:= SQL + 'Select id from ' + tblPZ + ' where NazevSozNa1=@n1 and NazevSozNa2=@n2 and idDoklad = ' + idVydej ;
with Helios.OpenSQL(SQL) do begin
if recordcount=1 then begin
PoloZkaVydejkyExistuje := true;
IdPolozkaVydeky := FieldValues(0);
end else begin
PoloZkaVydejkyExistuje := false ;
end;
end;
except on E4:Exception do begin
helios.Info('Chyba - položka nebude uložena na výdejku ' + CRLF + 'Detail chyby: ' + E4.ToString);
Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku. ' + CRLF + 'Detail chyby: ' + E4.ToString;
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava));
end;
end;
// Helios.Info('1');
if PoloZkaVydejkyExistuje then begin
lSQL:= lSQL + 'UPDATE ' + tblPZ + ' SET Mnozstvi = Mnozstvi + @mn where id = ' + IdPolozkaVydeky.ToString;
lSQL:= lSQL + CRLF + 'SELECT ' + IdPolozkaVydeky.ToString + ' as idout';
idNPol:= '';
end else begin
lSQL:= lSQL + 'EXEC dbo.hp_InsertPolozkyOZ @idOut OUT,@IDDoklad=' + idVydej + ',@DruhPohybu=2,@CisloOrg=1,@IDZboSklad=@ss,';
lSQL:= lSQL + '@Mena=@m,@Kurz=@k,@JednotkaMeny=@jm,@KurzEuro=@kEUR,@SazbaSD=@sSD,@SazbaDPH=@sDPH,@ZakazanoDPH=0,';
lSQL:= lSQL + '@VstupniCena=4,@Mnozstvi=@mn,@JCbezDaniKC=0,@PovolitDuplicitu=1,@DatPorizeni=@d,@Selectem=0';
lSQL:= lSQL + CRLF + 'SELECT @idOut';
idNPol:= '';
end;
try
Inc(idx);
with Helios.OpenSQL(lSQL) do
if not VarIsNull(FieldValues(0)) then
idNPol:= VarToStr(FieldValues(0));
if (idNPol<>'') and (idPolExpP<>'') then
begin
// aktualizuje udaje na vydejce
lSQL:= 'DECLARE @idP INT,@idRez INT,@d DATETIME,@idDok INT' + CRLF;
lSQL:= lSQL + 'DECLARE @n1 NVARCHAR(30),@n2 NVARCHAR(30),@jc NUMERIC(19,6),@jcV NUMERIC(19,6),@k NUMERIC(12,5)' + CRLF;
lSQL:= lSQL + 'SELECT @n1=NazevSozNa1,@n2=NazevSozNa2,@d=PozadDatDod,@jc=JCbezDaniKC,@jcV=JCbezDaniVal,@idDok=IDDoklad FROM ' + tblPZ;
lSQL:= lSQL + ' WHERE id=' + idPolExpP + CRLF;
lSQL:= lSQL + 'SELECT @k=Kurz FROM ' + tblDZ + ' WHERE id=@idDok' + CRLF;
lSQL:= lSQL + 'UPDATE ' + tblPZ + ' SET PozadDatDod=@d,NazevSozNa1=@n1,NazevSozNa2=@n2,JCbezDaniKC=@jcV*@k,JCbezDaniVal=@jcV';
lSQL:= lSQL + ',IdOldPolozka=' + idPolExpP + ' WHERE id=' + idNPol + CRLF;
lSQL:= lSQL + 'UPDATE ' + tblPZ + ' SET CCbezDaniKc=JCbezDaniKC*Mnozstvi,CCbezDaniVal=JCbezDaniVal*Mnozstvi WHERE id=' + idNPol;
Helios.ExecSQL(lSQL);
// prepocte mnozstvi vydane na ExpPr
lSQL:= 'SELECT ISNULL( (SELECT IDDoklad FROM ' + tblPZ + ' WHERE Id=' + idPolExpP + '), 0)';
with Helios.OpenSQL(lSQL) do
if (RecordCount=1) then
begin
idExpPr:= VarToStr(FieldValues(0));
lSQL:= 'MERGE dbo.TabPohybyZbozi AS T USING (SELECT ss.Id, kz.MJEvidence AS MJ FROM dbo.TabStavSkladu ss' + CRLF;
lSQL:= lSQL + ' INNER JOIN dbo.TabKmenZbozi kz ON (kz.Id=ss.IDKmenZbozi) WHERE ss.IDSklad=N''200'') AS S';
lSQL:= lSQL + ' ON (T.IdZboSklad=S.Id) WHEN MATCHED AND T.IDDoklad=' + idExpPr + ' THEN UPDATE SET T.MJ=S.MJ, T.MJEvidence=S.MJ;';
Helios.ExecSQL(lSQL);
lSQL:= 'BEGIN TRY' + CRLF + 'EXEC dbo.hp_Aktualizuj_OdebraneMnozstviDoklad @IDDoklad=' + idExpPr + ',@DruhPohybu=9' + CRLF;
lSQL:= lSQL + 'END TRY' + CRLF + 'BEGIN CATCH' + CRLF;
lSQL:= lSQL + 'EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=ERROR_MESSAGE' + CRLF + 'END CATCH'; //upraveno 5.10.2018 - odstraněny závorky za error_message
try
Helios.ExecSQL(lSQL);
except on E:Exception do begin
// UlozChybu(Helios,'Nelze aktualizovat kalkulační cenu ! SQL: ' + sql, E);
UlozChybu(Helios,'Nelze aktualizovat kalkulační cenu ! SQL: ' + lsql, E); // změněno 26.6.2018 (z sql na lsql)
Zprava := 'Odvod BC: Chyba - Nelze aktualizovat kalkulační cenu ! SQL: ' + lsql;
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava));
end;
end;
end;
end;
except on E:Exception do begin
Helios.Error(#1'Nelze uložit položku na doklad.'#1 + CRLF + E.Message + CRLF + lSQL + errPlg);
Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku. Nelze uložit položku na doklad' + CRLF + 'Detail chyby: ' + E.ToString;
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava));
end;
end;
end
else begin
Helios.Error(#1'Zadané množství je nulové, převod dílce na výdejku NEBUDE proveden.'#1);
Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku. Zadané množství je nulové, převod dílce na výdejku NEBUDE proveden.' ;
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava));
end;
pz.Next;
end;
// Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + idVydej + ',@AktualizaceSlev=0');
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=null WHERE id=' + idVydej);
Helios.Refresh(true);
// helios.Info('Položka uložena na výdejku č. ');
end
else begin
Helios.Error(#1'Doklad je blokován jiným uživatelem.'#1);
Zprava := 'Odvod BC: Chyba - položka s reg. číslem ' + RegCis + ' nebyla uložena na výdejku. Doklad je blokován jiným uživatelem.' ;
Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=' + QuotedStr(Zprava));
end;
end;
// end;
end;
end;
end;
// přidáno 8.11.2018
procedure TformOdvedeniPrikazu.UlozChybu(const Helios: IHelios; msg: string; E: Exception);
var txt: string;
begin
if not Assigned(E) then
txt:= ''
else
txt:= E.Message;
if txt<>'' then
msg:= msg + ' - chyba: ' + txt;
Helios.ExecSQL('INSERT #TabExtKom (Poznamka) VALUES (N' + QuotedStr(msg) + ')');
end;
end.