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

4324 lines
189 KiB
ObjectPascal

{
Zmeny ve verzich
----------------------
2.0.2013.0904 - pokud na PL (dodaci list z IT) existuje nova karta materialu, zalozi se do skupiny MAT
}
unit ComObjekt;
INTERFACE
uses System.SysUtils, System.Win.ComObj, ddPlugin_TLB;
const
tblObjMatPoh = '[dbo].[_TabObjMat_PohybyZboExpPr]';
tblOrg = '[dbo].[TabCisOrg]'; // tblOrg = '[dbo].[TabOrganizace]'; // přidáno 26.6.2018 // opraveno 3.7.2018 podle unit3
type
TidVPsKanban = record
id: integer;
radaPrikaz: string[20];
idKZ: integer;
ks: Extended;
ksVKoop: Extended;
end;
TplgLOVATO = class(TComObject, IHePlugin)
private
// function PartnerIdentification: WideString; safecall;
// function DelphiCompilerVersion: Single; safecall;
procedure Run(const Helios: IHelios); safecall;
function TestKoopObjVydejMat(const Helios:IHelios; idPKO: integer): Boolean; safecall;
procedure ImportEP(const Helios: IHelios; const idDZx: integer; ExpP: boolean); safecall;
procedure KontrolaExistVsechObj(const Helios: IHelios); safecall;
procedure ExportKoopObj(const Helios: IHelios; idKObj: integer); safecall;
procedure ExportKoopObjHQL(const Helios: IHelios; idKObj: integer); safecall;
procedure GenerujVydejZEP(const Helios: IHelios); safecall;
procedure OdpovedPPL(const Helios: IHelios); safecall;
procedure UlozChybu(const Helios: IHelios; msg: string; E:Exception);
procedure ImportNesplObj(const Helios: IHelios); safecall;
procedure HromadneOdvedeniEvidKoop(const Helios: IHelios); safecall;
procedure GenerujVydejMatZPrikazu(const Helios: IHelios; idEvidKoop: integer); safecall;
procedure PrerovnejPolozkyKoopObj(const Helios: IHelios; idKObj: integer); safecall;
procedure ZadejPolPrijemkyNaVydejku(const Helios: IHelios; idPrij: integer); safecall;
procedure ZadejVyrPrikazNaVydejku(const Helios: IHelios; idVPr: integer); safecall;
procedure StavSkladuDoZadVyp(const Helios: IHelios); safecall;
procedure VyrabeneDilceDoZadVyp(const Helios: IHelios);
procedure ImportZClipboardu(const Helios: IHelios; TypImp: byte); safecall;
procedure PrevodStavSkladuImp(const Helios: IHelios; TypImp: byte); safecall;
procedure RozpadPrijStavNaKooperanty(const Helios: IHelios; const idDZ: integer=0; const idSS: Integer=0); safecall;
procedure KooperaceniPolozkySeSeskupenim(const Helios: IHelios); safecall;
procedure ImportStavuInventur(const Helios: IHelios); safecall;
procedure ImportObjMaterialu(const Helios: IHelios; const typ:byte); safecall;
procedure ImportObjMatEdit(const Helios: IHelios; idZazn: integer); safecall;
procedure ImportObjMatRozpad(const Helios: IHelios); safecall;
procedure ImportDL_CHD(const Helios: IHelios); safecall;
procedure ImportDL(const Helios: IHelios); safecall; // přidáno při číslu palety
procedure SmazObjNadvyroby(const Helios: IHelios; idNad: integer); safecall;
// procedure SouboryProItalii(const Helios: IHelios; TypSouboru: byte); safecall;
end;
const
Class_LOVATO: TGUID = '{EA0150F1-EA07-45D2-9109-E7349B03AC1B}';
plgSysName = 'plgLOVATO';
Nadvyr = '20000105';
sklVyr = '200';
sklCHD = '20000107';
orgLovatoIT = '1';
orgLovatoITmena = 'EUR';
szNovyImportExpP = 'V00';
szNovyImportMat = 'M00';
rImpNesplObj = '200';
CRLF = #13#10;
tblStavUm = '[dbo].[TabVStavUmisteni]';
tblUmist = '[dbo].[TabUmisteni]';
tblRozpPrijStav = '[dbo].[_TabRozpadPrijStav]';
tblEvidOp = '[dbo].[_TabEvidOperaci_Barcode]';
tblEvidOpVPr = '[dbo].[_TabEvidOpPrikazy]';
tblEvidNadvyrVPr = '[dbo].[_TabEvidNadvyrPrikaz]';
tblPZSD = '[dbo].[TabPohybyZboziSD]';
errPlg = CRLF + '(plgLOVATO, COM)';
IMPLEMENTATION
uses Vcl.Controls, System.Win.ComServ, Vcl.Graphics, Vcl.Forms, System.Variants, System.StrUtils, Vcl.Dialogs,
Vcl.Clipbrd, System.Classes, Winapi.Windows, System.DateUtils, Vcl.StdActns, Winapi.ShlObj, Vcl.StdCtrls,
Vcl.ComCtrls, dxCore, myUtils, helUtils, XLSReadWriteII5, XLSSheetData5, Xc12DataStyleSheet5, Xc12Utils5, // nExcel,
// frmMain,
// frmUnit2,
frmUnit3, //prozatimně zakomentováno 26.6.2018 (z důvodu TBPackageU)
frmUnit5,
// frmUnit6,
frmBaliciListy,
// frmUnit8, { formPrijemkaNadvyroba}
frmUnit9,
frmOdvedPrikaz, { formOdvedeniPrikazu pres BarCode}
frmUnit11, { formStSklHrZmen }
frmUnit12, { formRozdelMat }
frmUnit13, { formPrevPrij }
frmDemontaz, { formDemontaz}
frmMaterial, { formMaterial }
frmUnit15, { formOdvodRele }
frmReklamaceMat, { formDemontazMat }
frmKanbanBox,
frmKanbanObj;
var oVar1: OleVariant;
aktObd: integer;
fName: string;
// xls: TXLSReadWriteII5;
// icoAdd, icoDel, icoEdit, icoPrev, icoNext: TIcon;
// hFnd: THandle;
// RS: TResourceStream;
hdl: Cardinal;
// přidáno 9.8.2018
waitForm: TForm;
waitLabel: TLabel;
waitPBar: TProgressBar;
function waitStart(TheParent: TComponent; sMsg: string; maxPBar: integer; PBarColor: TColor):Boolean;
begin
result:= false;
if (waitForm=nil) then
begin
waitForm:= TForm.Create(TheParent);
with waitForm do
begin
Position:= poOwnerFormCenter;
width:= 500;
Height:= 25;
waitLabel:= TLabel.Create(waitForm);
with waitLabel do
begin
Align:= alClient;
Alignment:= taCenter;
Font.Height:= -30;
ParentFont:= false;
Caption:= sMsg;
Parent:= waitForm;
end;
if (maxPBar>0) then
begin
waitPBar:= TProgressBar.Create(waitForm);
with waitPBar do
begin
AlignWithMargins:= true;
BarColor:= PBarColor;
Position:= 0;
Top:= waitLabel.Top + waitLabel.Height + 5;
Min:= 0;
Max:= maxPBar;
Width:= waitForm.Width - 10;
Left:= 5;
Height:= 10;
Parent:= waitForm;
end;
end;
SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and not WS_CAPTION);
ClientHeight:= Height;
Show;
Invalidate;
Repaint;
end;
result:= true;
end;
end;
procedure waitSetProgBar(pozice: integer);
begin
if (pozice>0) then
if Assigned(waitPBar) then
if (waitPBar.Max>=pozice) then
begin
waitPBar.Position:= pozice;
waitPBar.Parent.Invalidate;
end;
end;
procedure WaitSetMsg( sMsg : string );
begin
WaitLabel.Caption := sMsg;
WaitForm.Refresh;
end;
function waitEnd: boolean;
begin
result:= false;
if (waitForm<>nil) then
begin
waitForm.Hide;
waitForm.Free;
waitForm:= nil;
result:= true;
end;
end;
// konec přidání 9.8.2018
//přidáno 26.6.2018
{ WaitForm : TForm;
WaitLabel : TLabel;
// function WaitStart( TheParent : TComponent; sMsg : string ) : boolean;
function WaitStart(
TheParent : TComponent;
sMsg : string )
: boolean;
begin
Result := False;
// create our message form
// only if it's not already
// created
if( Nil = WaitForm )then
begin
WaitForm :=
TForm.Create( TheParent );
with WaitForm do
begin
Position := poScreenCenter;
Width := 500;
Height := 25;
// create the message label
WaitLabel :=
TLabel.Create( WaitForm );
with WaitLabel do
begin
Align := alClient;
Alignment := taCenter;
Font.Height := -30;
ParentFont := False;
Caption := sMsg;
Parent := WaitForm;
end;
// hide the title bar
SetWindowLong( Handle,
GWL_STYLE,
GetWindowLong(
Handle, GWL_STYLE )
and not WS_CAPTION );
ClientHeight := Height;
Show;
Update;
end;
Result := True;
end;
end;
procedure WaitSetMsg( sMsg : string );
begin
WaitLabel.Caption := sMsg;
WaitForm.Refresh;
end;
function WaitEnd : boolean;
begin
Result := False;
if( Nil <> WaitForm )then
begin
WaitForm.Hide;
WaitForm.Free;
WaitForm := Nil;
Result := True;
end;
end;
} //konec přidání 26.6.2018
// přidáno 4.7.2018
{
WaitForm : TForm;
WaitLabel : TLabel;
function waitStart(TheParent: TComponent; sMsg: string):Boolean;
begin
result:= false;
if (waitForm=nil) then
begin
waitForm:= TForm.Create(TheParent);
with waitForm do
begin
Position:= poScreenCenter;
width:= 500;
Height:= 25;
waitLabel:= TLabel.Create(waitForm);
with waitLabel do
begin
Align:= alClient;
Alignment:= taCenter;
Font.Height:= -30;
ParentFont:= false;
Caption:= sMsg;
Parent:= waitForm;
end;
SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and not WS_CAPTION);
ClientHeight:= Height;
Show;
Update;
end;
result:= true;
end;
end;
procedure WaitSetMsg( sMsg : string );
begin
WaitLabel.Caption := sMsg;
WaitForm.Refresh;
end;
function waitEnd: boolean;
begin
result:= false;
if (waitForm<>nil) then
begin
waitForm.Hide;
waitForm.Free;
waitForm:= nil;
result:= true;
end;
end;
}
// konec přidání 4.7.2018
function VyberAdresar(var Foldr: string; Title: string): Boolean;
var BrowseInfo: TBrowseInfo;
ItemIDList: PItemIDList;
DisplayName: array[0..MAX_PATH] of Char;
begin
Result := False;
FillChar(BrowseInfo, SizeOf(BrowseInfo), #0);
with BrowseInfo do
begin
hwndOwner := Application.Handle;
pszDisplayName := @DisplayName[0];
lpszTitle := PChar(Title);
ulFlags := BIF_RETURNONLYFSDIRS;
end;
ItemIDList := SHBrowseForFolder(BrowseInfo);
if Assigned(ItemIDList) then
if SHGetPathFromIDList(ItemIDList, DisplayName) then
begin
Foldr := DisplayName;
Result := True;
end;
end;
function OtevriSouborXLS(var nazev: string; title: shortString): Boolean;
var dlgOpenXP: TOpenDialog; // dialog pro Windows XP
dlgOpenW7: TFileOpenDialog; // dialog pro Windows Vista a novejsi
titulek, filtr1, filtr2: string;
iniDir: wideString;
begin
result:= false;
if title='' then
title:= 'Vyberte soubor pro import ';
filtr1:= 'Sešit MS Excel';
filtr2:= '*.xls;*.xlsx';
nazev:= '';
iniDir:= GetEnvironmentVariable('USERPROFILE') + '\Desktop';
try
dlgOpenXP:= TOpenDialog.Create(nil);
dlgOpenW7:= TFileOpenDialog.Create(nil);
if JeVistaAVyssi then // funkce z "myUtils.pas"
begin
dlgOpenW7.Title:= title;
dlgOpenW7.OkButtonLabel:= 'Vybrat';
with dlgOpenW7.FileTypes.Add do
begin
DisplayName:= filtr1;
FileMask:= filtr2;
end;
dlgOpenW7.DefaultFolder:= iniDir;
if dlgOpenW7.Execute then
begin
nazev:= dlgOpenW7.FileName;
result:= true;
end;
end
else
begin
dlgOpenXP.Title:= titulek;
dlgOpenXP.Filter:= filtr1 + '|' + filtr2;
dlgOpenXP.InitialDir:= iniDir;
if dlgOpenXP.Execute then
begin
nazev:= dlgOpenXP.FileName;
result:= true;
end;
end;
finally
dlgOpenXP.Free;
dlgOpenW7.Free;
end;
end;
procedure TplgLOVATO.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;
{
procedure TplgLOVATO.VytvorKanbanObj(const Helios: IHelios; const zOznac: ShortString; const arrID: TArray<integer>);
var lSQL: string;
i: integer;
begin
lSQL:= '';
if (zOznac='1') and (Length(arrID)>0) then
begin
lSQL:= 'IF OBJECT_ID(' + QuotedStr('tempdb..#TabKanbanObj') + ') IS NULL' + CRLF;
lSQL:= 'CREATE TABLE #TabKanbanObj (IDbox INT NOT NULL)' + CRLF;
for i:=0 to Length(arrID)-1 do
lSQL:= lSQL + 'INSERT #TabKanbanObj (IDbox) VALUES (' + IntToStr(arrID[i]) + ')' + CRLF;
end;
lSQL:= lSQL + 'EXEC dbo.ep_VytvorKanbanObj';
try
Helios.ExecSQL(lSQL);
except on E:Exception do
begin
Clipboard.AsText:= lSQL;
Helios.Error(#1'Chyba při vytváření Kanban objednávky - '#1 + E.Message);
end;
end;
Helios.Refresh(true);
end;
}
procedure TplgLOVATO.KontrolaExistVsechObj(const Helios: IHelios); safecall;
var lSQL, fName: string;
obj, poz, regC: string;
idx: integer;
xls: TXLSReadWriteII5;
wSheet1: TXLSWorkSheet;
chyba: boolean;
begin
if OtevriSouborXLS(fName, 'Vyberte XLS soubor se seznamem objednávek') then
begin
xls:= TXLSReadWriteII5.Create(nil);
try
chyba:= false;
xls.LoadFromFile(fName);
wSheet1:= xls.Items[0];
idx:= 1;
waitStart(nil, 'Běží porovnávání objedávek - celkem ' + IntToStr(wSheet1.LastRow), wSheet1.LastRow, $0000FF); // clRed
waitSetProgBar(1); //dočasně zakomentováno 26.6.2018
obj:= Trim(wSheet1.AsString[0,idx]);
if (obj<>'') then
begin
lSQL:= 'IF OBJECT_ID(' + QuotedStr('tempdb..#TabExtKom') + ') IS NULL CREATE TABLE #TabExtKom(Poznamka NVARCHAR(255))';
Helios.ExecSQL(lSQL);
while (obj<>'') do
begin
poz:= RightStr(Trim(wSheet1.AsString[1,idx]),4);
regC:= Trim(wSheet1.AsString[2,idx]);
lSQL:= 'SELECT id FROM ' + tblPZ + ' WHERE RegCis=N' + QuotedStr(regC) + ' AND DruhPohybuZbo=9 AND NazevSozNa1=' + QuotedStr(obj);
lSQL:= lSQL + ' AND NazevSozNa2=N' + QuotedStr(poz);
with Helios.OpenSQL(lSQL) do
if (RecordCount=0) then
begin
chyba:= true;
Helios.ExecSQL('INSERT #TabExtKom(Poznamka) SELECT N' + QuotedStr('Chybí objednávka ' + obj + '/' + poz + ' - ' + regC));
end;
Inc(idx);
if (idx mod 10=0) then
waitSetProgBar(idx); //dočasně zakomentováno 26.6.2018
obj:= Trim(wSheet1.AsString[0,idx]);
end;
end;
waitEnd;
Helios.Info(#1'Kontrola ukončena'#1 + IfThen(chyba,CRLF + '(po odkliknutí OK se zobrazí přehled chyb)',''));
except on E:Exception do
Helios.Error('Chyba při zpracování XLS souboru: ' + E.Message + #1);
end;
xls.Free;
end;
end;
procedure TplgLOVATO.ImportObjMaterialu(const Helios: IHelios; const typ:byte);
var lSQL, sTemp: string;
idVyd, cOrg, cnt: integer;
begin
lSQL:= 'IF OBJECT_ID(N' + QuotedStr('dbo._TabObjMat_PohybyZboExpPr') + ') IS NOT NULL DROP TABLE dbo._TabObjMat_PohybyZboExpPr' + CRLF;
lSQL:= lSQL + 'CREATE TABLE ' + tblObjMatPoh + ' (ID int IDENTITY(1,1) NOT NULL, IdPohybZbozi int NOT NULL, SkupZbo NVARCHAR(3) NOT NULL,';
lSQL:= lSQL + 'RegCis NVARCHAR(30) NOT NULL, Mnozstvi numeric(19, 6) DEFAULT 0.0 NOT NULL, MnozstviVyd numeric(19, 6) DEFAULT 0.0 NOT NULL,';
lSQL:= lSQL + ' PozadDatDod DATETIME, SdilenyMat BIT DEFAULT 0, MnozstviZad numeric(19,6) DEFAULT 0.0 NOT NULL, IdKmenZbozi int NOT NULL)';
Helios.ExecSQL(lSQL);
cOrg:= StrToInt(VarToStr(Helios.QueryEdit.FieldByNameValues('CisloOrg')));
cnt:= 0;
lSQL:= 'SELECT pz.Id, (pz.Mnozstvi-pz.MnOdebrane-pz.MnozstviStorno) AS Mnozstvi, kz.Id AS idKZ, kz.SkupZbo, kz.RegCis, pz.PozadDatDod, ISNULL(kze._SdilenyMaterial,0) AS Sdileny FROM ' + tblPZ;
lSQL:= lSQL + ' pz INNER JOIN ' + tblDZ + ' dz ON (dz.Id=pz.IDDoklad) INNER JOIN ' + tblSS + ' ss ON (ss.Id=pz.IdZboSklad) INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.Id)';
lSQL:= lSQL + ' LEFT JOIN ' + tblKZe + ' kze ON (kze.Id=kz.Id) WHERE dz.CisloOrg=' + IntToStr(cOrg) + ' AND dz.Splneno=0 AND dz.StavRezervace<>N' + QuotedStr('X');
lSQL:= lSQL + ' AND dz.RadaDokladu=N' + QuotedStr('280') + ' AND dz.DruhPohybuZbo=9 AND DATEDIFF(day,GETDATE(),pz.PozadDatDod)<4 AND (pz.Mnozstvi-pz.MnOdebrane-pz.MnozstviStorno)>0';
if (typ=1) then
lSQL:= lSQL + ' AND kze._SdilenyMaterial=1';
with Helios.OpenSQL(lSQL) do
begin
First;
while not(EOF) do
begin
Inc(cnt);
lSQL:= 'INSERT ' + tblObjMatPoh + ' (IdPohybZbozi, SkupZbo, RegCis, Mnozstvi, PozadDatDod, SdilenyMat, IdKmenZbozi, MnozstviZad) VALUES (' + VarToStr(FieldByNameValues('Id')) + ',N';
lSQL:= lSQL + QuotedStr(VarToStr(FieldByNameValues('SkupZbo'))) + ',N' + QuotedStr(VarToStr(FieldByNameValues('RegCis')));
lSQL:= lSQL + ',' + StringReplace(VarToStr(FieldByNameValues('Mnozstvi')),',','.',[rfReplaceAll]) + ',';
sTemp:= VarToStr(FieldByNameValues('PozadDatDod'));
lSQL:= lSQL + IfThen(sTemp='','NULL','CONVERT(datetime,N' + QuotedStr(sTemp) + ',104)');
lSQL:= lSQL + ',' + IfThen(LowerCase(VarToStr(FieldByNameValues('Sdileny')))='false','0','1') + ',' + VarToStr(FieldByNameValues('idKZ')) + ',';
lSQL:= lSQL + StringReplace(VarToStr(FieldByNameValues('Mnozstvi')),',','.',[rfReplaceAll]) + ')';
try
Helios.ExecSQL(lSQL);
except on E:Exception do
Helios.Error(#1'Chyba řádek ' + IntToStr(cnt) + '/ RČ ' + VarToStr(FieldByNameValues('RegCis')) + ' >> ' + E.Message + #1);
end;
Next;
end;
lSQL:= 'MERGE ' + tblObjMatPoh + ' AS T USING (SELECT DISTINCT(IdKmenZbozi), SUM(Mnozstvi) AS MnSum FROM ' + tblObjMatPoh + ' GROUP BY IdKmenZbozi) AS S';
lSQL:= lSQL + ' ON (S.IdKmenZbozi=T.IdKmenZbozi) WHEN MATCHED THEN UPDATE SET T.MnozstviZad=S.MnSum;';
Helios.ExecSQL(lSQL);
end;
Helios.OpenBrowse(100134,'');
end;
procedure TplgLOVATO.ImportObjMatEdit(const Helios: IHelios; idZazn: Integer);
var lSQL, mn: string;
btn: TModalResult;
begin
if (idZazn>0) then
begin
mn:= '0';
mn:= Trim(InputBoxOkCancel('Vydávané množství materiálu celkem','Množství celkem: ', mn, btn));
if (btn=mrOk) and (mn<>'') then
Helios.ExecSQL('UPDATE ' + tblObjMatPoh + ' SET MnozstviZad=' + StringReplace(mn,',','.',[rfReplaceAll]) + ' WHERE IdKmenZbozi=' + IntToStr(idZazn));
end;
end;
procedure TplgLOVATO.ImportObjMatRozpad(const Helios: IHelios);
var lSQL: string;
begin
lSQL:= 'SELECT DISTINCT(idKmenZbozi), MnozstviZad FROM ' + tblObjMatPoh;
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
First;
while not(EOF) do
begin
Next;
end;
end;
end;
procedure TplgLOVATO.ImportStavuInventur(const Helios: IHelios);
var lSQL, idPlan: string;
begin
if Helios.Prenos2(100099,'id','DatumGenerovani_X',oVar1,oVar2,'','Inventurní hlavičky',true,true,false,1) then
begin
if (VarToStr(oVar1)<>'') then
begin
lSQL:= 'SELECT i.IdKmenZbozi,i.MnozstviInv,i.DatPorizeni,i.SkupZbo+RegCis,ss.IDSklad,i.MnozstviSklad FROM ' + tblInvI;
lSQL:= lSQL + ' i LEFT JOIN ' + tblSS + ' ss ON (i.IDSklad=ss.id) WHERE i.idDoklad IN (' + VarToStr(oVar1) + ')';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
First;
while not(EOF) do
begin
idPlan:= '';
lSQL:= 'INSERT ' + tblPPlan + ' (Dilec,Mnozstvi,Datum) VALUES (' + VarToStr(FieldValues(0)) + ',';
lSQL:= lSQL + StringReplace(VarToStr(FieldValues(1)),',','.',[rfReplaceAll]);
lSQL:= lSQL + ',CONVERT(datetime,N' + QuotedStr(VarToStr(FieldValues(2))) + ',104) )';
lSQL:= lSQL + CRLF + 'SELECT SCOPE_IDENTITY()';
try
with Helios.OpenSQL(lSQL) do
idPlan:= VarToStr(FieldValues(0));
if (idPlan<>'') then
begin
lSQL:= 'UPDATE ' + tblPPlanE + ' SET _IDSklad=N' + QuotedStr(VarToStr(FieldValues(4))) + ',_InventuraSM=1';
lSQL:= lSQL + ' WHERE id=' + idPlan + CRLF + 'IF (@@ROWCOUNT=0) INSERT ' + tblPPlanE + ' (id,_IDSklad,_InventuraSM)';
lSQL:= lSQL + ' VALUES (' + idPlan + ',N'+ QuotedStr(VarToStr(FieldValues(4))) + ',1)';
Helios.ExecSQL(lSQL);
end;
except on E:Exception do
UlozChybu(Helios,'Nelze uložit položku inventury (fyz): ' + VarToStr(FieldValues(3)) + ' sklad ' + VarToStr(FieldValues(4)),E);
end;
idPlan:= '';
lSQL:= 'INSERT ' + tblPPlan + ' (Dilec,Mnozstvi,Datum) VALUES (' + VarToStr(FieldValues(0)) + ',';
lSQL:= lSQL + StringReplace(VarToStr(FieldValues(5)),',','.',[rfReplaceAll]);
lSQL:= lSQL + ',CONVERT(datetime,N' + QuotedStr(VarToStr(FieldValues(2))) + ',104) )';
lSQL:= lSQL + CRLF + 'SELECT SCOPE_IDENTITY()';
try
with Helios.OpenSQL(lSQL) do
idPlan:= VarToStr(FieldValues(0));
if (idPlan<>'') then
begin
lSQL:= 'UPDATE ' + tblPPlanE + ' SET _IDSklad=N' + QuotedStr(VarToStr(FieldValues(4))) + ',_InventuraSM=0';
lSQL:= lSQL + ' WHERE id=' + idPlan + CRLF + 'IF (@@ROWCOUNT=0) INSERT ' + tblPPlanE + ' (id,_IDSklad,_InventuraSM)';
lSQL:= lSQL + ' VALUES (' + idPlan + ',N'+ QuotedStr(VarToStr(FieldValues(4))) + ',0)';
Helios.ExecSQL(lSQL);
end;
except on E:Exception do
UlozChybu(Helios,'Nelze uložit položku inventury (skl): ' + VarToStr(FieldValues(3)) + ' sklad ' + VarToStr(FieldValues(4)),E);
end;
Next;
end;
end;
end
else
Helios.Info(#1'Nebyla vybrána žádná inventura.'#1);
end
else
Helios.Info(#1'Akce importu inventurních stavů byla zrušena.'#1);
end;
procedure TplgLOVATO.SmazObjNadvyroby(const Helios: IHelios; idNad: integer);
var sql, msg: string;
errId: byte;
cVyd, cPrij, datVyd, datPrij: string;
idDZv, idPZ, idDZp, idVydejMat, idVydejStorno, idPrijMat, idPrijStorno: Integer;
realVyd, realPrij: boolean;
begin
msg:= '';
errId:= 0;
cVyd:= '';
cPrij:= '';
idVydejMat:= 0;
datVyd:= '';
idVydejStorno:= 0;
idPrijMat:= 0;
datPrij:= '';
idPrijStorno:= 0;
with Helios.OpenSQL('SELECT id FROM ' + tblEvidNadvyr + ' WHERE Stav=0 AND Splneno=1 AND id=' + IntToStr(idNad)) do
if (RecordCount=1) then
begin
errId:= 1;
msg:= 'Nelze smazat, objednávka Nadvýroby byla již splněna.';
end;
if (errId=0) then
with Helios.OpenSQL('SELECT id FROM ' + tblEvidNadvyr + ' WHERE Zaevidovano>0 AND id=' + IntToStr(idNad)) do
if (RecordCount=1) then
begin
errId:= 2;
msg:= 'Nelze smazat, na objednávce Nadvýroby jsou evidované vyrobené kusy.' + CRLF;
msg:= msg + 'Objednávku lze ručně označit jako splněnou' + CRLF;
msg:= msg + ' a zbylý materiál vrátit převodem na sklad 200-Výroba.';
end;
if (errId=0) then
with Helios.OpenSQL('SELECT IdVydejkaMat FROM ' + tblEvidNadvyr + ' WHERE IdVydejkaMat IS NOT NULL AND id=' + IntToStr(idNad)) do
if (RecordCount=1) then
begin
realVyd:= false;
idVydejMat:= StrToInt(VarToStr(FieldValues(0)));
if (idVydejMat>0) then
with Helios.OpenSQL('SELECT RadaDokladu + N'' '' + CONVERT(nvarchar,PoradoveCislo),DatPorizeni FROM ' + tblDZ + ' WHERE id=' + IntToStr(idVydejMat)) do
begin
cVyd:= VarToStr(FieldValues(0));
datVyd:= VarToStr(FieldValues(1));
end;
realPrij:= false;
idPrijMat:= 0;
if (idVydejMat>0) then
begin
with Helios.OpenSQL('SELECT TOP(1) IDDoklad FROM ' + tblPZ + ' WHERE IDOldDoklad=' + IntToStr(idVydejMat)) do
if (RecordCount=1) then
idPrijMat:= StrToInt(VarToStr(FieldValues(0)));
with Helios.OpenSQL('SELECT id FROM ' + tblDZ + ' WHERE id=' + IntToStr(idVydejMat) + ' AND Realizovano=1') do
if (RecordCount=1) then
realVyd:= true;
end;
if (idPrijMat>0) then
begin
with Helios.OpenSQL('SELECT id FROM ' + tblDZ + ' WHERE id=' + IntToStr(idPrijMat) + ' AND Realizovano=1') do
if (RecordCount=1) then
realPrij:= true;
with Helios.OpenSQL('SELECT RadaDokladu + N'' '' + CONVERT(nvarchar,PoradoveCislo),DatPorizeni FROM ' + tblDZ + ' WHERE id=' + IntToStr(idPrijMat)) do
begin
cPrij:= VarToStr(FieldValues(0));
datPrij:= VarToStr(FieldValues(1));
end;
end;
if (realVyd) and (realPrij) then
errId:= 13;
if (idVydejMat>0) and not(realVyd) and (idPrijMat=0) then
errId:= 4;
if (idVydejMat>0) and (realVyd) and (idPrijMat>0) and not(realPrij) then
errId:= 6;
end;
case errId of
3: begin // real vyd+prij
Helios.Error(#1 + 'Na objednávku byl již vydán materiál, bude vygenerována vratka na sklad 200-Výroba.' + #1);
idDZv:= 0;
sql:= 'DECLARE @dt DATETIME, @idDZ INT' + CRLF + 'SET @dt=GETDATE()' + CRLF;
sql:= sql + 'EXEC dbo.hp_InsertHlavickyOZ @idDZ OUT,@Sklad=N' + QuotedStr(Nadvyr) + ',@Mena=N' + QuotedStr('CZK');
sql:= sql + ',@DruhPohybu=4,@RadaDokladu=N' + QuotedStr('450') + ',@Insert=1,@CisloOrg=0,@PC=NULL';
sql:= sql + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @idDZ';
try
with Helios.OpenSQL(sql) do
idDZv:= StrToInt(VarToStr(FieldValues(0)));
except on E:Exception do
begin
Clipboard.AsText:= sql;
Helios.Error(#1'Nelze uložit hlavičku výdejky/převodky, vratka musí být provedena ručně.'#1 + CRLF + E.Message);
end;
end;
if (idDZv>0) then
begin
sql:= 'UPDATE ' + tblDZ + ' SET BlokovaniEditoru=' + IntToStr(Helios.UserId) + ',IdSkladPrevodu=N' + QuotedStr(sklVyr);
sql:= sql + ',TypPrevodky=N' + QuotedStr('250') + ',DruhPohybuPrevod=0,PopisDodavky=N' + QuotedStr('Storno Nadvýroby - zpětný převod mat.');
sql:= sql + ' WHERE id=' + IntToStr(idDZv);
Helios.ExecSQL(sql);
sql:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL CREATE TABLE #TabTempUziv(Tabulka';
sql:= sql + ' NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)' + CRLF;
sql:= sql + 'EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=' + IntToStr(idDZv) + ',@IDDokladSrc=' + IntToStr(idPrijMat);
sql:= sql + ',@CisloOrgCil=0,@MUcil=null,@KurzCil=1,@JednotkaMenyCil=1,@MenaCil=N' + QuotedStr('CZK');
sql:= sql + ',@Returnem=1,@KurzEuroCil=0,@CisloZakCil=null,@NOkruhCil=null,@StredNakladCil=null,@StredVynosCil=null';
sql:= sql + ',@FormaDopravyCil=null,@VozidloCil=null,@ObjednavkaCil=null,@PopisDodavkyCil=N' + QuotedStr('Storno Nadvýroby - zpětný převod mat.');
sql:= sql + ',@NavaznyDobropisCil=null,@ZamestnanecCil=null,@DodFakCil=null,@Nasobek=1,@SlevaCil=0';
sql:= sql + ',@VytvaretDokladovouVazbu=0,@VytvaretPolozkovouVazbu=0';
try
Helios.ExecSQL(sql);
sql:= 'UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL WHERE id=' + IntToStr(idDZv) + CRLF;
sql:= sql + 'UPDATE ' + tblEvidNadvyr + ' SET IdVratkaMat=' + IntToStr(idDZv) + ' WHERE id=';
sql:= sql + IntToStr(idNad);
Helios.ExecSQL(sql);
{
idDZp:= 0;
sql:= 'DECLARE @dt DATETIME, @idDZ INT' + CRLF + 'SET @dt=GETDATE()' + CRLF;
sql:= sql + 'EXEC dbo.hp_InsertHlavickyOZ @idDZ OUT,@Sklad=N' + QuotedStr(sklVyr) + ',@Mena=N' + QuotedStr('CZK');
sql:= sql + ',@DruhPohybu=0,@RadaDokladu=N' + QuotedStr('250') + ',@Insert=1,@CisloOrg=0,@PC=NULL';
sql:= sql + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @idDZ';
try
Clipboard.AsText:= sql;
with Helios.OpenSQL(sql) do
idDZp:= StrToInt(VarToStr(FieldValues(0)));
except on E:Exception do
Helios.Error(#1'Nelze uložit hlavičku výdejky/převodky, kontaktujte správce.'#1 + CRLF + E.Message + CRLF + sql);
end;
if (idDZp>0) then
begin
sql:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL CREATE TABLE #TabTempUziv(Tabulka';
sql:= sql + ' NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)' + CRLF;
sql:= sql + 'EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=' + IntToStr(idDZp) + ',@IDDokladSrc=' + IntToStr(idDZv);
sql:= sql + ',@CisloOrgCil=0,@MUcil=null,@KurzCil=1,@JednotkaMenyCil=1,@MenaCil=N' + QuotedStr('CZK');
sql:= sql + ',@Returnem=1,@KurzEuroCil=0,@CisloZakCil=null,@NOkruhCil=null,@StredNakladCil=null,@StredVynosCil=null';
sql:= sql + ',@FormaDopravyCil=null,@VozidloCil=null,@ObjednavkaCil=null,@PopisDodavkyCil=N' + QuotedStr('Storno Nadvýroby - zpětný převod mat.');
sql:= sql + ',@NavaznyDobropisCil=null,@ZamestnanecCil=null,@DodFakCil=null,@Nasobek=1,@SlevaCil=0';
sql:= sql + ',@VytvaretDokladovouVazbu=0,@VytvaretPolozkovouVazbu=1';
try
Clipboard.AsText:= sql;
Helios.ExecSQL(sql);
sql:= 'UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL WHERE id=' + IntToStr(idDZp);
Helios.ExecSQL(sql);
except on E:Exception do
begin
Helios.Error(#1'Nelze uložit hlavičku položky příjemky/převodky, kontaktujte správce.'#1 + CRLF + E.Message);
end;
end;
end;
}
except on E:Exception do
Helios.Error(#1'Nelze vygenerovat výdejka (vratka).'#1 + CRLF + E.Message);
end;
end;
Helios.Info(#1'Pozor, vytvořená výdejka není realizovaná.'#1);
end;
4: begin // udelana vydejka, nerealizovana, bez navazne prijemky
Helios.Error(#1 + 'Na objednávku byla vygenerována výdejka, aktuálně není realizována a bude zrušena.' + #1);
sql:= 'BEGIN TRAN' + CRLF + 'DELETE FROM ' + tblDZDod + ' WHERE IDHlavicky=' + IntToStr(idVydejMat) + CRLF;
sql:= sql + 'DELETE FROM ' + tblPZSD + ' WHERE Id IN (SELECT id FROM ' + tblPZ + ' WHERE IDDoklad=' + IntToStr(idVydejMat) + ')' + CRLF;
sql:= sql + 'DELETE FROM ' + tblPZ + ' WHERE IDDoklad=' + IntToStr(idVydejMat) + CRLF;
sql:= sql + 'DELETE FROM ' + tblDZ + ' WHERE id=' + IntToStr(idVydejMat) + ' AND Realizovano=0' + CRLF;
sql:= sql + 'UPDATE ' + tblEvidNadvyroby + ' SET IdVydejkaMat=NULL WHERE id=' + IntToStr(idNad) + CRLF;
sql:= sql + 'IF (@@ERROR<>0) ROLLBACK TRAN ELSE COMMIT TRAN';
try
Helios.ExecSQL(sql);
except on E:Exception do
Helios.Error(#1'Chyba: ' + E.Message + #1);
end;
end;
5: begin
Helios.Error(#1 + 'Na objednávku byl převeden materiál, proveďte zpětný převod ručně (Př. ' + cPrij + ')' + #1);
end;
6: begin // vytvorena a realizovana vydejka, vytvorena a NErealizovana prijemka
sql:= 'BEGIN TRAN' + CRLF + 'EXEC dbo.hp_SmazDokladOZ @IDDoklad=' + IntToStr(idPrijMat) + CRLF;
sql:= sql + 'UPDATE ' + tblDZ+ ' SET NavaznyDoklad=NULL WHERE id=' + IntToStr(idVydejMat);
{
try
Helios.ExecSQL(sql);
except on E:Exception do
Helios.Error(#1'Chyba: ' + E.Message + #1);
end;
}
sql:= sql + CRLF + 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL';
sql:= sql + ' CREATE TABLE #TabTempUziv(Tabulka NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)';
sql:= sql + CRLF + 'DECLARE @dVyd DATETIME, @idStorno INT, @bylaChyba INT, @uziv SMALLINT' + CRLF;
sql:= sql + 'SELECT @uziv=Id FROM ' + tblUziv + ' WHERE LoginName=SUSER_SNAME()' + CRLF;
sql:= sql + 'SET @dVyd=' + IfThen(datVyd='','NULL','CONVERT(datetime,N' + QuotedStr(datVyd) + ',104)') + CRLF;
// sql:= sql + 'EXEC dbo.hp_InsertHlavickyOZ @idStorno OUT, @Sklad=N' + QuotedStr(sklVyr) + ',@DruhPohybu=3';
// sql:= sql + ',@RadaDokladu=N' + QuotedStr('410') + ',@Insert=1,@Mena=N' + QuotedStr('CZK');
// sql:= sql + ',@PC=NULL,@DatumPorizeni=@dVyd,@CisloOrg=0' + CRLF;
sql:= sql + 'EXEC dbo.hp_Generuj_Storno_Doklad @ID=' + IntToStr(idVydejMat) + ',@Selectem=0';
sql:= sql + ',@DruhPohybu=3,@RadaDokladu=N' + QuotedStr('410') + ',@IDSklad=N' + QuotedStr(sklVyr);
sql:= sql + ',@AObdobi=NULL,@ADatPorizeni=@dVyd,@idStorno=@idStorno OUT,@bylaChyba=@bylaChyba OUT';
sql:= sql + CRLF + 'IF @idStorno IS NOT NULL' + CRLF + ' BEGIN' + CRLF + ' EXEC dbo.hp_Realizuj_prijem @ID=@idStorno,@DatumRealizace=@dVyd,';
sql:= sql + '@Uzivatel=@uziv,@bylaChyba=@bylaChyba OUT' + CRLF;
sql:= sql + ' EXEC dbo.hp_OZZrusStornoAPuvDok @idStorno=@idStorno' + CRLF + ' END' + CRLF;
sql:= sql + 'IF (@@ERROR<>0) ROLLBACK TRAN ELSE COMMIT TRAN';
try
Helios.ExecSQL(sql);
except on E:Exception do
Helios.Error(#1'Chyba: ' + E.Message + #1);
end;
end;
13: begin
if Helios.YesNo(#1'Opravdu chcete objednávku smazat ?'#1 + CRLF + '!! všechny navázané příjmy a výdeje budou stornovány !!',false) then
begin
sql:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL';
sql:= sql + ' CREATE TABLE #TabTempUziv(Tabulka NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)';
sql:= sql + 'BEGIN TRAN' + CRLF + 'DECLARE @dVyd DATETIME, @idStorno INT, @bylaChyba INT, @uziv SMALLINT' + CRLF;
sql:= sql + 'SELECT @uziv=Id FROM ' + tblUziv + ' WHERE LoginName=SUSER_SNAME()' + CRLF;
sql:= sql + 'SET @dVyd=' + IfThen(datVyd='','NULL','CONVERT(datetime,N' + QuotedStr(datPrij) + ',104)') + CRLF;
sql:= sql + 'EXEC dbo.hp_Generuj_Storno_Doklad @ID=' + IntToStr(idPrijMat) + ',@Selectem=0';
sql:= sql + ',@DruhPohybu=1,@RadaDokladu=N' + QuotedStr('200') + ',@IDSklad=N' + QuotedStr(sklVyr);
sql:= sql + ',@AObdobi=NULL,@ADatPorizeni=@dVyd,@idStorno=@idStorno OUT,@bylaChyba=@bylaChyba OUT' + CRLF;
sql:= sql + 'IF @idStorno IS NOT NULL' + CRLF + ' BEGIN' + CRLF + ' EXEC dbo.hp_Realizuj_vydej @ID=@idStorno,@DatumRealizace=@dVyd';
sql:= sql + ',@Hlidat=0,@Uzivatel=@uziv,@bylaChyba=@bylaChyba OUT' + CRLF;
sql:= sql + ' EXEC dbo.hp_OZZrusStornoAPuvDok @idStorno=@idStorno' + CRLF;
sql:= sql + ' UPDATE ' + tblDZ+ ' SET NavaznyDoklad=NULL WHERE id=' + IntToStr(idVydejMat) + CRLF + ' END' + CRLF;
sql:= sql + 'SET @dVyd=' + IfThen(datVyd='','NULL','CONVERT(datetime,N' + QuotedStr(datVyd) + ',104)') + CRLF;
sql:= sql + 'EXEC dbo.hp_Generuj_Storno_Doklad @ID=' + IntToStr(idVydejMat) + ',@Selectem=0';
sql:= sql + ',@DruhPohybu=3,@RadaDokladu=N' + QuotedStr('410') + ',@IDSklad=N' + QuotedStr(sklVyr);
sql:= sql + ',@AObdobi=NULL,@ADatPorizeni=@dVyd,@idStorno=@idStorno OUT,@bylaChyba=@bylaChyba OUT' + CRLF;
sql:= sql + 'IF @idStorno IS NOT NULL' + CRLF + ' BEGIN' + CRLF + ' EXEC dbo.hp_Realizuj_prijem @ID=@idStorno,@DatumRealizace=@dVyd,';
sql:= sql + '@Uzivatel=@uziv,@bylaChyba=@bylaChyba OUT' + CRLF;
sql:= sql + ' EXEC dbo.hp_OZZrusStornoAPuvDok @idStorno=@idStorno' + CRLF + ' END' + CRLF;
sql:= sql + 'IF (@@ERROR<>0) ROLLBACK TRAN ELSE COMMIT TRAN';
try
Helios.ExecSQL(sql);
except on E:Exception do
Helios.Error(#1'Chyba: ' + E.Message + #1);
end;
end;
end;
end;
if (msg<>'') then
Helios.Error(#1 + msg + #1)
else
Helios.ExecSQL('UPDATE ' + tblEvidNadvyroby + ' SET Stav=1 WHERE id=' + IntToStr(idNad));
Helios.Refresh(true);
end;
procedure TplgLOVATO.KooperaceniPolozkySeSeskupenim(const Helios: IHelios);
var sql, IDcka, cOrg, idKOp: string;
cnt: integer;
begin
IDcka:= '';
IDKop:= VarToStr(Helios.QueryBrowse.FieldByNameValues('IDObjednavky'));
sql:= 'TabPrPostup.typ=2 AND ';
if Helios.Prenos(bidVyrOper,'ID',oVar1,sql,'Kooperační operace na výrobních příkazech',true) then
begin
if not VarIsNull(oVar1) then
IDcka:= VarToStr(oVar1);
if (IDcka<>'') then
begin
sql:= 'SELECT FROM ' + tblPrPost + ' WHERE id IN (' + IDcka + ')';
end;
end;
end;
// rozpad prijemky nebo vybranych karet stavu skladu pro prevod na kooperanty
procedure TplgLOVATO.RozpadPrijStavNaKooperanty(const Helios: IHelios; const idDZ: integer=0; const idSS: Integer=0); safecall;
var sql, celkP, celkD, dodat, stred: string;
l_loop: integer;
chyba: boolean;
mn: Extended;
begin
chyba:= false;
sql:= '';
if (idDZ>0) 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=' + IntToStr(idDZ) + ' 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 _TabRozpadPrijStav) 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:= '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:= 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''_TabRozpadPrijStav'')';
sql:= sql + ' AND [name] LIKE N''Prebyt%''';
with Helios.OpenSQL('') do
if RecordCount>0 then
begin
First;
while not(EOF) do
begin
Next;
end;
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';
sql:= 'UPDATE ' + QuotedStr(tblRozpPrijStav) + ' SET ';
Helios.ExecSQL(celkP + CRLF + sql);
// celkem Dodat
SetLength(celkD,Length(celkD)-3);
celkD:= celkD + ')';
Helios.ExecSQL(celkD);
end;
end;
end;
procedure TplgLOVATO.PrevodStavSkladuImp(const Helios: IHelios; TypImp: Byte);
var lSQL: string;
cnt: integer;
begin
cnt:= 0;
lSQL:= 'SELECT ssi.IDSklad,ssi.IDKmenZbozi,ssi.Minimum,ssi.Maximum,ssi.id,kz.SkupZbo,kz.RegCis FROM ';
lSQL:= lSQL + 'dbo.TabStavSkladuImp ssi INNER JOIN ' + tblKZ + ' kz ON (ssi.IdKmenZbozi=kz.id)';
with Helios.OpenSQL(lSQL) do
if RecordCount>0 then
begin
First;
while not(EOF) do
begin
lSQL:= 'DECLARE @idSS INT' + CRLF + 'SET @idSS=(SELECT id FROM ' + tblSS;
lSQL:= lSQL + ' WHERE IDSklad=N' + QuotedStr(VarToStr(FieldValues(0)));
lSQL:= lSQL + ' AND IDKmenZbozi=' + VarToStr(FieldValues(1)) + ')' + CRLF + 'IF (@idSS IS NOT NULL)' + CRLF + 'BEGIN';
lSQL:= lSQL + CRLF + 'UPDATE ' + tblSS + ' SET Minimum=' + StringReplace(VarToStr(FieldValues(2)),',','.',[rfReplaceAll]);
lSQL:= lSQL + ',Maximum=' + StringReplace(VarToStr(FieldValues(3)),',','.',[rfReplaceAll]) + ' WHERE id=@idSS';
lSQL:= lSQL + CRLF + 'DELETE FROM dbo.TabStavSkladuImp WHERE id=' + VarToStr(FieldValues(4)) + CRLF + 'END';
try
Helios.ExecSQL(lSQL);
Inc(cnt);
except on E:Exception do
Helios.Error('Nelze uložit položku '#1 + VarToStr(FieldValues(5)) + ' ' + VarToStr(FieldValues(6)) + #1);
end;
Next;
end;
if cnt>0 then
Helios.Info(#1'Aktualizováno ' + IntToStr(cnt) + ' položek.'#1);
Helios.Refresh(true);
end;
end;
procedure TplgLOVATO.ImportZClipboardu(const Helios: IHelios; TypImp: Byte);
var arrRadky: TArray<TArray<string>>;
idx: integer;
lSQL, sz, rc, sMin, sMax, idKZ, jc: string;
begin
lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabExtKom') + ') IS NOT NULL DROP TABLE #TabExtKom';
lSQL:= lSQL + 'CREATE TABLE #TabExtKom(Poznamka NVARCHAR(255) NOT NULL)';
Helios.ExecSQL(lSQL);
case TypImp of
1: ReseedTable(Helios,'TabStavSkladuImp');
2: begin
lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabImpRCCena') + ') IS NOT NULL DROP TABLE #TabImpRCCena' + CRLF;
lSQL:= lSQL + 'CREATE TABLE #TabImpRCCena (RegCis NVARCHAR(35) NOT NULL, JCena NUMERIC(19,6) DEFAULT 0.0, Autor NVARCHAR(50) DEFAULT SUSER_SNAME())';
Helios.ExecSQL(lSQL);
end;
end;
try
arrRadky:= Clipboard2StringArray(false); // false = nemaze nazvy sloupcu
for idx:=0 to High(arrRadky) do
begin
idKZ:= '';
sz:= '';
rc:= '';
case TypImp of
1: begin
sz:= UpperCase(arrRadky[idx,0]);
rc:= UpperCase(arrRadky[idx,1]);
sMin:= arrRadky[idx,2];
if sMin='' then
sMin:= '0';
sMax:= arrRadky[idx,3];
if sMax='' then
sMax:= '0';
lSQL:= 'SELECT Id FROM ' + tblKZ + ' WHERE UPPER(SkupZbo)=N' + QuotedStr(sz);
lSQL:= lSQL + ' AND UPPER(RegCis)=N' + QuotedStr(rc);
with Helios.OpenSQL(lSQL) do
if RecordCount=1 then
idKZ:= VarToStr(FieldValues(0))
else
Helios.ExecSQL('INSERT #TabExtKom (Poznamka) VALUES (N' + QuotedStr('Karta nenalezena: ' + sz + ' ' + rc + ' : min. ' + sMin) + ' , max. ' + sMax + ')');
if (idKZ<>'') then
begin
lSQL:= 'INSERT dbo.TabStavSkladuImp (SkupZboImp,RegCisImp,IDKmenZbozi,IDSklad,Minimum,Maximum) VALUES (N';
lSQL:= lSQL + QuotedStr(sz) + ',N' + QuotedStr(rc) + ',' + idKZ + ',N' + QuotedStr(Helios.Sklad) + ',';
lSQL:= lSQL + StringReplace(sMin,',','.',[rfReplaceAll]) + ',' + StringReplace(sMax,',','.',[rfReplaceAll]) + ')';
try
Helios.ExecSQL(lSQL);
except on E:Exception do
begin
UlozChybu(Helios,'Nelze importovat min/max do Stavu skladu.',E);
end;
end;
end;
end;
2: begin
rc:= IfThen(arrRadky[idx,0]<>'', UpperCase(arrRadky[idx,0]), '');
jc:= IfThen(arrRadky[idx,1]<>'', arrRadky[idx,0], '0');
if (rc<>'') then
Helios.ExecSQL('INSERT #TabImpRCCena (RegCis, JCena) VALUES (N' + QuotedStr(rc) + ',' + StringReplace(jc,',','.',[rfReplaceAll]) + ')');
end;
end;
end;
case TypImp of
2: Helios.ExecSQL('EXEC dbo.ep_PZ_Import @Typ=1, @IDDoklad=' + VarToStr(Helios.HeliosVlastnik.QueryBrowse.FieldByNameValues('ID')));
end;
except on E:Exception do
begin
lSQL:= 'Nelze importovat údaje ze schránky (Clipboardu).';
UlozChybu(Helios,lSQL,E);
Helios.Error(#1 + lSQL + #1);
end;
end;
Helios.Refresh(true);
try
with Helios.OpenSQL('SELECT Poznamka FROM #TabExtKom') do
if RecordCount>0 then
Helios.OpenBrowse(541,'');
finally
end;
end;
procedure TplgLOVATO.VyrabeneDilceDoZadVyp(const Helios: IHelios);
var lSQL, IDs: string;
aID: TArray<integer>;
idx: integer;
begin
lSQL:= 'TabKmenZbozi.Blokovano=0 AND TabKmenZbozi.Dilec=1';
if Helios.Prenos(bidSS,'TabKmenZbozi.id',oVar1,lSQL,'Vyberte požadované dílce',true) then
begin
if not VarIsNull(oVar1) then
begin
Helios.ExecSQL('DELETE FROM ' + tblPPlan + ' WHERE Autor=SUSER_SNAME() AND IDVarianta IS NULL');
IDs:= VarToStr(oVar1);
lSQL:= 'SELECT id,1 FROM ' + tblKZ + ' WHERE id IN (' + IDs + ')';
with Helios.OpenSQL(lSQL) do
if RecordCount>0 then
begin
First;
while not(EOF) do
begin
lSQL:= 'INSERT ' + tblPPlan + ' (Dilec,Mnozstvi) VALUES (' + VarToStr(FieldValues(0));
lSQL:= lSQL + ',' + StringReplace(VarToStr(FieldValues(1)),',','.',[rfReplaceAll]) + ')';
Helios.ExecSQL(lSQL);
Next;
end;
end;
{
aID:= StrToArrayInt(IDs);
for idx:= Low(aID) to High(aID) do
begin
lSQL:= 'SELECT kz.id,ss.Mnozstvi FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON(ss.IdKmenZbozi=kz.id) WHERE ss.id=' + IntToStr(aID[idx]);
with Helios.OpenSQL('')
end;
}
Helios.Refresh(true);
end;
end;
end;
procedure TplgLOVATO.StavSkladuDoZadVyp(const Helios: IHelios);
var lSQL,IDs: string;
aID: TArray<integer>;
idx: integer;
begin
Helios.Info(#1'Bude importovan stav vybraneho skladu.'#1);
lSQL:= 'TabStavSkladu.Mnozstvi>0';
if Helios.Prenos2(bidSS,'TabStavSkladu.id','',oVar1,oVar2,lSQL,'',true,true,false,1) then
begin
if not VarIsNull(oVar1) then
begin
Helios.ExecSQL('DELETE FROM ' + tblPPlan + ' WHERE Autor=SUSER_SNAME()');
IDs:= VarToStr(oVar1);
lSQL:= 'SELECT kz.id,ss.Mnozstvi FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON(ss.IdKmenZbozi=kz.id)';
lSQL:= lSQL + ' WHERE ss.id IN (' + IDs + ')';
with Helios.OpenSQL(lSQL) do
if RecordCount>0 then
begin
First;
while not(EOF) do
begin
lSQL:= 'INSERT ' + tblPPlan + ' (Dilec,Mnozstvi) VALUES (' + VarToStr(FieldValues(0));
lSQL:= lSQL + ',' + StringReplace(VarToStr(FieldValues(1)),',','.',[rfReplaceAll]) + ')';
Helios.ExecSQL(lSQL);
Next;
end;
end;
{
aID:= StrToArrayInt(IDs);
for idx:= Low(aID) to High(aID) do
begin
lSQL:= 'SELECT kz.id,ss.Mnozstvi FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON(ss.IdKmenZbozi=kz.id) WHERE ss.id=' + IntToStr(aID[idx]);
with Helios.OpenSQL('')
end;
}
Helios.Refresh(true);
end;
end;
end;
procedure TplgLOVATO.ZadejVyrPrikazNaVydejku(const Helios: IHelios; idVPr: Integer);
var lSQL: string;
pz,mu: IHeQuery;
idVydej,idPolExpP,idExpPr,idNPol,sMU,sNO: string;
idx: Integer;
mn: extended;
begin
if (idVPr>0) then
begin
lSQL:= 'SELECT kz.id 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
if RecordCount=0 then
begin
Helios.Error(#1'Výrobní příkaz není na finální výrobek.'#1);
Exit;
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';
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
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
// 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;
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:= '';
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
// 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)
end;
end;
end;
except on E:Exception do
Helios.Error(#1'Nelze uložit položku na doklad.'#1 + CRLF + E.Message + CRLF + lSQL + errPlg);
end;
end
else
Helios.Error(#1'Zadané množství je nulové, převod dílce na výdejku NEBUDE proveden.'#1);
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);
end
else
Helios.Error(#1'Doklad je blokován jiným uživatelem.'#1);
end;
end;
end;
end;
end;
procedure TplgLOVATO.ZadejPolPrijemkyNaVydejku(const Helios: IHelios; idPrij: Integer);
var lSQL: string;
pz,mu: IHeQuery;
mn, mnE: Single;
idVydej,idPol,idNPol: string;
idx: Integer;
begin
if (idPrij>0) then
begin
lSQL:= 'SELECT pz.Id FROM ' + tblDZ + ' dz INNER JOIN ' + tblPZ + ' pz ON (dz.Id=pz.IdDoklad) INNER JOIN ' + tblSS + ' ss ON';
lSQL:= lSQL + ' (pz.IdZboSklad=ss.id) INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.id) WHERE dz.DruhPohybuZbo=0';
lSQL:= lSQL + ' AND dz.Id=' + IntToStr(idPrij) + ' AND pz.TypVyrobnihoDokladu=0 AND dz.RadaDokladu IN (N' + QuotedStr('220') + ')';
lSQL:= lSQL + ' AND kz.SkupZbo LIKE ' + QuotedStr('V%') + ' ORDER BY pz.SkupZbo,pz.RegCis,pz.NazevSozNa1,pz.NazevSozNa2';
pz:= Helios.OpenSQL(lSQL);
if (pz.RecordCount>0) then
begin
if Helios.YesNo('Chcete položky FINÁLNÍCH dílců z příjemky z výroby uložit do výdejky exportu ?',false) then
begin
lSQL:= 'IDSklad=N' + QuotedStr(sklVyroba) + ' AND RadaDokladu IN (N' + QuotedStr('420') + ')';
if Helios.Prenos(100092,'id',vOle1,lSQL,'Výdejky pro Vývoz',true) then
begin
pz.First;
idPol:= VarToStr(pz.FieldValues(0)); // ID polozky v Prijemce
idNPol:= '0';
with Helios.OpenSQL('SELECT p.IdRezervace FROM ' + tblPZ + ' pz INNER JOIN ' + tblPrikaz + ' p ON (pz.IdPrikaz=p.id) WHERE pz.id=' + idPol) do
if (RecordCount>0) then
idNPol:= VarToStr(FieldValues(0)); // ID polozky ExpPrikazu
if (idNPol<>'0') then
with Helios.OpenSQL('IF NOT EXISTS(SELECT id FROM ' + tblPZ + ' WHERE id=' + idNPol + ') SELECT 0 ELSE SELECT Mnozstvi-MnOdebrane-MnozstviStorno FROM ' + tblPZ + ' WHERE id=' + idNPol) do
mnE:= StrToFloat(VarToStr(FieldValues(0))); // mnozstvi zbytek na ExpPr
if (mnE<=0) then
begin
lSQL:= 'Položka objednávky (ExpPř) již byla celá splněna/odeslána.';
Helios.ExecSQL('INSERT #TabExtKom(Poznamka) VALUES (N' + QuotedStr(lSQL) + ')');
Helios.Error(#1 + lSQL + #1);
Exit;
end;
idVydej:= VarToStr(vOle1);
mu:= Helios.OpenSQL('SELECT ISNULL(MistoUrceni,0) FROM ' + tblDZ + ' WHERE id=' + idVydej);
if (mu.RecordCount>0) then
begin
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=' + idNPol; // jen Exp.prikazy
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
if ((LeftStr(VarToStr(FieldValues(0)),2)<>'45') and (VarToStr(mu.FieldValues(0))='1'))
or ((LeftStr(VarToStr(FieldValues(0)),2)<>'52') and (VarToStr(mu.FieldValues(0))='3')) then
begin
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 // ma vydejku otevrenou nekdo jiny ? 0=ne
begin
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=' + IntToStr(Helios.UserId) + ' WHERE id=' + idVydej);
pz.First;
idx:= 0;
while not(pz.EOF) do
begin
idPol:= VarToStr(pz.FieldValues(0));
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, @mExp NUMERIC(19,6)' + CRLF;
lSQL:= lSQL + 'SET @mExp=' + StringReplace(FloatToStr(mnE),'','',[rfReplaceAll]) + CRLF;
lSQL:= lSQL + 'SELECT @sDPH=SazbaDPH,@sSD=SazbaSD,@mn=Mnozstvi,@k=Kurz,@jm=JednotkaMeny,';
lSQL:= lSQL + '@ss=IDZboSklad,@kEUR=KurzEuro FROM ' + tblPZ + ' WHERE id=' + idPol + CRLF;
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;
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=NULL,@ZakazanoDPH=0,';
lSQL:= lSQL + '@VstupniCena=4,@Mnozstvi=@mn,@JCbezDaniKC=0,@PovolitDuplicitu=1,@DatPorizeni=@d,@Selectem=0' + CRLF;
lSQL:= lSQL + 'SELECT @idOut';
idNPol:= '';
try
Inc(idx);
with Helios.OpenSQL(lSQL) do
if not VarIsNull(FieldValues(0)) then
idNPol:= VarToStr(FieldValues(0));
if (idNPol<>'') then
begin
lSQL:= 'IF EXISTS(SELECT id FROM ' + tblPZ + ' WHERE IdPrikaz IS NOT NULL AND id=' + idPol + ') BEGIN';
lSQL:= lSQL + ' DECLARE @idP INT,@idRez INT,@d DATETIME,@idDok INT' + CRLF + 'SELECT @idP=IdPrikaz FROM ' + tblPZ + ' WHERE id=' + idPol + CRLF;
lSQL:= lSQL + 'SELECT @idRez=IdRezervace FROM ' + tblPrikaz + ' WHERE IDPrikazRidici=@idP AND id=@idP' + CRLF;
lSQL:= lSQL + 'IF (@idRez IS NOT NULL) BEGIN 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=@idRez' + CRLF;
lSQL:= lSQL + 'SELECT @k=Kurz FROM ' + tblDZ + ' WHERE id=@idDok' + CRLF;
lSQL:= lSQL + 'UPDATE ' + tblPZ + ' SET PozadDatDod=@d,NazevSozNa1=@n1,NazevSozNa2=@n2,IdOldPolozka=@idRez,JCbezDaniKC=@jcV*@k,JCbezDaniVal=@jcV';
lSQL:= lSQL + ' WHERE id=' + idNPol + CRLF;
lSQL:= lSQL + 'UPDATE ' + tblPZ + ' SET CCbezDaniKc=JCbezDaniKC*Mnozstvi,CCbezDaniVal=JCbezDaniVal*Mnozstvi WHERE id=' + idNPol + CRLF;
lSQL:= lSQL + 'IF (@idDok IS NOT NULL) EXEC dbo.hp_Aktualizuj_OdebraneMnozstviDoklad @IDDoklad=@idDok,@DruhPohybu=9 END END';
Helios.ExecSQL(lSQL);
end;
except on E:Exception do
begin
Clipboard.AsText:= lSQL + CRLF + errPlg;
Helios.Error(#1'Nelze uložit položku na doklad.'#1 + CRLF + E.Message + CRLF + '(SQL v clipboardu)');
end;
end;
pz.Next;
end;
Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + idVydej + ',@AktualizaceSlev=1');
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=null WHERE id=' + idVydej);
Helios.Refresh(true);
Helios.Info(#1'Uloženo ' + IntToStr(idx) + ' položek.'#1);
end
else
Helios.Error(#1'Doklad je blokován jiným uživatelem.'#1);
end;
end;
end;
end;
end;
function TplgLOVATO.TestKoopObjVydejMat(const Helios: IHelios; idPKO: Integer): Boolean;
var idVPr: integer;
begin
result:= false;
with Helios.OpenSQL('SELECT IDPrikaz FROM ' + tblPKObj + ' WHERE id=' + IntToStr(idPKO)) do
if RecordCount>0 then
begin
idVPr:= StrToInt(VarToStr(FieldValues(0)));
with Helios.OpenSQL('SELECT id FROM ' + tblPZ + ' WHERE IDPrikaz=' + IntToStr(idVPr) + ' AND TypVyrobnihoDokladu=1') do
if RecordCount>0 then
result:= true;
end;
end;
procedure TplgLOVATO.PrerovnejPolozkyKoopObj(const Helios: IHelios; idKObj: Integer);
var lSQL: string;
idx: integer;
pol: IHeQuery;
begin
lSQL:= 'SELECT pko.id FROM ' + tblPKObj + ' pko';
lSQL:= lSQL + ' INNER JOIN ' + tblPrikaz + ' p ON (pko.IDPrikaz=p.id) INNER JOIN ' + tblKZ + ' kz ON (p.IDTabKmen=kz.id)';
lSQL:= lSQL + ' WHERE pko.IDObjednavky=' + IntToStr(idKObj) + ' ORDER BY pko.PozadTerDod DESC,kz.RegCis DESC';
pol:= Helios.OpenSQL(lSQL);
if pol.RecordCount>0 then
begin
idx:= 101;
pol.First;
while not(pol.EOF) do
begin
try
lSQL:= 'UPDATE ' + tblPKObj + ' SET Polozka=' + IntToStr(idx) + ' WHERE id=' + VarToStr(pol.FieldValues(0));
Helios.ExecSQL(lSQL);
except on E:Exception do
Helios.Error('Chyba: ' + E.Message + CRLF + lSQL);
end;
Dec(idx);
pol.Next
end;
end;
lSQL:= 'SELECT pko.id FROM ' + tblPKObj + ' pko';
lSQL:= lSQL + ' INNER JOIN ' + tblPrikaz + ' p ON (pko.IDPrikaz=p.id) INNER JOIN ' + tblKZ + ' kz ON (p.IDTabKmen=kz.id)';
lSQL:= lSQL + ' WHERE pko.IDObjednavky=' + IntToStr(idKObj) + ' ORDER BY pko.PozadTerDod,kz.RegCis';
pol:= Helios.OpenSQL(lSQL);
if pol.RecordCount>0 then
begin
idx:= 1;
pol.First;
while not(pol.EOF) do
begin
try
lSQL:= 'UPDATE ' + tblPKObj + ' SET Polozka=' + IntToStr(idx) + ' WHERE id=' + VarToStr(pol.FieldValues(0));
Helios.ExecSQL(lSQL);
except on E:Exception do
Helios.Error('Chyba: ' + E.Message + CRLF + lSQL);
end;
Inc(idx);
pol.Next
end;
end;
end;
procedure TplgLOVATO.ExportKoopObjHQL(const Helios: IHelios; idKObj: integer); // 29
var lSQL, sqlOut, fName: string;
myDIC, myICO, cOrg, cObj, sGUID: string;
guid: TGUID;
fs: TFileStream;
begin
CreateGUID(guid);
sGuid:= GUIDToString(guid);
sGuid:= StringReplace(sGuid,'{','',[rfReplaceAll]);
sGuid:= StringReplace(sGuid,'}','',[rfReplaceAll]);
with Helios.OpenSQL('SELECT ICO,DIC FROM ' + tblCOrg + ' WHERE CisloOrg=0') do
begin
myICO:= VarToStr(FieldValues(0));
myDIC:= VarToStr(FieldValues(1));
end;
sqlOut:= 'SET NOCOUNT ON' + CRLF + 'DECLARE @nIdDZ INT, @autor NVARCHAR(80), @dt DATETIME' + CRLF;
sqlOut:= sqlOut + 'SELECT @autor=SUSER_SNAME()' + CRLF + 'SET @dt=GETDATE()' + CRLF;
sqlOut:= sqlOut + 'BEGIN TRAN' + CRLF;
lSQL:= 'SELECT REPLACE(k.Objednavka,N''/'',N''''),c.CisloOrg,k.DIC,k.DatPorizeni,k.DatRealizace,k.Autor,';
lSQL:= lSQL + 'SUBSTRING(REPLACE(SUBSTRING(k.Poznamka,1,2000),(CHAR(13) + CHAR(10)),N'' ''),1,2000),k.Cislo,k.Rada FROM ' + tblKObj;
lSQL:= lSQL + ' k INNER JOIN ' + tblCOrg + ' c ON (c.Id=k.IDOrganizace) WHERE k.id=' + IntToStr(idKObj);
with Helios.OpenSQL(lSQL) do
begin
cObj:= VarToStr(FieldValues(8)) + VarToStr(FieldValues(7));
cOrg:= VarToStr(FieldValues(1));
sqlOut:= sqlOut + ' INSERT dbo._TabEDI_Doklady (DruhDokladu,DIC_src,CisloOrg_dst,DIC_dst,ParovaciZnak,DatPorizeniDokl';
sqlOut:= sqlOut + ',DatRealizaceDokl,VstupniCena,SazbaDPH,Mena,Poznamka,AutorDokl,Objednavka,GUID) VALUES (1001,N';
sqlOut:= sqlOut + QuotedStr(myDIC) + ',' + VarToStr(FieldValues(1)) + ',N' + QuotedStr(VarToStr(FieldValues(2)));
sqlOut:= sqlOut + ',N' + QuotedStr('') + ',CONVERT(datetime,N' + QuotedStr(VarToStr(FieldValues(3))) + ',104),';
if (VarToStr(FieldValues(4))='') or (VarToStr(FieldValues(4))='30.12.1899') then
sqlOut:= sqlOut + 'NULL'
else
sqlOut:= sqlOut + 'CONVERT(datetime,N' + QuotedStr(VarToStr(FieldValues(4))) + ',104)';
sqlOut:= sqlOut + ',0,NULL,N' + QuotedStr('CZK') + ',';
if (VarToStr(FieldValues(6))='') then
sqlOut:= sqlOut + 'NULL'
else
sqlOut:= sqlOut + 'N' + QuotedStr(VarToStr(FieldValues(6)));
sqlOut:= sqlOut + ',N' + QuotedStr(VarToStr(FieldValues(5))) + ',N' + QuotedStr(VarToStr(FieldValues(0)));
sqlOut:= sqlOut + ',CONVERT(uniqueidentifier,N' + QuotedStr(sGuid) + ') )' + CRLF;
sqlOut:= sqlOut + ' SELECT @nIdDZ=SCOPE_IDENTITY()' + CRLF;
lSQL:= 'SELECT k.RegCis,p.Kusy,ROUND(p.Cena/p.Kusy,3),p.Polozka FROM ' + tblPKObj + ' p INNER JOIN ' + tblPrikaz;
lSQL:= lSQL + ' pr ON (pr.Id=p.IDPrikaz) INNER JOIN ' + tblKZ + ' k ON (k.Id=pr.IdTabKmen) WHERE p.IDObjednavky=' + IntToStr(idKObj);
lSQL:= lSQL + ' ORDER BY p.Polozka';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) then
begin
First;
while not(EOF) do
begin
sqlOut:= sqlOut + ' INSERT dbo._TabEDI_Polozky (IDDoklad,RegCis,Mnozstvi,JCbezDaniKc,SazbaDPH,Poradi,';
sqlOut:= sqlOut + 'Popis1,Zpracovano) VALUES (@nIdDZ,N' + QuotedStr(VarToStr(FieldValues(0)));
sqlOut:= sqlOut + ',' + StringReplace(VarToStr(FieldValues(1)),',','.',[rfReplaceAll]);
sqlOut:= sqlOut + ',' + StringReplace(VarToStr(FieldValues(2)),',','.',[rfReplaceAll]) + ',21,';
sqlOut:= sqlOut + VarToStr(FieldValues(3)) + ',N' + QuotedStr(cObj + '/' + VarToStr(FieldValues(3))) + ',0)';
sqlOut:= sqlOut + CRLF;
Next;
end;
end;
sqlOut:= sqlOut + CRLF + ' INSERT dbo._TabEDI_GUID (GUID,Autor,DatPorizeni) VALUES (CONVERT(uniqueidentifier,N';
sqlOut:= sqlOut + QuotedStr(sGuid) + '),@autor,@dt)' + CRLF;
sqlOut:= sqlOut + ' UPDATE dbo._TabEDI_Doklady SET ImportOK=1 WHERE id=@nIdDZ' + CRLF;
sqlOut:= sqlOut + 'IF (@@ERROR<>0) ROLLBACK TRAN ELSE COMMIT TRAN' + CRLF;
end;
fName:= GetEnvironmentVariable('USERPROFILE') + '\Desktop\EDI-Koop-' + cOrg + '-' + cObj + '.hql';
fs:= TFileStream.Create(fName, fmCreate);
try
WriteStringToStream(fs,sqlOut);
finally
fs.Free;
Helios.Info('Soubor uložen jako '#1 + fName + #1);
end;
end;
procedure TplgLOVATO.ExportKoopObj(const Helios: IHelios; idKObj: integer);
const strLov = '40755509 LOVATO spol.s r.o.';
var fld: string;
lSQL: string;
xls: TXLSReadWriteII5;
wSheet1, wSheet2: TXLSWorksheet;
poz: IHeQuery;
idPolKObj, idx: integer;
cObj, dodav, dat, datKO: string;
begin
if idKObj>0 then
begin
// lSQL:= 'SELECT p.Polozka,p.Kusy,p.PozadTerDod_X,k.RegCis FROM ' + tblPKObj + ' p INNER JOIN ' + tblPrikaz + ' pr ON (p.IDPrikaz=pr.id)';
// lSQL:= lSQL + ' INNER JOIN ' + tblKZ + ' k ON (pr.IdTabKmen=k.id) WHERE p.IDObjednavky=' + IntToStr(idKObj);
// lSQL:= lSQL + ' ORDER BY p.Polozka';
lSQL:= 'SELECT DISTINCT(kz.RegCis),pko.PozadTerDod,SUM(pko.Kusy) FROM ' + tblPKObj + ' pko';
lSQL:= lSQL + ' INNER JOIN ' + tblPrikaz + ' p ON (pko.IDPrikaz=p.id) INNER JOIN ' + tblKZ + ' kz ON (p.IDTabKmen=kz.id)';
lSQL:= lSQL + ' WHERE pko.IDObjednavky=' + IntToStr(idKObj) + ' GROUP BY kz.RegCis,pko.PozadTerDod ORDER BY pko.PozadTerDod'; // kz.RegCis';
poz:= Helios.OpenSQL(lSQL);
if (poz.RecordCount>0) then
begin
if VyberAdresar(fld, 'Umístění exportního souboru') then
begin
lSQL:= 'SELECT k.Objednavka,c.ICO + N' + QuotedStr(' ') + ' + c.Nazev,k.TerminOdeslani FROM ' + tblKObj;
lSQL:= lSQL + ' k INNER JOIN ' + tblCOrg + ' c ON (k.IDOrganizace=c.id) WHERE k.id=' + IntToStr(idKObj);
with Helios.OpenSQL(lSQL) do
begin
cObj:= VarToStr(FieldValues(0));
dodav:= VarToStr(FieldValues(1));
datKO:= VarToStr(FieldValues(2));
end;
cObj:= StringReplace(cObj,'/','',[rfReplaceAll]);
xls:= TXLSReadWriteII5.Create(nil);
try
xls.Version:= xvExcel97;
wSheet2:= xls.Sheets[0];
wSheet2.Name:= 'Sumace';
// xls[1].InsertRows(0,poz.RecordCount);
// xls[1].InsertColumns(0,7);
wSheet2.AsString[0,0]:= 'Objednavatel';
wSheet2.AsString[2,0]:= strLov;
wSheet2.AsString[0,2]:= 'Dodavatel:';
wSheet2.AsString[2,2]:= dodav;
wSheet2.AsString[0,4]:= 'Datum vystavení:';
wSheet2.AsString[2,4]:= datKO;
wSheet2.AsString[0,6]:= 'Čís.obj.';
wSheet2.AsString[1,6]:= 'Poř.č.';
wSheet2.Columns.Items[1].NumberFormat:= '##0';
wSheet2.Columns.Items[1].HorizAlignment:= chaCenter;
wSheet2.AsString[2,6]:= 'Číslo výrobku';
wSheet2.AsString[3,6]:= 'Množství';
wSheet2.Columns.Items[3].NumberFormat:= '###,##0.###';
wSheet2.AsString[4,6]:= 'Splnit do';
wSheet2.Columns.Items[4].NumberFormat:= 'DD.MM.YYYY';
wSheet2.Columns.Items[4].HorizAlignment:= chaCenter;
idx:= 7;
poz.First;
while not(poz.EOF) do
begin
wSheet2.AsString[0, idx]:= cObj;
wSheet2.AsInteger[1, idx]:= idx-6; // VarToStr(poz.FieldValues(0));
wSheet2.AsString[2, idx]:= VarToStr(poz.FieldValues(0)); // RegCis
wSheet2.AsFloat[3, idx]:= StrToFloat(VarToStr(poz.FieldValues(2))); // mnozstvi
dat:= VarToStr(poz.FieldValues(1));
if (dat<>'') then
wSheet2.AsString[4, idx]:= dat;
Inc(idx);
poz.Next;
end;
wSheet2.AutoWidthCols(0, 4);
// if Helios.YesNo('Mám přerovnat položky objednávky podle datumu a reg.čísla ?',false) then
// PrerovnejPolozkyKoopObj(Helios,idKObj);
lSQL:= 'SELECT pko.Polozka,kz.RegCis,pko.Kusy,pko.PozadTerDod_X FROM ' + tblPKObj + ' pko';
lSQL:= lSQL + ' INNER JOIN ' + tblPrikaz + ' p ON (pko.IdPrikaz=p.id)';
lSQL:= lSQL + ' INNER JOIN ' + tblKZ + ' kz ON (p.IdTabKmen=kz.id)';
lSQL:= lSQL + ' WHERE pko.IDObjednavky=' + IntToStr(idKObj);
{
lSQL:= 'CREATE TABLE #Vystup (Pozice INT IDENTITY(1,1),RegCis NVARCHAR(20),Polozka INT,Kusu NUMERIC(19,6)) ' + CRLF;
lSQL:= lSQL + 'INSERT INTO #Vystup (RegCis,Polozka,Kusu) ';
lSQL:= lSQL + 'SELECT DISTINCT(kz.RegCis),pko.Polozka,SUM(pko.Kusy) FROM ' + tblPKObj + ' pko';
lSQL:= lSQL + ' INNER JOIN ' + tblPrikaz + ' p ON (pko.IDPrikaz=p.id) INNER JOIN ' + tblKZ + ' kz ON (p.IDTabKmen=kz.id)';
lSQL:= lSQL + ' WHERE pko.IDObjednavky=' + IntToStr(idKObj) + ' GROUP BY kz.RegCis,pko.Polozka ORDER BY pko.Polozka' + CRLF;
lSQL:= lSQL + 'SELECT * FROM #Vystup';
}
poz:= Helios.OpenSQL(lSQL);
if (poz.RecordCount>0) then
begin
poz.First;
idx:= 7;
wSheet1:= xls.Add;
wSheet1.Name:= 'Detail';
wSheet1.AsString[0,0]:= 'Objednavatel';
wSheet1.AsString[2,0]:= strLov;
wSheet1.AsString[0,2]:= 'Dodavatel:';
wSheet1.AsString[2,2]:= dodav;
wSheet1.AsString[0,4]:= 'Datum vystavení:';
wSheet1.AsString[2,4]:= datKO;
wSheet1.AsString[0,6]:= 'Čís.obj.';
wSheet1.AsString[1,6]:= 'Poř.č.';
wSheet1.Columns.Items[1].NumberFormat:= '##0';
wSheet1.Columns.Items[1].HorizAlignment:= chaCenter;
wSheet1.AsString[2,6]:= 'Číslo výrobku';
wSheet1.AsString[3,6]:= 'Množství';
wSheet1.Columns.Items[3].NumberFormat:= '###,###,##0.###';
wSheet1.AsString[4,6]:= 'Splnit do';
wSheet1.Columns.Items[4].NumberFormat:= 'DD.MM.YYYY';
wSheet1.Columns.Items[4].HorizAlignment:= chaCenter;
while not(poz.EOF) do
begin
wSheet1.AsString[0, idx]:= cObj;
wSheet1.AsInteger[1, idx]:= StrToInt(VarToStr(poz.FieldValues(0))); // polozka
wSheet1.AsString[2, idx]:= VarToStr(poz.FieldValues(1)); // RegCis
wSheet1.AsFloat[3, idx]:= StrToFloat(VarToStr(poz.FieldValues(2))); // mnozstvi
dat:= VarToStr(poz.FieldValues(3));
if (dat<>'') then
wSheet1.AsString[4, idx]:= dat;
Inc(idx);
poz.Next;
end;
wSheet1.AutoWidthCols(0, 4);
end;
xls.Sheets[0].Rows.Items[6].FontStyle:= [xfsBold];
xls.Sheets[0].Columns.Items[1].HorizAlignment:= chaCenter;
xls.Sheets[0].Columns.Items[3].HorizAlignment:= chaCenter;
xls.Sheets[0].Columns.Items[4].HorizAlignment:= chaCenter;
xls.Sheets[1].Rows.Items[6].FontStyle:= [xfsBold];
xls.SaveToFile(fld + '\Obj-' + cObj + '.xls');
finally
xls.Free;
end;
Helios.Info('Export souboru ukončen.');
end;
end
else
Helios.Error(#1'Kooperační objednávka neobsahuje žádnou položku.'#1);
end
else
Helios.Error(#1'Nelze identifikovat Kooperační objednávku.'#1);
end;
procedure TplgLOVATO.GenerujVydejZEP(const Helios: IHelios);
begin
end;
procedure TplgLOVATO.GenerujVydejMatZPrikazu(const Helios: IHelios; idEvidKoop: integer);
const rDoklVydMat = '400';
drVydej = '4';
var pol: IHeQuery;
lSQL, podm: string;
idKZ, idKZPr, idDZ, idPZ, iPC, idVPr, idPrKVaz: Integer;
mnoz, mnozOdv, mnozVPr, mnReal: Extended;
sPC, stredVPr, cOrgKoop, idSS, dokl, idObd, cOrg: string; // poradove cislo noveho dokladu vydejky
begin
idVPr:= 0;
with Helios.OpenSQL('SELECT IDPrikaz FROM ' + tblMzdZm + ' WHERE TypMzdy=2 AND id=' + IntToStr(idEvidKoop)) do
if (RecordCount>0) then
idVPr:= StrToInt(VarToStr(FieldValues(0)));
if (idVPr>0) then
begin
mnozVPr:= 0;
stredVPr:= '';
with Helios.OpenSQL('SELECT ISNULL(KmenoveStredisko,' + QuotedStr('') + '),kusy_zive,IDTabKmen FROM ' + tblPrikaz + ' WHERE id=' + IntToStr(idVPr)) do
if RecordCount=1 then
begin
stredVPr:= VarToStr(FieldValues(0));
mnozVPr:= StrToFloat(VarToStr(FieldValues(1)));
idKZPr:= StrToInt(VarToStr(FieldValues(2)));
end;
if (stredVPr<>'') and (mnozVPr>0) then
begin
with Helios.OpenSQL('SELECT ISNULL(Cislo_V,' + QuotedStr('') + ') FROM ' + tblStrom + ' WHERE Cislo=N' + QuotedStr(stredVPr)) do
stredVPr:= VarToStr(FieldValues(0));
if (stredVPr<>'') then
begin
lSQL:= 'SELECT se._CisloOrg FROM ' + tblStrom + ' s INNER JOIN ' + tblStromE + ' se ON (s.id=se.id)';
lSQL:= lSQL + ' WHERE s.Cislo=N' + QuotedStr(stredVPr);
with Helios.OpenSQL(lSQL) do
if RecordCount>0 then
cOrg:= VarToStr(FieldValues(0))
else
cOrg:= '';
if (cOrg<>'') then
begin
mnozOdv:= 0;
lSQL:= 'SELECT kusy_odv FROM ' + tblMzdZm + ' WHERE TypMzdy=2 AND id=' + IntToStr(idEvidKoop);
with Helios.OpenSQL(lSQL) do
if RecordCount>0 then
mnozOdv:= StrToFloat(VarToStr(FieldValues(0)));
lSQL:= 'SELECT nizsi,mnoz_Nevydane,Doklad,id,Mnoz_skut_realizovane FROM ' + tblPrVaz + ' WHERE mnoz_Nevydane>0 AND IDPrikaz=' + IntToStr(idVPr);
lSQL:= lSQL + ' ORDER BY DatPorizeni';
pol:= Helios.OpenSQL(lSQL);
if (pol.RecordCount>0) and (mnozOdv>0) then
begin
ReseedTable(Helios,tblDZ);
ReseedTable(Helios,tblPZ);
podm:= 'Obdobi=' + idObd + ' AND DruhPohybuZbo=' + drVydej + ' AND RadaDokladu=N' + QuotedStr(rDoklVydMat);
podm:= podm + ' AND IDSklad=N' + QuotedStr(stredVPr);
iPC:= NajdiPrvniVolny(Helios,tblDZ,'PoradoveCislo',drVydej,rDoklVydMat,idObd,podm);
lSQL:= 'DECLARE @i INT' + CRLF + 'EXEC dbo.hp_InsertHlavickyOZ @i OUT,@sklad=N' + QuotedStr(stredVPr);
lSQL:= lSQL + ',@DruhPohybu=' + drVydej + ',@RadaDokladu=N' + QuotedStr(rDoklVydMat) + ',@CisloOrg=' + cOrg + ',@Mena=N';
lSQL:= lSQL + QuotedStr('CZK') + ',@Insert=1' + CRLF + 'SELECT @i';
idDZ:= 0;
try
with Helios.OpenSQL(lSQL) do
if not VarIsNull(FieldValues(0)) then
idDZ:= StrToInt(VarToStr(FieldValues(0)));
except on E:Exception do
Helios.Error(#1'Nelze uložit hlavičku Výdejky materiálu.'#1);
end;
if (idDZ>0) then
begin
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=' + IntToStr(Helios.UserId) + ' WHERE id=' + IntToStr(idDZ));
pol.First;
while not(pol.EOF) do
begin
idSS:= '';
idKZ:= StrToInt(VarToStr(pol.FieldValues(0)));
dokl:= VarToStr(pol.FieldValues(2));
idPrKVaz:= StrToInt(VarToStr(pol.FieldValues(3)));
mnReal:= StrToFloat(VarToStr(pol.FieldValues(4)));
mnoz:= 0;
lSQL:= 'SELECT mnozstvi FROM ' + tblKVaz + ' WHERE nizsi=' + IntToStr(idKZ) + ' AND vyssi=' + IntToStr(idKZPr);
with Helios.OpenSQL(lSQL) do
begin
mnoz:= StrToFloat(VarToStr(FieldValues(0)));
mnoz:= RoundToEx(mnoz*mnozOdv,-3);
mnReal:= mnReal + mnoz;
end;
if (idKZ>0) then
begin
lSQL:= 'SELECT id FROM ' + tblSS + ' WHERE IDKmenZbozi=' + IntToStr(idKZ) + ' AND IDSklad=N' + QuotedStr(stredVPr);
with Helios.OpenSQL(lSQL) do
if RecordCount=0 then
begin
lSQL:= 'INSERT ' + tblSS + ' (IDSklad,IdKmenZbozi) VALUES (N' + QuotedStr(stredVPr) + ',' + IntToStr(idKZ) + ')';
lSQL:= lSQL + CRLF + 'SELECT SCOPE_IDENTITY()';
with Helios.OpenSQL(lSQL) do
idSS:= VarToStr(FieldValues(0));
end
else
idSS:= VarToStr(FieldValues(0));
end;
lSQL:= 'DECLARE @i INT';
lSQL:= lSQL + CRLF + 'EXEC dbo.hp_InsertPolozkyOZ @i OUT,@IDDoklad=' + IntToStr(idDZ);
lSQL:= lSQL + ',@DruhPohybu=' + drVydej + ',@CisloOrg=' + cOrg + ',@IDZboSklad=' + idSS + ',@Mena=N' + QuotedStr('CZK');
lSQL:= lSQL + ',@JednotkaMeny=1,@Kurz=1';
lSQL:= lSQL + ',@VstupniCena=0,@JCbezDaniKC=0.1,@KurzEuro=1,@SazbaSD=0,@SazbaDPH=0,@ZakazanoDPH=0';
lSQL:= lSQL + ',@Selectem=0,@Mnozstvi=' + StringReplace(FloatToStr(mnoz),',','.',[rfReplaceAll]);
lSQL:= lSQL + ',@DatPorizeni=NULL,@PovolitDuplicitu=1' + CRLF + 'SELECT @i';
idPZ:= 0;
with Helios.OpenSQL(lSQL) do
if not VarIsNull(FieldValues(0)) then
idPZ:= StrToInt(VarToStr(FieldValues(0)));
if (idPZ>0) then
try
Helios.ExecSQL('UPDATE ' + tblPZ + ' SET DokladPrikazu=' + dokl + ',TypVyrobnihoDokladu=1, IDPrikaz=' + IntToStr(idVPr) + ' WHERE id=' + IntToStr(idPZ));
try
Helios.ExecSQL('INSERT ' + tblMzdZmGenPZ + ' (IDMzdy,TypGen,IDPohybu) VALUES (' + IntToStr(idEvidKoop) + ',0,' + IntToStr(idPZ) + ')');
except
end;
{
lSQL:= 'UPDATE ' + tblPrVaz + ' SET ';
lSQL:= lSQL + 'Mnoz_skut_realizovane=' + StringReplace(FloatToStr(mnReal),',','.',[rfReplaceAll]);
lSQL:= lSQL + 'Mnoz_odv=' + StringReplace(FloatToStr(mnReal),',','.',[rfReplaceAll]);
lSQL:= lSQL + ' WHERE id=' + IntToStr(idPrKVaz);
Helios.ExecSQL(lSQL);
}
except on E:Exception do
Helios.Error(#1'Nelze uložit položku výdejky.'#1 + CRLF + E.Message + errPlg);
end
else
Helios.Error(#1'Nelze uložit položku výdejky.'#1 + CRLF + lSQL + errPlg);
pol.Next;
end;
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=null,IDPrikaz=' + IntToStr(idVPr) + ' WHERE id=' + IntToStr(idDZ));
Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + IntToStr(idDZ) + ',@AktualizaceSlev=1');
try
lSQL:= 'DECLARE @BylaChyba BIT' + CRLF + 'EXEC dbo.hp_Realizuj_Vydej ' + IntToStr(idDZ) + ',NULL,' + IntToStr(Helios.UserId);
lSQL:= lSQL + ',0,@BylaChyba OUT' + CRLF + 'SELECT @BylaChyba';
Helios.OpenSQL(lSQL);
except on E:Exception do
Helios.Error(#1'Nelze realizovat výdejku.'#1 + CRLF + E.Message + errPlg);
end;
Helios.Info('Hotovo - nová výdejka na skladě ' + stredVPr + ', č.' + rDoklVydMat + ' : ' + IntToStr(iPC));
end;
end
else
Helios.Error(#1'Skladu není přiřazena organizace.'#1 + errPlg);
end
else
Helios.Error(#1'Skladu není přiřazena organizace.'#1 + errPlg);
end
else
Helios.Error(#1'Kmenové středisko Výrobního příkazu nemá určen sklad materiálu.'#1);
end
else
Helios.Error(#1'Na Výrobním příkazu není určeno Kmenové středisko.'#1 + errPlg);
end
else
Helios.Error(#1'Operace není Kooperační, resp. nebyl identifikován Výrobní příkaz.'#1 + errPlg);
end;
procedure TplgLOVATO.OdpovedPPL(const Helios: IHelios);
begin
end;
procedure TplgLOVATO.ImportNesplObj(const Helios: IHelios);
var idx: integer;
cObj, rc, sTmp, idDZ, idSS, idKZ, idPZ: string;
xls: TXLSReadWriteII5;
fs: TFileStream;
wSheet: TXLSWorksheet;
dat1, dat2: TDate;
poz: integer;
Mnoz, JCena, kurz: Extended;
sql: string;
begin
sql:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabExtKom') + ',N' + QuotedStr('U') + ') IS NOT NULL';
sql:= sql + CRLF + 'DROP TABLE #TabExtKom' + CRLF + 'CREATE TABLE #TabExtKom(Poznamka NVARCHAR(255) NOT NULL)';
Helios.ExecSQL(sql);
if OtevriSouborXLS(fName,'') then
begin
xls:= TXLSReadWriteII5.Create(nil);
try
wSheet:= xls.Add;
if (wSheet.AsString[0,0]<>'CISOBJ') or (wSheet.AsString[7,0]<>'ZBYVYR') then
raise Exception.Create('Soubor s nesplněnými objednávkami není v požadovaném formátu.')
else
if (wSheet.LastRow>0) then
begin
Helios.ExecSQL('DECLARE @max INT' + CRLF + 'SELECT @max=MAX(id) FROM ' + tblDZ + CRLF + 'DBCC CHECKIDENT(TabDokladyZbozi,reseed,@max)');
Helios.ExecSQL('DECLARE @max INT' + CRLF + 'SELECT @max=MAX(id) FROM ' + tblPZ + CRLF + 'DBCC CHECKIDENT(TabPohybyZbozi,reseed,@max)');
sql:= 'DECLARE @i INT' + CRLF + 'EXEC dbo.hp_InsertHlavickyOZ @i OUT,@sklad=N' + QuotedStr(Helios.Sklad);
sql:= sql + ',@DruhPohybu=9,@RadaDokladu=N' + QuotedStr(rImpNesplObj) + ',@CisloOrg=1,@Mena=N';
sql:= sql + QuotedStr('EUR') + ',@Insert=1' + CRLF + 'SELECT @i';
idDZ:= '';
with Helios.OpenSQL(sql) do
idDZ:= VarToStr(FieldValues(0));
if (idDZ<>'') then
begin
with Helios.OpenSQL('SELECT Kurz FROM ' + tblDZ + ' WHERE id=' + idDZ) do
kurz:= StrToFloat(VarToStr(FieldValues(0)));
idx:= 1;
cObj:= Trim(wSheet.AsString[0, idx]);
while (cObj<>'') do
begin
poz:= wSheet.AsInteger[1, idx];
rc:= wSheet.AsString[3, idx];
rc:= StringReplace(rc,' ','',[rfReplaceAll]);
rc:= StringReplace(rc,'.','',[rfReplaceAll]);
rc:= StringReplace(rc,'/','',[rfReplaceAll]);
sTmp:= wSheet.AsString[2, idx];
if Pos(' ',sTmp)>0 then
begin
sTmp:= StringReplace(sTmp,' ','',[rfReplaceAll]);
sTmp:= StringReplace(sTmp,'i','',[rfReplaceAll]);
dat1:= StrToDate(sTmp); // datum objednavky
end
else
dat1:= wSheet.AsDateTime[2, idx]; // datum objednavky
dat2:= wSheet.AsDateTime[8, idx]; // pozadovane datum
mnoz:= wSheet.AsFloat[7, idx];
JCena:= wSheet.AsFloat[10, idx];
idSS:= '';
idKZ:= '';
sql:= 'SELECT ss.id,kz.id FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON (ss.IDKmenZbozi=kz.id)';
sql:= sql + ' WHERE ss.IDSklad=N' + QuotedStr(Helios.Sklad) + ' AND kz.RegCis=N' + QuotedStr(rc) + ' AND kz.SkupZbo LIKE N''V%''';
with Helios.OpenSQL(sql) do
begin
idSS:= VarToStr(FieldValues(0));
idKZ:= VarToStr(FieldValues(1));
end;
idPZ:= '';
if idSS<>'' then
begin
sql:= 'DECLARE @i INT, @d DATETIME' + CRLF + 'SET @d=CONVERT(datetime,' + QuotedStr(DateToStr(dat1)) + ',104)';
sql:= sql + CRLF + 'EXEC dbo.hp_InsertPolozkyOZ @i OUT,@IDDoklad=' + idDZ;
sql:= sql + ',@DruhPohybu=9,@CisloOrg=1,@IDZboSklad=' + idSS + ',@Mena=N' + QuotedStr('EUR');
sql:= sql + ',@JednotkaMeny=1,@Kurz=' + StringReplace(FloatToStr(kurz),',','.',[rfReplaceAll]);
sql:= sql + ',@VstupniCena=4,@JCbezDaniKC=0,@KurzEuro=1,@SazbaSD=0,@SazbaDPH=0,@ZakazanoDPH=1';
sql:= sql + ',@Selectem=0,@Mnozstvi=' + StringReplace(FloatToStr(mnoz),',','.',[rfReplaceAll]);
sql:= sql + ',@DatPorizeni=@d,@PovolitDuplicitu=1' + CRLF + 'SELECT @i';
with Helios.OpenSQL(sql) do
idPZ:= VarToStr(FieldValues(0));
if idPZ<>'' then
begin
sql:= 'UPDATE ' + tblPZ + ' SET JCbezDaniKc=' + StringReplace(FloatToStr(JCena*kurz),',','.',[rfReplaceAll]);
sql:= sql + ',JCbezDaniKcPoS=' + StringReplace(FloatToStr(JCena*kurz),',','.',[rfReplaceAll]);
sql:= sql + ',CCbezDaniKc=' + StringReplace(FloatToStr(mnoz*JCena*kurz),',','.',[rfReplaceAll]);
sql:= sql + ',JCbezDaniValPoS=' + StringReplace(FloatToStr(JCena),',','.',[rfReplaceAll]);
sql:= sql + ',JCbezDaniVal=' + StringReplace(FloatToStr(JCena),',','.',[rfReplaceAll]);
sql:= sql + ',CCbezDaniVal=' + StringReplace(FloatToStr(mnoz*JCena),',','.',[rfReplaceAll]);
sql:= sql + ' WHERE id=' + idPZ + CRLF;
sql:= sql + 'UPDATE ' + tblPZ + ' SET PozadDatDod=CONVERT(datetime,' + QuotedStr(DateToStr(dat2)) + ',104)';
sql:= sql + ',NazevSozNa1=N' + QuotedStr(cObj) + ',NazevSozNa2=N';
sql:= sql + QuotedStr(StringOfChar('0', 4-Length(IntToStr(poz))) + IntToStr(poz));
sql:= sql + ' WHERE id=' + idPZ;
Helios.ExecSQL(sql);
end;
end
else
UlozChybu(Helios,'Nenalezena skladová karta: ' + rc,nil);
Inc(idx);
cObj:= Trim(wSheet.AsString[0, idx]);
end;
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=null WHERE id=' + idDZ);
Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + idDZ + ',@AktualizaceSlev=1');
Helios.Refresh(true);
try
with Helios.OpenSQL('SELECT Poznamka FROM #TabExtKom') do
if RecordCount>0 then
Helios.OpenBrowse(541,'');
finally
end;
end;
end;
finally
fs.Free;
end;
end;
end;
{
// generuj kooperacni objednavku
procedure TplgLOVATO.GenerujKoopObjednavku(const Helios: IHelios; idVP: Integer);
var pp: IHeQuery;
sql: WideString;
idKoopObj,idOrg,idZam: integer;
cVPrik,radaKoop,cKoopObj,termOdesli: ShortString;
dat1: TDateTime;
begin
cVPrik:= '';
dat1:= Now;
with Helios.OpenSQL('SELECT RadaPrikaz,CONVERT(datetime,Plan_zadani,104) FROM ' + tblPrikaz + ' WHERE id=' + IntToStr(idVP)) do
if RecordCount>0 then
begin
cVPrik:= VarToStr(FieldValues(0));
dat1:= StrToDateTime(VarToStr(FieldValues(1)));
end;
radaKoop:= '101';
idOrg:= 0;
idZam:= 0;
pp:= Helios.OpenSQL('SELECT * FROM ' + tblPrPost + ' WHERE idPrikaz=' + IntToStr(idVP));
if pp.RecordCount>0 then
begin
cKoopObj:= '1';
sql:= 'SELECT MAX(Cislo)+1 FROM ' + tblKoopObj + ' WHERE Rada=N' + QuotedStr(radaKoop);
with Helios.OpenSQL(sql) do
if RecordCount>0 then
cKoopObj:= VarToStr(FieldValues(0));
cKoopObj:= StringOfChar('0',6-Length(cKoopObj)) + cKoopObj; // zadat na 6 cislic
sql:= 'INSERT INTO dbo.TabKoopObj (Rada,Cislo,IDOrganizace,IDZamestnance,TerminOdeslani,PozadTerDod) ';
sql:= sql + 'VALUES (N' + QuotedStr(radaKoop) + ',' + cKoopObj + ',' + IntToStr(idOrg) + ',' + IntToStr(idZam) + ',';
sql:= sql + 'CONVERT(datetime,' + QuotedStr(DateTimeToStr(dat1)) + ',104),';
sql:= sql + 'CONVERT(datetime,' + QuotedStr(DateTimeToStr(dat1)) + ',104) )' + CRLF;
sql:= sql + 'SELECT SCOPE_IDENTITY()';
idKoopObj:= 0;
with Helios.OpenSQL(sql) do
idKoopObj:= StrToInt(VarToStr(FieldValues(0)));
if idKoopObj>0 then
begin
pp.First;
while not(pp.EOF) do
begin
pp.Next;
end;
end
else
Helios.Error(#1'Nepodařilo se uložit Kooperační objednávku' + CRLF + 'pro výrobní příkaz: ' + cVPrik + #1);
end;
end;
}
// import polozek objednavky z IT (pokud je v vlastTbl<>'' pak import do jiz existujiciho dokladu
procedure TplgLOVATO.ImportEP(const Helios: IHelios; const idDZx: integer; ExpP: boolean);
var sql, fName, errMsg: string;
testOK, kontrolaCen: Boolean;
tStr, rCeniky, cObj, regCis, wCond, cisDZ, skladEP, cOrg, mena, boxik, hmotJg: string;
idSS, jCenaSS, sazba, mj, descript, cenik: string;
pozice: integer;
qty, cena, per, kurz, ccena: Extended;
datum: TDateTime;
iLoop, iSheet, iX, iY, iPos: integer;
pol, obj: IHeQuery;
idDZ, idDZShift, idPZ, idKZ, cDokl, idUmist: Integer;
pocRadek, idCen, idPolCen, maxRegCis: integer;
sCen: string;
rDokl: string[3];
tmpTab, szPodm: string;
chybka,newKarta: boolean;
xls: TXLSReadWriteII5;
wSheet1, wSheet2: TXLSWorkSheet;
begin
sql:= 'IF OBJECT_ID(N' + QuotedStr('TempDB..#TabExtKom') + ',N' + QuotedStr('U') + ') IS NOT NULL';
sql:= sql + CRLF + 'DROP TABLE #TabExtKom' + CRLF + 'CREATE TABLE #TabExtKom(Poznamka NVARCHAR(255) NOT NULL)';
Helios.ExecSQL(sql);
chybka:= false;
if (idDZx>0) then
begin
with Helios.OpenSQL('SELECT id FROM ' + tblDZ + ' WHERE Realizovano=1 AND id=' + IntToStr(idDZx)) do
if (RecordCount>0) then
begin
raise Exception.Create('Položky nelze vložit do REALIZOVANÉHO dokladu.');
chybka:= true;
end;
cOrg:= '0';
if not VarIsNull(Helios.QueryEdit.FieldByNameValues('CisloOrg')) then
cOrg:= VarToStr(Helios.QueryEdit.FieldByNameValues('CisloOrg'));
idCen:= 0;
sCen:= '';
kontrolaCen:= false;
sql:= 'SELECT coe.id FROM ' + tblCOrgE + ' coe INNER JOIN ' + tblCOrg + ' co ON (coe.id=co.id) WHERE';
sql:= sql + ' coe._KontrolaCenPrijem=1 AND co.CisloOrg=' + cOrg;
with Helios.OpenSQL(sql) do
if (RecordCount>0) then // pri prijmu kontrolovat cenu podle ceniku (Nabidkove sestavy)
begin
// hleda pokud k dane firme existuje Nabidkova sestava v rade "Ceniky pro kontrolu" pro dany rok podle DatPorizeni
// pokud existuje vic Nabidek, bere prvni se razenim podle DatPorizeni DESC
datum:= Now;
if not VarIsNull(Helios.QueryEdit.FieldByNameValues('DatPorizeni')) then
datum:= StrToDateTime(VarToStr(Helios.QueryEdit.FieldByNameValues('DatPorizeni')));
if (ExpP) then
begin
if (Helios.Sklad='200') then
rCeniky:= '210'
else
begin
sql:= 'DruhPohybuZbo=11';
if Helios.Prenos(bidDDZ, 'RadaDokladu', oVar1, sql, 'Řada ceníku podle které bude provedena kontrola ceny', true) then
rCeniky:= VarToStr(oVar1)
else
rCeniky:= '210';
end;
sql:= 'SELECT TOP(1) id, ParovaciZnak FROM ' + tblDZ + ' WHERE DruhPohybuZbo=11 AND NabidkaCenik=1 AND RadaDokladu=N';
sql:= sql + QuotedStr(rCeniky) + ' AND CisloOrg=' + cOrg + ' AND GETDATE() BETWEEN ISNULL(Splatnost, CONVERT(datetime,N';
sql:= sql + QuotedStr('1.1.2015') + ',104)) AND ISNULL(DatUhrady, CONVERT(datetime,N' + QuotedStr('31.12.2030') + ',104)) ORDER BY DatPorizeni DESC';
with Helios.OpenSQL(sql) do
if (RecordCount>0) then
begin
idCen:= StrToInt(VarToStr(FieldValues(0)));
tStr:= VarToStr(FieldValues(1));
sCen:= tStr; // rCeniky + StringOfChar('0',6 - Length(tStr)) + tStr;
kontrolaCen:= true;
end;
{
tStr:= '';
if not VarIsNull(Helios.QueryEdit.FieldByNameValues('Nabidka')) then
tStr:= VarToStr(Helios.QueryEdit.FieldByNameValues('Nabidka'));
if (tStr<>'') then
with Helios.OpenSQL('SELECT ParovaciZnak FROM ' + tblDZ + ' WHERE id=' + tStr) do
if RecordCount>0 then
tStr:= VarToStr(FieldValues(0));
if (sCen<>tStr) and (idCen>0) then
begin
raise Exception.Create('Není zadán Ceník, podle kterého se mají kontrolovat ceny.');
chybka:= true;
end;
}
end;
end;
end;
if chybka then
Exit;
chybka:= false;
tmpTab:= '';
if ExpP then
tmpTab:= '[dbo].[_TabImportEP]'
else
tmpTab:= '[dbo].[_TabImportPckLst]';
// tmpTab:= '#' + tmpTab;
cOrg:= orgLovatoIT;
mena:= orgLovatoITmena;
if (idDZx>0) then
begin
cOrg:= VarToStr(Helios.QueryEdit.FieldByNameValues('CisloOrg'));
if (cOrg='') then
cOrg:= orgLovatoIT;
mena:= VarToStr(Helios.QueryEdit.FieldByNameValues('Mena'));
if (mena='') then
mena:= orgLovatoITmena;
rDokl:= VarToStr(Helios.QueryEdit.FieldByNameValues('RadaDokladu'));
{
with Helios.OpenSQL('SELECT Mena,CisloOrg,RadaDokladu FROM ' + tblDZ + ' WHERE id=' + IntToStr(idDZx)) do
if RecordCount>0 then
begin
mena:= VarToStr(FieldValues(0));
cOrg:= VarToStr(FieldValues(1));
rDokl:= VarToStr(FieldValues(2));
end;
}
end;
skladEP:= Helios.Sklad;
if OtevriSouborXLS(fName,'') then
begin
Screen.Cursor:= crHourGlass;
xls:= TXLSReadWriteII5.Create(nil);
try
xls.Filename:= fName;
xls.Read;
if ExpP then
begin
if (xls.Count<>1) then
begin
Helios.Error('Soubor s objednávkou ORDER má mít jen 1 list !');
xls.Free;
Exit;
end;
end
else
begin
if (xls.Count<>2) then
begin
Helios.Error('Soubor s dodávkou PACKING LIST má mít 2 listy !');
xls.Free;
Exit;
end;
end;
testOK:= true;
if ExpP then
begin // format pro objednavku (order)
iSheet:= 0;
wSheet1:= xls.Sheets[0];
tStr:= LowerCase(wSheet1.AsString[0,0]);
if (Pos('purchase',tStr)=0) then
testOK:= false;
tStr:= LowerCase(wSheet1.AsString[2,0]);
if (Pos('code',tStr)=0) then
testOK:= false;
tStr:= LowerCase(wSheet1.AsString[4,0]);
if (Pos('quantity',tStr)=0) then
testOK:= false;
tStr:= LowerCase(wSheet1.AsString[5,0]);
if (Pos('price',tStr)=0) then
testOK:= false
end
else
begin // format pro prijemku materialu (Packinglist)
iSheet:= 1;
wSheet1:= xls.Sheets[1];
wSheet2:= xls.Sheets[0];
// iSheet:= xls.Sheets.Count-1;
tStr:= LowerCase(wSheet1.AsString[0,6]);
if (Pos('codice',tStr)=0) then
testOK:= false;
tStr:= LowerCase(wSheet1.AsString[5,6]);
if (Pos('nr',tStr)=0) then
testOK:= false;
tStr:= LowerCase(wSheet1.AsString[7,6]);
if (Pos('totale',tStr)=0) then
testOK:= false;
end;
if testOK then
begin
pocRadek:= 0;
if ExpP then
begin
if not(VarIsNull(wSheet1.AsVariant[0, 1+pocRadek])) then
sql:= wSheet1.AsString[0, 1+pocRadek]
else
sql:= ''
end
else
begin
if not(VarIsNull(wSheet1.AsVariant[0, 7+pocRadek])) then
sql:= wSheet1.AsString[0, 7+pocRadek]
else
sql:= '';
end;
while (sql<>'') do
begin
Inc(pocRadek);
if ExpP then
begin
if not(VarIsNull(wSheet1.AsVariant[0, 1+pocRadek])) then
sql:= wSheet1.AsString[0, 1+pocRadek]
else
sql:= ''
end
else
begin
if not(VarIsNull(wSheet1.AsVariant[0, 7+pocRadek])) then
sql:= wSheet1.AsString[0, 7+pocRadek]
else
sql:= '';
end;
end;
if (pocRadek>0) then
begin
if (idDZx=0) then
begin
sql:= 'DruhPohybuZbo=9';
if not(ExpP) then
sql:= 'DruhPohybuZbo=0';
// iSheet
if Helios.Prenos(bidDDZ,'RadaDokladu',oVar1,sql,'Vyberte řadu do které bude vystaven doklad',true) then
rDokl:= VarToStr(oVar1)
else
begin
if Helios.YesNo('Nebyla vybrána řada dokladů. Chcete ukončit import ?',false) then
begin
xls.Free;
Exit;
end;
end;
end;
maxRegCis:= 15;
with Helios.OpenSQL('SELECT TOP(1)DelkaRegCislaZbozi FROM TabHGlob') do
if (RecordCount>0) then
maxRegCis:= StrToInt(VarToStr(FieldValues(0)));
// sql:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..' + tmpTab) + ',' + QuotedStr('U') + ') IS NOT NULL ';
sql:= 'IF OBJECT_ID(N' + QuotedStr(tmpTab) + ',' + QuotedStr('U') + ') IS NOT NULL ';
sql:= sql + 'DROP TABLE ' + tmpTab + CRLF + 'CREATE TABLE ' + tmpTab + '(';
sql:= sql + 'cObj NVARCHAR(12), pozice INT, regCis NVARCHAR(' + IntToStr(maxRegCis) + ') NOT NULL,';
sql:= sql + 'mnozstvi NUMERIC(19,6) NOT NULL, cena NUMERIC(19,6), per NUMERIC(19,6),';
sql:= sql + 'datDod DATETIME, popis NVARCHAR(100), boxik NVARCHAR(50), hmotJg NUMERIC(10,2) DEFAULT 0.0)';
Helios.ExecSQL(sql);
tStr:= '';
// import polozek z XLS do pomocne tabulky
for iLoop:=1 to pocRadek do
begin
regCis:= '';
qty:= 0;
boxik:= '';
if ExpP then // je to objednavka z IT ?
begin // ano
cObj:= Trim(wSheet1.AsString[0, iLoop]);
Pozice:= wSheet1.AsInteger[1, iLoop];
regCis:= UpperCase(Trim(wSheet1.AsString[2, iLoop]));
descript:= wSheet1.AsString[3, iLoop];
qty:= wSheet1.AsFloat[4, iLoop];
cena:= wSheet1.AsFloat[5, iLoop];
per:= wSheet1.AsFloat[6, iLoop];
datum:= wSheet1.AsDateTime[7, iLoop];
hmotJg:= '0';
end
else
begin // ne, je to Packinglist (prijemka)
qty:= 0;
try
if (VarIsNull(wSheet1.AsVariant[5, iLoop+6])) then
Break;
if not(VarIsNull(wSheet1.AsVariant[5, iLoop+6])) then
qty:= wSheet1.AsFloat[5, iLoop+6];
except
end;
if (qty>0) then
begin
cObj:= Trim(wSheet1.AsString[1, iLoop+6]); // celni nomenklatura
pozice:= 0;
regCis:= Trim(wSheet1.AsString[0, iLoop+6]);
if not(VarIsNull(wSheet1.AsVariant[4, iLoop])) then
begin
iX:= 0;
// nahrazuje VLOOKUP (SVYHLEDAT) - kouka na odkaz do 1.listu
sql:= wSheet2.AsString[0, iX];
while (sql<>'') do
begin
if (sql=regCis) then
begin
if not(VarIsNull(wSheet2.AsVariant[1, iX])) then
boxik:= wSheet2.AsString[1, iX]
else
boxik:= '';
Break;
end;
Inc(iX);
if not(VarIsNull(wSheet2.AsVariant[0, iX])) then
sql:= wSheet2.AsString[0, iX]
else
sql:= '';
end;
end;
if not(VarIsNull(wSheet1.AsVariant[4, iLoop+6])) then
boxik:= wSheet1.AsString[4, iLoop+6];
if not(VarIsNull(wSheet1.AsVariant[3, iLoop+6])) then
descript:= wSheet1.AsString[3, iLoop+6];
per:= 1;
if (VarIsNull(wSheet1.AsVariant[6, iLoop+6])) then
begin
UlozChybu(Helios, 'Nelze uložit položku z XLS: obj.č. ' + regCis + ' (' + FloatToStr(qty) + ' ks, ' + DateToStr(datum) + ') - není zadána vstupní cena.', nil);
qty:= 0;
end
else
cena:= wSheet1.AsFloat[6, iLoop+6];
hmotJg:= '0';
if not(VarIsNull(wSheet1.AsVariant[8, iLoop+6])) then
hmotJg:= wSheet1.AsString[8, iLoop+6];
hmotJg:= StringReplace(hmotJg,' ','',[rfReplaceAll]);
datum:= Now;
end;
end;
if (qty<>0) then
begin
sql:= 'INSERT ' + tmpTab + ' (cObj, Pozice, regCis, mnozstvi, cena, per, datDod, popis, boxik, hmotJg)';
sql:= sql + ' SELECT N' + QuotedStr(cObj) + ',' + IntToStr(pozice);
sql:= sql + ',N' + QuotedStr(regCis) + ',' + StringReplace(FloatToStr(qty),',','.',[rfReplaceAll]);
sql:= sql + ',' + StringReplace(FloatToStr(cena),',','.',[rfReplaceAll]) + ',';
sql:= sql + StringReplace(FloatToStr(per),',','.',[rfReplaceAll]);
sql:= sql + ',CONVERT(datetime,' + QuotedStr(DateToStr(datum)) + ',104),';
sql:= sql + 'N' + QuotedStr(descript) + ',N' + QuotedStr(boxik) + ', ' + StringReplace(hmotJg,',','.',[rfReplaceAll]);
try
if (sql<>'') then
Helios.ExecSQL(sql);
except on E:Exception do
UlozChybu(Helios, 'Nelze uložit požadavek XLS: obj.č. ' + regCis + ' (' + FloatToStr(qty) + ', ' + DateToStr(datum) + ')', E);
end;
end;
end;
xls.Free;
end
end
else // test OK
begin
Helios.Error(#1'Importovaný soubor není v definovaném formátu.'#1);
Exit;
end;
except on E:Exception do
begin
xls.Free;
Helios.Error(#1'Chyba při importu XLS souboru (ExpP/Pckg): '#1 + E.Message + CRLF + errMsg);
Exit;
end;
end;
// pro PL (dodaci list) najdi neexistujici polozky, pripadne je zaloz
if not(ExpP) then
begin
sql:= 'SELECT LTRIM(RTRIM(regCis)), popis, cObj FROM ' + tmpTab + ' WHERE LTRIM(RTRIM(regCis)) NOT IN (SELECT LTRIM(RTRIM(RegCis)) FROM ' + tblKZ;
sql:= sql + ' WHERE SkupZbo=N' + QuotedStr('MAT') + ')';
with Helios.OpenSQL(sql) do
if (RecordCount>0) then
begin
First;
while not(EOF) do
begin
sql:= 'INSERT ' + tblKZ + ' (SkupZbo,RegCis,Nazev2,DruhSkladu,MJEvidence,CelniNomenklatura) VALUES (N' + QuotedStr('MAT');
sql:= sql + ',N' + QuotedStr(LeftStr(VarToStr(FieldValues(0)),maxRegCis)) + ',N';
sql:= sql + QuotedStr(LeftStr(VarToStr(FieldValues(1)),100)) + ',1,N' + QuotedStr('ks');
sql:= sql + ',N' + QuotedStr(VarToStr(FieldValues(2))) + ')';
sql:= sql + CRLF + 'INSERT #TabExtKom(Poznamka) VALUES (N';
sql:= sql + QuotedStr('Založena nová karta: MAT ' + VarToStr(FieldValues(0))) + ')';
try
Helios.ExecSQL(sql);
except on E:Exception do
UlozChybu(Helios,'Nelze založit novou kartu: MAT ' + VarToStr(FieldValues(0)),E);
end;
Next;
end;
end;
end;
// konec importu XLS do pomocne tabulky
// test karta je pro vyrobu
sql:= 'SELECT RegCis,Popis FROM ' + tmpTab + ' WHERE UPPER(RegCis) NOT IN (SELECT UPPER(kz.RegCis) FROM ' + tblKZ + ' kz';
sql:= sql + ' INNER JOIN ' + tblSZ + ' sz ON (kz.SkupZbo=sz.SkupZbo) LEFT JOIN ' + tblSZe + ' sze';
if expP = false then sql:= sql + ' ON (sz.id=sze.id) WHERE sze._JeVyroba=0 OR kz.Blokovano=0) AND UPPER(RegCis) IN (SELECT UPPER(RegCis) FROM ' + tblKZ + ')'
else sql:= sql + ' ON (sz.id=sze.id) WHERE sze._JeVyroba=0 OR kz.Blokovano=0 OR sz.SkupZbo not LIKE N' + QuotedStr('V%') + ') AND UPPER(RegCis) IN (SELECT UPPER(RegCis) FROM ' + tblKZ + ')'; // upraveno
pol:= Helios.OpenSQL(sql);
if (pol.RecordCount>0) then
begin
pol.First;
while not(pol.EOF) do
begin
regCis:= VarToStr(pol.FieldValues(0));
tStr:= VarToStr(pol.FieldValues(1));
UlozChybu(Helios,'Karta nepatří výrobě nebo je blokována, nebyla importována: ' + regCis + ' - ' + tStr ,nil);
pol.Next;
end;
end;
// test karta existuje
sql:= 'SELECT RegCis,Popis FROM ' + tmpTab + ' WHERE UPPER(RegCis) NOT IN (SELECT UPPER(kz.RegCis) FROM ' + tblKZ + ' kz';
sql:= sql + ' INNER JOIN ' + tblSZ + ' sz ON (kz.SkupZbo=sz.SkupZbo) LEFT JOIN ' + tblSZe + ' sze';
if expP = false then sql:= sql + ' ON (sz.id=sze.id) WHERE sze._JeVyroba=0 OR kz.Blokovano=0) AND UPPER(RegCis) IN (SELECT UPPER(RegCis) FROM ' + tblKZ + ')'
else sql:= sql + ' ON (sz.id=sze.id) WHERE sze._JeVyroba=0 OR kz.Blokovano=0 OR sz.SkupZbo not LIKE N' + QuotedStr('V%') + ') AND UPPER(RegCis) IN (SELECT UPPER(RegCis) FROM ' + tblKZ + ')'; // upraveno
pol:= Helios.OpenSQL(sql);
if (pol.RecordCount>0) then
begin
pol.First;
while not(pol.EOF) do
begin
regCis:= VarToStr(pol.FieldValues(0));
tStr:= VarToStr(pol.FieldValues(1));
UlozChybu(Helios,'Karta nepatří výrobě nebo je blokována, nebyla importována: ' + regCis + ' - ' + tStr ,nil);
pol.Next;
end;
end;
// test v PackingListu karta je material
if not(ExpP) then
begin
sql:= 'SELECT RegCis,Popis,Mnozstvi FROM ' + tmpTab + ' WHERE UPPER(RegCis) NOT IN (SELECT UPPER(kz.RegCis) FROM ' + tblKZ + ' kz';
sql:= sql + ' INNER JOIN ' + tblSZ + ' sz ON (kz.SkupZbo=sz.SkupZbo) LEFT JOIN ' + tblSZe + ' sze';
sql:= sql + ' ON (sz.id=sze.id) WHERE sze._JeVyroba=1 AND kz.SkupZbo<>N' + QuotedStr(szNovyImportMat) + ')';
pol:= Helios.OpenSQL(sql);
if (pol.RecordCount>0) then
begin
pol.First;
while not(pol.EOF) do
begin
regCis:= VarToStr(pol.FieldValues(0));
tStr:= VarToStr(pol.FieldValues(1));
tStr:= tStr + ' (množ. ' + VarToStr(pol.FieldValues(2)) + ' )';
UlozChybu(Helios,'Pozor, karta nebyla importována, není materiál (skupina MAT): ' + regCis + ' - ' + tStr ,nil);
pol.Next;
end;
end;
end;
// kontrola na existenci karet
sql:= 'SELECT RegCis, Popis FROM ' + tmpTab + ' WHERE UPPER(RegCis) NOT IN (SELECT UPPER(kz.RegCis) FROM ' + tblKZ + ' kz';
sql:= sql + ' INNER JOIN ' + tblSZ + ' sz ON (kz.SkupZbo=sz.SkupZbo) LEFT JOIN ' + tblSZe + ' sze';
//sql:= sql + ' ON (sz.id=sze.id) WHERE sze._JeVyroba=1)';
sql:= sql + ' ON (sz.id=sze.id) WHERE sze._JeVyroba=1 '; // upraveno 7.9.2018
// if ExpP = true then sql := sql + ' AND _JeProImportObjednavkyZItalie = 1'; // přidáno 7.9.2018
if ExpP = true then sql := sql + ' AND sz.SkupZbo LIKE N' + QuotedStr('V%'); // přidáno 7.9.2018 verze skupina na V
sql := sql + ')'; // přidáno 7.9.2018
//Helios.Info(sql);
pol:= Helios.OpenSQL(sql);
//helios.Info((pol.RecordCount.ToString));
if (pol.RecordCount>0) then
begin
sql:= '';
pol.First;
while not(pol.EOF) do
begin
newKarta:= false;
regCis:= VarToStr(pol.FieldValues(0));
sql:= 'SELECT id FROM ' + tblKZ + ' WHERE UPPER(SkupZbo)=N';
if ExpP then
tStr:= szNovyImportExpP
else
tStr:= 'MAT';
sql:= sql + QuotedStr(tStr);
sql:= sql + ' AND UPPER(RegCis)=N' + QuotedStr(regCis);
with Helios.OpenSQL(sql) do
if (RecordCount=0) then
begin
sql:= 'INSERT ' + tblKZ + ' (SkupZbo, RegCis, Nazev2, DruhSkladu, MJEvidence, Material, Dilec) VALUES (N' + QuotedStr(tStr);
sql:= sql + ',N' + QuotedStr(regCis) + ',N' + QuotedStr(VarToStr(pol.FieldValues(1)));
sql:= sql + ',1,N' + QuotedStr('ks') + ',';
if ExpP then
sql:= sql + '0,1'
else
sql:= sql + '1,0';
sql:= sql + ')' + CRLF + 'SELECT SCOPE_IDENTITY()';
// Helios.Info(sql + CRLF + tstr);
try
if (tStr<>szNovyImportExpP) and (tStr<>szNovyImportMat) then
with Helios.OpenSQL(sql) do
if (RecordCount>0) then
begin
tStr:= VarToStr(FieldValues(0));
Helios.ExecSQL('UPDATE ' + tblKZ + ' SET Blokovano=1 WHERE id=' + tStr);
UlozChybu(Helios,'Nová karta (bude blokovaná): ' + tStr + '-' + regCis ,nil);
newKarta:= true;
end;
except on E:Exception do
UlozChybu(Helios,'Nelze založit novou kartu ' + regCis + ' : SQL ' + sql, E);
end;
end;
pol.Next;
end;
end;
{
tStr:= '';
sql:= 'SELECT RegCis FROM ' + tblKZ + ' WHERE Blokovano=1 AND SkupZbo=N' + QuotedStr('MAT');
sql:= sql + ' AND UPPER(RegCis) IN (SELECT UPPER(RegCis) FROM ' + tmpTab + ')';
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
First;
while not(EOF) do
begin
UlozChybu(Helios,'Karta je označena jako ARCHIVNÍ a NEBUDE importována: ' + VarHodnota(FieldValues(0),''), nil);;
Next;
end;
end;
}
// pokud je to DL, aktualizuj hmotnosti
if not(ExpP) then
begin
sql:= 'UPDATE kz SET kz.Hmotnost=ROUND((t.hmotJg/1000),6) FROM ' + tblKZ + ' kz INNER JOIN ' + tmpTab + ' t ON (t.regCis=kz.RegCis)';
sql:= sql + ' INNER JOIN ' + tblSZ + ' sz ON (sz.SkupZbo=kz.SkupZbo) INNER JOIN ' + tblSZe;
sql:= sql + ' sze ON (sze.Id=sz.Id) WHERE sze._JeVyroba=1';
Helios.ExecSQL(sql);
end;
sql:= 'SELECT * FROM ' + tmpTab; // + ' WHERE RegCis NOT IN (SELECT RegCis FROM ' + tblKZ + ' WHERE Blokovano=1)';
// sql:= sql + ' AND cObj=N' + QuotedStr(cObj);
sql:= sql + ' ORDER BY pozice';
pol:= Helios.OpenSQL(sql);
if (pol.RecordCount>0) then
begin
ReseedTable(Helios,tblDZ);
ReseedTable(Helios,tblPZ);
ReseedTable(Helios,tblSS);
// ReseedTable(Helios,tblNC);
ReseedTable(Helios,tblJC);
{
if idDZx=0 then
begin
idDZshift:= 0; // posunuti cisla brane z nastaveni TabDruhDokZboDef
sql:= 'SELECT dzd.PosledniPC FROM [dbo].[TabDruhDokZboDef] dzd INNER JOIN [dbo].[TabDruhDokZbo] dz';
sql:= sql + ' ON (dz.ID=dzd.idDruhDZ) WHERE dzd.IdObdobi=' + IntToStr(aktObd);
sql:= sql + ' AND dz.DruhPohybuZbo=9 AND dz.RadaDokladu=N' + QuotedStr(rDokl);
with Helios.OpenSQL(sql) do
if not VarIsNull(FieldValues(0)) then
if not TryStrToInt(VarToStr(FieldValues(0)),idDZshift) then
idDZshift:= 0;
wCond:= 'Obdobi=' + IntToStr(aktObd) + ' AND IdSklad=N' + QuotedStr(skladEP);
wCond:= wCond + ' AND DruhPohybuZbo=9 AND RadaDokladu=N' + QuotedStr(rDokl);
sql:= 'EXEC dbo.hp_NajdiPrvniVolny N' + QuotedStr(tblDZ) + ',N' + QuotedStr('PoradoveCislo');
sql:= sql + ',' + IntToStr(idDZshift) + ',99999999,N' + QuotedStr(wCond) + ',0,1';
idDZ:= 0;
with Helios.OpenSQL(sql) do
if not VarIsNull(FieldValues(0)) then
if not TryStrToInt(VarToStr(FieldValues(0)),idDZ) then
idDZ:= 0;
if (idDZ=0) or (idDZ=idDZshift) then
idDZ:= idDZshift + 1;
end;
}
cisDZ:= IntToStr(idDZ);
mena:= UpperCase(mena);
if (idDZx=0) then
begin
sql:= 'DECLARE @Ident INT'+ CRLF + 'EXEC dbo.hp_InsertHlavickyOZ @Ident OUT,@Sklad=N';
sql:= sql + QuotedStr(skladEP)+',@DruhPohybu=9,@RadaDokladu=N' + QuotedStr(rDokl)+',@Insert=1,';
sql:= sql + '@PC=null,@Mena=N' + QuotedStr(mena) + ',@CisloOrg=';
// sql:= sql + '@PC=' + cisDZ + ',@Mena=N' + QuotedStr(mena) + ',@CisloOrg=';
sql:= sql + cOrg + ',@DatumPorizeni=NULL' + CRLF + 'SELECT @Ident';
idDZ:= 0;
try
with Helios.OpenSQL(sql) do
if (RecordCount>0) then
if not VarIsNull(FieldValues(0)) then
idDZ:= StrToInt(VarToStr(FieldValues(0))); // zjisti ID vytvorene prijemky
except on E:Exception
do Helios.Error(#1'Nelze uložit hlavičku Exp.příkazu (objednávky) !'#1 + CRLF + E.Message + CRLF + sql);
end;
end
else
begin
idDZ:= idDZx;
cisDZ:= IntToStr(idDZ);
end;
// pokud je vytvorena hlavicka dokladu
if (idDZ>0) then
begin
// zmen pripadnou vstupni cenu
kurz:= 1;
with Helios.OpenSQL('SELECT Kurz FROM ' + tblDZ + ' WHERE id=' + IntToStr(idDZ)) do
kurz:= StrToFloat(VarToStr(FieldValues(0)));
{
if (mena<>'CZK') then
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET VstupniCena=4 WHERE id=' + IntToStr(idDZ));
// uprav defaultni DPH na 0 (podle platnosti v danem obdobi)
sql:= 'SELECT d.Sazba FROM ' + tblDPHDef + ' def INNER JOIN ' + tblDPH + ' d ON (def.IdDPH=d.id AND d.Sazba=0)';
sql:= sql + ' WHERE def.IdObdobi=' + IntToStR(aktObd) + ' AND Blokovano=0 AND Platnost=0';
with Helios.OpenSQL(sql) do
if RecordCount>0 then
begin
tStr:= VarToStr(FieldValues(0));
if tStr='' then
tStr:= '0';
sql:= 'UPDATE ' + tblDZ + ' SET SazbaDPH=' + StringReplace(tStr,',','.',[rfReplaceAll]);
sql:= sql + ' WHERE id=' + IntToStr(idDZ);
try
Helios.ExecSQL(sql);
except on E:Exception
do Helios.Error('U dokladu (ExpP) nelze změnit Sazbu DPH.');
end;
end;
}
// import polozek na doklad
pol.First;
while not(pol.EOF) do
begin
idKZ:= 0;
tStr:= '';
boxik:= '';
regCis:= VarToStr(pol.FieldByNameValues('regCis'));
sql:= 'SELECT kz.id, sz.SkupZbo, kz.RegCis, kz.Nazev1, kz.SKP, kz.MJEvidence, kz.SazbaDPHVstup, ';
sql:= sql + 'kz.CelniNomenklatura, kze._UmisteniVyroba, kze._UmisteniPrijem FROM ' + tblKZ + ' kz INNER JOIN ';
sql:= sql + tblSZ + ' sz ON (kz.SkupZbo=sz.SkupZbo) LEFT JOIN ' + tblSZe + ' sze ON (sz.id=sze.id)';
sql:= sql + ' LEFT JOIN ' + tblKZe + ' kze ON (kz.id=kze.id)' ;
sql:= sql + ' WHERE kz.Blokovano=0 AND kz.RegCis=N' + QuotedStr(regCis) + ' AND sze._JeVyroba=1';
// if (ExpP = True) then sql := sql + ' AND sze._JeProImportObjednavkyZItalie=1'; // přidáno 7.9.2018
if (ExpP = True) then sql := sql + ' AND sz.SkupZbo LIKE N' + QuotedStr('V%'); // přidáno 7.9.2018
szPodm:= ' AND sz.SkupZbo NOT LIKE N' + QuotedStr('%00');
with Helios.OpenSQL(sql + szPodm) do
if (RecordCount>0) then // regulerni karta
idKZ:= StrToInt(VarToStr(FieldValues(0)));
if (idKZ=0) then
with Helios.OpenSQL(sql) do
if (RecordCount>0) then
idKZ:= StrToInt(VarToStr(FieldValues(0)));
// helios.Info((idkz).ToString);
if (idKZ>0) then
with Helios.OpenSQL(sql) do
begin
// test na existenci Kusovnikovych vazev a Technologickych postupu
{
sql:= 'SELECT id FROM ' + tblKZ + ' WHERE Material=1 AND Id=' + IntToStr(idKZ) + ' UNION ALL ';
sql:= sql + 'SELECT id FROM ' + tblKVaz + ' WHERE vyssi=' + IntToStr(idKZ);
with Helios.OpenSQL(sql) do
if (RecordCount>1) then
UlozChybu(Helios,'Pozor, karta je výrobek ale nemá definovaný kusovník (' + regCis + ')',nil);
sql:= 'SELECT id FROM ' + tblKZ + ' WHERE Material=1 AND Id=' + IntToStr(idKZ) + ' UNION ALL ';
sql:= sql + 'SELECT id FROM ' + tblPostup + ' WHERE dilec=' + IntToStr(idKZ);
with Helios.OpenSQL(sql) do
if (RecordCount>1) then
UlozChybu(Helios,'Pozor, karta je výrobek ale nemá definované tech.postupy (' + regCis + ')',nil);
}
try
qty:= StrToFloat(VarToStr(pol.FieldByNameValues('mnozstvi')));
except
qty:= 0;
end;
pozice:= StrToInt(VarToStr(pol.FieldByNameValues('pozice')));
boxik:= VarToStr(pol.FieldByNameValues('boxik'));
descript:= VarToStr(pol.FieldByNameValues('popis'));
try
per:= StrToFloat(VarToStr(pol.FieldByNameValues('per')));
except
per:= 1;
end;
if (per=0) then
per:= 1;
cena:= 0;
cena:= StrToFloat(VarToStr(pol.FieldByNameValues('cena')));
cena:= RoundToEX(cena/per,-6);
if kontrolaCen then
begin
if (mena='CZK') or (mena='') then
sql:= 'SELECT pz.JCbezDaniKC'
else
sql:= 'SELECT pz.JCbezDaniVal';
sql:= sql + ' FROM ' + tblPZ + ' pz INNER JOIN ' + tblSS + ' ss ON (pz.IDZboSklad=ss.id)';
sql:= sql + ' INNER JOIN ' + tblKZ + ' kz ON (ss.IDKmenZbozi=kz.id) WHERE ss.IDSklad=N';
sql:= sql + QuotedStr(Helios.Sklad) + ' AND pz.IDDoklad=' + IntToStr(idCen) + ' AND kz.id=' + IntToStr(idKZ);
with Helios.OpenSQL(sql) do
begin
if (RecordCount=0) then
begin
sql:= 'Položka nebyla v ceníku nalezena: ' + regCis;
if ExpP then
sql:= sql + ', pozice ' + IntToStr(pozice);
sql:= sql + ', množ. ' + FloatToStr(qty);
sql:= sql + ' (cena ' + FloatToStr(cena) + ')';
UlozChybu(Helios, sql, nil);
end;
if (RecordCount>0) then
begin
ccena:= StrToFloat(VarToStr(FieldValues(0)));
ccena:= RoundToEX(ccena, -4);
cena:= RoundToEX(cena, -4);
if (ccena<>cena) then
begin
sql:= 'Rozdílná cena položky: ' + regCis;
if ExpP then
sql:= sql + ', pozice ' + IntToStr(pozice);
sql:= sql + ', množ. ' + FloatToStr(qty);
sql:= sql + ' (cena ' + FloatToStr(cena) + ' x ceník ' + FloatToStr(ccena) + ')';
UlozChybu(Helios, sql, nil);
end;
end;
end;
end;
datum:= StrToDate(VarToStr(pol.FieldByNameValues('datDod')));
idUmist:= 0;
if not ExpP then
begin
tStr:= VarToStr(FieldValues(7)); // celni nomenklatura
cObj:= VarToStr(pol.FieldByNameValues('cObj')); // CN ze souboru
if newKarta then
Helios.ExecSQL('UPDATE ' + tblKZ + ' SET CelniNomenklatura=N' + QuotedStr(LeftStr(cObj,8)) + ' WHERE id=' + IntToStr(idKZ))
else
if (cObj<>tStr) then
begin
Helios.ExecSQL('UPDATE ' + tblKZ + ' SET CelniNomenklatura=N' + QuotedStr(LeftStr(cObj,8)) + ' WHERE id=' + IntToStr(idKZ));
UlozChybu(Helios,'Karta má odlišnou celní nomenklaturu: ' + regCis + ' (stará ' + tStr + ' x nová ' + cObj + ')', nil);
end;
end;
sazba:= VarToStr(FieldValues(6));
if (sazba='') then
sazba:= '0';
mj:= VarToStr(FieldValues(5));
idSS:= '';
jCenaSS:= '0';
{
// kontrola existence NC
sql:= 'SELECT ';
if mena<>'CZK' then
sql:= sql + 'CenaVal1'
else
sql:= sql + 'CenaKC';
sql:= sql + ' FROM ' + tblNC + ' WHERE CenovaUroven=1 AND IdKmenZbozi=' + IntToStr(idKZ);
if mena<>'CZK' then
sql:= sql + ' AND UPPER(Mena1)=N' + QuotedStr(mena);
Clipboard.AsText:= sql;
ShowMessage('SQL: ' + sql);
with Helios.OpenSQL(sql) do
if RecordCount>0 then
jCenaSS:= VarToStr(FieldValues(0)); // nabidkova cena v dane mene
}
with Helios.OpenSQL('SELECT id FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(skladEP) + ' AND IDKmenZbozi=' + IntToStr(idKZ)) do
if (RecordCount>0) then
idSS:= VarToStr(FieldValues(0));
if (idSS='') then
begin
sql:= 'INSERT ' + tblSS + ' (IDKmenZbozi,IDSklad) VALUES (' + IntToStr(idKZ) + ',N' + QuotedStr(skladEP) + ')';
try
Helios.ExecSQL(sql);
except on E:Exception do
UlozChybu(Helios,'Chyba ins StavSkl pol: ' + regCis + ' : SQL ' + sql,E);
end;
with Helios.OpenSQL('SELECT SCOPE_IDENTITY()') do
if not VarIsNull(FieldValues(0)) then
idSS:= VarToStr(FieldValues(0));
end;
if (idSS<>'') then
begin
sql:= 'SELECT id FROM ' + tblPZ + ' WHERE IdZboSklad=' + idSS + ' AND DruhPohybuZbo<5';
with Helios.OpenSQL(sql) do
if (RecordCount=0) then
UlozChybu(Helios,'Položka ' + regCis + ' nemá žádný minulý pohyb na skladě, zkontrolujte hmotnost/celní nomenklaturu...', nil);
sql:= 'DECLARE @Ident INT' + CRLF + 'EXEC dbo.hp_InsertPolozkyOZ @Ident OUT,@IDDoklad=';
sql:= sql + IntToStr(idDZ) + ',@DruhPohybu=';
if ExpP then
sql:= sql + '9'
else
sql:= sql + '0';
sql:= sql + ',@CisloOrg=' + cOrg + ',@IDZboSklad=' + idSS + ',@SazbaDPH=' + sazba + ',@Mnozstvi=';
sql:= sql + StringReplace(FloatToStr(qty),',','.',[rfReplaceAll]) + ',@MJ=N' + QuotedStr(mj) + ',@JCbezDaniKC=';
sql:= sql + StringReplace(FloatToStr(cena),',','.',[rfReplaceAll]) + ',@DatPorizeni=NULL';
if mena='CZK' then
sql:= sql + ',@VstupniCena=0,@Kurz=1'
else
sql:= sql + ',@VstupniCena=4,@Kurz=' + StringReplace(FloatToStr(kurz),',','.',[rfReplaceAll]);
sql:= sql + ',@PovolitDuplicitu=1,@SazbaSD=0,@ZakazanoDPH=0,@KurzEuro=0,@Mena=N' + QuotedStr(mena);
sql:= sql + ',@PovolitBlokovane=1,@JednotkaMeny=1,@Selectem=0' + CRLF + 'SELECT @Ident';
idPZ:= 0;
try
with Helios.OpenSQL(sql) do
if (RecordCount>0) then
if not VarIsNull(FieldValues(0)) then
if not TryStrToInt(VarToStr(FieldValues(0)),idPZ) then
idPZ:= 0;
except on E:Exception do
UlozChybu(Helios,'Nelze uložit položku do dokladu ! SQL ' + sql, E);
end;
if (idPZ>0) then
begin
Helios.ExecSQL('UPDATE ' + tblPZ + ' SET BlokovaniEditoru=NULL WHERE id=' + IntToStr(idPZ));
sql:= '';
if (mena<>'CZK') then
begin
sql:= 'UPDATE ' + tblPZ + ' SET JCbezDaniKc=' + StringReplace(FloatToStr(cena*kurz),',','.',[rfReplaceAll]);
sql:= sql + ',JCbezDaniKcPoS=' + StringReplace(FloatToStr(cena*kurz),',','.',[rfReplaceAll]);
sql:= sql + ',CCbezDaniKc=' + StringReplace(FloatToStr(qty*cena*kurz),',','.',[rfReplaceAll]);
sql:= sql + ',JCbezDaniValPoS=' + StringReplace(FloatToStr(cena),',','.',[rfReplaceAll]);
sql:= sql + ',JCbezDaniVal=' + StringReplace(FloatToStr(cena),',','.',[rfReplaceAll]);
sql:= sql + ',CCbezDaniVal=' + StringReplace(FloatToStr(qty*cena),',','.',[rfReplaceAll]);
sql:= sql + ' WHERE id=' + IntToStr(idPZ) + CRLF;
try
Helios.ExecSQL(sql);
except on E:Exception do
UlozChybu(Helios,'Nelze upravit cenu položky ExpPř !' + CRLF + sql, E);
end;
end;
if (cena<>0) and not ExpP then
begin
sql:= 'DECLARE @idZ INT' + CRLF + 'SET @idZ=(SELECT TOP(1) id FROM dbo.TabCZmeny WHERE Rada=N' + QuotedStr('01') + ' AND datum<=';
sql:= sql + 'CONVERT(datetime,N' + QuotedStr(DateToStr(datum)) + ',104) ORDER BY datum DESC)' + CRLF;
sql:= sql + 'SELECT id,Cena FROM ' + tblKaCe + ' WHERE ZmenaOd=@idZ AND IdKmenZbozi=' + IntToStr(idKZ);
with Helios.OpenSQL(sql) do
begin
if (RecordCount>0) then
begin
// if StrToFloat(VarToStr(FieldValues(1)))=0 then
try
Helios.ExecSQL('UPDATE ' + tblKaCe + ' SET Cena=' + StringReplace(FloatToStr(cena),',','.',[rfReplaceAll]) + ' WHERE id=' + VarToStr(FieldValues(0)));
except on E:Exception do
UlozChybu(Helios,'Nelze aktualizovat kalkulační cenu ! SQL: ' + sql, E);
end;
end
else
begin
sql:= 'DECLARE @idZ INT' + CRLF + 'SET @idZ=(SELECT TOP(1) id FROM dbo.TabCZmeny WHERE Rada=N' + QuotedStr('01') + ' AND datum<=';
sql:= sql + 'CONVERT(datetime,N' + QuotedStr(DateToStr(datum)) + ',104) ORDER BY datum DESC)' + CRLF;
sql:= sql + 'IF @idZ IS NOT NULL INSERT ' + tblKaCe + ' (IdKmenZbozi,ZmenaOd,Cena) VALUES (' + IntToStr(idKZ) + ',@idZ,';
sql:= sql + StringReplace(FloatToStr(cena),',','.',[rfReplaceAll]) + ')';
try
Helios.ExecSQL(sql);
except on E:Exception do
UlozChybu(Helios,'Nelze uložit kalkulační cenu ! SQL: ' + sql, E);
end;
end;
end;
end;
sql:= 'UPDATE ' + tblPZ + ' SET ';
if ExpP then
begin // objednavka = ExpPr
mj:= IntToStr(pozice);
if (Length(mj)>4) then
mj:= ReverseString(LeftStr(ReverseString(mj),4));
mj:= StringOfChar('0',4-Length(mj))+mj;
sql:= sql + 'NazevSozNa1=N' + QuotedStr(cObj);
sql:= sql + ',NazevSozNa2=N' + QuotedStr(mj) + ',NazevSozNa3=N' + QuotedStr(cObj+mj);
sql:= sql + ',PozadDatDod=CONVERT(datetime,' + QuotedStr(DateToStr(datum)) + ',104)';
end
else
begin // packinglist = prijemka
tStr:= '';
sql:= sql + 'NazevSozNa1=N' + QuotedStr(boxik); // descript
if not VarIsNull(FieldValues(8)) then // umisteni na vyrobu
tStr:= VarToStr(FieldValues(8));
if (tStr='') then
if not VarIsNull(FieldValues(9)) then // umisteni
tStr:= VarToStr(FieldValues(9));
if (tStr<>'') then
begin
tStr:= 'SELECT id FROM ' + tblUmist + ' WHERE IDSklad=N' + QuotedStr(Helios.Sklad) + ' AND Kod=N' + QuotedStr(tStr);
with Helios.OpenSQL(tStr) do
if (RecordCount>0) then
begin
idUmist:= StrToInt(VarToStr(FieldValues(0)));
tStr:= 'SELECT id FROM ' + tblStavUm + ' WHERE IDStav=' + idSS + ' AND IDUmisteni=' + IntToStr(idUmist);
with Helios.OpenSQL(tStr) do
if (RecordCount>0) then
sql:= sql + ',IDUmisteni=' + VarToStr(FieldValues(0));
end;
end;
end;
sql:= sql + ',Popis4=N' + QuotedStr(descript);
sql:= sql + ' WHERE id=' + IntToStr(idPZ);
try
Helios.ExecSQL(sql);
except on E:Exception do
UlozChybu(Helios,'Nelze aktualizovat doplňující údaje na položce dokladu ! SQL: ' + sql, E);
end;
end;
end;
end;
pol.Next;
end;
end;
Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=null WHERE id=' + IntToStr(idDZ));
Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + IntToStr(idDZ) + ',@AktualizaceSlev=1');
{
sql:= 'SELECT kz.id FROM ' + tblPZ + ' WHERE kz.Blokovano=1';
with Helios.OpenSQL(sql) do
if RecordCount>0 then
Helios.OpenBrowse(bidKZ,'TabKmenZbozi.Blokovano=1');
}
end;
Helios.Refresh(True);
try
Helios.ExecSQL('TRUNCATE TABLE ' + tmpTab);
except
end;
Helios.Info('Import souboru '#1 + fName + #1' byl ukoncen.');
if not ExpP then
with Helios.OpenSQL('SELECT id FROM ' + tblKZ + ' WHERE Blokovano=0 AND SkupZbo=N' + QuotedStr(szNovyImportMat)) do
if (RecordCount>0) then
begin
Helios.Error(#1'Existují nové materiály, je třeba je přeřadit do skupiny MAT,' + CRLF + 'upravit detaily a zaměnit na dokladech'#1);
Helios.OpenBrowse(2,'TabKmenZbozi.Blokovano=0 AND TabKmenZbozi.SkupZbo=N' + QuotedStr(szNovyImportMat));
end;
end;
Screen.Cursor:= crDefault;
{
try
with Helios.OpenSQL('SELECT Poznamka FROM #TabExtKom') do
if (RecordCount>0) then
Helios.OpenBrowse(541,'');
finally
end;
}
end;
procedure TplgLOVATO.HromadneOdvedeniEvidKoop(const Helios: IHelios);
begin
with Helios.OpenSQL('SELECT id FROM dbo._TabPrijemNadvyroby WHERE Zpracovano=0') do
if (RecordCount>0) then
begin
end
else
Helios.Error(#1'V importní tabulce (_TabPrijemNadvyroby) nejsou žádné záznamy.'#1);
end;
procedure TplgLOVATO.ImportDL_CHD(const Helios: IHelios);
var lSQL, cObj, regC, mnoz, cisDL, dat, dokl, altP, mnCena, cOrgCHD, idKoop: string;
idx, poz, idEvid, idKO, idPKO, idVPr, idKZ, idDZ, idDZp, idSS: integer;
xls: TXLSReadWriteII5;
sheet: TXLSWorksheet;
begin
lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabExtKom') + ',N' + QuotedStr('U') + ') IS NOT NULL';
lSQL:= lSQL + CRLF + 'DROP TABLE #TabExtKom' + CRLF + 'CREATE TABLE #TabExtKom(Poznamka NVARCHAR(255) NOT NULL)' + CRLF;
lSQL:= 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)';
Helios.ExecSQL(lSQL);
if OtevriSouborXLS(fName,'') then
begin
xls:= TXLSReadWriteII5.Create(nil);
try
xls.LoadFromFile(fName);
// CHD-SPEKTRUM s.r.o.
cOrgCHD:= '1118';
with Helios.OpenSQL('SELECT id FROM ' + tblCOrg + ' WHERE NadrizenaOrg IS NULL AND DIC=N' + QuotedStr('CZ26084155')) do
if (RecordCount=1) then
cOrgCHD:= VarToStr(FieldValues(0));
idKoop:= '7';
with Helios.OpenSQL('SELECT id FROM dbo.TabRadyCKoop WHERE LOWER(LTRIM(RTRIM(nazev)))=N' + QuotedStr('spektrum')) do
if (RecordCount=1) then
idKoop:= VarToStr(FieldValues(0));
dat:= InputBox('Datum evidence','Datum: ', DateToStr(Now));
sheet:= xls.Sheets[0];
idx:= 1;
idDZ:= 0;
idDZp:= 0;
regC:= sheet.AsString[2,idx];
while (regC<>'') do
begin
cObj:= '';
poz:= 0;
regC:= '';
mnoz:= '0';
cisDL:= '';
if (sheet.CellType[0,idx]<>xctNone) and (sheet.CellType[0,idx]<>xctBlank) then
cObj:= Trim(sheet.AsString[0,idx]);
if (sheet.CellType[1,idx]<>xctNone) and (sheet.CellType[1,idx]<>xctBlank) then
poz:= sheet.AsInteger[1,idx];
if (sheet.CellType[2,idx]<>xctNone) and (sheet.CellType[2,idx]<>xctBlank) then
regC:= Trim(sheet.AsString[2,idx]);
if (sheet.CellType[3,idx]<>xctNone) and (sheet.CellType[3,idx]<>xctBlank) then
mnoz:= Trim(sheet.AsString[3,idx]);
if (sheet.CellType[4,idx]<>xctNone) and (sheet.CellType[4,idx]<>xctBlank) then
cisDL:= Trim(sheet.AsString[4,idx]);
idKO:= 0;
idPKO:= 0;
idVPr:= 0;
idKZ:= 0;
if (cObj<>'') then
begin
with Helios.OpenSQL('SELECT id FROM ' + tblKObj + ' WHERE REPLACE(Objednavka,''/'','''')=N' + QuotedStr(cObj)) do
if (RecordCount=1) then
idKO:= StrToInt(VarToStr(FieldValues(0)));
if (idKO>0) and (poz>0) then
with Helios.OpenSQL('SELECT Id, IdPrikaz, DokladPrPostup, AltPrPostup, ROUND(Cena/Kusy,3) FROM ' + tblPKObj + ' WHERE IDObjednavky=' + IntToStr(idKO) + ' AND Polozka=' + IntToStr(poz)) do
if (RecordCount=1) then
begin
idPKO:= StrToInt(VarToStr(FieldValues(0)));
idVPr:= StrToInt(VarToStr(FieldValues(1)));
dokl:= VarToStr(FieldValues(2));
altP:= VarToStr(FieldValues(3));
mnCena:= VarToStr(FieldValues(4));
end;
if (idKO>0) and (idPKO>0) and (idVPr>0) then
begin
idEvid:= 0;
with Helios.OpenSQL('SELECT IdTabKmen FROM ' + tblPrikaz + ' WHERE Id=' + IntToStr(idVPr)) do
idKZ:= StrToInt(VarToStr(FieldValues(0)));
lSQL:= 'DECLARE @cc NUMERIC(19,6), @idEvid INT, @dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dat) + ',104)' + CRLF;
lSQL:= lSQL + 'SET @cc=' + StringReplace(mnCena,',','.',[rfReplaceAll]) + CRLF;
lSQL:= lSQL + 'EXEC @idEvid=dbo.hp_EvidenceOperace @Datum=@dt,@Platit_TBC=0,@Platit_TEC=0,@Kusy_odv=';
lSQL:= lSQL + StringReplace(mnoz,',','.',[rfReplaceAll]) + ',@Operace_odv=' + StringReplace(mnoz,',','.',[rfReplaceAll]);
lSQL:= lSQL + ',@Mzda=@cc,@Stav=1,@IDPolKoopObj=' + IntToStr(idPKO) + CRLF + 'SELECT @idEvid';
with Helios.OpenSQL(lSQL) do
begin
idEvid:= StrToInt(VarToStr(FieldValues(0)));
Helios.ExecSQL('UPDATE ' + tblMzdZm + ' SET BlokovaniEditoru=NULL WHERE Id=' + IntToStr(idEvid));
lSQL:= 'UPDATE ' + tblMzdZmE + ' SET _DodaciListKooperanta=N' + QuotedStr(cisDL) + ' WHERE id=' + IntToStr(idEvid) + CRLF;
lSQL:= lSQL + 'IF (@@ROWCOUNT=0) INSERT ' + tblMzdZmE + ' (ID, _DodaciListKooperanta) VALUES (' + IntToStr(idEvid) + ',N' + QuotedStr(cisDL) + ')';
Helios.ExecSQL(lSQL);
end;
end;
end
else
if (regC<>'') then
begin
if (idDZ=0) then
begin
lSQL:= 'DECLARE @dt DATETIME, @idDZ INT' + CRLF + 'SET @dt=GETDATE()' + CRLF;
lSQL:= lSQL + 'EXEC dbo.hp_InsertHlavickyOZ @idDZ OUT,@Sklad=N' + QuotedStr(sklCHD) + ',@Mena=N' + QuotedStr('CZK');
lSQL:= lSQL + ',@DruhPohybu=4,@RadaDokladu=N' + QuotedStr('450') + ',@Insert=1,@CisloOrg=0,@PC=NULL';
lSQL:= lSQL + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @idDZ';
try
with Helios.OpenSQL(lSQL) do
idDZ:= StrToInt(VarToStr(FieldValues(0)));
except on E:Exception do
begin
Clipboard.AsText:= lSQL;
Helios.Error(#1'Nelze uložit hlavičku výdejky/převodky, vratka musí být provedena ručně.'#1 + CRLF + E.Message);
end;
end;
end;
if (idDZ>0) then
begin
lSQL:= 'SELECT ss.id FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.Id AND ss.IDSklad=N' + QuotedStr(sklCHD) + ')';
lSQL:= lSQL + ' WHERE kz.SkupZbo=N' + QuotedStr('MAT') + ' AND kz.RegCis=N' + QuotedStr(regC);
with Helios.OpenSQL(lSQL) do
if (RecordCount=1) then
begin
lSQL:= 'DECLARE @idOut INT, @ss INT, @m NVARCHAR(3), @k NUMERIC(12,4), @jm INT, @kEUR NUMERIC(15,4), @sSD NUMERIC(5,2), @sDPH NUMERIC(5,2),';
lSQL:= lSQL + '@mn NUMERIC(19,6), @d DATETIME, @pdp BIT, @typSaz TINYINT, @idKZ INT' + CRLF + 'SELECT @jm=1, @sSD=0' + CRLF;
lSQL:= lSQL + 'SELECT @mn=' + StringReplace(mnoz,',','.',[rfReplaceAll]) + CRLF;
lSQL:= lSQL + 'SELECT @ss=ss.Id, @idKZ=kz.Id FROM ' + tblKZ + ' kz INNER JOIN ' + tblSS + ' ss ON (ss.IdKmenZbozi=kz.Id AND ss.IdSklad=N' + QuotedStr(sklCHD);
lSQL:= lSQL + ') WHERE kz.SkupZbo=N' + QuotedStr('MAT') + ' AND kz.RegCis=N' + QuotedStr(regC) + CRLF;
lSQL:= lSQL + 'EXEC dbo.hp_GetSazbuDPH @sDPH OUT, @typSaz OUT, @pdp OUT, @DruhPohybu=4, @IDKmenZbozi=@idKZ' + CRLF;
lSQL:= lSQL + 'SELECT @m=Mena, @k=Kurz, @kEUR=KurzEuro FROM ' + tblDZ + ' WHERE id=' + IntToStr(idDZ) + CRLF;
lSQL:= lSQL + 'EXEC dbo.hp_InsertPolozkyOZ @idOut OUT,@IDDoklad=' + IntToStr(idDZ) + ',@DruhPohybu=4,@CisloOrg=26,@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';
try
with Helios.OpenSQL(lSQL) do
begin
lSQL:= 'DECLARE @ss INT; SELECT @ss=ss.Id FROM ' + tblKZ + ' kz INNER JOIN ' + tblSS + ' ss ON (ss.IdKmenZbozi=kz.Id AND ss.IdSklad=N' + QuotedStr(sklCHD);
lSQL:= lSQL + ') WHERE kz.SkupZbo=N' + QuotedStr('MAT') + ' AND kz.RegCis=N' + QuotedStr(regC) + CRLF;
lSQL:= lSQL + 'UPDATE ' + tblPZ + ' SET JCbezDaniKC=(SELECT Prumer FROM ' + tblSS + ' WHERE id=@ss) WHERE id=' + VarToStr(FieldValues(0));
Helios.ExecSQL(lSQL);
end;
except on E:Exception do
Helios.Error(#1 + E.Message + #1);
end;
end
else
Helios.ExecSQL('INSERT #TabExtKom (Poznamka) VALUES (' + QuotedStr('CHYBA: Karta materiálu '#1 + regC + #1' nebyla na skladě ' + sklCHD + ' nalezena, nebude zadána na výdejku/převodku.') + ')');
end;
end;
Inc(idx);
end;
if (idDZ>0) then
begin
lSQL:= 'UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL, IdSkladPrevodu=N' + QuotedStr(sklVyr);
lSQL:= lSQL + ',TypPrevodky=N' + QuotedStr('250') + ',DruhPohybuPrevod=0,PopisDodavky=N' + QuotedStr('Zpětný převod mat.');
lSQL:= lSQL + ' WHERE DruhPohybuZbo=4 AND id=' + IntToStr(idDZ);
Helios.ExecSQL(lSQL);
{
lSQL:= 'DECLARE @dt DATETIME, @idDZp INT' + CRLF + 'SET @dt=GETDATE()' + CRLF;
lSQL:= lSQL + 'EXEC dbo.hp_InsertHlavickyOZ @idDZp OUT,@Sklad=N' + QuotedStr(sklVyr) + ',@Mena=N' + QuotedStr('CZK');
lSQL:= lSQL + ',@DruhPohybu=0,@RadaDokladu=N' + QuotedStr('250') + ',@Insert=1,@CisloOrg=26,@PC=NULL';
lSQL:= lSQL + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @idDZp';
try
with Helios.OpenSQL(lSQL) do
idDZp:= StrToInt(VarToStr(FieldValues(0)));
except on E:Exception do
begin
Clipboard.AsText:= lSQL;
Helios.Error(#1'Nelze uložit hlavičku příjemky/převodky, vratka musí být provedena ručně.'#1 + CRLF + E.Message);
end;
end;
lSQL:= 'EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=' + IntToStr(idDZp) + ',@IDDokladSrc=' + IntToStr(idDZ);
lSQL:= lSQL + ',@CisloOrgCil=0,@MUcil=null,@KurzCil=1,@JednotkaMenyCil=1,@MenaCil=N' + QuotedStr('CZK');
lSQL:= lSQL + ',@Returnem=1,@KurzEuroCil=0,@CisloZakCil=null,@NOkruhCil=null,@StredNakladCil=null,@StredVynosCil=null';
lSQL:= lSQL + ',@FormaDopravyCil=null,@VozidloCil=null,@ObjednavkaCil=null,@PopisDodavkyCil=N' + QuotedStr('Zpětný převod mat.');
lSQL:= lSQL + ',@NavaznyDobropisCil=null,@ZamestnanecCil=null,@DodFakCil=null,@Nasobek=1,@SlevaCil=0';
lSQL:= lSQL + ',@VytvaretDokladovouVazbu=1,@VytvaretPolozkovouVazbu=1';
try
Helios.ExecSQL(lSQL);
lSQL:= 'UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL WHERE DruhPohybuZbo=0 AND id=' + IntToStr(idDZp);
Helios.ExecSQL(lSQL);
except on E:Exception do
Helios.Error(#1'Chyba generování dokladového řetězu: '#1 + E.Message);
end;
}
end;
Helios.Refresh(true);
Helios.Info(#1'Import DL ukončen' + IfThen(idDZ>0,' + vygenerována výdejka/převodka CHD -> Lovato','...') +#1);
except on E:Exception do
Helios.Error(#1'Chyba: ' + #1 + E.Message);
end;
end;
end;
// vloženo při číslu palety
procedure TplgLOVATO.ImportDL(const Helios: IHelios);
var lSQL, cObj, regC, mnoz, cisDL, dat, dokl, altP, mnCena{, cOrgCHD}{, idKoop}: string;
idx, poz, idEvid, idKO, idPKO, idVPr, idKZ, idDZ, idDZp, idSS: integer;
xls: TXLSReadWriteII5;
sheet: TXLSWorksheet;
CisloPalety: String;
{ IdOrg: integer;
DIC: string; }
begin
lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabExtKom') + ',N' + QuotedStr('U') + ') IS NOT NULL';
lSQL:= lSQL + CRLF + 'DROP TABLE #TabExtKom' + CRLF + 'CREATE TABLE #TabExtKom(Poznamka NVARCHAR(255) NOT NULL)' + CRLF;
lSQL:= 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)';
Helios.ExecSQL(lSQL);
if OtevriSouborXLS(fName,'') then
begin
xls:= TXLSReadWriteII5.Create(nil);
try
xls.LoadFromFile(fName);
// CHD-SPEKTRUM s.r.o.
// cOrgCHD:= '1118';
{ with Helios.OpenSQL('SELECT id FROM ' + tblCOrg + ' WHERE NadrizenaOrg IS NULL AND DIC=N' + QuotedStr('CZ26084155')) do
if (RecordCount=1) then
cOrgCHD:= VarToStr(FieldValues(0)); }
{idKoop:= '7';
with Helios.OpenSQL('SELECT id FROM dbo.TabRadyCKoop WHERE LOWER(LTRIM(RTRIM(nazev)))=N' + QuotedStr('spektrum')) do
if (RecordCount=1) then
idKoop:= VarToStr(FieldValues(0)); }
dat:= InputBox('Datum evidence','Datum: ', DateToStr(Now));
sheet:= xls.Sheets[0];
idx:= 1;
idDZ:= 0;
idDZp:= 0;
regC:= sheet.AsString[2,idx];
while (regC<>'') do
begin
cObj:= '';
poz:= 0;
regC:= '';
mnoz:= '0';
cisDL:= '';
CisloPalety:='';
if (sheet.CellType[0,idx]<>xctNone) and (sheet.CellType[0,idx]<>xctBlank) then
cObj:= Trim(sheet.AsString[0,idx]);
if (sheet.CellType[1,idx]<>xctNone) and (sheet.CellType[1,idx]<>xctBlank) then
poz:= sheet.AsInteger[1,idx];
if (sheet.CellType[2,idx]<>xctNone) and (sheet.CellType[2,idx]<>xctBlank) then
regC:= Trim(sheet.AsString[2,idx]);
if (sheet.CellType[3,idx]<>xctNone) and (sheet.CellType[3,idx]<>xctBlank) then
mnoz:= Trim(sheet.AsString[3,idx]);
if (sheet.CellType[4,idx]<>xctNone) and (sheet.CellType[4,idx]<>xctBlank) then
cisDL:= Trim(sheet.AsString[4,idx]);
if (sheet.CellType[5,idx]<>xctNone) and (sheet.CellType[5,idx]<>xctBlank) then
CisloPalety:= Trim(sheet.AsString[5,idx]);
idKO:= 0;
idPKO:= 0;
idVPr:= 0;
idKZ:= 0;
if (cObj<>'') then
begin
{with Helios.OpenSQL('SELECT id FROM ' + tblCOrg + ' WHERE NadrizenaOrg IS NULL AND DIC=N' + QuotedStr(DIC)) do
if (RecordCount=1) then IdOrg:= (FieldValues(0)); } // nastavení organizace podle DIČ z Excelu, kde zatím není nebo to (DIČ a dokonce i id organizace) lze zjistit na kooperační objednávce - ale zatím to není třeba
//with Helios.OpenSQL('SELECT id, IDOraganizace, DIC FROM ' + tblKObj + ' WHERE REPLACE(Objednavka,''/'','''')=N' + QuotedStr(cObj)) do
with Helios.OpenSQL('SELECT id FROM ' + tblKObj + ' WHERE REPLACE(Objednavka,''/'','''')=N' + QuotedStr(cObj)) do
if (RecordCount=1) then
idKO:= StrToInt(VarToStr(FieldValues(0)));
//IdOrg:= (FieldValues(1));
//DIC := (FieldValues(2));
if (idKO>0) and (poz>0) then
with Helios.OpenSQL('SELECT Id, IdPrikaz, DokladPrPostup, AltPrPostup, ROUND(Cena/Kusy,3) FROM ' + tblPKObj + ' WHERE IDObjednavky=' + IntToStr(idKO) + ' AND Polozka=' + IntToStr(poz)) do
if (RecordCount=1) then
begin
idPKO:= StrToInt(VarToStr(FieldValues(0)));
idVPr:= StrToInt(VarToStr(FieldValues(1)));
dokl:= VarToStr(FieldValues(2));
altP:= VarToStr(FieldValues(3));
mnCena:= VarToStr(FieldValues(4));
end;
if (idKO>0) and (idPKO>0) and (idVPr>0) then
begin
idEvid:= 0;
with Helios.OpenSQL('SELECT IdTabKmen FROM ' + tblPrikaz + ' WHERE Id=' + IntToStr(idVPr)) do
idKZ:= StrToInt(VarToStr(FieldValues(0)));
lSQL:= 'DECLARE @cc NUMERIC(19,6), @idEvid INT, @dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dat) + ',104)' + CRLF;
lSQL:= lSQL + 'SET @cc=' + StringReplace(mnCena,',','.',[rfReplaceAll]) + CRLF;
lSQL:= lSQL + 'EXEC @idEvid=dbo.hp_EvidenceOperace @Datum=@dt,@Platit_TBC=0,@Platit_TEC=0,@Kusy_odv=';
lSQL:= lSQL + StringReplace(mnoz,',','.',[rfReplaceAll]) + ',@Operace_odv=' + StringReplace(mnoz,',','.',[rfReplaceAll]);
lSQL:= lSQL + ',@Mzda=@cc,@Stav=1,@IDPolKoopObj=' + IntToStr(idPKO) + CRLF + 'SELECT @idEvid';
with Helios.OpenSQL(lSQL) do
begin
idEvid:= StrToInt(VarToStr(FieldValues(0)));
Helios.ExecSQL('UPDATE ' + tblMzdZm + ' SET BlokovaniEditoru=NULL WHERE Id=' + IntToStr(idEvid));
lSQL:= 'UPDATE ' + tblMzdZmE + ' SET _DodaciListKooperanta=N' + QuotedStr(cisDL) + ' , _CisloPalety = N' + QuotedStr(CisloPalety) + ' WHERE id=' + IntToStr(idEvid) + CRLF;
lSQL:= lSQL + 'IF (@@ROWCOUNT=0) INSERT ' + tblMzdZmE + ' (ID, _DodaciListKooperanta, _CisloPalety) VALUES (' + IntToStr(idEvid) + ',N' + QuotedStr(cisDL) + ',N' + QuotedStr(CisloPalety)+ ')';
Helios.ExecSQL(lSQL);
end;
end;
end
;{ else
if (regC<>'') then
begin
if (idDZ=0) then
begin
lSQL:= 'DECLARE @dt DATETIME, @idDZ INT' + CRLF + 'SET @dt=GETDATE()' + CRLF;
lSQL:= lSQL + 'EXEC dbo.hp_InsertHlavickyOZ @idDZ OUT,@Sklad=N' + QuotedStr(sklCHD) + ',@Mena=N' + QuotedStr('CZK');
lSQL:= lSQL + ',@DruhPohybu=4,@RadaDokladu=N' + QuotedStr('450') + ',@Insert=1,@CisloOrg=0,@PC=NULL';
lSQL:= lSQL + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @idDZ';
try
with Helios.OpenSQL(lSQL) do
idDZ:= StrToInt(VarToStr(FieldValues(0)));
except on E:Exception do
begin
Clipboard.AsText:= lSQL;
Helios.Error(#1'Nelze uložit hlavičku výdejky/převodky, vratka musí být provedena ručně.'#1 + CRLF + E.Message);
end;
end;
end;
if (idDZ>0) then
begin
lSQL:= 'SELECT ss.id FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.Id AND ss.IDSklad=N' + QuotedStr(sklCHD) + ')';
lSQL:= lSQL + ' WHERE kz.SkupZbo=N' + QuotedStr('MAT') + ' AND kz.RegCis=N' + QuotedStr(regC);
with Helios.OpenSQL(lSQL) do
if (RecordCount=1) then
begin
lSQL:= 'DECLARE @idOut INT, @ss INT, @m NVARCHAR(3), @k NUMERIC(12,4), @jm INT, @kEUR NUMERIC(15,4), @sSD NUMERIC(5,2), @sDPH NUMERIC(5,2),';
lSQL:= lSQL + '@mn NUMERIC(19,6), @d DATETIME, @pdp BIT, @typSaz TINYINT, @idKZ INT' + CRLF + 'SELECT @jm=1, @sSD=0' + CRLF;
lSQL:= lSQL + 'SELECT @mn=' + StringReplace(mnoz,',','.',[rfReplaceAll]) + CRLF;
lSQL:= lSQL + 'SELECT @ss=ss.Id, @idKZ=kz.Id FROM ' + tblKZ + ' kz INNER JOIN ' + tblSS + ' ss ON (ss.IdKmenZbozi=kz.Id AND ss.IdSklad=N' + QuotedStr(sklCHD);
lSQL:= lSQL + ') WHERE kz.SkupZbo=N' + QuotedStr('MAT') + ' AND kz.RegCis=N' + QuotedStr(regC) + CRLF;
lSQL:= lSQL + 'EXEC dbo.hp_GetSazbuDPH @sDPH OUT, @typSaz OUT, @pdp OUT, @DruhPohybu=4, @IDKmenZbozi=@idKZ' + CRLF;
lSQL:= lSQL + 'SELECT @m=Mena, @k=Kurz, @kEUR=KurzEuro FROM ' + tblDZ + ' WHERE id=' + IntToStr(idDZ) + CRLF;
lSQL:= lSQL + 'EXEC dbo.hp_InsertPolozkyOZ @idOut OUT,@IDDoklad=' + IntToStr(idDZ) + ',@DruhPohybu=4,@CisloOrg=26,@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';
try
with Helios.OpenSQL(lSQL) do
begin
lSQL:= 'DECLARE @ss INT; SELECT @ss=ss.Id FROM ' + tblKZ + ' kz INNER JOIN ' + tblSS + ' ss ON (ss.IdKmenZbozi=kz.Id AND ss.IdSklad=N' + QuotedStr(sklCHD);
lSQL:= lSQL + ') WHERE kz.SkupZbo=N' + QuotedStr('MAT') + ' AND kz.RegCis=N' + QuotedStr(regC) + CRLF;
lSQL:= lSQL + 'UPDATE ' + tblPZ + ' SET JCbezDaniKC=(SELECT Prumer FROM ' + tblSS + ' WHERE id=@ss) WHERE id=' + VarToStr(FieldValues(0));
Helios.ExecSQL(lSQL);
end;
except on E:Exception do
Helios.Error(#1 + E.Message + #1);
end;
end
else
Helios.ExecSQL('INSERT #TabExtKom (Poznamka) VALUES (' + QuotedStr('CHYBA: Karta materiálu '#1 + regC + #1' nebyla na skladě ' + sklCHD + ' nalezena, nebude zadána na výdejku/převodku.') + ')');
end;
end; }
Inc(idx);
end;
// if (idDZ>0) then
// begin
// lSQL:= 'UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL, IdSkladPrevodu=N' + QuotedStr(sklVyr);
// lSQL:= lSQL + ',TypPrevodky=N' + QuotedStr('250') + ',DruhPohybuPrevod=0,PopisDodavky=N' + QuotedStr('Zpětný převod mat.');
// lSQL:= lSQL + ' WHERE DruhPohybuZbo=4 AND id=' + IntToStr(idDZ);
// Helios.ExecSQL(lSQL);
//
//{
// lSQL:= 'DECLARE @dt DATETIME, @idDZp INT' + CRLF + 'SET @dt=GETDATE()' + CRLF;
// lSQL:= lSQL + 'EXEC dbo.hp_InsertHlavickyOZ @idDZp OUT,@Sklad=N' + QuotedStr(sklVyr) + ',@Mena=N' + QuotedStr('CZK');
// lSQL:= lSQL + ',@DruhPohybu=0,@RadaDokladu=N' + QuotedStr('250') + ',@Insert=1,@CisloOrg=26,@PC=NULL';
// lSQL:= lSQL + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @idDZp';
// try
// with Helios.OpenSQL(lSQL) do
// idDZp:= StrToInt(VarToStr(FieldValues(0)));
// except on E:Exception do
// begin
// Clipboard.AsText:= lSQL;
// Helios.Error(#1'Nelze uložit hlavičku příjemky/převodky, vratka musí být provedena ručně.'#1 + CRLF + E.Message);
// end;
// end;
//
// lSQL:= 'EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=' + IntToStr(idDZp) + ',@IDDokladSrc=' + IntToStr(idDZ);
// lSQL:= lSQL + ',@CisloOrgCil=0,@MUcil=null,@KurzCil=1,@JednotkaMenyCil=1,@MenaCil=N' + QuotedStr('CZK');
// lSQL:= lSQL + ',@Returnem=1,@KurzEuroCil=0,@CisloZakCil=null,@NOkruhCil=null,@StredNakladCil=null,@StredVynosCil=null';
// lSQL:= lSQL + ',@FormaDopravyCil=null,@VozidloCil=null,@ObjednavkaCil=null,@PopisDodavkyCil=N' + QuotedStr('Zpětný převod mat.');
// lSQL:= lSQL + ',@NavaznyDobropisCil=null,@ZamestnanecCil=null,@DodFakCil=null,@Nasobek=1,@SlevaCil=0';
// lSQL:= lSQL + ',@VytvaretDokladovouVazbu=1,@VytvaretPolozkovouVazbu=1';
// try
// Helios.ExecSQL(lSQL);
// lSQL:= 'UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL WHERE DruhPohybuZbo=0 AND id=' + IntToStr(idDZp);
// Helios.ExecSQL(lSQL);
// except on E:Exception do
// Helios.Error(#1'Chyba generování dokladového řetězu: '#1 + E.Message);
// end;
//}
// end;
Helios.Refresh(true);
// Helios.Info(#1'Import DL ukončen' + IfThen(idDZ>0,' + vygenerována výdejka/převodka CHD -> Lovato','...') +#1);
Helios.Info(#1'Import DL ukončen' +#1);
except on E:Exception do
Helios.Error(#1'Chyba: ' + #1 + E.Message);
end;
end;
end;
// konec vložení čísla palety
procedure TplgLOVATO.Run(const Helios: IHelios);
const MinVerzeHelios = $020020170001;
var lSQL, contInfo: string;
cRec, cntID, l_loop: integer;
btnRes: TModalResult;
sql, podm, dConv1,dConv2, podmDat, IDcka: string;
arrID: TArray<integer>;
typAkce: byte;
dt: TDateTime;
jeTest: boolean;
browID, idDZ, idKZ, iTmp: integer;
params, vlastTbl, sTmp: string;
// impEP : TformImportEP;
CRM_akt: TformCRM_Aktivity; // dočasně zakomentováno 26.6.2018
// fDodavky: TformDodavky;
fKmenZbozi: TformKartyZbozi;
// fVydej: TformVydejka;
fBL: TformBaliciListy;
fDPVydej: TfrmVydejDPrace;
// fPrijemNadvyroba: TformPrijemkaNadvyroba;
fOdvedBarCode: TformOdvedeniPrikazu;
fStSklHrZmen: TformStavSklHromZmeny;
fRozdelMat: TfrmRozdelMat;
fPrevPrij: TformPrevPrij;
fDemontaz: TformDemontaz;
fReklamaceMat: TformReklamaceMat;
fMatRozp: TformMaterial;
fOdvodRele: TformOdvodRele;
fKanbanBox: TformKanbanBox;
fKanbanObj: TformKanbanObj;
begin
with Helios.OpenSQL('SELECT CONVERT(nvarchar(128),CONTEXT_INFO(),2)') do
if VarIsNull(FieldValues(0)) then
contInfo:= 'NULL'
else
contInfo:= VarToStr(FieldValues(0));
Helios.ExecSQL('SET CONTEXT_INFO 0x4E54536D6F64756C4C4F56'); // nastav context v sys.sysprocesses (hexadecimalne NTSmodulLOV)
{$REGION 'Záznam do TabPlgUse'}
dConv1:= '(CONVERT(DATETIME,CONVERT(INT,CONVERT(FLOAT,Datum))))';
dConv2:= '(CONVERT(DATETIME,CONVERT(INT,CONVERT(FLOAT,GETDATE() ))))';
podmDat:= dConv1 + '=' + dConv2;
sql:= 'IF OBJECT_ID(N' + QuotedStr('[dbo].[_TabPlgUse]') + ',N' + QuotedStr('U') + ') IS NULL ';
sql:= sql + 'CREATE TABLE [dbo].[_TabPlgUse] ([ID] int IDENTITY(1, 1) NOT NULL,';
sql:= sql + '[PlgJmeno] nvarchar(128) COLLATE Czech_CI_AS NOT NULL,';
sql:= sql + '[Uzivatel] nvarchar(128) COLLATE Czech_CI_AS DEFAULT suser_sname() NOT NULL,';
sql:= sql + '[Datum] datetime DEFAULT getdate() NOT NULL, [Status] tinyint DEFAULT 0 NOT NULL,';
sql:= sql + '[Stanice] nvarchar(128) COLLATE Czech_CI_AS DEFAULT host_name() NOT NULL)';
try
Helios.ExecSQL(sql);
except
end;
sql:= 'IF NOT EXISTS(SELECT id FROM [dbo].[_TabPlgUse] WHERE Uzivatel=SUSER_SNAME() AND Status=0 AND ';
sql:= sql + 'PlgJmeno=N' + QuotedStr('plgLOVATO') + ' AND ' + podmDat + ')' + CRLF;
sql:= sql + ' INSERT [dbo].[_TabPlgUse] (PlgJmeno,Status) VALUES (N' + QuotedStr('plgLOVATO') + ',0)' + CRLF;
sql:= sql + 'UPDATE [dbo].[_TabPlgUse] SET Datum=GETDATE() WHERE Uzivatel=SUSER_SNAME() AND Status=0 AND ';
sql:= sql + 'PlgJmeno=N' + QuotedStr('plgLOVATO') + ' AND ' + podmDat;
try
Helios.ExecSQL(sql);
except
end;
{$ENDREGION}
{$REGION 'Zapis do TabPluginInfo'}
sTmp:= StringReplace(helUtils.GetFileVersion2(GetModuleName(HInstance)),'.','',[rfReplaceAll]);
sTmp:= '0200' + MidStr(sTmp,3,8);
if Length(sTmp)=11 then
sTmp:= LeftStr(sTmp,8) + '0' + RightStr(sTmp,3);
sql:= 'IF NOT EXISTS(SELECT id FROM ' + tblPlgInfo + ' WHERE NazevSys=N' + QuotedStr(plgSysName) + ')';
sql:= sql + ' INSERT ' + tblPlgInfo + ' (NazevSys,NazevObjektu,NazevVerejny,VerzePluginu,ZmenyOK) VALUES (N';
sql:= sql + QuotedStr(plgSysName) + ',N' + QuotedStr(plgSysName) + ',N' + QuotedStr('Plugin pro LOVATO electric');
sql:= sql + ',N' + QuotedStr(sTmp) + ',1) ELSE ';
sql:= sql + 'UPDATE ' + tblPlgInfo + ' SET VerzePluginu=N' + QuotedStr(sTmp) + ' WHERE';
sql:= sql + ' NazevSys=N' + QuotedStr(plgSysName);
Helios.ExecSQL(sql);
{$ENDREGION}
{$REGION 'Region - zjistit typAkce, browID, vlastTbl, vytvor #TabExtKom'}
typAkce:= 0;
with Helios.OpenSQL('SELECT Parametry FROM TabExtKom WHERE ID=' + IntToStr(Helios.ExtKomID)) do
begin
params:= VarToStr(FieldValues(0));
jeTest:= false;
if Pos('test', LowerCase(params))>0 then
jeTest:= true;
if Pos(';',params)>0 then
begin
typAkce:= StrToInt(LeftStr(params,Pos(';',params)-1));
params:= MidStr(params,Pos(';',params)+1,255);
if Pos(';',params)>0 then
browID:= StrToInt(LeftStr(params,Pos(';',params)-1))
else
browID:= StrToInt(params);
if Pos(';',params)>0 then // zadany 3 parametry (akce, browID, vlastnikID)
begin
params:= MidStr(params,Pos(';',params)+1,255);
vlastTbl:= params;
end;
end
else
raise Exception.Create('Nemám potřebný počet parametrů !');
end;
lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabExtKom') + ') IS NOT NULL DROP TABLE #TabExtKom' + CRLF;
lSQL:= lSQL + 'CREATE TABLE #TabExtKom (Poznamka nvarchar(255))';
Helios.ExecSQL(lSQL);
{$ENDREGION}
if (Helios.HeVersion<MinVerzeHelios) then
raise Exception.Create('Plugin vyžaduje min verzi Heliosu ' + IntToHex(MinVerzeHelios, 12));
aktObd:= Helios.Obdobi;
if (Helios.BrowseID<>browID) then
begin
typAkce:= 0;
Helios.Error('Tento plugin lze volat pouze z přehledu: '#1 + IntToStr(browID) + #1'.');
end;
IDcka:= '';
cRec:= 0;
if (Helios.SelectedRecordIDs<>'') then
IDcka:= Helios.SelectedRecordIDs
else
if not VarIsNull(Helios.CurrentRecordID) then
begin
cRec:= StrToInt(VarToStr(Helios.CurrentRecordID));
IDcka:= IntToStr(cRec);
end;
if (IDcka<>'') then
begin
cntID:= 1 + Length(IDcka)-Length(StringReplace(IDcka,',','',[rfReplaceAll]));
SetLength(arrID,cntID);
for l_loop:=0 to cntID-1 do
begin
if Pos(',',IDcka)>0 then
begin
arrID[l_loop]:= StrToInt(LeftStr(IDcka,Pos(',',IDcka)-1));
IDcka:= MidStr(IDcka,Pos(',',IDcka)+1,65535)
end
else
arrID[l_loop]:= StrToInt(IDcka);
end;
cRec:= arrID[0];
end;
ReseedTable(Helios,tblDZ);
ReseedTable(Helios,tblPZ);
case typAkce of
1: begin // import objednavky do ExpPr
idDZ:= 0;
if (vlastTbl<>'') then
idDZ:= StrToInt(VarToStr(Helios.QueryEdit.FieldByNameValues('id')));
ImportEP(Helios, idDZ, true);
end;
2: begin // import prijemky materialu (packinglist) do Prijmu
idDZ:= 0;
if (vlastTbl<>'') then
idDZ:= StrToInt(VarToStr(Helios.QueryEdit.FieldByNameValues('id')));
ImportEP(Helios, idDZ, false); // stejna procedura jako pri importu IT objednavky
end;
3: begin
CRM_akt:= TformCRM_Aktivity.Create(nil);
try
CRM_akt.Helios:= Helios;
CRM_akt.idAkt:= 0;
if (vlastTbl='1') then
CRM_akt.idAkt:= cRec;
CRM_akt.ShowModal;
finally
CRM_akt.Free;
end;
Helios.Refresh(true); // dočasně zakomentováno 26.6.2018
end;
4: begin
if (cRec>0) then
begin
params:= '';
sTmp:= '';
idKZ:= cRec; // id nad prehledem Zbozi a sluzby
if (Helios.BrowseID=bidSS) then
with Helios.OpenSQL('SELECT IdKmenZbozi FROM ' + tblSS + ' WHERE id=' + IntToStr(cRec)) do
idKZ:= StrToInt(VarToStr(FieldValues(0)));
if (Helios.BrowseID=bidPZ) then
begin
sql:= 'SELECT kze.id FROM ' + tblPZ + ' pz INNER JOIN ' + tblSS;
sql:= sql + ' ss ON (pz.IDZboSklad=ss.id) INNER JOIN ' + tblKZ + ' kz ON (ss.idKmenZbozi=kz.id)';
sql:= sql + ' INNER JOIN ' + tblKZe + ' kze ON (kz.id=kze.id) WHERE pz.id=' + IntToStr(cRec);
with Helios.OpenSQL(sql) do
if (RecordCount=1) then
idKZ:= StrToInt(VarToStr(FieldValues(0)));
end;
with Helios.OpenSQL('SELECT ISNULL(_UmisteniPrijem,N'''') FROM ' + tblKZe + ' WHERE id=' + IntToStr(idKZ)) do
if (RecordCount=1) then
begin
if not VarIsNull(FieldValues(0)) then
begin
sTmp:= InputBoxOkCancel('Umístění materiálu','Umístění: ', VarToStr(FieldValues(0)),btnRes);
if (btnRes=mrCancel) then
Exit;
params:= 'UPDATE ' + tblKZe + ' SET _UmisteniPrijem=';
if (sTmp='') then
params:= params + 'null'
else
params:= params + 'N' + QuotedStr(sTmp);
params:= params + ' WHERE id=' + IntToStr(idKZ);
end
end
else
begin
sTmp:= InputBoxOkCancel('Umístění materiálu','Umístění: ', '',btnRes);
if (btnRes<>mrCancel) then
begin
if (sTmp<>'') then
begin
params:= 'IF NOT EXISTS(SELECT id FROM ' + tblKZe + ' WHERE id=' + IntToStr(idKZ) + ')';
params:= params + ' INSERT ' + tblKZe + ' (id,_UmisteniPrijem) VALUES (' + IntToStr(idKZ);
params:= params + ',N' + QuotedStr(sTmp) + ')';
end;
end;
end;
if (params<>'') then
Helios.ExecSQL(params);
Helios.Refresh(true);
end
else
Helios.Error(#1'Změna umístění lze udělat pouze nad jednou kartou.'#1);
{
fDodavky:= TformDodavky.Create(nil);
try
fDodavky.Helios:= Helios;
fDodavky.idOrg:= cRec;
fDodavky.ShowModal;
finally
fDodavky.Free;
end;
}
end;
5: begin
fKmenZbozi:= TformKartyZbozi.Create(nil);
try
fKmenZbozi.Helios:= Helios;
fKmenZbozi.idKZ:= 0;
if (vlastTbl='edit') then
begin
case (Helios.BrowseID) of
bidSS: fKmenZbozi.idKZ:= StrToInt(VarToStr(Helios.QueryBrowse.FieldByNameValues('idKmenZbozi')));
bidKZ: fKmenZbozi.idKZ:= cRec;
end;
end;
fKmenZbozi.ShowModal;
finally
fKmenZbozi.Free;
end;
end;
6: begin
if Helios.YesNo(#1'VÝDEJKA KOOPERANTOVI' + CRLF + 'Přejete si vygenerovat položky podle požadavků kooperanta ?'#1,false) then
begin
if (cRec=0) then // tvorim to z ulozeneho Dokladu? NE pak vezmi ID dokladu z QueryEditu
cRec:= StrToInt(VarToStr(Helios.QueryEdit.FieldByNameValues('id')));
// sql:= 'EXEC dbo.ep_NTS_VydejkaKooperantovi NULL,' + IntToStr(cRec);
// sql:= sql + ',' + VarToStr(Helios.QueryEdit.FieldByNameValues('CisloOrg'));
// Helios.ExecSQL(sql);
// Helios.Refresh(true);
// Helios.Info('Položky byly uloženy na doklad.');
end;
end;
7: begin // nesplnene objednavky
ImportNesplObj(Helios);
end;
8: begin // editace vydejky zjednodusene, viz bod 9 + edit
end;
9: begin
fBL:= TformBaliciListy.Create(nil);
try
fBL.idDZ:= 0;
if (vlastTbl='edit') then
fBL.idDZ:= cRec;
fBL.typ:= 3;
fBL.Helios:= Helios;
fBL.ShowModal;
finally
fBL.Free;
end;
end;
{
10: begin
GenerujVydejMatZPrikazu(Helios, cRec);
end;
}
10: begin
if (cRec>0) then
begin
// if TestKoopObjVydejMat(Helios,cRec) then
begin
{
fPrijemNadvyroba:= TformPrijemkaNadvyroba.Create(nil);
try
fPrijemNadvyroba.idPKObj:= cRec;
fPrijemNadvyroba.Helios:= Helios;
fPrijemNadvyroba.ShowModal;
finally
fPrijemNadvyroba.Free;
end;
}
end
// else
// Helios.Error(#1'Na příkaz nebyl vydán žádný materiál.'#1);
end;
end;
11: begin
with Helios.OpenSQL('SELECT id FROM ' + tblKObj + ' WHERE realizovano=0 AND id=' + IntToStr(cRec)) do
if (RecordCount=0) then
ExportKoopObj(Helios, cRec)
else
Helios.Error(#1'Kooperační objednávka není realizována, nelze exportovat.'#1 + CRLF + 'Realizujte jí a zkuste to znovu.');
end;
12: begin // Hromadna uprava Pozadovany termin dodani na polozkach kooperacni objednavky
sql:= 'SELECT ko.id FROM ' + tblPKObj + ' pko INNER JOIN ' + tblKObj + ' ko ON (pko.IDObjednavky=ko.id)';
sql:= sql + ' WHERE ko.Realizovano=1 AND pko.id=' + IntToStr(arrID[0]);
with Helios.OpenSQL(sql) do
if (RecordCount=0) then
begin
if FormDatum('Zadejte datum','Požadovaný termín dodání:',dt) then
for l_loop:=0 to Length(arrID)-1 do
begin
sql:= 'UPDATE ' + tblPKObj + ' SET PozadTerDod=CONVERT(datetime,N' + QuotedStr(DateToStr(dt)) + ',104)';
sql:= sql + ' WHERE id=' + IntToStr(arrID[l_loop]);
try
Helios.ExecSQL(sql);
Helios.ExecSQL('EXEC dbo.ep_DoplnKooperacniCeny ' + IntToStr(arrID[l_loop]));
except on E:Exception do
Helios.Error('Nelze upravit datum pro položku kooperační objednávky.');
end;
Helios.Refresh(true);
end;
end
else
Helios.Error(#1'Tato kooperační objednávka byla již realizována,' + CRLF + 'požadované termíny nejdou změnit.'#1);
end;
13: begin
if (vlastTbl='del') and (cRec>0) then
begin
if Helios.YesNo('Opravdu chcete zrušit objednávku Nadvýroby ?',false) then
SmazObjNadvyroby(Helios,cRec)
end
else
begin
fDPVydej:= TfrmVydejDPrace.Create(nil);
try
fDPVydej.Helios:= Helios;
fDPVydej.ShowModal;
finally
fDPVydej.Free;
end;
end;
end;
14: begin
if (vlastTbl='del') and (cRec>0) then
begin
if Helios.YesNo('Opravdu chcete smazat tento záznam?',false) then
begin
try
lSQL:= 'BEGIN TRAN x' + CRLF + 'UPDATE ' + tblEvidNadvyr + ' SET Zaevidovano=Zaevidovano-';
with Helios.OpenSQL('SELECT Mnozstvi FROM ' + tblEvidOp + ' WHERE id=' + IntToStr(cRec)) do
if (RecordCount=0) then
lSQL:= lSQL + '0'
else
lSQL:= lSQL + StringReplace(VarToStr(FieldValues(0)),',','.',[rfReplaceAll]);
lSQL:= lSQL + ' WHERE id=' + IntToStr(cRec) + CRLF;
lSQL:= lSQL + 'DELETE FROM ' + tblEvidOp + ' WHERE id=' + IntToStr(cRec) + CRLF;
lSQL:= lSQL + 'DELETE FROM ' + tblEvidNadvyrVPr + ' WHERE IdEvidOpBarcode=' + IntToStr(cRec) + CRLF;
lSQL:= lSQL + 'DELETE FROM ' + tblEvidOpVPr + ' WHERE IdEvidOper=' + IntToStR(cRec) + CRLF;
lSQL:= lSQL + 'IF (@@ERROR>0) ROLLBACK TRAN x ELSE COMMIT TRAN x';
Helios.ExecSQL(lSQL);
except on E:Exception do
Helios.Error(#1'Chyba při mazání záznamu.'#1 + CRLF + E.Message);
end;
end;
end
else
begin
fOdvedBarCode:= TformOdvedeniPrikazu.Create(nil);
try
fOdvedBarCode.Helios:= Helios;
fOdvedBarCode.typOdvodu:= 2; // podle vyrobku
fOdvedBarCode.jeTest:= (LowerCase(Trim(vlastTbl))='test');
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Start plugin - Odvedení práce'));
fOdvedBarCode.ShowModal;
finally
fOdvedBarCode.Free;
end;
// Helios.ExecSQL('EXEC dbo.hp_ZapisDoZurnalu @Uroven=2, @Udalost=-1, @Akce=N' + QuotedStr('Konec plugin - Odvedení práce'));
end;
Helios.Refresh(true);
end;
15: begin
// z odvedeni daneho vyrobniho prikazu "preved" dilec na vydejku vyvozu, zachova se vazba na ExpPr + aktualizuje se odebrane mnozstvi
ZadejPolPrijemkyNaVydejku(Helios,cRec);
end;
16: begin
fStSklHrZmen:= TformStavSklHromZmeny.Create(nil);
try
fStSklHrZmen.Helios:= Helios;
fStSklHrZmen.arrID:= arrID;
fStSklHrZmen.ShowModal;
finally
fStSklHrZmen.Free;
end;
end;
17: begin
// z vyrobniho prikazu "preved" dilec na vydejku vyvozu, zachova se vazba na ExpPr + aktualizuje se odebrane mnozstvi
ZadejVyrPrikazNaVydejku(Helios,cRec);
end;
18: begin
StavSkladuDoZadVyp(Helios); // vybrane karty ze Stavu skladu (vc.mnozstvi) do Predbezneho planu + smazani stareho
end;
19: begin
ImportZClipboardu(Helios, 1); //typ=1 -> import Min/Max do TabStavSkladuImp
end;
20: begin
PrevodStavSkladuImp(Helios,1); //typ=1 -> import Min/Max do TabStavSkladuImp
end;
21: begin
VyrabeneDilceDoZadVyp(Helios); // vybrane dilce do Predbezneho planu + smazani stareho (mnozstvi 1)
end;
22: begin
if Length(arrID)>0 then
begin
try
fRozdelMat:= TfrmRozdelMat.Create(nil);
fRozdelMat.Helios:= Helios;
if Helios.BrowseID=bidSS then
fRozdelMat.aIdSS:= myUtils.ArrayIntToStr(arrID)
else
fRozdelMat.aIdDZ:= myUtils.ArrayIntToStr(arrID);
fRozdelMat.ShowModal;
finally
fRozdelMat.Free;
end;
end;
{
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())';
Helios.ExecSQL(sql);
for l_loop:=0 to Length(arrID)-1 do
begin
RozpadPrijStavNaKooperanty(Helios,arrID[l_loop],0);
end;
with Helios.OpenSQL('SELECT Autor FROM ' + tblRozpPrijStav + ' WHERE Autor=SUSER_SNAME()') do
if RecordCount>0 then
begin
podm:= 'SELECT r.*,kz.SkupZbo,kz.RegCis,kz.Nazev1 FROM _TabRozpadPrijStav r INNER JOIN ' + tblKZ;
podm:= podm + ' kz ON (r.IdKmenZbozi=kz.id) WHERE r.Autor=SUSER_SNAME()';
sql:= 'IF OBJECT_ID(N' + QuotedStr('dbo.hvw_RozpadPrijStav') + ',N''V'') IS NOT NULL';
sql:= sql + ' DROP VIEW [dbo].[hvw_RozpadPrijStav]' + CRLF;
Helios.ExecSQL(sql);
sql:= 'CREATE VIEW dbo.hvw_RozpadPrijStav AS ' + podm + CRLF;
Helios.ExecSQL(sql);
sql:= 'UPDATE dbo.TabObecnyPrehled SET DefView=N' + QuotedStr(podm) + ' WHERE NazevSys=N' + QuotedStr('hvw_RozpadPrijStav');
Helios.ExecSQL(sql);
Helios.OpenBrowse(100038,'Autor=SUSER_SNAME()');
end;
end;
}
end;
23: begin
sql:= 'SELECT dz.id,odz.id FROM ' + tblDZ + ' dz LEFT JOIN ' + tblDZ + ' odz ON (dz.id=odz.NavaznyDoklad)';
sql:= sql + ' WHERE (dz.Realizovano=1 OR odz.Realizovano=1) AND dz.id=' + IntToStr(cRec);
with Helios.OpenSQL(sql) do
if (RecordCount>0) then
Helios.Error(#1'Tento doklad nebo zdrojový doklad jsou realizované - nelze opravovat.'#1)
else
begin
fPrevPrij:= TformPrevPrij.Create(nil);
try
fPrevPrij.idDZold:= 0;
with Helios.OpenSQL('SELECT id FROM ' + tblDZ + ' WHERE NavaznyDoklad=' + IntToStr(cRec)) do
fPrevPrij.idDZold:= VarHodnota(FieldValues(0),0);
fPrevPrij.idDZ:= cRec;
fPrevPrij.Helios:= Helios;
fPrevPrij.ShowModal;
finally
fPrevPrij.Free;
end;
end;
end;
24: begin // presun kooperace na prikazech do polozek koop.objednavky ! se seskupenim dle vyrobku a data dodani !
KooperaceniPolozkySeSeskupenim(Helios);
end;
25: begin
fDemontaz:= TformDemontaz.Create(nil);
try
if (Length(arrID)>1) then
fDemontaz.idPols:= arrID;
fDemontaz.jeTest:= jeTest;
fDemontaz.Helios:= Helios;
fDemontaz.ShowModal;
finally
fDemontaz.Free;
end;
end;
26: begin
Screen.Cursor:= crHourGlass;
UpdateWindow(hInstance);
ImportStavuInventur(Helios);
Screen.Cursor:= crDefault;
Helios.Refresh(true);
end;
27: begin
fMatRozp:= TformMaterial.Create(nil);
try
fMatRozp.idMat:= cRec;
fMatRozp.Helios:= Helios;
fMatRozp.ShowModal;
finally
fMatRozp.Free;
end;
end;
28: begin
{
fOdvodRele:= TformOdvodRele.Create(nil);
try
fOdvodRele.Helios:= Helios;
fOdvodRele.ShowModal;
finally
fOdvodRele.Free;
end;
}
fOdvedBarCode:= TformOdvedeniPrikazu.Create(nil);
try
fOdvedBarCode.Helios:= Helios;
fOdvedBarCode.typOdvodu:= 1; // podle prikazu
fOdvedBarCode.ShowModal;
finally
fOdvedBarCode.Free;
end;
Helios.Refresh(true);
end;
29: begin
if (cRec>0) then
ExportKoopObjHQL(Helios, cRec);
end;
30: begin
fReklamaceMat:= TformReklamaceMat.Create(nil);
try
fReklamaceMat.Helios:= Helios;
fReklamaceMat.ShowModal;
finally
fReklamaceMat.Free;
end;
end;
31: ImportDL_CHD(Helios);
32: begin
if (vlastTbl='del') then
begin
if Helios.YesNo('Opravdu chcete smazat tento kanban box ?', false) then
begin
with Helios.OpenSQL('SELECT id FROM dbo._TabKanbanPohyby WHERE IdKanbanBox=' + IntToStr(cRec)) do
if (RecordCount=0) then
Helios.ExecSQL('DELETE FROM dbo._TabKanbanBox WHERE id=' + IntToStr(cRec))
else
Helios.Error(#1'Box byl použit při objednávkách, nelze smazat.'#1);
end;
end
else
begin
try
fKanbanBox:= TformKanbanBox.Create(nil);
if (vlastTbl='edit') then
fKanbanBox.idBox:= cRec
else
fKanbanBox.idBox:= 0;
fKanbanBox.Helios:= Helios;
fKanbanBox.ShowModal;
finally
fKanbanBox.Free;
end;
end;
end;
33: begin
if (vlastTbl='del') then
begin
with Helios.OpenSQL('SELECT id FROM dbo._TabKanbanObj WHERE Id=' + IntToStr(cRec) + ' AND IdKoopObj IS NULL AND IdVydejObalu IS NULL') do
if (RecordCount=1) then
begin
if Helios.YesNo('Opravdu smazat tuto kanban objednávku ?',false) then
begin
Helios.ExecSQL('DELETE FROM dbo._TabKanbanPohyby WHERE IdKanbanObj=' + IntToStr(cRec));
Helios.ExecSQL('DELETE FROM dbo._TabKanbanObj WHERE id=' + IntToStr(cRec));
Helios.Refresh(true);
end
end
else
Helios.Error(#1'Z objednávky byla vygenerována výdejka obalů nebo Kooperační objednávka, nelze jí smazat.'#1);
end
else
begin
fKanbanObj:= TformKanbanObj.Create(nil);
try
if (vlastTbl='edit') then
fKanbanObj.idObj:= cRec
else
fKanbanObj.idObj:= 0;
fKanbanObj.Helios:= Helios;
fKanbanObj.ShowModal;
finally
fKanbanObj.Free;
end;
end;
end;
34: KontrolaExistVsechObj(Helios);
35: ImportZClipboardu(Helios, 2);
36: ImportObjMaterialu(Helios, 0); // sdileny material = 1
37: ImportObjMatEdit(Helios, cRec);
38: ImportDL(Helios); // import dodacího listu včetně čísla palety
255: begin
// ReseedTable(Helios,'[dbo].[]');
ReseedTable(Helios,tblDZ);
ReseedTable(Helios,tblPZ);
ReseedTable(Helios,'[dbo].[TabSkupinyZbozi]');
ReseedTable(Helios,'[dbo].[TabParametryKmeneZbozi]');
ReseedTable(Helios,tblKZ);
ReseedTable(Helios,'[dbo].[TabBarCodeZbo]');
ReseedTable(Helios,tblSS);
ReseedTable(Helios,tblOrg);
ReseedTable(Helios,tblCZam);
ReseedTable(Helios, tblJC);
ReseedTable(Helios, tblNC);
ReseedTable(Helios,'[dbo].[TabMJ]');
ReseedTable(Helios, tblStrom);
ReseedTable(Helios,'[dbo].[TabParKmZ]');
ReseedTable(Helios,'[dbo].[TabKVazby]');
ReseedTable(Helios,'[dbo].[TabPostup]');
ReseedTable(Helios,'[dbo].[TabPrKVazby]');
ReseedTable(Helios, tblPrikaz);
ReseedTable(Helios,'[dbo].[TabPrikazP]');
ReseedTable(Helios,'[dbo].[TabKalkCe]');
ReseedTable(Helios,'[dbo].[TabInvPolozka]');
ReseedTable(Helios,'[dbo].[TabPrPostup]');
ReseedTable(Helios,'[dbo].[TabCPraco]');
end;
end;
{$REGION 'Záznam do TabPlgUse'}
sql:= 'IF NOT EXISTS(SELECT id FROM [dbo].[_TabPlgUse] WHERE Uzivatel=SUSER_SNAME() AND Status=1 AND ';
sql:= sql + 'PlgJmeno=N' + QuotedStr('plgLOVATO') + ' AND ' + podmDat + ')' + CRLF;
sql:= sql + ' INSERT [dbo].[_TabPlgUse] (PlgJmeno,Status) VALUES (N' + QuotedStr('plgLOVATO') + ',1)' + CRLF;
sql:= sql + 'UPDATE [dbo].[_TabPlgUse] SET Datum=GETDATE() WHERE Uzivatel=SUSER_SNAME() AND Status=1 AND ';
sql:= sql + 'PlgJmeno=N' + QuotedStr('plgLOVATO') + ' AND ' + podmDat;
try
Helios.ExecSQL(sql);
except
end;
{$ENDREGION}
// Helios.Refresh(true);
if (contInfo='NULL') then
Helios.ExecSQL('SET CONTEXT_INFO 0x')
else
Helios.ExecSQL('SET CONTEXT_INFO 0x' + contInfo); // vymaz context v sys.sysprocesses (hexadecimalne NTSmodulLOV)
try
with Helios.OpenSQL('IF OBJECT_ID(' + QuotedStr('tempdb..#TabExtKom') + ') IS NOT NULL SELECT Poznamka FROM #TabExtKom') do
if (RecordCount>0) then
Helios.OpenBrowse(541,'');
finally
end;
Helios.Refresh(true);
end;
INITIALIZATION
dxCore.dxInitialize;
dxUnitsLoader.Initialize;
// hdl:= LoadPackage('HeLib.bpl');
// SetThreadLocale(LOCALE_USER_DEFAULT);
// GetFormatSettings;
TComObjectFactory.Create(ComServer, TplgLOVATO, Class_LOVATO, 'runMe', '', ciMultiInstance, tmSingle);
finalization
dxUnitsLoader.Finalize;
dxCore.dxFinalize;
END.