diff --git a/_custom/EMPolar/sqlDefs.inc b/_custom/EMPolar/sqlDefs.inc new file mode 100644 index 0000000..71a2b43 --- /dev/null +++ b/_custom/EMPolar/sqlDefs.inc @@ -0,0 +1 @@ +// arrDefs.Add('ep_HDCDZApi_ZpracujPrijataData'); diff --git a/_custom/EMPolar/uCtrlCustom.pas b/_custom/EMPolar/uCtrlCustom.pas index 705e487..c82d413 100644 --- a/_custom/EMPolar/uCtrlCustom.pas +++ b/_custom/EMPolar/uCtrlCustom.pas @@ -76,6 +76,22 @@ type end; + [MVCPath('/emp/vytezeni')] + TEMPVytezeniDoklController = class(TBaseController) + private + FSelfSvc: TEMPVytezeniDoklService; + public + constructor Create; override; + destructor Destroy; override; + + [MVCPath('/fprij/post/($id)')] + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('EMP - vytěžení dokumentů dokladu FaktPrij', 'Pošle dokument dokladu Faktury přijaté na AiDOCU API', 'EMPVytezDokFPrijPostByID')] + [MVCSwagParam(plPath, 'id', 'ID dokladu Faktury přijaté', ptString, true)] + [MVCProduces('application/json')] + procedure FPrij_PostByID (id: string); + end; + implementation uses @@ -195,22 +211,22 @@ uses procedure TEMPDokumentAtestController.GetMeta; - begin - try - Render(ObjectDict().Add('data', GetDokumentService.GetMeta)); - except + begin + try + Render(ObjectDict().Add('data', GetDokumentService.GetMeta)); + except {$IFDEF NORENDER400} - RenderStatusMessage (200); + RenderStatusMessage (200); {$ELSE} - on E: EServiceException do - begin - raise EMVCException.Create(E.Message, '', 0, 404); - end - else - raise; + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end + else + raise; {$ENDIF} + end; end; - end; @@ -243,4 +259,48 @@ uses end; + + + + +{ TEMPVytezeniDoklService } + + constructor TEMPVytezeniDoklController.Create; + begin + inherited; + end; + + + + destructor TEMPVytezeniDoklController.Destroy; + begin + inherited; + end; + + + procedure TEMPVytezeniDoklController.FPrij_PostByID (id: string); + var iId: integer; + begin + id:= sanitizeSQLString (id); + if not(TryStrToInt(id, iId)) then + iId:= 0; + + try + Render(ObjectDict().Add('data', GetEMPVytezeniDoklService.FPrij_PostByID (iId))); // viz uSvcCustom.pas + except +{$IFDEF NORENDER400} + RenderStatusMessage (200); +{$ELSE} + on E: EServiceException do + begin + raise EMVCException.Create(E.Message, '', 0, 404); + end + else + raise; +{$ENDIF} + end; + end; + + end. + diff --git a/_custom/EMPolar/uSvcCustom.pas b/_custom/EMPolar/uSvcCustom.pas index 1be755b..e553ed8 100644 --- a/_custom/EMPolar/uSvcCustom.pas +++ b/_custom/EMPolar/uSvcCustom.pas @@ -42,6 +42,11 @@ type function GetByParams (params: TDictionary): TObjectList; end; + TEMPVytezeniDoklService = class(TServiceBase) + public + function FPrij_PostByID (const AID: integer): TJSONObject; // vrati se identifikace od providera + end; + implementation @@ -50,6 +55,9 @@ uses FireDAC.Stan.Option, FireDAC.Comp.Client, FireDAC.Stan.Param, + System.JSON.Builders, + System.JSON.Writers, + System.JSON.Types, MVCFramework.FireDAC.Utils, MVCFramework.DataSet.Utils, MVCFramework.Serializer.Commons, @@ -195,7 +203,7 @@ uses try if not(lQry.EOF) then begin - result:= FDM.sqlQry1.AsObject + result:= FDM.sqlQry1.AsObject; end else raise EServiceException.Create('Nádoba s číslem ' + ACislo + ' nebyla nalezena.'); @@ -239,4 +247,31 @@ uses end; + + +{ TEMPVytezeniDoklService } + + function TEMPVytezeniDoklService.FPrij_PostByID (const AID: integer): TJSONObject; // vrati se identifikace od providera + var lSQL, statusOut: string; + resVal: TJSONObject; + sB: TStringBuilder; + sW: TStringWriter; + w: TJsonTextWriter; + b: TJSONObjectBuilder; + p: TJSONCollectionBuilder.TPairs; + begin + result:= TJSONObject.Create; + statusOut:= 'Not OK'; + + sB:= TStringBuilder.Create; + sW:= TStringWriter.Create (sB); + w:= TJsonTextWriter (sW); + w.Formatting:= TJsonFormatting.Indented; + b:= TJsonObjectBuilder.Create (w); + p:= b.BeginObject.Add('status', statusOut); + p.EndObject; + result.FromJSON (sB.ToString); + end; + + end. diff --git a/_custom/EMPolar/uWebModCustom.inc b/_custom/EMPolar/uWebModCustom.inc index e079137..6b08ddb 100644 --- a/_custom/EMPolar/uWebModCustom.inc +++ b/_custom/EMPolar/uWebModCustom.inc @@ -1,3 +1,4 @@ FEngine.AddController (TEMPNadobaController); - FEngine.AddController (TEMPDokumentAtestController); \ No newline at end of file + FEngine.AddController (TEMPDokumentAtestController); + FEngine.AddController (TEMPVytezeniDoklController); \ No newline at end of file diff --git a/_custom/EMPolar/winSvc/consts.inc b/_custom/EMPolar/winSvc/consts.inc new file mode 100644 index 0000000..180ceaa --- /dev/null +++ b/_custom/EMPolar/winSvc/consts.inc @@ -0,0 +1 @@ +// tblAPIDigiSoubory = '[dbo].[Tabx_HDC_API_DigitalizaceSoubory]'; diff --git a/_custom/EMPolar/winSvc/empolar.xml b/_custom/EMPolar/winSvc/empolar.xml new file mode 100644 index 0000000..37e08a9 --- /dev/null +++ b/_custom/EMPolar/winSvc/empolar.xml @@ -0,0 +1,4 @@ + + + + diff --git a/_custom/EMPolar/winSvc/impl.inc b/_custom/EMPolar/winSvc/impl.inc new file mode 100644 index 0000000..af3d153 --- /dev/null +++ b/_custom/EMPolar/winSvc/impl.inc @@ -0,0 +1,337 @@ + constructor THeoEMPVytezovaniDokThread.Create (AOnTerminate: TNotifyEvent; AService: TService); + begin + inherited Create (false); // Create thread in NOT suspended mode + FMainService:= AService; + FLock:= TCriticalSection.Create; + FRunning:= false; + FTermEvent:= TEvent.Create (nil, False, False, ''); + +// OnTerminate:= AOnTerminate; +// FreeOnTerminate:= true; + FreeOnTerminate:= false; // Ensure manual freeing of thread resources + end; + + + + + destructor THeoEMPVytezovaniDokThread.Destroy; + begin +{$IFDEF DEBUG} + Write('Ukoncuji thread EMP vytezovani dokumentu...'); +{$ENDIF} + if (FTimer<>0) then + CloseHandle (FTimer); + FTermEvent.Free; + FRunning:= false; + FMainService:= nil; + Terminate; + FLock.Free; + inherited; +{$IFDEF DEBUG} + WriteLn('OK'); +{$ENDIF} + end; + + + + procedure THeoEMPVytezovaniDokThread.TerminatedSet; + begin + FTermEvent.SetEvent; + end; + + + + procedure THeoEMPVytezovaniDokThread.ThreadTerminate; + begin + Terminate; + WaitFor; + end; + + + + procedure THeoEMPVytezovaniDokThread.Execute; + const _Second = 10_000_000; + var lSQL, errMsg, url, authHash, outData, fName, loopCasTyp: string; + lLoop, idDZ, cnt, idx: Integer; + lLoopMax, koefProCas: integer; + logRunCnt: integer; + Msg: TMsg; + firstRun, inProg, inDL: boolean; + lQry, lQry2: TFDQuery; + sqlConnX, sqlConnX2: TFDConnection; + sqlTrans: IFDPhysTransaction; + f, lOpenSSLLib: string; + + lBusy: LongInt; + liDueTime: LARGE_INTEGER; + + mamSSLLibs: boolean; + sslLibPath, dataSouboru: string; + http1: System.Net.HTTPClient.THTTPClient; + iResp: System.Net.HTTPClient.IHTTPResponse; + aResp: TMemoryStream; + http2: TIdHttp; + sslHndlr: TIdSSLIOHandlerSocketOpenSSL; + respHttp2: TStream; + i: integer; + sTemp, outData2: string; + + cfgFile: string; + specCfgXML: XML.XmlIntf.IXMLDocument; + n1: XML.XmlIntf.IXMLNode; + attribs: IXMLNodeList; + attrIdx: integer; + + function StringToHex (const inStr: string): string; + var i: integer; + begin + result:= ''; + for i:=1 to Length(inStr) do + result:= result + IntToHex(Ord(inStr[i]), 2); // 2 means two hex digits per character + end; + + function MemStreamToHex (aStream: TMemoryStream): string; + var i: integer; + b: byte; + begin + result:= ''; + for i:=0 to aStream.Size-1 do + begin + b:= PByte(TMemoryStream(aStream).Memory)[i]; + result:= result + IntToHex(b,2); + end; + end; + + begin + lLoop:= 0; + idDZ:= 0; + logRunCnt:= 1; + url:= ''; + authHash:= ''; + lLoopMax:= 20; // v sekundach !!!! + + try + try + CoInitialize(nil); // kvuli pouziti TXMLDocument + + cfgFile:= ExtractFilePath(ParamStr(0)) + 'empolar.xml'; + if (FileExists(cfgFile)) then + begin + specCfgXML:= Xml.XMLDoc.TXMLDocument.Create(nil); + specCfgXML.LoadFromFile (cfgFile); + specCfgXML.Active:= true; + if not(specCfgXML.IsEmptyDoc) then + begin + if (specCfgXML.DocumentElement<>nil) then + begin + n1:= specCfgXML.DocumentElement; + if (n1.NodeName='config_aidocu') then + begin + attribs:= n1.AttributeNodes; + attrIdx:= attribs.IndexOf('vytezovaniDokumentuSek'); + if (attrIdx>-1) then + if (attribs.Get(attrIdx).NodeValue<>null) then + lLoopMax:= attribs.Get(attrIdx).NodeValue; + + attrIdx:= attribs.IndexOf('url'); + if (attrIdx>-1) then + if (attribs.Get(attrIdx).NodeValue<>null) then + url:= attribs.Get(attrIdx).NodeValue; + + attrIdx:= attribs.IndexOf('auth'); + if (attrIdx>-1) then + if (attribs.Get(attrIdx).NodeValue<>null) then + authHash:= attribs.Get(attrIdx).NodeValue; +{$IFDEF DEBUG} + if (Length(authHash)<350) then + begin + authHash:= (FMainService as THDCDZApiService).ReturnEncrypted (authHash); + WriteLn('API HASH: ' + authHash); + end; +{$ENDIF} + if (authHash<>'') and (FMainService<>nil) then + authHash:= (FMainService as THDCDZApiService).ReturnDecrypted (authHash); + end; // n1 = config + end; // specCfgXML.DocumentElement<>nil + end; // not specCfgXML.IsEmptyDoc + end; // FileExists(cfgFile) + except + end; // try + + finally + begin + if (specCfgXML<>nil) then + specCfgXML:= nil; + CoUninitialize; + end; + end; + + + datMod.LogInfo (Quick.Logger.etInfo, 'Interval vytezovani dokumentu: ' + lLoopMax.ToString + ' sek'); + + firstRun:= true; + inProg:= false; + + sslLibPath:= ''; + f:= ExtractFilePath (ParamStr(0)); + mamSSLLibs:= false; + for lOpenSSLLib in OPENSSL_LIBS do + begin + if (FileExists(TPath.Combine(f, lOpenSSLLib))) then + begin + mamSSLLibs:= true; + sslLibPath:= ExcludeTrailingPathDelimiter (f); + end; + end; + + FRunning:= true; + + if (1=1) then // pro rychle vypnuti + begin + FTimer:= CreateWaitableTimer (nil, true, 'EMPVytezDokumWaitableTimer'); + liDueTime.QuadPart:= -1*_Second; + + + sqlConnX:= TFDConnection.Create (nil); + sqlConnX2:= TFDConnection.Create (nil); + lQry:= TFDQuery.Create(nil); + lQry2:= TFDQuery.Create(nil); + try + try + sqlConnX.Params.SetStrings (datMod.sqlConnParams); + sqlConnX2.Params.SetStrings (datMod.sqlConnParams); +// sqlConnX.TxOptions.AutoCommit:= false; + sqlConnX.Open; + sqlConnX2.Open; + lQry.Connection:= sqlConnX; + lQry2.Connection:= sqlConnX2; + + while not(Terminated) or not(FRunning) do + begin + if (HDCDZApiService<>nil) then + if (HDCDZApiService.Terminated) then + begin + Terminate; + FRunning:= false; + end; + + PeekMessage (&Msg, 0, 0, 0, PM_NOREMOVE); { Create message queue } + + if (lLoop=lLoopMax) or (firstRun) then // pri startu a pak podle lLoopMax sek (prednastaveno 10 sek) + begin + idDZ:= 0; + firstRun:= false; + + if (logRunCnt<4) then + datMod.LogInfo (Quick.Logger.etInfo, 'Spoustim vytezovani ' + logRunCnt.toString + '...'); + if (logRunCnt=4) then + datMod.LogInfo (Quick.Logger.etInfo, 'Spoustim vytezovani - bezi ale dal neloguju'); + + try + if not(inProg) then // nebezi uz ? + begin + + if (1=1) then // pro rychle vypnuti + begin + if (sqlConnX.Connected) then + begin + lSQL:= '/* hdcDZApiSvc-emp */ SELECT ID FROM ' + tblDZ + + ' WHERE BlokovaniEditoru IS NULL AND DruhPohybuZbo=18 AND CisloOrg IS NULL ORDER BY ID'; + + try + lQry.Open(lSQL); + if (lQry.RecordCount>0) then + begin + lQry.First; + inProg:= true; + while not(lQry.EOF) do + begin + idDZ:= lQry.FieldByName('ID').asInteger; + if (idDZ>0) then + begin + dataSouboru:= ''; + lSQL:= 'SELECT 1 FROM ' + tblDokumVaz + ' v JOIN ' + tblDokum + ' d ON (d.ID=v.IDDok) WHERE v.IDTab=' + idDZ.ToString + + ' AND v.IdentVazby=9 AND UPPER(d.JmenoACesta) LIKE N''%PDF'' AND d.VelikostSouboru>0'; + lQry2.Open (lSQL); + if (lQry2.RecordCount=1) then // mam dokument PDF + begin + lQry2.Close; + lSQL:= lSQL.Replace(' 1 ', ' TOP(1) /*CONVERT(varchar(max), Dokument, 2)*/ BASE64_ENCODE(Dokument) AS DataSouboru '); + lQry2.Open (lSQL); + if (lQry2.Recordcount=1) then + begin + dataSouboru:= lQry2.FieldByName('DataSouboru').AsString; + lQry2.Close; + end; + end; // mam dokument PDF + if (dataSouboru<>'') then + begin + end; // dataSouboru<>'' + end; // idDZ>0 + lQry.Next; + end; + end; + finally + lQry.Close; + FreeAndNil (lQry); + // lQry.Free; + // lQry:= nil; + end; + inProg:= false; + sqlConnX.Close; + end; // sqlConnX Connected + end; // 1=1 -- pro rychle vypnuti + + end; // not(inProg) + + except on E:Exception do + begin + inProg:= false; + if (lQry<>nil) then + begin + lQry.Close; + FreeAndNil (lQry); + end; + if (sqlConnX<>nil) then + sqlConnX.Close; + + errMsg:= E.Message; // datMod.sqlQry11.FieldByName('ErrMsg').AsString; + if (mamTabPrijataData) then + datMod.LogInfo (Quick.Logger.etError, 'Chyba zpracovani API souboru FaktPrij ID ' + idDZ.ToString + ' : ' + errMsg); + end; + end; // try + + + lLoop:= 0; + if (logRunCnt<5) then + Inc (logRunCnt); + end; + Inc (lLoop); + +// sleep na vterinu + if (FTimer<>0) then + SetWaitableTimer (FTimer, TLargeInteger(liDueTime), 0, nil, nil, false); + repeat + lBusy:= MsgWaitForMultipleObjects (1, FTimer, false, INFINITE, QS_ALLINPUT); + until lBusy = WAIT_OBJECT_0; + + end; + except + end; + finally + sqlConnX.Close; + FreeAndNil (sqlConnX); + end; + + end; // 1=1 -- pro rychle vypnuti + + if (sqlConnX2<>nil) then + begin + if (sqlConnX2.Connected) then + sqlConnX2.Close; + FreeAndNil (sqlConnX2); + end; + + end; + + diff --git a/_custom/EMPolar/winSvc/mainPrivs.inc b/_custom/EMPolar/winSvc/mainPrivs.inc new file mode 100644 index 0000000..e0c47f8 --- /dev/null +++ b/_custom/EMPolar/winSvc/mainPrivs.inc @@ -0,0 +1 @@ + empVytezovaniDokThr: THeoEMPVytezovaniDokThread; diff --git a/_custom/EMPolar/winSvc/mainSvcCont.inc b/_custom/EMPolar/winSvc/mainSvcCont.inc new file mode 100644 index 0000000..4c2ec4d --- /dev/null +++ b/_custom/EMPolar/winSvc/mainSvcCont.inc @@ -0,0 +1,3 @@ + if (empVytezovaniDokThr<>nil) then + if (empVytezovaniDokThr.Suspended) then + empVytezovaniDokThr.Resume; diff --git a/_custom/EMPolar/winSvc/mainSvcExec.inc b/_custom/EMPolar/winSvc/mainSvcExec.inc new file mode 100644 index 0000000..e927e1c --- /dev/null +++ b/_custom/EMPolar/winSvc/mainSvcExec.inc @@ -0,0 +1,7 @@ + if (empVytezovaniDokThr<>nil) then + if not(empVytezovaniDokThr.Started) then + begin + empVytezovaniDokThr.Start; + datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby EMP vytezovani dokladu - pocet FaktPrij: ' + datMod.SQLGetString('SELECT COUNT(ID) FROM ' + + tblDZ + ' WHERE BlokovaniEditoru IS NULL AND DruhPohybuZbo=18 AND CislOrg IS NULL')); + end; diff --git a/_custom/EMPolar/winSvc/mainSvcPause.inc b/_custom/EMPolar/winSvc/mainSvcPause.inc new file mode 100644 index 0000000..0f96f29 --- /dev/null +++ b/_custom/EMPolar/winSvc/mainSvcPause.inc @@ -0,0 +1,3 @@ + if (empVytezovaniDokThr<>nil) then + if not(empVytezovaniDokThr.Suspended) then + empVytezovaniDokThr.Suspend; diff --git a/_custom/EMPolar/winSvc/mainSvcStart.inc b/_custom/EMPolar/winSvc/mainSvcStart.inc new file mode 100644 index 0000000..67e4604 --- /dev/null +++ b/_custom/EMPolar/winSvc/mainSvcStart.inc @@ -0,0 +1,22 @@ + datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby EMP vytezovani dokumentu - inverval 10 sekund...'); +{$IFDEF DEBUG} + WriteLn ('Start sluzby EMP vytezovani dokumentu - inverval 10 sekund...'); +{$ENDIF} + empVytezovaniDokThr:= THeoEMPVytezovaniDokThread.Create (ThreadTerminated, self); + if (empVytezovaniDokThr<>nil) then + begin + if (empVytezovaniDokThr.Started) then + begin + datMod.LogInfo (Quick.Logger.etInfo, ' OK'); +{$IFDEF DEBUG} + WriteLn (' OK'); +{$ENDIF} + end; + end + else + begin + datMod.LogInfo (Quick.Logger.etInfo, ' thread empVytezovaniDokThr neni vytvoren'); +{$IFDEF DEBUG} + WriteLn (' thread empVytezovaniDokThr neni vytvoren'); +{$ENDIF} + end; diff --git a/_custom/EMPolar/winSvc/mainSvcStop.inc b/_custom/EMPolar/winSvc/mainSvcStop.inc new file mode 100644 index 0000000..1c7913a --- /dev/null +++ b/_custom/EMPolar/winSvc/mainSvcStop.inc @@ -0,0 +1,18 @@ + if Assigned(empVytezovaniDokThr) then + begin +{$IFDEF DEBUG} + WriteLn ('Ukoncuji vlakno EMP vytezovani dokumentu...'); +{$ENDIF} + datMod.LogInfo (Quick.Logger.etInfo, 'Ukoncuji vlakno EMP vytezovani dokumentu...'); + try + empVytezovaniDokThr.ThreadTerminate; + FreeAndNil(empVytezovaniDokThr); + except on E:Exception do +// add event in eventlog with reason why the service couldn't stop + LogMessage('Cannot stop thread EMPVytezaniDok: ' + E.Message, EVENTLOG_ERROR_TYPE, 0, 1); + end; + datMod.LogInfo (Quick.Logger.etInfo, ' OK'); +{$IFDEF DEBUG} + WriteLn (' OK'); +{$ENDIF} + end; diff --git a/_custom/EMPolar/winSvc/readCfg.inc b/_custom/EMPolar/winSvc/readCfg.inc new file mode 100644 index 0000000..fe98d48 --- /dev/null +++ b/_custom/EMPolar/winSvc/readCfg.inc @@ -0,0 +1,3 @@ + + +intervalSecVytezovani \ No newline at end of file diff --git a/_custom/EMPolar/winSvc/types.inc b/_custom/EMPolar/winSvc/types.inc new file mode 100644 index 0000000..3d6c181 --- /dev/null +++ b/_custom/EMPolar/winSvc/types.inc @@ -0,0 +1,15 @@ + THeoEMPVytezovaniDokThread = class(TThread) + private + FMainService: TService; + FLock: TCriticalSection; + FTermEvent: TEvent; + FRunning: boolean; + FTimer: THandle; + protected + procedure Execute; override; + procedure TerminatedSet; override; // XE2+ only * + public + constructor Create (AOnTerminate: TNotifyEvent; AService: TService); + destructor Destroy; override; + procedure ThreadTerminate; + end; diff --git a/_custom/EMPolar/winSvc/uses.inc b/_custom/EMPolar/winSvc/uses.inc new file mode 100644 index 0000000..4425b97 --- /dev/null +++ b/_custom/EMPolar/winSvc/uses.inc @@ -0,0 +1 @@ + System.JSON.Builders, System.JSON.Writers, System.JSON.Types, \ No newline at end of file diff --git a/_custom/EMPolar/winSvc/usesTop.inc b/_custom/EMPolar/winSvc/usesTop.inc new file mode 100644 index 0000000..df96fd9 --- /dev/null +++ b/_custom/EMPolar/winSvc/usesTop.inc @@ -0,0 +1 @@ + System.Net.HttpClient, System.Threading, \ No newline at end of file diff --git a/_custom/EMPolar/winSvc/vars.inc b/_custom/EMPolar/winSvc/vars.inc new file mode 100644 index 0000000..6382900 --- /dev/null +++ b/_custom/EMPolar/winSvc/vars.inc @@ -0,0 +1 @@ + intervalSecVytezovani: integer; diff --git a/_custom/Gornicky/winSvc/impl.inc b/_custom/Gornicky/winSvc/impl.inc index d7995c1..c5badea 100644 --- a/_custom/Gornicky/winSvc/impl.inc +++ b/_custom/Gornicky/winSvc/impl.inc @@ -146,7 +146,7 @@ attrIdx:= attribs.IndexOf('downPDFintMins'); if (attrIdx>-1) then if (attribs.Get(attrIdx).NodeValue<>null) then - lLoopMax:= attribs.Get(i).NodeValue; + lLoopMax:= attribs.Get(attrIdx).NodeValue; end; // n1 = config end; // specCfgXML.DocumentElement<>nil end; // not specCfgXML.IsEmptyDoc @@ -249,6 +249,9 @@ while not(lQry.EOF) do begin + PeekMessage (&Msg, 0, 0, 0, PM_NOREMOVE); { Create message queue } + helUtils.ProcessPendingVCLMessages; + idDigiFile:= lQry.FieldByName('ID').asInteger; if (idDigiFile>0) then begin @@ -276,21 +279,22 @@ if (Assigned(http1)) then begin http1.AllowCookies:= false; - http1.UserAgent:= 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0'; + http1.UserAgent:= 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/144.0'; http1.Accept:= 'application/pdf'; - datMod.LogInfo (Quick.Logger.etInfo, 'Nacitam data PDF pro downloadPDF id ' + idDigiFile.ToString); +// datMod.LogInfo (Quick.Logger.etInfo, 'Nacitam data PDF pro downloadPDF id ' + idDigiFile.ToString); iResp:= http1.Get (url); aResp:= (iResp.ContentStream as TMemoryStream); outData:= MemStreamToHex (aResp); - datMod.LogInfo (Quick.Logger.etInfo, 'Mam data PDF pro downloadPDF id ' + idDigiFile.ToString); +// datMod.LogInfo (Quick.Logger.etInfo, 'Mam data PDF pro downloadPDF id ' + idDigiFile.ToString); end; except on E:Exception do begin - datMod.LogInfo (Quick.Logger.etError, 'Chyba zpracovani downloadPDF id ' + idDigiFile.ToString + ' : ' + E.Message); + sqlConnX.ExecSQL ('UPDATE ' + tblAPIDigiSoubory + ' SET Blokovano=0 WHERE ID=' + idDigiFile.ToString); + datMod.LogInfo (Quick.Logger.etError, 'Chyba downloadPDF id ' + idDigiFile.ToString + ' : ' + E.Message); {$IFDEF DEBUG} - WriteLn ('Chyba zpracovani downloadPDF id ' + idDigiFile.ToString + ' >> ' + E.Message); + WriteLn ('Chyba downloadPDF id ' + idDigiFile.ToString + ' >> ' + E.Message); {$ENDIF} end; end; @@ -307,18 +311,28 @@ IdOpenSSLSetLibPath (sslLibPath); http2:= TIdHttp.Create (nil); sslHndlr:= TIdSSLIOHandlerSocketOpenSSL.Create (http2); + respHttp2:= TMemoryStream.Create; try - sslHndlr.SSLOptions.Method:= sslvTLSv1_2; - sslHndlr.SSLOptions.SSLVersions := [sslvTLSv1_2, sslvTLSv1_1]; - http2.IOHandler:= sslHndlr; + try + sslHndlr.SSLOptions.Method:= sslvTLSv1_2; + sslHndlr.SSLOptions.SSLVersions := [sslvTLSv1_2, sslvTLSv1_1]; + http2.IOHandler:= sslHndlr; - http2.Request.Accept:= 'application/pdf'; - http2.Request.BasicAuthentication := False; - http2.HTTPOptions:= http2.HTTPOptions + [hoKeepOrigProtocol] + [hoNoProtocolErrorException]; - http2.Request.ContentType:= 'application/pdf; charset=utf-8'; - respHttp2:= TMemoryStream.Create; - http2.Get (url, respHttp2); - outData:= MemStreamToHex (respHttp2 as TMemoryStream); + http2.Request.Accept:= 'application/pdf'; + http2.Request.BasicAuthentication := False; + http2.HTTPOptions:= http2.HTTPOptions + [hoKeepOrigProtocol] + [hoNoProtocolErrorException]; + http2.Request.ContentType:= 'application/pdf; charset=utf-8'; + http2.Get (url, respHttp2); + outData:= MemStreamToHex (respHttp2 as TMemoryStream); + except on E:Exception do + begin + sqlConnX.ExecSQL ('UPDATE ' + tblAPIDigiSoubory + ' SET Blokovano=0 WHERE ID=' + idDigiFile.ToString); + datMod.LogInfo (Quick.Logger.etError, 'Chyba downloadPDF (SSL) id ' + idDigiFile.ToString + ' : ' + E.Message + CRLF + url); + {$IFDEF DEBUG} + WriteLn ('Chyba downloadPDF (SSL) id ' + idDigiFile.ToString + ' >> ' + E.Message + CRLF + url); + {$ENDIF} + end; + end; finally FreeAndNil (sslHndlr); // must be freed before IdHttp FreeAndNil (http2); @@ -374,6 +388,7 @@ except on E:Exception do begin + sqlConnX.ExecSQL ('UPDATE ' + tblAPIDigiSoubory + ' SET Blokovano=0 WHERE ID=' + idDigiFile.ToString); errMsg:= E.Message; // datMod.sqlQry11.FieldByName('ErrMsg').AsString; {$IFDEF DEBUG} WriteLn ('Chyba 2 zpracovani downloadPDF id ' + idDigiFile.ToString + ' >> ' + errMsg); @@ -384,7 +399,7 @@ end; end; lQry.Next; - end; + end; // while end; finally lQry.Close; diff --git a/_custom/INCOSystems/sql/ef_Vyroba_EvidROpR_MamNeuzavrenouPredchozi.sql b/_custom/INCOSystems/sql/ef_Vyroba_EvidROpR_MamNeuzavrenouPredchozi.sql new file mode 100644 index 0000000..b291de3 --- /dev/null +++ b/_custom/INCOSystems/sql/ef_Vyroba_EvidROpR_MamNeuzavrenouPredchozi.sql @@ -0,0 +1,31 @@ +-- dbo.ef_Vyroba_EvidROpR_MamNeuzavrenouPredchozi +CREATE FUNCTION dbo.ef_Vyroba_EvidROpR_MamNeuzavrenouPredchozi (@IDPrikaz INT, @Doklad INT, @Alt NCHAR(1) ) + RETURNS BIT +AS + BEGIN + DECLARE + @retVal BIT=0, + @sCisOper NVARCHAR(4), + @iCisOper INT + DECLARE @idPredOperaci TABLE (ID INT NOT NULL) + + + SET @sCisOper=(SELECT TOP(1) TRIM(Operace) FROM dbo.TabPrPostup WITH(NOLOCK) WHERE IDPrikaz=@IDPrikaz AND Doklad=@Doklad AND Alt=@Alt AND IDOdchylkyDo IS NULL) + SET @iCisOper=TRY_PARSE(@sCisOper AS INT) + IF (@iCisOper IS NOT NULL) + BEGIN +-- zjisti IDcka operaci prede mnou (dle cisla operace) + INSERT @idPredOperaci (ID) + SELECT ID FROM dbo.TabPrPostup WITH(NOLOCK) WHERE IDPrikaz=@IDPrikaz AND IDOdchylkyDo IS NULL AND ISNULL(TRY_PARSE(TRIM(Operace) AS INT),0)<@iCisOper + +-- jsou operace prede mnou ? + IF EXISTS(SELECT 1 FROM @idPredOperaci) +-- je nejaka co mam rozjetou v Evid.rozprac.operaci ? + IF EXISTS (SELECT 1 FROM dbo.TabEvidRozpracOperR r WITH(NOLOCK) JOIN dbo.TabEvidRozpracOper h WITH(NOLOCK) ON (h.ID=r.IDEvidRozpracOper) + JOIN dbo.TabPrPostup p WITH(NOLOCK) ON (p.IDPrikaz=@IDPrikaz AND p.IDOdchylkyDo IS NULL) + WHERE p.ID IN (SELECT ID FROM @idPredOperaci) AND h.Stav IN (10,20) + ) + SET @retVal=1 + END + RETURN @retVal + END diff --git a/_custom/INCOSystems/sql/ep_HDCDZApi_ZpracujPrijataData.sql b/_custom/INCOSystems/sql/ep_HDCDZApi_ZpracujPrijataData.sql index 6c3530f..b3c109f 100644 --- a/_custom/INCOSystems/sql/ep_HDCDZApi_ZpracujPrijataData.sql +++ b/_custom/INCOSystems/sql/ep_HDCDZApi_ZpracujPrijataData.sql @@ -204,11 +204,11 @@ IF (@idPrednaOpOdv IS NOT NULL) IF (@idJson IS NOT NULL) DECLARE j CURSOR LOCAL FOR - SELECT ID, JsonData, Objekt, Akce FROM dbo._hdc_ph_PrijataJsonData WHERE ID=@idJson + SELECT ID, JsonData, Objekt, Akce FROM dbo._hdc_ph_PrijataJsonData WITH(NOLOCK) WHERE ID=@idJson ELSE DECLARE j CURSOR LOCAL FOR SELECT ID, JsonData, Objekt, Akce - FROM dbo._hdc_ph_PrijataJsonData + FROM dbo._hdc_ph_PrijataJsonData WITH(NOLOCK) WHERE Blokovano=0 AND DatZpracovani IS NULL AND ISNULL(JSONData,N'')<>N'' @@ -273,6 +273,8 @@ WHILE (1=1) CROSS APPLY OPENJSON(d3.operace, N'$') WITH ([prikazy] NVARCHAR(max) AS JSON) AS d4 + IF (@idVPr IS NOT NULL) + UPDATE dbo._hdc_ph_PrijataJsonData SET IDPrikaz=@idVPr WHERE ID=@idJson IF (@idDatazoneOper IS NOT NULL) UPDATE dbo._hdc_ph_PrijataJsonData SET IdPHIdent=@idDatazoneOper WHERE ID=@idJson @@ -338,7 +340,7 @@ WHILE (1=1) IF (@@FETCH_STATUS<>0) BREAK SELECT @idDilec=p.IDTabKmen, @sklProVydejRP=rp.VydejMatPol_SkladProGenHlavDZ - FROM dbo.TabPrikaz p INNER JOIN dbo.TabRadyPrikazu rp ON (rp.Rada=p.Rada) WHERE p.ID=@idVPr + FROM dbo.TabPrikaz p WITH(NOLOCK) JOIN dbo.TabRadyPrikazu rp WITH(NOLOCK) ON (rp.Rada=p.Rada) WHERE p.ID=@idVPr -- SET @operPredna=dbo.hf_ZarovnejOperaciTechPos(@operPredna) /* @@ -375,7 +377,7 @@ WHILE (1=1) IF (@idPrP IS NOT NULL) BEGIN -- korekce cisla dokladu, pred odvadeci opeaci - SELECT @dokl=ISNULL(MAX(Doklad),0)+1 FROM dbo.TabPrPostup WITH (TABLOCKX) WHERE IDPrikaz=@idVPr AND Doklad<9990 + SELECT @dokl=ISNULL(MAX(Doklad),0)+1 FROM dbo.TabPrPostup WHERE IDPrikaz=@idVPr AND Doklad<9990 UPDATE dbo.TabPrPostup SET Doklad=@dokl, Odvadeci=0 WHERE ID=@idPrP END END @@ -492,6 +494,8 @@ WHILE (1=1) IF (CHARINDEX('skupina', @materialJson)>0) UPDATE dbo._hdc_ph_PrijataJsonData SET MamMaterial=1 WHERE ID=@idJson + IF (@idVPr IS NOT NULL) + UPDATE dbo._hdc_ph_PrijataJsonData SET IDPrikaz=@idVPr WHERE ID=@idJson IF (@idDatazoneOper IS NOT NULL) UPDATE dbo._hdc_ph_PrijataJsonData SET IdPHIdent=@idDatazoneOper WHERE ID=@idJson diff --git a/_custom/INCOSystems/sql/tbl_hdc_ph_PrijataJsonData_rozsireni.sql b/_custom/INCOSystems/sql/tbl_hdc_ph_PrijataJsonData_rozsireni.sql new file mode 100644 index 0000000..2c26612 --- /dev/null +++ b/_custom/INCOSystems/sql/tbl_hdc_ph_PrijataJsonData_rozsireni.sql @@ -0,0 +1,12 @@ +IF OBJECT_ID(N'dbo._hdc_ph_PrijataJsonData', N'U') IS NOT NULL + BEGIN +/* 18.8.2025 */ + IF COL_LENGTH(N'dbo._hdc_ph_PrijataJsonData', N'IDPrikaz') IS NULL ALTER TABLE dbo._hdc_ph_PrijataJsonData ADD IDPrikaz INT NULL + DROP INDEX IF EXISTS EI_hdc_ph_PrijataJsonData_IDPrikaz ON dbo._hdc_ph_PrijataJsonData + CREATE NONCLUSTERED INDEX EI_hdc_ph_PrijataJsonData_IDPrikaz ON dbo._hdc_ph_PrijataJsonData (IDPrikaz) + WITH ( PAD_INDEX = OFF, DROP_EXISTING = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + +/* 21.8.2025 */ + IF COL_LENGTH(N'dbo._hdc_ph_PrijataJsonData', N'MamMaterial') IS NULL ALTER TABLE dbo._hdc_ph_PrijataJsonData ADD MamMaterial BIT NOT NULL DEFAULT 0 + + END diff --git a/_custom/INCOSystems/zdroje.RES b/_custom/INCOSystems/zdroje.RES index 221c6f0..d987bf3 100644 Binary files a/_custom/INCOSystems/zdroje.RES and b/_custom/INCOSystems/zdroje.RES differ diff --git a/_custom/INCOSystems/zdroje.rc b/_custom/INCOSystems/zdroje.rc index ab67baf..d0745fc 100644 --- a/_custom/INCOSystems/zdroje.rc +++ b/_custom/INCOSystems/zdroje.rc @@ -1,9 +1,11 @@ -col_TabPredna_EXT RCDATA .\sql\col_TabPredna_EXT.sql -col_TabKmenZbozi_EXT RCDATA .\sql\col_TabKmenZbozi_EXT.sql -col_TabEvidRozpracOper_EXT RCDATA .\sql\col_TabEvidRozpracOper_EXT.sql -col_TabPrPostup_EXT RCDATA .\sql\col_TabPrPostup_EXT.sql -ep_Vyroba_GenVydejZeMzdy RCDATA .\sql\ep_Vyroba_GenVydejZeMzdy.sql -ep_Vyroba_GenOdvodZeMzdy RCDATA .\sql\ep_Vyroba_GenOdvodZeMzdy.sql -ep_Vyroba_InsertEvidRozpracOper RCDATA .\sql\ep_Vyroba_InsertEvidRozpracOper.sql -ep_Vyroba_InsertEvidRozpracOperPol RCDATA .\sql\ep_Vyroba_InsertEvidRozpracOperPol.sql -ep_HDCDZApi_ZpracujPrijataData RCDATA .\sql\ep_HDCDZApi_ZpracujPrijataData.sql +ef_Vyroba_EvidROpR_MamNeuzavrenouPredchozi RCDATA .\sql\ef_Vyroba_EvidROpR_MamNeuzavrenouPredchozi.sql +tbl_hdc_ph_PrijataJsonData_rozsireni RCDATA .\sql\tbl_hdc_ph_PrijataJsonData_rozsireni.sql +col_TabPredna_EXT RCDATA .\sql\col_TabPredna_EXT.sql +col_TabKmenZbozi_EXT RCDATA .\sql\col_TabKmenZbozi_EXT.sql +col_TabEvidRozpracOper_EXT RCDATA .\sql\col_TabEvidRozpracOper_EXT.sql +col_TabPrPostup_EXT RCDATA .\sql\col_TabPrPostup_EXT.sql +ep_Vyroba_GenVydejZeMzdy RCDATA .\sql\ep_Vyroba_GenVydejZeMzdy.sql +ep_Vyroba_GenOdvodZeMzdy RCDATA .\sql\ep_Vyroba_GenOdvodZeMzdy.sql +ep_Vyroba_InsertEvidRozpracOper RCDATA .\sql\ep_Vyroba_InsertEvidRozpracOper.sql +ep_Vyroba_InsertEvidRozpracOperPol RCDATA .\sql\ep_Vyroba_InsertEvidRozpracOperPol.sql +ep_HDCDZApi_ZpracujPrijataData RCDATA .\sql\ep_HDCDZApi_ZpracujPrijataData.sql diff --git a/_custom/Rootvin/hdcDZAPIcfg.dat b/_custom/Rootvin/hdcDZAPIcfg.dat new file mode 100644 index 0000000..bdd92f0 Binary files /dev/null and b/_custom/Rootvin/hdcDZAPIcfg.dat differ diff --git a/_custom/Rootvin/sql/bp_Gatema_SDDecodeBarCode.sql b/_custom/Rootvin/sql/bp_Gatema_SDDecodeBarCode.sql new file mode 100644 index 0000000..441d5b3 --- /dev/null +++ b/_custom/Rootvin/sql/bp_Gatema_SDDecodeBarCode.sql @@ -0,0 +1,47 @@ +-- dbo.BP_Gatema_SDDecodeBarCode +CREATE PROCEDURE dbo.BP_Gatema_SDDecodeBarCode + @TypBC NVARCHAR(50), -- '', 'CODABAR', 'EAN 13', 'EAN 128', 'CODE 128', 'CODE 39', 'DATAMATRIX', 'QRCODE', 'I2OF5', 'EAN 8', 'PDF417' + @BarCode NVARCHAR(2000), + @Pozadavek INT, -- -1=umístění, 0=SSCC, 1=BC zboží, 10=šarže, 15=dat.exp., 30=množství, 90=ID příkaz + @IDOrg INT=NULL +AS +BEGIN + +-- Volá se při pokusu získat z čárového kódu konkrétní informaci. Pokud procedura nechce provádět dekódování, tak se jen ukončí, +-- v opačném případě vrací jeden záznam s jedním požadovaným údajem (typ text/datum/číslo) +-- Pokud vrátí záznam (text/číslo/datum), tak standardní dekódování se již nebude provádět + +-- IF (@Pozadavek=1) AND (@TypBC=N'PDF417') +-- SELECT LEFT(@BarCode,4) + + DECLARE + @fncCode INT, + @typ NVARCHAR(50)=N'???', + @vraceno NVARCHAR(50)=N'', + @l SMALLINT + + + + IF (@Pozadavek=-1) + SET @typ=N'umístění' + IF (@Pozadavek=1) + SET @typ=N'barcode' + IF (@Pozadavek=10) + SET @typ=N'šarže' + IF (@Pozadavek=15) + SET @typ=N'dat.exp.' + IF (@Pozadavek=30) + SET @typ=N'množství' + IF (@Pozadavek=90) + SET @typ=N'ID příkaz' + IF (@typ=N'???') + SET @typ=CONVERT(nvarchar, @Pozadavek) + + + SET @l = LEN(@BarCode) + + + INSERT dbo._hdc_ph_Log (LogText) SELECT @typ + N' >> ' + @Barcode + + +END diff --git a/_custom/Rootvin/sql/col_TabPostup_EXT.sql b/_custom/Rootvin/sql/col_TabPostup_EXT.sql new file mode 100644 index 0000000..0306e56 --- /dev/null +++ b/_custom/Rootvin/sql/col_TabPostup_EXT.sql @@ -0,0 +1,19 @@ +DECLARE @currDat DATETIME=GETDATE() +IF (COL_LENGTH(N'dbo.TabPostup_EXT', N'_PlanovanaOperace') IS NULL) + BEGIN + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPostup', @NazevAtrSys=N'_PlanovanaOperace', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Operace pro KapacPl', + @NazevAtrVerZkr=N'Plánovaná operace', @TypAtr=N'BIT', @MaskaAtr=NULL, @VerejnyAtr=N'V', @SirkaSloupceAtr=16, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=1, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'BIT', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'Operace pro kapacitní plán', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1, @VazbaTypMoje=2 + EXEC dbo.hp_ExterniTabulka @Tab=N'TabPostup', @Atr=N'_PlanovanaOperace', @Typ=N'BIT' + END + +IF (COL_LENGTH(N'dbo.TabPostup_EXT', N'_RychlostOperKsHod') IS NULL) + BEGIN + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPostup', @NazevAtrSys=N'_RychlostOperKsHod', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Rychlost operace (ks/hod)', + @NazevAtrVerZkr=N'Rychlost ks/hod', @TypAtr=N'NUMERIC', @MaskaAtr=NULL, @VerejnyAtr=N'V', @SirkaSloupceAtr=16, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=1, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NUMERIC(19,6)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'Rychlost operace v ks/hod pro kapacitní plán', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1, @VazbaTypMoje=2 + EXEC dbo.hp_ExterniTabulka @Tab=N'TabPostup', @Atr=N'_RychlostOperKsHod', @Typ=N'NUMERIC(19,6)' + END + diff --git a/_custom/Rootvin/sql/col_TabPrPostup_EXT.sql b/_custom/Rootvin/sql/col_TabPrPostup_EXT.sql index edcbd29..3eedb11 100644 --- a/_custom/Rootvin/sql/col_TabPrPostup_EXT.sql +++ b/_custom/Rootvin/sql/col_TabPrPostup_EXT.sql @@ -1,12 +1,36 @@ DECLARE @currDat DATETIME=GETDATE() IF (COL_LENGTH(N'dbo.TabPrPostup_EXT', N'_PaletListProVydej') IS NULL) - EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPrPostup', @NazevAtrSys=N'_PaletListProVydej', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Paletový list pro výdej', + BEGIN + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPrPostup', @NazevAtrSys=N'_PaletListProVydej', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Paletový list pro výdej', @NazevAtrVerZkr=N'Pal.list.výdej', @TypAtr=N'NVARCHAR', @MaskaAtr=NULL, @VerejnyAtr=N'V', @SirkaSloupceAtr=16, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, - @TypAtrSQL=N'NVARCHAR(100)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1 + @TypAtrSQL=N'NVARCHAR(100)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1, @VazbaTypMoje=1 + EXEC dbo.hp_ExterniTabulka @Tab=N'TabPrPostup', @Atr=N'_PaletListProVydej', @Typ=N'NVARCHAR(100)' + END -IF (COL_LENGTH(N'dbo.TabPrPostup_EXT', N'_SarzeProVydej') IS NULL) - EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPrPostup', @NazevAtrSys=N'_SarzeProVydej', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Šarze pro výdej', +IF (COL_LENGTH(N'dbo.TabPrPostup_EXT', N'_SarzeProVydej') IS NULL) + BEGIN + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPrPostup', @NazevAtrSys=N'_SarzeProVydej', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Šarze pro výdej', @NazevAtrVerZkr=N'Šarže výdej', @TypAtr=N'NVARCHAR', @MaskaAtr=NULL, @VerejnyAtr=N'V', @SirkaSloupceAtr=16, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, - @TypAtrSQL=N'NVARCHAR(100)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'Šarže plánovaná pro výdej (naskenovaná)', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1 + @TypAtrSQL=N'NVARCHAR(100)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'Šarže plánovaná pro výdej (naskenovaná)', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1, @VazbaTypMoje=1 + EXEC dbo.hp_ExterniTabulka @Tab=N'TabPrPostup', @Atr=N'_SarzeProVydej', @Typ=N'NVARCHAR(100)' + END + +IF (COL_LENGTH(N'dbo.TabPrPostup_EXT', N'_PlanovanaOperace') IS NULL) + BEGIN + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPrPostup', @NazevAtrSys=N'_PlanovanaOperace', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Plánovaná operace (do KapacPl)', + @NazevAtrVerZkr=N'Plán.oper.', @TypAtr=N'BIT', @MaskaAtr=NULL, @VerejnyAtr=N'V', @SirkaSloupceAtr=8, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'BIT', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'Operace pro kapacitní plán', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1, @VazbaTypMoje=2 + EXEC dbo.hp_ExterniTabulka @Tab=N'TabPrPostup', @Atr=N'_PlanovanaOperace', @Typ=N'BIT' + END + +IF (COL_LENGTH(N'dbo.TabPrPostup_EXT', N'_RychlostOperKsHod') IS NULL) + BEGIN + EXEC dbo.hp_ImportUzivAtr @Externi=1, @NazevTabulkySys=N'TabPrPostup', @NazevAtrSys=N'_RychlostOperKsHod', @Skupina=N'HDCDZApi', @NazevAtrVer=N'Rychlost operace (ks/hod)', + @NazevAtrVerZkr=N'Rychlost ks/hod', @TypAtr=N'NUMERIC', @MaskaAtr=NULL, @VerejnyAtr=N'V', @SirkaSloupceAtr=16, @SumovatAtr=N'N', @TiskAtr=N'A', @ProcPruhAtr=0, @Kopirovat=0, + @KonverzeAtr=NULL, @ExtEd_Poradi=1, @ExtEd_Zalozka=NULL, @ExtEd_BrowseID=NULL, @ExtEd_Atr=NULL, @ExtEd_PrimaEditace=1, @DatPorizeni=@currDat, @DatZmeny=NULL, + @TypAtrSQL=N'NUMERIC(19,6)', @ExtEd_BrowseID_DPSN=NULL, @Poznamka=N'Rychlost operace v ks/hod pro kapacitní plán', @Definice=NULL, @Podminka=NULL, @HromadneZmenyAtr=1, @VazbaTypMoje=2 + EXEC dbo.hp_ExterniTabulka @Tab=N'TabPrPostup', @Atr=N'_RychlostOperKsHod', @Typ=N'NUMERIC(19,6)' + END diff --git a/_custom/Rootvin/sql/ep_GenerovaniDokladuOZ_HDC.sql b/_custom/Rootvin/sql/ep_GenerovaniDokladuOZ_HDC.sql new file mode 100644 index 0000000..e490d69 --- /dev/null +++ b/_custom/Rootvin/sql/ep_GenerovaniDokladuOZ_HDC.sql @@ -0,0 +1,67 @@ +-- dbo.ep_GenerovaniDokladuOZ_HDC +CREATE PROCEDURE dbo.ep_GenerovaniDokladuOZ_HDC + @IDDoklad INT +AS + +SET NOCOUNT ON + + +DECLARE + @cnt INT, + @errMsg NVARCHAR(500) + +DECLARE + @idDZOld INT, + @dpz TINYINT, + @radaDokl NVARCHAR(3), + @skl NVARCHAR(30), + @cOrg INT, + @idOrg INT, + @dzDatPorizeni DATETIME, + @dzMena NVARCHAR(3), + @dzKurz NUMERIC(19,6), + @dzKurzE NUMERIC(19,6), + @vstC TINYINT, + @jednM INT +DECLARE + @sklMatHlavni NVARCHAR(30), + @sklTechnolog NVARCHAR(30), -- "technologicky" sklad, prijmy/vydeje z prikazu + @sklPekarna NVARCHAR(30) + + +SELECT @dpz=DruhPohybuZbo, @skl=IDSklad, @radaDokl=RadaDokladu, @cOrg=CisloOrg, @dzMena=Mena, @dzKurz=Kurz, @dzKurzE=KurzEuro, + @dzDatPorizeni=DatPorizeni, @vstC=VstupniCena, @jednM=JednotkaMeny + FROM dbo.TabDokladyZbozi WHERE ID=@IDDoklad + + + +IF (@sklMatHlavni IS NULL) + SELECT @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' AND CisloStr LIKE N'3%' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%' AND Nazev NOT LIKE N'%polotov%' AND CisloStr LIKE N'2%' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%sklad%výdej%' AND CisloStr LIKE N'2%' +IF (@sklPekarna IS NULL) + SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' AND CisloStr LIKE N'2%' + + + + +IF (@dpz=4) -- vydej v evid.cene + BEGIN + IF (@radaDokl=N'231') -- prevodka + BEGIN + IF (@skl=@sklMatHlavni) -- na hlavnim skladu materialu + BEGIN +-- mam nejakeho predka ? + SET @idDZOld = (SELECT TOP(1) IDOldDoklad FROM dbo.TabPohybyZbozi WHERE IDDoklad=@IDDoklad AND IdOldDoklad IS NOT NULL) + +-- jsem vydejka ze skladu materialu, puvodem z expedaku pozadavku na material ? (rada 550) + IF EXISTS (SELECT 1 FROM dbo.TabDokladyZbozi WHERE ID=@idDZOld AND DruhPohybuZbo=9 AND RadaDokladu=N'550' AND IDSklad=@sklMatHlavni) + BEGIN + UPDATE dbo.TabDokladyZbozi SET DruhPohybuPrevod=0, TypPrevodky=N'281', IdSkladPrevodu=@sklPekarna, PrevodRealizovat=0 WHERE ID=@IDDoklad + END + END -- @skl=@sklMatHlavni + END + END + diff --git a/_custom/Rootvin/sql/ep_P01_HDCDZApi1.sql b/_custom/Rootvin/sql/ep_P01_HDCDZApi1.sql index 536070e..9731e7c 100644 --- a/_custom/Rootvin/sql/ep_P01_HDCDZApi1.sql +++ b/_custom/Rootvin/sql/ep_P01_HDCDZApi1.sql @@ -6,7 +6,8 @@ AS -- HD Consulting Strakonice, T. Buzin -- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !! -- vola se na konci procesu realizace prijemky (po uskutecneni prijmu ale pred konecnym COMMIT TRAN) --- nastaveni skladu lze ovlivnit pres #TabDefiniceProP01 (HlavniSkladMat NVARCHAR(30), TechnologickySklad NVARCHAR(30), SkladVyrobaPekarna NVARCHAR(30) ) +-- nastaveni skladu lze ovlivnit pres #TabDefiniceProP01 (HlavniSkladMat NVARCHAR(30), TechnologickySklad NVARCHAR(30), +-- TechnologickySkladPolo NVARCHAR(30), SkladVyrobaPekarna NVARCHAR(30) ) SET NOCOUNT ON @@ -22,6 +23,7 @@ DECLARE DECLARE @sklHlavni NVARCHAR(30), @sklTechnolog NVARCHAR(30), + @sklTechnologPolo NVARCHAR(30), @sklPekarna NVARCHAR(30), @sklPrijem NVARCHAR(30) @@ -105,19 +107,23 @@ IF (@radaDokl=N'281') AND (@sklDokl=@sklPekarna) // prijemka/prevodka na pekarnu -- na "zrcadlovy" technologicky sklad (neni uctovany), ktery slouzi jen pro vydejky z Vyrobnich prikazu -- z tech se denne generuje sumacni na hlavnim sklade IF OBJECT_ID(N'tempdb..#TabDefiniceProP01', N'U') IS NOT NULL - SELECT TOP(1) @sklHlavni=HlavniSkladMat, @sklPekarna=SkladVyrobaPekarna, @sklTechnolog=TechnologickySklad FROM #TabDefiniceProP01 + SELECT TOP(1) @sklHlavni=HlavniSkladMat, @sklPekarna=SkladVyrobaPekarna, @sklTechnolog=TechnologickySklad, @sklTechnologPolo=TechnologickySkladPolo + FROM #TabDefiniceProP01 IF (@sklHlavni IS NULL) - SELECT @sklHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' + SELECT @sklHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' AND CisloStr LIKE N'3%' IF (@sklTechnolog IS NULL) - SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%' + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%' AND Nazev NOT LIKE N'%polotov%' AND CisloStr LIKE N'2%' IF (@sklTechnolog IS NULL) - SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technologický sklad%výdej%' + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technologický sklad%výdej%' AND CisloStr LIKE N'2%' +IF (@sklTechnologPolo IS NULL) + SELECT @sklTechnologPolo=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%pol%' AND CisloStr LIKE N'2%' IF (@sklPekarna IS NULL) - SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' + SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' AND CisloStr LIKE N'2%' -- jen prijemka/prevodka na sklad Pekarna (211) -IF (@dpz=0) AND (@radaDokl IN (N'281')) AND (@sklDokl=@sklPekarna) AND (@sklTechnolog IS NOT NULL) +-- vypnuto - prijemka pro odpis z prikazu se dela pred vydejkou (viz dbo.ep_Vyroba_GenVydejZeMzdy:prijemka materialu pro vydejku ) +IF (1=0) AND (@dpz=0) AND (@radaDokl IN (N'281')) AND (@sklDokl=@sklPekarna) AND (@sklTechnolog IS NOT NULL) BEGIN EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZDst OUT, @Sklad=@sklTechnolog, @DruhPohybu=@dpz, @RadaDokladu=@radaDokl, @Mena=@dzMena, @CisloOrg=@cOrg, @DatumPorizeni=@dzDatum diff --git a/_custom/Rootvin/sql/ep_Vyroba_DoplnSkladProVydejDleDokladu.sql b/_custom/Rootvin/sql/ep_Vyroba_DoplnSkladProVydejDleDokladu.sql index 8869aab..2702324 100644 --- a/_custom/Rootvin/sql/ep_Vyroba_DoplnSkladProVydejDleDokladu.sql +++ b/_custom/Rootvin/sql/ep_Vyroba_DoplnSkladProVydejDleDokladu.sql @@ -1,7 +1,8 @@ -- dbo.ep_Vyroba_DoplnSkladProVydejDleDokladu CREATE PROCEDURE dbo.ep_Vyroba_DoplnSkladProVydejDleDokladu @IDDoklad INT, - @errMsg NVARCHAR(500)=N'' OUT + @errMsg NVARCHAR(500)=N'' OUT, + @IDDokladPrijem INT=NULL OUT AS -- HD Consulting Strakonice, T. Buzin @@ -10,7 +11,7 @@ AS SET NOCOUNT ON -IF EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi WHERE Realizovano=1) +IF EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi WHERE ID=@IDDoklad AND Realizovano=1) RETURN @@ -37,6 +38,7 @@ DECLARE DECLARE @sklMatHlavni NVARCHAR(30), @sklTechnolog NVARCHAR(30), + @sklTechnologPolo NVARCHAR(30), @sklPekarna NVARCHAR(30), @poslSarze NVARCHAR(100), @poslPalList NVARCHAR(100) @@ -61,13 +63,15 @@ DELETE FROM @pol SET @uziv = 0 IF (@sklMatHlavni IS NULL) - SELECT @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'HlavnĂ­ sklad - Materiál' + SELECT @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' AND CisloStr LIKE N'3%' IF (@sklTechnolog IS NULL) - SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NOVĂť% sklad%vĂ˝dej%' + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%' AND Nazev NOT LIKE N'%polotov%' AND CisloStr LIKE N'2%' IF (@sklTechnolog IS NULL) - SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%sklad%vĂ˝dej%' + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%sklad%výdej%' AND CisloStr LIKE N'2%' +IF (@sklTechnologPolo IS NULL) + SELECT @sklTechnologPolo=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%pol%' AND CisloStr LIKE N'2%' IF (@sklPekarna IS NULL) - SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'VĂ˝roba - Pekárna' + SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' AND CisloStr LIKE N'2%' @@ -92,10 +96,10 @@ WHILE (1=1) AND p.Mnozstvi>0 AND d.DruhPohybuZbo IN (2,4) AND d.Realizovano=0 - AND d.DatPorizeni<@datPorizeni) + AND DATEDIFF(day, d.DatPorizeni, @datPorizeni)<2) , 0) SET @mnozSkl = ISNULL( (SELECT Mnozstvi FROM dbo.TabStavSkladu WHERE ID=@idSS), 0) - SET @mnozChybi = @mnozSkl - @mnozPZ - @mnozNevyd + SET @mnozChybi = -1.0 * (@mnozSkl - @mnozPZ - @mnozNevyd) IF (@mnozChybi>0) BEGIN SET @idSSPek = NULL @@ -159,7 +163,7 @@ IF EXISTS(SELECT 1 FROM @pol) DEALLOCATE c UPDATE dbo.TabDokladyZbozi SET BlokovaniEditoru=NULL WHERE ID=@idDZNew - EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=@idDZ, @AktualizaceSlev=0 + EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=@idDZNew, @AktualizaceSlev=0 -- realizace EXEC dbo.hp_Realizuj_Prijem @ID=@idDZNew, @DatumRealizace=@datNasklad, @Uzivatel=@uziv, @BylaChyba=@bChyba OUT @@ -171,8 +175,12 @@ IF EXISTS(SELECT 1 FROM @pol) SET @errMsg = ERROR_MESSAGE() IF (@tranPred=0) AND (@@TRANCOUNT>0) ROLLBACK TRAN + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba (3) příjemky korekce (ID ' + CONVERT(nvarchar, @idDZNew) + N') naskladnění pro výdejku: ' + @errMsg, @IDDoklad + END CATCH END +SET @IDDokladPrijem=@idDZNew + diff --git a/_custom/Rootvin/sql/ep_Vyroba_GenDenniVydejka.sql b/_custom/Rootvin/sql/ep_Vyroba_GenDenniVydejka.sql new file mode 100644 index 0000000..8f81395 --- /dev/null +++ b/_custom/Rootvin/sql/ep_Vyroba_GenDenniVydejka.sql @@ -0,0 +1,140 @@ +-- dbo.ep_Vyroba_GenDenniVydejka +CREATE PROCEDURE dbo.ep_Vyroba_GenDenniVydejka + @proDen DATETIME=NULL +AS + + +DECLARE + @errMsg NVARCHAR(500), + @cnt INT + +DECLARE + @sklPekarna NVARCHAR(30), + @sklTechnolog NVARCHAR(30), + @sklTechnologHV NVARCHAR(30), + @radaDoklVydej NVARCHAR(3), + @radaStorno NVARCHAR(3), + @idDZVydej INT, + @idPZOld INT, + @idZboSkladOld INT, + @idZboSkladNew INT, + @idKmen INT, + @idPZNew INT, + @idVCK INT, + @idVCS INT, + @paletList NVARCHAR(50), + @sarze NVARCHAR(50), + @mnoz NUMERIC(19,6) +DECLARE + @dzMena NVARCHAR(3), + @dzKurz NUMERIC(19,6), + @dzKurzE NUMERIC(19,6), + @vstC TINYINT, + @jednM INT + + + +IF (@sklPekarna IS NULL) + SELECT TOP(1) @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' AND CisloStr LIKE N'2%' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NE%' AND Nazev NOT LIKE N'%polotov%' AND Nazev NOT LIKE N'%HV%' AND CisloStr LIKE N'2%' +IF (@sklTechnolog IS NULL) + SET @sklTechnolog = N'261' +IF (@sklTechnologHV IS NULL) + SELECT @sklTechnologHV=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NE%' AND Nazev LIKE N'%HV%' AND CisloStr LIKE N'2%' +IF (@sklTechnologHV IS NULL) + SET @sklTechnologHV = N'262' + + +SET @radaDoklVydej=N'223' +SET @radaStorno = N'229' + + +IF (@proDen IS NULL) + SET @proDen=GETDATE() +SET @proDen = dbo.hf_TruncDate(@proDen) +SET @proDen = DATEADD(second, -1, @proDen) + + +-- ma vubec smysl to delat ? +IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabDokladyZbozi d WITH(NOLOCK) ON (d.ID=p.IDDoklad) + WHERE d.IDSklad IN (@sklTechnolog) AND d.RadaDokladu IN (@radaDoklVydej, @radaStorno) AND d.Realizovano=1 + AND dbo.hf_TruncDate(d.DatPorizeni)=dbo.hf_TruncDate(@proDen) AND d.CisloOrg=0 + ) + RETURN + + + + +SET @cnt=ISNULL( (SELECT COUNT(ID) FROM dbo.TabDokladyZbozi WHERE IDSklad=@sklPekarna AND RadaDokladu=@radaDoklVydej AND DruhPohybuZbo=4 + AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@proDen) AND CisloOrg=0 AND Realizovano=0), 0) +IF (@cnt=0) + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZVydej OUT, @Sklad=@sklPekarna, @DruhPohybu=4, @RadaDokladu=@radaDoklVydej, @CisloOrg=0, @DatumPorizeni=@proDen + ELSE + IF (@cnt=1) + SET @idDZVydej=(SELECT ID FROM dbo.TabDokladyZbozi WHERE IDSklad=@sklPekarna AND RadaDokladu=@radaDoklVydej AND DruhPohybuZbo=4 + AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@proDen) AND CisloOrg=0 AND Realizovano=0) + ELSE + SET @idDZVydej=(SELECT TOP(1) ID FROM dbo.TabDokladyZbozi WHERE IDSklad=@sklPekarna AND RadaDokladu=@radaDoklVydej AND DruhPohybuZbo=4 + AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@proDen) AND CisloOrg=0 AND Realizovano=0 ORDER BY DatPorizeni DESC) + + +IF (@idDZVydej IS NOT NULL) + BEGIN + SELECT @dzMena=Mena, @dzKurz=Kurz, @dzKurzE=KurzEuro, @jednM=JednotkaMeny, @vstC=VstupniCena FROM dbo.TabDokladyZbozi WHERE ID=@idDZVydej + + +-- begin: polozky materialu, tj. ze skladu 261 + DECLARE p CURSOR LOCAL FOR + SELECT -1.0*SUM(p.MnozstviDruhove), p.IDZboSklad + FROM dbo.TabPohybyZbozi p WITH(NOLOCK) + JOIN dbo.TabDokladyZbozi d WITH(NOLOCK) ON (d.ID=p.IDDoklad) + JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad) + JOIN dbo.TabKmenZbozi k WITH(NOLOCK) ON (k.ID=s.IDKmenZbozi) + WHERE d.IDSklad=@sklTechnolog + AND d.RadaDokladu IN (@radaDoklVydej, @radaStorno) + AND d.DruhPohybuZbo IN (3,4) + AND d.Realizovano=1 + AND p.Mnozstvi>0 + AND k.Sluzba=0 + AND dbo.hf_TruncDate(d.DatPorizeni)=dbo.hf_TruncDate(@proDen) + GROUP BY p.IDZboSklad, k.Nazev1 + ORDER BY k.Nazev1 + OPEN p + WHILE (1=1) + BEGIN + FETCH NEXT FROM p INTO @mnoz, @idZboSkladOld + IF (@@FETCH_STATUS<>0) BREAK + + SELECT @idKmen=IDKmenZbozi FROM dbo.TabStavSkladu WHERE ID=@idZboSkladOld + SELECT @idZboSkladNew=ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKmen AND IDSklad=@sklPekarna + + SET @idPZNew=(SELECT ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idDZVydej AND IDZboSklad=@idZboSkladNew) + IF (@idPZNew IS NULL) + EXEC dbo.hp_InsertPolozkyOZ @ident=@idPZNew OUT, @IDDoklad=@idDZVydej, @DruhPohybu=4, @CisloOrg=0, @IDZboSklad=@idZboSkladNew, @Mena=@dzMena, + @Kurz=@dzKurz, @KurzEuro=@dzKurzE, @JednotkaMeny=@jednM, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=0, + @VstupniCena=@vstC, @PovolitDuplicitu=0, @PovolitBlokovane=1, @Mnozstvi=@mnoz + IF (@idPZNew IS NOT NULL) + INSERT dbo._TabVyroba_VydejMatSarze (IDPohybZbozi, IDPohybZboziNew, PaletovyList, Sarze, IDKmenZbozi, Mnozstvi) + SELECT p.ID, @idPZNew, ISNULL(pe._Vyroba_PaletList, N''), ISNULL(_Vyroba_Sarze, N''), s.IDKmenZbozi, -1.0*p.Mnozstvi + FROM dbo.TabPohybyZbozi p WITH(NOLOCK) + LEFT JOIN dbo.TabPohybyZbozi_EXT pe WITH(NOLOCK) ON (pe.ID=p.ID) + JOIN dbo.TabDokladyZbozi d WITH(NOLOCK) ON (d.ID=p.IDDoklad) + JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad) + JOIN dbo.TabKmenZbozi k WITH(NOLOCK) ON (k.ID=s.IDKmenZbozi) + WHERE d.IDSklad=@sklTechnolog + AND d.RadaDokladu IN (@radaDoklVydej, @radaStorno) + AND d.DruhPohybuZbo IN (3,4) + AND d.Realizovano=1 + AND p.Mnozstvi>0 + AND k.Sluzba=0 + AND p.IDZboSklad=@idZboSkladOld + AND dbo.hf_TruncDate(d.DatPorizeni)=dbo.hf_TruncDate(@proDen) + ORDER BY k.Nazev1 + END + CLOSE p + DEALLOCATE p +-- end: polozky materialu, tj. ze skladu 261 + + + END diff --git a/_custom/Rootvin/sql/ep_Vyroba_GenObjednavkuMatDoVyroby.sql b/_custom/Rootvin/sql/ep_Vyroba_GenObjednavkuMatDoVyroby.sql new file mode 100644 index 0000000..f4de33b --- /dev/null +++ b/_custom/Rootvin/sql/ep_Vyroba_GenObjednavkuMatDoVyroby.sql @@ -0,0 +1,283 @@ +-- dbo.ep_Vyroba_GenObjednavkuMatDoVyroby +CREATE PROCEDURE dbo.ep_Vyroba_GenObjednavkuMatDoVyroby + @cilovySklad NVARCHAR(30)=N'', + @radaDokl NVARCHAR(3)=N'', + @druhPohybuZbo TINYINT=4, + @errMsg NVARCHAR(500)=N'' OUT +AS + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri spusteni pluginu Pekarna nebo pri startu Windows sluzby HDCDZApi !! + +SET NOCOUNT ON + + +DECLARE + @tranPred INT, + @cnt INT + +DECLARE + @idObj INT, + @radaPrijem NVARCHAR(3), + @druhPohybuZboPrijem TINYINT, + @idDoklad INT, + @datumDokladuMat DATETIME, + @datumDokladuFin DATETIME, + @genDokladMat BIT=0, + @idDokladMat INT, + @genDokladFin BIT=0, + @idDokladFin INT, + @cOrg INT=0, + @dzMena NVARCHAR(3), + @dzKurz NUMERIC(19,6), + @dzKurzEur NUMERIC(19,6), + @jednM INT, + @vstC TINYINT, + @idPohyb INT, + @idPZ INT, + @idZboSklad INT, + @idKmen INT, + @idKZ INT, + @sz NVARCHAR(3), + @rc NVARCHAR(30), + @sarze NVARCHAR(100), + @paletList NVARCHAR(100), + @skladMat NVARCHAR(30), + @skladFin NVARCHAR(30), + @mnoz NUMERIC(19,6), + @mnozVydano NUMERIC(19,6), + @material BIT + + +IF OBJECT_ID(N'tempdb..#VyrobaGenObjednavkuMatDoVyroby', N'U') IS NOT NULL + SELECT TOP(1) @skladMat=SkladMaterial, @skladFin=SkladVyrobky + FROM #VyrobaGenObjednavkuMatDoVyroby + + +SET @radaDokl = ISNULL(@radaDokl, N'231') +SET @druhPohybuZbo = ISNULL(@druhPohybuZbo, 4) +IF NOT EXISTS(SELECT 1 FROM dbo.TabDruhDokZbo WHERE RadaDokladu=@radaDokl AND DruhPohybuZbo=@druhPohybuZbo) + RETURN + + +SELECT @cilovySklad=IDSkladPrevodu, @radaPrijem=TypPrevodky, @druhPohybuZboPrijem=TabDruhDZ_DruhPohybuZboPre + FROM dbo.TabDruhDokZbo WHERE RadaDokladu=@radaDokl AND DruhPohybuZbo=@druhPohybuZbo +SET @radaPrijem = ISNULL(@radaPrijem, N'281') +SET @druhPohybuZboPrijem = ISNULL(@druhPohybuZboPrijem, 0) +IF NOT EXISTS (SELECT 1 FROM dbo.TabDruhDokZbo WHERE RadaDokladu=@radaPrijem AND DruhPohybuZbo=@druhPohybuZboPrijem) + RETURN + + + +SET @cilovySklad = ISNULL(@cilovySklad, N'') +IF (@cilovySklad=N'') + SET @cilovySklad = N'211' + +SET @skladMat = ISNULL(@skladMat, N'') +IF (@skladMat=N'') + SET @skladMat = N'311' + +SET @skladFin = ISNULL(@skladFin, N'') +IF (@skladFin=N'') + SET @skladFin = N'312' + + + +SET @genDokladMat=0 +IF EXISTS (SELECT 1 FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0 + AND o.JeMaterial=1 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0 + ) + BEGIN + SET @genDokladMat=1 + SET @datumDokladuMat = (SELECT MIN(o.DatPorizeni) FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0 + AND o.JeMaterial=1 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0 + ) + END +SET @datumDokladuMat = ISNULL(@datumDokladuMat, GETDATE()) + + + +SET @genDokladFin=0 +IF EXISTS (SELECT 1 FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0 + AND o.JeMaterial=0 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0 + ) + BEGIN + SET @genDokladFin=1 + SET @datumDokladuFin = (SELECT MIN(o.DatPorizeni) FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0 + AND o.JeMaterial=0 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0 + ) + END +SET @datumDokladuFin = ISNULL(@datumDokladuFin, GETDATE()) + + + + + +IF (@genDokladMat=1) OR (@genDokladFin=1) + BEGIN + + DECLARE m CURSOR LOCAL FAST_FORWARD FOR + SELECT DISTINCT(JeMaterial) + FROM dbo._TabVyroba_Objednavky + WHERE Splneno=0 + AND OdmitnutoSkladem=0 + AND NocniObjednavka=0 + AND Storno=0 + AND Vratka=0 + AND Blokovano=0 + GROUP BY JeMaterial + OPEN m + WHILE (1=1) + BEGIN + FETCH NEXT FROM m INTO @material + IF (@@FETCH_STATUS<>0) BREAK + + SET @cnt = (SELECT COUNT(d.ID) FROM dbo.TabDokladyZbozi d JOIN dbo.TabDokladyZbozi_EXT de ON (de.ID=d.ID) WHERE d.IDSklad=@cilovySklad AND d.RadaDokladu=@radaDokl + AND CAST(d.DatPorizeni AS DATE)=IIF(@material=0, CAST(@datumDokladuMat AS DATE), CAST(@datumDokladuFin AS DATE)) AND s.BlokovaniEditoru IS NULL + AND d.DruhPohybuZbo=@druhPohybuZbo AND d.Realizovano=0 AND de._Vyroba_ObjednavkaMat_Typ=(@material+1) + ) + IF (@cnt<=1) + BEGIN + + IF (@material=0) + IF (@idDokladFin IS NULL) + SET @idDoklad = (SELECT d.ID FROM dbo.TabDokladyZbozi d JOIN dbo.TabDokladyZbozi_EXT de ON (de.ID=d.ID) WHERE d.IDSklad=@cilovySklad AND d.RadaDokladu=@radaDokl + AND CAST(d.DatPorizeni AS DATE)=CAST(@datumDokladuFin AS DATE) AND d.DruhPohybuZbo=@druhPohybuZbo AND d.Realizovano=0 AND de._Vyroba_ObjednavkaMat_Typ=2 + AND d.BlokovaniEditoru IS NULL AND de._Vydej_ObjednavkaMat=1 + ) + ELSE + SET @idDoklad = @idDokladFin + + IF (@material=1) + IF (@idDokladMat IS NULL) + SET @idDoklad = (SELECT d.ID FROM dbo.TabDokladyZbozi d JOIN dbo.TabDokladyZbozi_EXT de ON (de.ID=d.ID) WHERE d.IDSklad=@cilovySklad AND d.RadaDokladu=@radaDokl + AND CAST(d.DatPorizeni AS DATE)=CAST(@datumDokladuMat AS DATE) AND d.DruhPohybuZbo=@druhPohybuZbo AND d.Realizovano=0 AND de._Vyroba_ObjednavkaMat_Typ=1 + AND d.BlokovaniEditoru IS NULL AND de._Vydej_ObjednavkaMat=1 + ) + ELSE + SET @idDoklad = @idDokladMat + + + IF (@idDoklad IS NULL) + BEGIN + IF (@material=0) AND (@genDokladFin=1) + EXEC dbo.hp_InsertHlavickyOZ @Ident=@idDoklad OUT, @Sklad=@skladFin, @DruhPohybu=@druhPohybuZbo, @RadaDokladu=@radaDokl, @CisloOrg=@cOrg, @DatumPorizeni=@datumDokladuFin + IF (@material=1) AND (@genDokladMat=1) + EXEC dbo.hp_InsertHlavickyOZ @Ident=@idDoklad OUT, @Sklad=@skladMat, @DruhPohybu=@druhPohybuZbo, @RadaDokladu=@radaDokl, @CisloOrg=@cOrg, @DatumPorizeni=@datumDokladuMat + IF (@idDoklad IS NOT NULL) + BEGIN + IF NOT EXISTS (SELECT 1 FROM dbo.TabDOkladyZbozi_EXT WHERE ID=@idDoklad) + INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idDoklad) + UPDATE dbo.TabDokladyZbozi_EXT SET _Vydej_ObjednavkaMat=1 WHERE ID=@idDoklad + IF (@material=0) + SET @idDokladFin = @idDoklad + ELSE + SET @idDokladMat = @idDoklad + END + END + + + SELECT @dzMena=Mena, @dzKurz=Kurz, @dzKurzEur=KurzEuro, @vstC=VstupniCena, @jednM=JednotkaMeny + FROM dbo.TabDokladyZbozi WHERE ID=@idDoklad + + IF (@idDoklad IS NOT NULL) + BEGIN + DECLARE c CURSOR LOCAL FOR + SELECT ID, SkupZbo, RegCis, IDKmenZbozi, Mnozstvi, PaletovyList, Sarze + FROM dbo._TabVyroba_Objednavky + WHERE Splneno=0 + AND OdmitnutoSkladem=0 + AND NocniObjednavka=0 + AND Storno=0 + AND Vratka=0 + AND Blokovano=0 + AND JeMaterial=@material + ORDER BY DatPorizeni + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @idObj, @sz, @rc, @idKmen, @mnoz, @paletList, @sarze + IF (@@FETCH_STATUS<>0) BREAK + + SET @mnozVydano = ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=@idObj), 0) + SET @mnoz = @mnoz - @mnozVydano + IF (@mnoz>0) + BEGIN + SET @idZboSklad = NULL + IF (@material=0) + SET @idZboSklad = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@skladFin) + ELSE + SET @idZboSklad = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@skladMat) + IF (@idZboSklad IS NULL) + IF (@material=0) + EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@skladFin, @IDZboSklad=@idZboSklad OUT + ELSE + EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKZ, @IDSklad=@skladMat, @IDZboSklad=@idZboSklad OUT + IF (@idZboSklad IS NOT NULL) + BEGIN + EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZ OUT, @IDDoklad=@idDoklad, @DruhPohybu=@druhPohybuZbo, @CisloOrg=@cOrg, @IDZboSklad=@idZboSklad, + @Mena=@dzMena, @Kurz=@dzKurz, @KurzEuro=@dzKurzEur, @JednotkaMeny=@jednM, @SazbaSD=NULL, @SazbaDPH=NULL, + @ZakazanoDPH=0, @VstupniCena=@vstC, @PovolitDuplicitu=1, @Mnozstvi@=mnoz + IF (@idPZ IS NOT NULL) + BEGIN + INSERT dbo._TabVyroba_Objednavky_Pol (IDHlava, IDDokladOZ, IDPohybOZ, Mnozstvi, Sarze, PaletovyList, SkupZbo, RegCis) + SELECT @idObj, @idDoklad, @idPZ, @mnoz, @sarze, @paletList, @sz, @rc + + SET @paletList = ISNULL(@paletList, N'') + SET @sarze = ISNULL(@sarze, N'') + IF (@paletList<>N'') + BEGIN + IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) + UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_PaletList=@paletList, _Vyroba_Sarze=@sarze WHERE ID=@idPZ + END + END -- @idPZ IS NOT NULL + + END -- @idSS IS NOT NULL + + END -- @mnoz>0 + + END + CLOSE c + DEALLOCATE c + + END -- @idDoklad IS NOT NULL + END -- @cnt<=1 + + END + CLOSE m + DEALLOCATE m + + END -- mam neco k zapsani ? + + + + +IF OBJECT_ID(N'dbo.ep_Vyroba_GenObjednavkuMatDoVyroby2', 'P') IS NOT NULL + EXEC dbo.ep_Vyroba_GenObjednavkuMatDoVyroby2 @idDoklad + + + +-- oznac splnene polozky +DECLARE c CURSOR LOCAL FAST_FORWARD FOR + SELECT ID, Mnozstvi + FROM dbo._TabVyroba_Objednavky + WHERE Splneno=0 + AND Vratka=0 + AND Storno=0 + AND OdmitnutoSkladem=0 +OPEN c +WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @idObj, @mnoz + IF (@@FETCH_STATUS<>0) BREAK + + SET @mnozVydano = ISNULL( (SELECT SUM(op.Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol op JOIN dbo.TabPohybyZbozi p ON (p.ID=op.IDPohybOZ) + WHERE op.IDHlava=@idObj AND p.SkutecneDatReal IS NOT NULL), 0) + IF (@mnoz=@mnozVydano) + UPDATE dbo._TabVyroba_Objednavky SET Splneno=1 WHERE ID=@idObj + + END +CLOSE c +DEALLOCATE c + diff --git a/_custom/Rootvin/sql/ep_Vyroba_GenObjednavkuMatDoVyrobyNew.sql b/_custom/Rootvin/sql/ep_Vyroba_GenObjednavkuMatDoVyrobyNew.sql new file mode 100644 index 0000000..035087c --- /dev/null +++ b/_custom/Rootvin/sql/ep_Vyroba_GenObjednavkuMatDoVyrobyNew.sql @@ -0,0 +1,340 @@ +-- dbo.ep_Vyroba_GenObjednavkuMatDoVyrobyNew +CREATE PROCEDURE dbo.ep_Vyroba_GenObjednavkuMatDoVyrobyNew + @errMsg NVARCHAR(500)=N'' OUT +AS + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri spusteni pluginu Pekarna nebo pri startu Windows sluzby HDCDZApi !! + +SET NOCOUNT ON + + +DECLARE + @tranPred INT, + @cnt INT, + @iTemp INT + +DECLARE + @idObj INT, + @druhPohybuZbo TINYINT=9, + @radaExpPr NVARCHAR(3)=N'550', + @doklVydPrevod NVARCHAR(3)=N'281', + @idExpPrMat INT, + @idExpPrPolo INT, + + @radaDokl NVARCHAR(3), + @cilovySklad NVARCHAR(30), + @radaPrijem NVARCHAR(3), + @druhPohybuZboPrijem TINYINT, + @idDoklad INT, + @datumDokladuMat DATETIME, + @datumDokladuFin DATETIME, + @genDokladMat BIT=0, + @idDokladMat INT, + @genDokladFin BIT=0, + @idDokladFin INT, + @cOrg INT=0, + @dzMena NVARCHAR(3), + @dzKurz NUMERIC(19,6), + @dzKurzEur NUMERIC(19,6), + @jednM INT, + @vstC TINYINT, + @idPohyb INT, + @idPZ INT, + @idVCS INT, + @idVCP INT, + @idZboSklad INT, + @idKmen INT, + @sz NVARCHAR(3), + @rc NVARCHAR(30), + @sarze NVARCHAR(100), + @paletList NVARCHAR(100), + @sklMatHlavni NVARCHAR(30), -- 311 + @sklPekarna NVARCHAR(30), -- 211 + @sklTechnolog NVARCHAR(30), -- 261 + @skladFin NVARCHAR(30), -- 312 + @mnoz NUMERIC(19,6), + @mnozVydano NUMERIC(19,6), + @material BIT, + @idPHIdent BIGINT, + @idPHIdent2 BIGINT, + @textDoPoznamky NVARCHAR(max)=NULL + + +IF OBJECT_ID(N'tempdb..#VyrobaGenObjednavkuMatDoVyrobyNew', N'U') IS NOT NULL + SELECT TOP(1) @sklMatHlavni=SkladMaterial, @skladFin=SkladVyrobky + FROM #VyrobaGenObjednavkuMatDoVyrobyNew + + +IF (@sklMatHlavni IS NULL) + SELECT TOP(1) @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' AND CisloStr LIKE N'3%' +IF (@sklTechnolog IS NULL) + SELECT TOP(1) @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%' AND Nazev NOT LIKE N'%polotov%' AND CisloStr LIKE N'2%' +IF (@sklPekarna IS NULL) + SELECT TOP(1) @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' AND CisloStr LIKE N'2%' + +SET @sklPekarna = ISNULL(@sklPekarna, N'') +IF (@sklPekarna=N'') + SET @sklPekarna = N'211' + +SET @sklMatHlavni = ISNULL(@sklMatHlavni, N'') +IF (@sklMatHlavni=N'') + SET @sklMatHlavni = N'311' + +SET @skladFin = ISNULL(@skladFin, N'') +IF (@skladFin=N'') + SET @skladFin = N'312' + + + +MERGE dbo._TabVyroba_Objednavky AS T + USING dbo.TabKmenZbozi AS S ON (S.ID=T.IDKmenZbozi) + WHEN MATCHED AND T.JeMaterial IS NULL THEN UPDATE SET T.JeMaterial=S.Material; +DELETE FROM dbo._TabVyroba_Objednavky_Pol WHERE IDPohybOZ NOT IN (SELECT ID FROM dbo.TabPohybyZbozi WITH(NOLOCK)) + + + + +SET @genDokladMat=0 +IF EXISTS (SELECT 1 FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0 + AND o.JeMaterial=1 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0 + ) + BEGIN + SET @genDokladMat=1 + SET @datumDokladuMat = (SELECT MIN(o.DatPorizeni) FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0 + AND o.JeMaterial=1 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0 + ) + END +SET @datumDokladuMat = ISNULL(@datumDokladuMat, GETDATE()) + + + +SET @genDokladFin=0 +IF EXISTS (SELECT 1 FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0 + AND o.JeMaterial=0 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0 + ) + BEGIN + SET @genDokladFin=1 + SET @datumDokladuFin = (SELECT MIN(o.DatPorizeni) FROM dbo._TabVyroba_Objednavky o WHERE o.Splneno=0 AND o.OdmitnutoSkladem=0 AND o.NocniObjednavka=0 AND o.Storno=0 AND o.Vratka=0 + AND o.JeMaterial=0 AND o.Blokovano=0 AND (o.Mnozstvi-ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=o.ID), 0))>0 + ) + END +SET @datumDokladuFin = ISNULL(@datumDokladuFin, GETDATE()) + + + + + +IF (@genDokladMat=1) OR (@genDokladFin=1) + BEGIN + + DECLARE m CURSOR LOCAL FAST_FORWARD FOR + SELECT DISTINCT(JeMaterial) + FROM dbo._TabVyroba_Objednavky + WHERE Splneno=0 + AND OdmitnutoSkladem=0 + AND NocniObjednavka=0 + AND Storno=0 + AND Vratka=0 + AND Blokovano=0 + AND IDPhIdent2 IS NOT NULL + GROUP BY JeMaterial + OPEN m + WHILE (1=1) + BEGIN + FETCH NEXT FROM m INTO @material + IF (@@FETCH_STATUS<>0) BREAK + + IF (@material=0) + BEGIN + SET @cilovySklad=@skladFin + SET @cnt = ISNULL( (SELECT COUNT(d.ID) FROM dbo.TabDokladyZbozi d WITH(NOLOCK) WHERE d.PoradoveCislo>0 AND d.DruhPohybuZbo=@druhPohybuZbo AND d.IDSklad=@cilovySklad + AND d.BlokovaniEditoru IS NULL AND d.RadaDokladu=@radaExpPr AND d.Splneno=0 AND d.StavRezervace<>N'X' + AND CAST(d.DatPorizeni AS DATE)=CAST(@datumDokladuFin AS DATE) + ), 0) + IF (@cnt=0) + EXEC dbo.hp_InsertHlavickyOZ @Ident=@idExpPrPolo OUT, @Sklad=@cilovySklad, @DruhPohybu=@druhPohybuZbo, @RadaDokladu=@radaExpPr, @CisloOrg=@cOrg, @DatumPorizeni=@datumDokladuFin + IF (@cnt=1) + SET @idExpPrPolo = (SELECT d.ID FROM dbo.TabDokladyZbozi d WHERE d.PoradoveCislo>0 AND d.DruhPohybuZbo=@druhPohybuZbo AND d.IDSklad=@cilovySklad + AND d.BlokovaniEditoru IS NULL AND d.RadaDokladu=@radaExpPr AND d.Splneno=0 AND d.StavRezervace<>N'X' + AND CAST(d.DatPorizeni AS DATE)=CAST(@datumDokladuFin AS DATE) + ) + IF (@cnt>1) + SET @idExpPrPolo = (SELECT TOP(1) d.ID FROM dbo.TabDokladyZbozi d WHERE d.PoradoveCislo>0 AND d.DruhPohybuZbo=@druhPohybuZbo AND d.IDSklad=@cilovySklad + AND d.BlokovaniEditoru IS NULL AND d.RadaDokladu=@radaExpPr AND d.Splneno=0 AND d.StavRezervace<>N'X' ORDER BY d.DatPorizeni DESC) + IF NOT EXISTS (SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idExpPrPolo) + INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idExpPrPolo) + UPDATE dbo.TabDokladyZbozi_EXT SET _Vyroba_ObjednavkaMat_Typ=2, _Vydej_ObjednavkaMat=1 WHERE ID=@idExpPrPolo + SET @idDoklad = @idExpPrPolo + END + + IF (@material=1) + BEGIN + SET @cilovySklad=@sklMatHlavni + SET @cnt = ISNULL( (SELECT COUNT(d.ID) FROM dbo.TabDokladyZbozi d WHERE d.PoradoveCislo>0 AND d.DruhPohybuZbo=@druhPohybuZbo AND d.IDSklad=@cilovySklad + AND d.BlokovaniEditoru IS NULL AND d.RadaDokladu=@radaExpPr AND d.Splneno=0 AND d.StavRezervace<>N'X' + AND CAST(d.DatPorizeni AS DATE)=CAST(@datumDokladuMat AS DATE) + ), 0) + IF (@cnt=0) + EXEC dbo.hp_InsertHlavickyOZ @Ident=@idExpPrMat OUT, @Sklad=@cilovySklad, @DruhPohybu=@druhPohybuZbo, @RadaDokladu=@radaExpPr, @CisloOrg=@cOrg, @DatumPorizeni=@datumDokladuMat + IF (@cnt=1) + SET @idExpPrMat = (SELECT d.ID FROM dbo.TabDokladyZbozi d WHERE d.PoradoveCislo>0 AND d.DruhPohybuZbo=@druhPohybuZbo AND d.IDSklad=@cilovySklad + AND d.BlokovaniEditoru IS NULL AND d.RadaDokladu=@radaExpPr AND d.Splneno=0 AND d.StavRezervace<>N'X' + AND CAST(d.DatPorizeni AS DATE)=CAST(@datumDokladuMat AS DATE) + ) + IF (@cnt>1) + SET @idExpPrMat = (SELECT TOP(1) d.ID FROM dbo.TabDokladyZbozi d WHERE d.PoradoveCislo>0 AND d.DruhPohybuZbo=@druhPohybuZbo AND d.IDSklad=@cilovySklad + AND d.BlokovaniEditoru IS NULL AND d.RadaDokladu=@radaExpPr AND d.Splneno=0 AND d.StavRezervace<>N'X' ORDER BY d.DatPorizeni DESC) + + IF NOT EXISTS (SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idExpPrMat) + INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idExpPrMat) + UPDATE dbo.TabDokladyZbozi_EXT SET _Vyroba_ObjednavkaMat_Typ=1, _Vydej_ObjednavkaMat=1 WHERE ID=@idExpPrMat + SET @idDoklad = @idExpPrMat + END + + IF (@idDoklad IS NOT NULL) + BEGIN + UPDATE dbo.TabDokladyZbozi SET IDSkladPrevodu=@sklPekarna WHERE ID=@idDoklad AND IDSkladPrevodu IS NULL + UPDATE dbo.TabDokladyZbozi SET TypPrevodky=@doklVydPrevod WHERE ID=@idDoklad AND TypPrevodky IS NULL + + SELECT @dzMena=Mena, @dzKurz=Kurz, @dzKurzEur=KurzEuro, @vstC=VstupniCena, @jednM=JednotkaMeny + FROM dbo.TabDokladyZbozi WHERE ID=@idDoklad + + DECLARE c CURSOR LOCAL FOR + SELECT ID, SkupZbo, RegCis, IDKmenZbozi, Mnozstvi, PaletovyList, Sarze, IdPHIdent, IdPHIdent2 + FROM dbo._TabVyroba_Objednavky + WHERE Splneno=0 + AND OdmitnutoSkladem=0 + AND NocniObjednavka=0 + AND Storno=0 + AND Vratka=0 + AND Blokovano=0 + AND IDPhIdent2 IS NOT NULL + AND JeMaterial=@material + ORDER BY DatPorizeni + OPEN c + WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @idObj, @sz, @rc, @idKmen, @mnoz, @paletList, @sarze, @idPHIdent, @idPHIdent2 + IF (@@FETCH_STATUS<>0) BREAK + + IF (@idKmen IS NULL) + SET @idKmen = (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=@sz AND RegCis=@rc) + + SET @mnozVydano = ISNULL( (SELECT SUM(Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol WHERE IDHlava=@idObj), 0) + SET @mnoz = @mnoz - @mnozVydano + + IF (@mnoz>0) + BEGIN + SET @idZboSklad = NULL + IF (@material=0) + SET @idZboSklad = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKmen AND IDSklad=@skladFin) + ELSE + SET @idZboSklad = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKmen AND IDSklad=@sklMatHlavni) + IF (@idZboSklad IS NULL) + BEGIN + IF (@material=0) + EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKmen, @IDSklad=@skladFin, @IDZboSklad=@idZboSklad OUT + ELSE + EXEC dbo.hp_InsertStavSkladu @IDKmen=@idKmen, @IDSklad=@sklMatHlavni, @IDZboSklad=@idZboSklad OUT + END -- @idZboSklad IS NULL + IF (@idZboSklad IS NOT NULL) + AND NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabPohybyZbozi_EXT pe WITH(NOLOCK) ON (pe.ID=p.ID) + WHERE p.IDDoklad=@idDoklad AND p.IDZboSklad=@idZboSklad AND pe._Vyroba_Sarze=@sarze AND pe._Vyroba_PaletList=@paletList AND pe._HDCAPI_PHident=@idPHIdent2) + BEGIN + EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZ OUT, @IDDoklad=@idDoklad, @DruhPohybu=@druhPohybuZbo, @CisloOrg=@cOrg, @IDZboSklad=@idZboSklad, + @Mena=@dzMena, @Kurz=@dzKurz, @KurzEuro=@dzKurzEur, @JednotkaMeny=@jednM, @SazbaSD=NULL, @SazbaDPH=NULL, + @ZakazanoDPH=0, @VstupniCena=@vstC, @PovolitDuplicitu=1, @Mnozstvi=@mnoz + IF (@idPZ IS NOT NULL) + BEGIN + IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) + + SET @paletList = ISNULL(@paletList, N'') + SET @sarze = ISNULL(@sarze, N'') + UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_PaletList=@paletList, _Vyroba_Sarze=@sarze, _Vyroba_IDObjednavkaMat=@idObj, _HDCAPI_PHident=@idPHIdent2 + WHERE ID=@idPZ + + SET @idVCS = NULL + IF (@material=0) -- prevadej realna VC jen u dilcu (finaly+polotovary) + BEGIN + SET @idVCS = (SELECT ID FROM dbo.TabVyrCS WHERE IDStavSkladu=@idZboSklad AND Nazev1=@paletList) + IF (@idVCS IS NULL) + BEGIN + SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabVyrCS), 0) + DBCC CHECKIDENT (TabVyrCS, RESEED, @iTemp) + EXEC dbo.hp_OZInsertVyrCS @IDVyrCS=@idVCS OUT, @IDZboSklad=@idZboSklad, @Nazev1=@paletList + END + + SET @idVCP = NULL + IF (@idVCS IS NOT NULL) + BEGIN + SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabVyrCP), 0) + DBCC CHECKIDENT (TabVyrCP, RESEED, @iTemp) + INSERT dbo.TabVyrCP (IDPolozkaDokladu, IDVyrCis, Nazev, Mnozstvi) SELECT @idPZ, @idVCS, @sarze, @mnoz + SET @idVCP = SCOPE_IDENTITY() + END + END -- @material=0 + + INSERT dbo._TabVyroba_Objednavky_Pol (IDHlava, IDDokladOZ, IDPohybOZ, Mnozstvi, Sarze, PaletovyList, SkupZbo, RegCis, IDVyrCP) + SELECT @idObj, @idDoklad, @idPZ, @mnoz, @sarze, @paletList, @sz, @rc, @idVCP + + IF (@paletList<>'') + SET @textDoPoznamky = N'PL: ' + @paletList + IF (@sarze<>N'') + IF (ISNULL(@textDoPoznamky,N'')=N'') + SET @textDoPoznamky = N'šarze: ' + @sarze + ELSE + SET @textDoPoznamky = @textDoPoznamky + N' / šarze: ' + @sarze + SET @textDoPoznamky = TRIM(@textDoPoznamky) + IF (@textDoPoznamky=N'') + SET @textDoPoznamky = NULL + UPDATE dbo.TabPohybyZbozi SET Poznamka=@textDoPoznamky WHERE ID=@idPZ + END -- @idPZ IS NOT NULL + END -- @idZboSklad IS NOT NULL + END -- @mnoz>0 + + END + CLOSE c + DEALLOCATE c + + END -- @idDoklad IS NOT NULL + + END + CLOSE m + DEALLOCATE m + + END -- mam neco k zapsani ? + + + + +IF OBJECT_ID(N'dbo.ep_Vyroba_GenObjednavkuMatDoVyrobyNew2', 'P') IS NOT NULL + EXEC dbo.ep_Vyroba_GenObjednavkuMatDoVyrobyNew2 @idDoklad + + + +-- oznac splnene polozky +DECLARE c CURSOR LOCAL FAST_FORWARD FOR + SELECT ID, Mnozstvi + FROM dbo._TabVyroba_Objednavky + WHERE Splneno=0 + AND Vratka=0 + AND Storno=0 + AND OdmitnutoSkladem=0 + AND ID IN (SELECT 1 FROM dbo._TabVyroba_Objednavky_Pol p WITH(NOLOCK) WHERE p.IDHlava=ID) +OPEN c +WHILE (1=1) + BEGIN + FETCH NEXT FROM c INTO @idObj, @mnoz + IF (@@FETCH_STATUS<>0) BREAK + + SET @mnozVydano = ISNULL( (SELECT SUM(op.Mnozstvi) FROM dbo._TabVyroba_Objednavky_Pol op WITH(NOLOCK) JOIN dbo.TabPohybyZbozi p WITH(NOLOCK) ON (p.ID=op.IDPohybOZ) + WHERE op.IDHlava=@idObj AND p.SkutecneDatReal IS NOT NULL), 0) + IF (@mnoz=@mnozVydano) + UPDATE dbo._TabVyroba_Objednavky SET Splneno=1 WHERE ID=@idObj + + END +CLOSE c +DEALLOCATE c + diff --git a/_custom/Rootvin/sql/ep_Vyroba_GenOdvodZeMzdy.sql b/_custom/Rootvin/sql/ep_Vyroba_GenOdvodZeMzdy.sql index 4439d6d..b92eb28 100644 --- a/_custom/Rootvin/sql/ep_Vyroba_GenOdvodZeMzdy.sql +++ b/_custom/Rootvin/sql/ep_Vyroba_GenOdvodZeMzdy.sql @@ -6,7 +6,7 @@ CREATE PROCEDURE dbo.ep_Vyroba_GenOdvodZeMzdy @skladOdvod NVARCHAR(30)=NULL, @realizujPrijem BIT=0, @prevodDoVyssiho BIT=0, - @kopiiNaTechSklad BIT=0, + @kopiiNaTechSklad BIT=1, @errMsg NVARCHAR(500)=N'' OUT AS @@ -18,37 +18,83 @@ AS SET NOCOUNT ON +IF EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky WHERE GenerovanoOdvadeni=1 AND ID=@IDMzdy) + RETURN + + DECLARE + @iTemp INT, @aktDatum DATETIME=GETDATE(), + @datPrijem DATETIME, @bChyba BIT, @ret INT, + @cnt INT, @jeOdvOper BIT=0, @idUziv INT, @IDPrikaz INT, @IDZakazModif INT, @IDPrikazVyssi INT, + @doklPrPostup INT, + @altPrPostup NCHAR(1), @doklKV INT, @IDKmen INT, + @mjEvid NVARCHAR(10), + @jeFinal BIT=0, @idPZ INT, + @idPZOld INT, + @idPZOld2 INT, + @idPZSberna INT, + @idSS INT, + @idVCS INT, + @idVCP INT, + @idVPrVC INT, + @vc NVARCHAR(100), @NekontrolMnozOdvedFinal BIT=0, @mnozstvi NUMERIC(19,6)=0, + @mnozstviKA NUMERIC(19,6)=0, @radaOdvNaSklad NVARCHAR(3)=N'273', @sklProOdvod NVARCHAR(30)=N'261', + @sklProOdvodHV NVARCHAR(30)=N'262', + @sklProPolo NVARCHAR(30)=N'311', + @sklProFinal NVARCHAR(30)=N'312', + @sklPrijem NVARCHAR(30), @radaVPr NVARCHAR(10), @idPrij INT, + @idPrijOld INT, + @idPrijSberna INT, + @uklidPomocTab BIT, @idPrijKopie INT, @sklTechnicky NVARCHAR(30), + @sklTechnolog NVARCHAR(30), + @sklTechnologHV NVARCHAR(30), @dpz TINYINT, + @cOrg INT, @dzDatum DATETIME, - @dzMena NVARCHAR(3) + @dzMena NVARCHAR(3), + @dzKurz NUMERIC(19,6), + @dzKurzE NUMERIC(19,6), + @vstC TINYINT, + @jednM INT DECLARE @idDZPomocPrijem INT, @idPZPomocPrijem INT, @idSSPomocPrijem INT, - @mnozPrijem NUMERIC(19,6) + @mnozPrijem NUMERIC(19,6), + @idPalety INT, + @paletList NVARCHAR(100), + @sarze NVARCHAR(30) +DECLARE + @ksOdv NUMERIC(19,6), + @ksOdv_ks NUMERIC(19,6), + @idDavkaPomoc INT, + @mnozDavkaPomoc NUMERIC(19,6) + + +SET @uklidPomocTab = 0 + SELECT @jeOdvOper=pp.Odvadeci FROM dbo.TabPrikazMzdyAZmetky pmz INNER JOIN dbo.TabPrPostup pp ON (pp.IDPrikaz=pmz.IDPrikaz AND pp.Doklad=pmz.DokladPrPostup AND pp.Alt=pmz.AltPrPostup AND pp.IDOdchylkyDo IS NULL) @@ -59,24 +105,37 @@ IF (@jeOdvOper=0) -IF OBJECT_ID(N'dbo.TabUserCfg', N'U') IS NOT NULL +IF OBJECT_ID(N'dbo.TabUserCfg', 'U') IS NOT NULL SET @idUziv = (SELECT ID FROM dbo.TabUserCfg WHERE LoginName=SUSER_SNAME()) SET @idUziv = ISNULL(@idUziv, 0) -- CREATE TABLE #HDCTabGenOdvodZeMzdyKonfig (RadaOdvodNaSklad NVARCHAR(3), SkladProOdvod NVARCHAR(30), BezVyrobnichCisel BIT=0, IDUziv INT) -IF OBJECT_ID(N'tempdb..#HDCTabGenOdvodZeMzdyKonfig', N'U') IS NOT NULL +IF OBJECT_ID(N'tempdb..#HDCTabGenOdvodZeMzdyKonfig', 'U') IS NOT NULL SELECT TOP(1) @radaOdvNaSklad=ISNULL(RadaOdvodNaSklad, @radaOdvNaSklad), @sklProOdvod=ISNULL(SkladProOdvod, @sklProOdvod), @bezVyrCis=ISNULL(BezVyrobnichCisel, @bezVyrCis), @idUziv=ISNULL(IDUziv, @idUziv) FROM #HDCTabGenOdvodZeMzdyKonfig IF (@sklTechnicky IS NULL) - SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%' + SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NE%' AND Nazev NOT LIKE N'%polotov%' AND Nazev NOT LIKE N'%HV%' AND CisloStr LIKE N'2%' IF (@sklTechnicky IS NULL) SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%sklad%výdej%' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NE%' AND Nazev NOT LIKE N'%polotov%' AND Nazev NOT LIKE N'%HV%' AND CisloStr LIKE N'2%' +IF (@sklTechnolog IS NULL) + SET @sklTechnolog = N'261' +IF (@sklTechnologHV IS NULL) + SELECT @sklTechnologHV=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NE%' AND Nazev LIKE N'%HV%' AND CisloStr LIKE N'2%' +IF (@sklTechnologHV IS NULL) + SET @sklTechnologHV = N'262' + + + + + DROP TABLE IF EXISTS #TabOdved CREATE TABLE #TabOdved ( @@ -138,11 +197,9 @@ CREATE TABLE #TabGenPrijem (ID INT NOT NULL, PRIMARY KEY(ID)) -IF EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky WHERE GenerovanoOdvadeni=1 AND ID=@IDMzdy) - RETURN - -SELECT @mnozstvi=kusy_odv FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy +SELECT @mnozstvi=kusy_odv, @doklPrPostup=DokladPrPostup, @altPrPostup=AltPrPostup FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy +SET @mnozstviKA = 0 UPDATE dbo.TabPrikazMzdyAZmetky SET GenerovanoOdvadeni=1 WHERE ID=@IDMzdy IF (@@ROWCOUNT=0) RETURN @@ -155,6 +212,19 @@ SELECT @IDPrikaz=IDPrikaz FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy SELECT @radaVPr=Rada, @IDKmen=IDTabKmen, @IDZakazModif=IDZakazModif, @IDPrikazVyssi=IDPrikazVyssi FROM dbo.TabPrikaz WHERE ID=@IDPrikaz + +SELECT @mjEvid=MJEvidence FROM dbo.TabKmenZbozi WHERE ID=@IDKmen +IF (@mjEvid=N'KA') + SET @mnozstviKA = @mnozstvi + + +SET @jeFinal = 0 +IF EXISTS (SELECT 1 FROM dbo.TabParKmZ WHERE IDKmenZbozi=@IDKmen AND TypDilce=0) + SET @jeFinal = 1 + + + + -- nastav sklad pro odvod podle karty IF (@sklProOdvod IS NULL) SELECT @sklProOdvod=VychoziSklad FROM dbo.TabParKmZ WHERE IDKmenZbozi=@IDKmen @@ -167,8 +237,24 @@ SELECT @radaOdvNaSklad=CASE WHEN RadaDokl_OdvedeniPrikazu IS NULL THEN @radaOdvN IF (@radaOdvod IS NOT NULL) SET @radaOdvNaSklad=@radaOdvod -IF (@skladOdvod IS NOT NULL) - SET @sklProOdvod = @skladOdvod + +/* +IF (@skladOdvod IS NULL) + BEGIN + SET @sklProOdvod = @sklProPolo + IF (@jeFinal=1) + SET @sklProOdvod = @sklProFinal + END + ELSE + SET @sklProOdvod = @skladOdvod +*/ + +IF (@jeFinal=1) + SET @sklProOdvod = @sklTechnologHV + ELSE + SET @sklProOdvod = @sklTechnolog + + UPDATE #tabOdved SET mnozstvi=CASE WHEN @NekontrolMnozOdvedFinal=0 AND mnozstvi+@mnozstvi>maxMnozstvi THEN maxMnozstvi ELSE mnozstvi+@mnozstvi END WHERE IDPrikaz=@IDPrikaz @@ -203,6 +289,8 @@ DELETE #TabVyrCisProGenOdv WHERE IDOdvedeni IN (SELECT O2.ID FROM #tabOdved O2 DELETE #TabPolotovProGenOdv WHERE IDOdvedeni IN (SELECT O2.ID FROM #tabOdved O2 WHERE O2.Mnozstvi<=0.0) DELETE #tabOdved WHERE Mnozstvi<=0.0 +SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabVyrCP), 0) +DBCC CHECKIDENT (TabVyrCP, RESEED, @iTemp) IF (@sklProOdvod IS NOT NULL) UPDATE #tabOdved SET Sklad=@sklProOdvod @@ -217,6 +305,7 @@ IF (@bezVyrCis=1) IF (@prevodDoVyssiho=0) BEGIN BEGIN TRY +-- pozor, nelze predem zadat do jake prijemky polozky odvodu generovat, vzdy se generuje nova, o prevedeni polozek se postarame nize EXEC @ret=dbo.hp_OdvedeniPrikazu @RadaDokladu=@radaOdvNaSklad, @IDObdobi=NULL, @KonecneOdvedeni=0, @DatPorizeni=NULL, @SekejZakazky=1, @SekejPrikazy=1 END TRY BEGIN CATCH @@ -227,15 +316,16 @@ IF (@prevodDoVyssiho=0) BEGIN IF (@IDPrikazVyssi IS NOT NULL) BEGIN - IF OBJECT_ID(N'tempdb..#TabOdved_IDMzdy', N'U') IS NOT NULL + IF OBJECT_ID(N'tempdb..#TabOdved_IDMzdy', 'U') IS NOT NULL DELETE FROM #TabOdved_IDMzdy INSERT #TabOdved_IDMzdy (IDPrikaz, IDMzdy) SELECT @idPrikaz, @idMzdy SET @doklKV = (SELECT ID FROM dbo.TabPrKVazby WHERE IDPrikaz=@IDPrikazVyssi AND nizsi=@IDKmen AND IDOdchylkyDo IS NULL) +-- @idPZ je TabPrikazPrevodPolotov.ID EXEC @idPZ=dbo.hp_OdvedeniPrikazuPrevodem @DatPripadu=@aktDatum, @KonecneOdvedeniNatvrdo=0, @IDPrikazZdroj=@idPrikaz, @IDPrikazCil=@IDPrikazVyssi, @Doklad=@doklKV, @IDDilec=@IDKmen, @mnozstvi=@mnozstvi, @IDOdvedeniVC=0, @IDZakazModif=@IDZakazModif - IF OBJECT_ID(N'tempdb..#TabGenPrijem', N'U') IS NOT NULL + IF OBJECT_ID(N'tempdb..#TabGenPrijem', 'U') IS NOT NULL DELETE FROM #TabGenPrijem END -- @IDPrikazVyssi IS NOT NULL END @@ -244,49 +334,189 @@ IF (@prevodDoVyssiho=0) -DECLARE prij CURSOR LOCAL FOR - SELECT ID FROM #TabGenPrijem -OPEN prij -WHILE (1=1) +IF (@jeFinal=0) + SET @sklPrijem=@sklProPolo + ELSE + SET @sklPrijem=@sklProFinal + + +IF (@sklPrijem<>N'') BEGIN - FETCH NEXT FROM prij INTO @idPrij - IF (@@FETCH_STATUS<>0) BREAK - --- kopie na technologicky sklad, aby se mohly delat vydejky - SET @idPrijKopie = NULL - IF (@kopiiNaTechSklad=1) AND (@sklTechnicky IS NOT NULL) + DECLARE prij CURSOR LOCAL FOR + SELECT ID FROM #TabGenPrijem + OPEN prij + WHILE (1=1) BEGIN - SELECT @dpz=DruhPohybuZbo, @dzDatum=DatPorizeni, @dzMena=Mena FROM dbo.TabPohybyZbozi WHERE ID=@idPrij - EXEC dbo.hp_InsertHlavickyOZ @ident=@idPrijKopie OUT, @Sklad=@sklTechnicky, @DruhPohybu=@dpz, @RadaDokladu=@radaOdvNaSklad, - @Mena=@dzMena, @CisloOrg=0, @DatumPorizeni=@dzDatum - IF (@idPrijKopie IS NOT NULL) - EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idPrijKopie, @IDDokladSrc=@idPrij, @CisloOrgCil=0, @MUCil=NULL, @MenaCil=NULL, - @KurzCil=NULL, @JednotkaMenyCil=NULL, @KurzEuroCil=NULL, @CisloZakCil=NULL, @NOkruhCil=NULL, - @StredNakladCil=NULL, @StredVynosCil=NULL, @FormaDopravyCil=NULL, @VozidloCil=NULL, @ObjednavkaCil=NULL, - @PopisDodavkyCil=NULL, @NavaznyDobropisCil=NULL, @ZamestnanecCil=NULL, @DodFakCil=NULL, @Nasobek=1, - @SlevaCil=NULL, @VytvaretDokladovouVazbu=0, @VytvaretPolozkovouVazbu=0, @ChybaSkladana=@errMsg OUT, - @KopirovaniDokladu=0 - END -- kopii na TechSklad + FETCH NEXT FROM prij INTO @idPrij + IF (@@FETCH_STATUS<>0) BREAK + + SELECT @datPrijem=DatPorizeni FROM dbo.TabDokladyZbozi WHERE ID=@idPrij + + + + + IF (@realizujPrijem=1) + BEGIN + BEGIN TRY + EXEC dbo.hp_Realizuj_Prijem @ID=@idPrij, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1 + IF (@bChyba=1) + INSERT dbo.Tabx_Vyroba_Log (Kategorie, Typ, LogText, iHodnota) SELECT 1, 1, 'Chyba realizace neidentifikovaná', @idPrij + ELSE + BEGIN + SET @idPrijOld = NULL + SET @idPrijSberna = NULL + + -- zjisti jestli na cilovem skladu mame nejakou otevrenou prijemku z dnesniho dne + SET @cnt = ISNULL( (SELECT COUNT(ID) FROM dbo.TabDokladyZbozi WHERE ID<>@idPrij AND PoradoveCislo>0 AND DruhPohybuZbo=0 AND RadaDokladu=@radaOdvNaSklad + AND CisloOrg=0 AND IDSklad=@sklPrijem AND Realizovano=0 AND BlokovaniEditoru IS NULL AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@datPrijem)) + , 0) + IF (@cnt=0) -- nemame, vygeneruj ji + BEGIN + SELECT @dpz=DruhPohybuZbo, @dzDatum=DatPorizeni, @dzMena=Mena FROM dbo.TabDokladyZbozi WHERE ID=@idPrij + SET @datPrijem = @dzDatum + EXEC dbo.hp_InsertHlavickyOZ @ident=@idPrijSberna OUT, @Sklad=@sklPrijem, @DruhPohybu=@dpz, @RadaDokladu=@radaOdvNaSklad, + @Mena=@dzMena, @CisloOrg=0, @DatumPorizeni=@datPrijem + END + IF (@cnt=1) -- ma jen jednu + BEGIN + SELECT TOP(1) @idPrijSberna=ID FROM dbo.TabDokladyZbozi WHERE ID<>@idPrij AND PoradoveCislo>0 AND DruhPohybuZbo=0 AND RadaDokladu=@radaOdvNaSklad + AND CisloOrg=0 AND IDSklad=@sklPrijem AND Realizovano=0 AND BlokovaniEditoru IS NULL AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@datPrijem) + END + IF (@cnt>1) -- mam jich vic, vezmi tu posledni (nejnovejsi) + BEGIN + SET @idPrijSberna = (SELECT TOP(1) ID FROM dbo.TabDokladyZbozi WHERE ID<>@idPrij AND PoradoveCislo>0 AND DruhPohybuZbo=0 AND RadaDokladu=@radaOdvNaSklad + AND CisloOrg=0 AND IDSklad=@sklPrijem AND Realizovano=0 AND BlokovaniEditoru IS NULL + AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@datPrijem) + ORDER BY DatPorizeni DESC) + END + +-- pokud ji mam, nakopiruj do ni novou polozku + IF (@idPrijSberna IS NOT NULL) + BEGIN + EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idPrijSberna, @IDDokladSrc=@idPrij, @CisloOrgCil=0, @MUCil=NULL, @MenaCil=NULL, + @KurzCil=NULL, @JednotkaMenyCil=NULL, @KurzEuroCil=NULL, @CisloZakCil=NULL, @NOkruhCil=NULL, + @StredNakladCil=NULL, @StredVynosCil=NULL, @FormaDopravyCil=NULL, @VozidloCil=NULL, @ObjednavkaCil=NULL, + @PopisDodavkyCil=NULL, @NavaznyDobropisCil=NULL, @ZamestnanecCil=NULL, @DodFakCil=NULL, @Nasobek=1, + @SlevaCil=NULL, @VytvaretDokladovouVazbu=0, @VytvaretPolozkovouVazbu=0, @ChybaSkladana=@errMsg OUT, + @KopirovaniDokladu=0 + + SET @vc = NULL + SET @idVPrVC = (SELECT IDVyrCis FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy) + IF (@idVPrVC IS NOT NULL) + SET @vc = (SELECT VyrCislo FROM dbo.TabVyrCisPrikaz WHERE ID=@idVPrVC) + IF (@vc IS NULL) + SELECT TOP(1) @idPalety=ID, @vc=CisloPalety FROM dbo._TabVyroba_Palety WHERE IDMzda=@IDMzdy AND IDPrikaz=@idPrikaz + + SET @paletList = N'' + IF (@vc IS NOT NULL) + SET @paletList = @vc + + SET @idPZSberna = NULL + SET @idVCP = (SELECT TOP(1) vcp.ID FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabDokladyZbozi d WITH(NOLOCK) ON (d.ID=p.IDDoklad) + JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad) JOIN dbo.TabVyrCP vcp WITH(NOLOCK) ON (vcp.IDPolozkaDokladu=p.ID) + JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis) + WHERE d.ID=@idPrij AND d.DruhPohybuZbo=0 AND p.TypVyrobnihoDokladu IN (0) AND s.IDKmenZbozi=@IDKmen AND vcs.Nazev1=@vc) + IF (@vc IS NOT NULL) + SET @idPZSberna = (SELECT TOP(1) p.ID FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabDokladyZbozi d WITH(NOLOCK) ON (d.ID=p.IDDoklad) + JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad) JOIN dbo.TabVyrCP vcp WITH(NOLOCK) ON (vcp.IDPolozkaDokladu=p.ID) + JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis) + WHERE p.IDDoklad=@idPrijSberna AND d.DruhPohybuZbo=0 AND p.TypVyrobnihoDokladu IN (0) AND s.IDKmenZbozi=@IDKmen AND vcs.Nazev1=@vc) +/* + ELSE -- tato situace nesmi nastat, na sklad se vzdy prijima polotovar nebo final vcetne VC/paletovelo listu + SET @idPZSberna = (SELECT TOP(1) p.ID FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad) + WHERE p.IDDoklad=@idPrijOld AND s.IDKmenZbozi=@IDKmen ORDER BY p.ID DESC) +*/ + IF (@idPZSberna IS NOT NULL) + BEGIN + SET @idPalety = (SELECT ID FROM dbo._TabVyroba_Palety WHERE CisloPalety=@paletList AND IDPrikaz=@idPrikaz) + UPDATE dbo._TabVyroba_Palety SET IDPohybPrijem=@idPZSberna WHERE ID=@idPalety + SELECT @sarze=Sarze FROM dbo._TabVyroba_Palety WHERE ID=@idPalety + +-- udelej pomocnou vazbu polozky prijmu na skladu 311/312 na polozku prijmu na technologickem sklade 261/262 + SET @idPZOld = NULL -- id pohybu zbozi na prijemce 261/262 + IF (@vc IS NOT NULL) + SET @idPZOld = (SELECT TOP(1) p.ID FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabDokladyZbozi d WITH(NOLOCK) ON (d.ID=p.IDDoklad) + JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad) JOIN dbo.TabVyrCP vcp WITH(NOLOCK) ON (vcp.IDPolozkaDokladu=p.ID) + JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis) + WHERE p.IDDoklad=@idPrij AND d.DruhPohybuZbo=0 AND p.TypVyrobnihoDokladu IN (0) AND s.IDKmenZbozi=@IDKmen AND vcs.Nazev1=@vc) + ELSE + SET @idPZOld = (SELECT TOP(1) p.ID FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad) + WHERE p.IDDoklad=@idPrij AND s.IDKmenZbozi=@IDKmen ORDER BY p.ID DESC) + + IF NOT EXISTS (SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZSberna) AND (@idPZSberna IS NOT NULL) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZSberna) + IF (@idPZOld IS NULL) + SET @idPZOld = (SELECT TOP(1) IDPohybOZPuvodni FROM dbo._TabVyroba_PaletyPohybOZ WHERE IDPalety=@idPalety) + IF (@idPZOld IS NULL) + SET @idPZOld = (SELECT TOP(1) ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrij) -- id pohybu zbozi na prijemce 261/262 + IF (@idPZOld IS NOT NULL) + UPDATE dbo.TabPohybyZbozi_EXT SET _Prijem_IDPZPuvodni=@idPZOld WHERE ID=@idPZSberna + + IF (@idPalety IS NOT NULL) + IF NOT EXISTS (SELECT 1 FROM dbo._TabVyroba_PaletyPohybOZ WHERE IDPalety=@idPalety) + INSERT dbo._TabVyroba_PaletyPohybOZ (IDPalety, IDPohybOZ, Sarze, Mnozstvi, MnozstviKA, IDPohybOZPuvodni) + SELECT @idPalety, @idPZSberna, @sarze, @mnozstvi, @mnozstviKA, @idPZOld + + +-- smaz vazbu nove polozky (prijem na sklade 311/312) na vyrobni prikaz + UPDATE dbo.TabPohybyZbozi SET IDPrikaz=NULL, TypVyrobnihoDokladu=NULL, DokladPrikazu=NULL WHERE ID=@idPZSberna + DELETE FROM dbo.TabPrikazMzdyAZmetkyGenPZ WHERE IDMzdy=@IDMzdy AND TypGen=2 AND IDPohybu=@idPZSberna + + END -- @idPZSberna IS NOT NULL + + END -- @idPrijOld IS NOT NULL + END -- else @bChyba=1 + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + INSERT dbo.Tabx_Vyroba_Log (Kategorie, Typ, LogText, iHodnota) SELECT 1, 1, 'Chyba realizace neidentifikovaná', @idPrij + END CATCH + END + + + -- vycisti seed + SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabDokladyZbozi), 0) + DBCC CHECKIDENT (TabDokladyZbozi, RESEED, @iTemp) + SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabPohybyZbozi), 0) + DBCC CHECKIDENT (TabPohybyZbozi, RESEED, @iTemp) - IF (@realizujPrijem=1) - BEGIN - BEGIN TRY - EXEC dbo.hp_Realizuj_Prijem @ID=@idPrij, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1 - IF (@idPrijKopie IS NOT NULL) - EXEC dbo.hp_Realizuj_Prijem @ID=@idPrijKopie, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1 - END TRY - BEGIN CATCH - SET @errMsg = ERROR_MESSAGE() - END CATCH END - + CLOSE prij + DEALLOCATE prij END -CLOSE prij -DEALLOCATE prij +-- napocti odvedeni davek Kapacitniho planu vedenych v pomocne Tabx_Vyroba_DavkyPlanu +IF OBJECT_ID(N'Tabx_Vyroba_DavkyPlanu', 'U') IS NOT NULL + BEGIN + SET @ksOdv = ISNULL( (SELECT SUM(kusy_odv) FROM dbo.TabPrikazMzdyAZmetky WHERE IDPrikaz=@IDPrikaz AND DokladPrPostup=@doklPrPostup), 0) + IF (@ksOdv>0) + BEGIN + SET @ksOdv_ks = @ksOdv + IF (@mjEvid=N'KA') + SET @ksOdv_ks = @ksOdv_ks * dbo.ef_Kmen_VratPocetKsVKartonu (@IDKmen) + + DECLARE d CURSOR LOCAL FAST_FORWARD FOR + SELECT ID, Mnozstvi + FROM Tabx_Vyroba_DavkyPlanu + WHERE IDPrikaz=@IDPrikaz + AND DokladPrPostup=@doklPrPostup + AND Dilec=@IDKmen + OPEN d + WHILE (1=1) + BEGIN + FETCH NEXT FROM d INTO @idDavkaPomoc, @mnozDavkaPomoc + IF (@@FETCH_STATUS<>0) BREAK + END + CLOSE d + DEALLOCATE d + END -- @ksOdv_ks + END -- Tabx_Vyroba_DavkyPlanu IS NOT NULL + + + -- cisteni diff --git a/_custom/Rootvin/sql/ep_Vyroba_GenOdvodZeMzdyOld.sql b/_custom/Rootvin/sql/ep_Vyroba_GenOdvodZeMzdyOld.sql new file mode 100644 index 0000000..5424c3c --- /dev/null +++ b/_custom/Rootvin/sql/ep_Vyroba_GenOdvodZeMzdyOld.sql @@ -0,0 +1,463 @@ +-- dbo.ep_Vyroba_GenOdvodZeMzdy +CREATE PROCEDURE dbo.ep_Vyroba_GenOdvodZeMzdy + @IDMzdy INT=NULL, + @bezVyrCis BIT=1, + @radaOdvod NVARCHAR(3)=NULL, + @skladOdvod NVARCHAR(30)=NULL, + @realizujPrijem BIT=0, + @prevodDoVyssiho BIT=0, + @kopiiNaTechSklad BIT=0, + @errMsg NVARCHAR(500)=N'' OUT, + @aktualizujPolozkyExistPrij BIT=0 +AS + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !! +-- konfiguraci lze ovlivnit pres tabulku #HDCTabGenOdvodZeMzdyKonfig +-- pozor, v tom pripade musi byt na rade prikazu sklad pro generovani odvodu roven NULL + + +SET NOCOUNT ON + +DECLARE + @iTemp INT, + @aktDatum DATETIME=GETDATE(), + @datPrijem DATETIME, + @bChyba BIT, + @ret INT, + @cnt INT, + @jeOdvOper BIT=0, + @idUziv INT, + @IDPrikaz INT, + @IDZakazModif INT, + @IDPrikazVyssi INT, + @doklKV INT, + @IDKmen INT, + @jeFinal BIT=0, + @idPZ INT, + @idPZNew INT, + @idPZOld INT, + @idSS INT, + @idVCS INT, + @idVCP INT, + @idVPrVC INT, + @vc NVARCHAR(100), + @NekontrolMnozOdvedFinal BIT=0, + @mnozstvi NUMERIC(19,6)=0, + @radaOdvNaSklad NVARCHAR(3)=N'273', + @sklProOdvod NVARCHAR(30)=N'261', + @sklProFinal NVARCHAR(30)=N'312', + @sklProPolo NVARCHAR(30)=N'311', + @radaVPr NVARCHAR(10), + @idPrij INT, + @idPrijOld INT, + @uklidPomocTab BIT, + @idPrijKopie INT, + @sklTechnicky NVARCHAR(30), + @dpz TINYINT, + @cOrg INT, + @dzDatum DATETIME, + @dzMena NVARCHAR(3), + @dzKurz NUMERIC(19,6), + @dzKurzE NUMERIC(19,6), + @vstC TINYINT, + @jednM INT +DECLARE + @idDZPomocPrijem INT, + @idPZPomocPrijem INT, + @idSSPomocPrijem INT, + @mnozPrijem NUMERIC(19,6) + +DECLARE @idPZsOld TABLE (ID INT NOT NULL) + + +SET @uklidPomocTab = 0 + +SELECT @jeOdvOper=pp.Odvadeci + FROM dbo.TabPrikazMzdyAZmetky pmz + INNER JOIN dbo.TabPrPostup pp ON (pp.IDPrikaz=pmz.IDPrikaz AND pp.Doklad=pmz.DokladPrPostup AND pp.Alt=pmz.AltPrPostup AND pp.IDOdchylkyDo IS NULL) + WHERE pmz.ID=@IDMzdy +IF (@jeOdvOper=0) + RETURN + + + + +IF OBJECT_ID(N'dbo.TabUserCfg', 'U') IS NOT NULL + SET @idUziv = (SELECT ID FROM dbo.TabUserCfg WHERE LoginName=SUSER_SNAME()) +SET @idUziv = ISNULL(@idUziv, 0) + + +-- CREATE TABLE #HDCTabGenOdvodZeMzdyKonfig (RadaOdvodNaSklad NVARCHAR(3), SkladProOdvod NVARCHAR(30), BezVyrobnichCisel BIT=0, IDUziv INT) +IF OBJECT_ID(N'tempdb..#HDCTabGenOdvodZeMzdyKonfig', 'U') IS NOT NULL + SELECT TOP(1) @radaOdvNaSklad=ISNULL(RadaOdvodNaSklad, @radaOdvNaSklad), @sklProOdvod=ISNULL(SkladProOdvod, @sklProOdvod), + @bezVyrCis=ISNULL(BezVyrobnichCisel, @bezVyrCis), @idUziv=ISNULL(IDUziv, @idUziv) + FROM #HDCTabGenOdvodZeMzdyKonfig + + +IF (@sklTechnicky IS NULL) + SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEZH%' AND Nazev NOT LIKE N'%polotov%' AND CisloStr LIKE N'2%' +IF (@sklTechnicky IS NULL) + SELECT @sklTechnicky=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%sklad%v}dej%' + + + +DROP TABLE IF EXISTS #TabOdved +CREATE TABLE #TabOdved ( + ID INT IDENTITY NOT NULL, + IDPrikaz INT NOT NULL, + IDDilec INT NOT NULL, + IDZakazModif INT NULL, + IDZakazka INT NULL, + maxMnozstvi NUMERIC(19,6) NULL, + mnozstvi NUMERIC(19,6) NOT NULL, + EvidJednotka NUMERIC(19,6) NOT NULL, + Sklad NVARCHAR(30) NULL, + KodUmisteni NVARCHAR(15) NULL, + IDPohZbo INT NULL, + PomVnoreni INT NULL, + StavPrikazu TINYINT NULL, + PRIMARY KEY(ID) +) + + +DROP TABLE IF EXISTS #TabOdved_IDMzdy +CREATE TABLE #TabOdved_IDMzdy (IDPrikaz int, IDMzdy int) + + + + +DROP TABLE IF EXISTS #TabVyrCisProGenOdv +CREATE TABLE #TabVyrCisProGenOdv ( + ID INT IDENTITY NOT NULL, + IDOdvedeni INT NOT NULL, + IDPrikaz INT NOT NULL, + VyrCislo NVARCHAR(100) NOT NULL, + Mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0, + MaxMnozstvi NUMERIC(19,6) NULL, + IDVyrCP INT NULL, + PRIMARY KEY(ID) +) + + + +DROP TABLE IF EXISTS #TabPolotovProGenOdv +CREATE TABLE #TabPolotovProGenOdv ( + ID INT IDENTITY NOT NULL, + IDOdvedeni INT NOT NULL, + IDPrikaz INT NOT NULL, + Doklad INT NOT NULL, + IDDilec INT NOT NULL, + Mnozstvi NUMERIC(19,6) NOT NULL, + MaxMnozstvi NUMERIC(19,6) NULL, + PRIMARY KEY(ID) +) + + +DROP TABLE IF EXISTS #TabGenPrijem +CREATE TABLE #TabGenPrijem (ID INT NOT NULL, PRIMARY KEY(ID)) + + + + + + +IF EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky WHERE GenerovanoOdvadeni=1 AND ID=@IDMzdy) + RETURN + + +SELECT @mnozstvi=kusy_odv FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy + +UPDATE dbo.TabPrikazMzdyAZmetky SET GenerovanoOdvadeni=1 WHERE ID=@IDMzdy +IF (@@ROWCOUNT=0) RETURN +IF @mnozstvi<=0.0 RETURN + + + + +SELECT @IDPrikaz=IDPrikaz FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy +SELECT @radaVPr=Rada, @IDKmen=IDTabKmen, @IDZakazModif=IDZakazModif, @IDPrikazVyssi=IDPrikazVyssi + FROM dbo.TabPrikaz WHERE ID=@IDPrikaz + +SET @jeFinal=0 +IF EXISTS (SELECT 1 FROM dbo.TabParKmZ WHERE IDKmenZbozi=@IDKmen AND TypDilce=0) + SET @jeFinal=1 + + +-- nastav sklad pro odvod podle karty +IF (@sklProOdvod IS NULL) + SELECT @sklProOdvod=VychoziSklad FROM dbo.TabParKmZ WHERE IDKmenZbozi=@IDKmen + +-- pripadne zkus podle rady prikazu +SELECT @radaOdvNaSklad=CASE WHEN RadaDokl_OdvedeniPrikazu IS NULL THEN @radaOdvNaSklad ELSE RadaDokl_OdvedeniPrikazu END, + @sklProOdvod=CASE WHEN PrijemVyrDil_SkladProGenHlavDZ IS NULL THEN @sklProOdvod ELSE PrijemVyrDil_SkladProGenHlavDZ END + FROM dbo.TabRadyPrikazu WHERE Rada=@radaVPr + + +IF (@radaOdvod IS NOT NULL) + SET @radaOdvNaSklad=@radaOdvod +IF (@skladOdvod IS NULL) + BEGIN + SET @sklProOdvod = @sklProPolo + IF (@jeFinal=1) + SET @sklProOdvod = @sklProFinal + END + ELSE + SET @sklProOdvod = @skladOdvod + + + + +UPDATE #tabOdved SET mnozstvi=CASE WHEN @NekontrolMnozOdvedFinal=0 AND mnozstvi+@mnozstvi>maxMnozstvi THEN maxMnozstvi ELSE mnozstvi+@mnozstvi END WHERE IDPrikaz=@IDPrikaz +IF (@@ROWCOUNT=0) + INSERT INTO #tabOdved (IDPrikaz, IDDilec, IDZakazModif, IDZakazka, maxMnozstvi, EvidJednotka, mnozstvi, sklad, StavPrikazu) + SELECT P.ID, + CASE WHEN ISNULL(ParKZ.OdvadetNaZaklVari,0)=0 THEN P.IDTabKmen ELSE KZ.IDKusovnik END, + ZMD.IDZakazModif, + P.IDZakazka, + CASE WHEN @NekontrolMnozOdvedFinal=1 THEN NULL ELSE P.kusy_zive END, + P.EvidJednotka, + CASE WHEN @NekontrolMnozOdvedFinal=0 AND @mnozstvi>P.kusy_zive THEN P.kusy_zive ELSE @mnozstvi END, + P.sklad, + P.StavPrikazu + FROM dbo.TabPrikaz P + INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=P.IDTabKmen) + LEFT OUTER JOIN dbo.TabZakazModifDilce ZMD ON (ZMD.IDZakazModif=P.IDZakazModif AND ZMD.IDKmenZbozi=KZ.ID) + LEFT OUTER JOIN dbo.TabParKmZ ParKZ ON (ParKZ.IDKmenZbozi=P.IDTabKmen) + WHERE P.ID=@IDPrikaz AND + (CASE WHEN @NekontrolMnozOdvedFinal=0 AND @mnozstvi>P.kusy_zive THEN P.kusy_zive ELSE @mnozstvi END)>0 +INSERT INTO #TabOdved_IDMzdy (IDPrikaz, IDMzdy) VALUES (@IDPrikaz, @IDMzdy) + + + +UPDATE O SET maxMnozstvi=CASE WHEN RP.NekontrolMnozOdvedFinal=1 THEN NULL ELSE P.kusy_zive END + FROM #tabOdved O + INNER JOIN dbo.TabPrikaz P ON (P.ID=O.IDPrikaz) + INNER JOIN dbo.TabRadyPrikazu RP ON (RP.rada=P.rada) + +UPDATE #tabOdved SET mnozstvi=maxMnozstvi WHERE maxMnozstvi IS NOT NULL AND mnozstvi>maxMnozstvi +DELETE #TabVyrCisProGenOdv WHERE IDOdvedeni IN (SELECT O2.ID FROM #tabOdved O2 WHERE O2.Mnozstvi<=0.0) +DELETE #TabPolotovProGenOdv WHERE IDOdvedeni IN (SELECT O2.ID FROM #tabOdved O2 WHERE O2.Mnozstvi<=0.0) +DELETE #tabOdved WHERE Mnozstvi<=0.0 + +SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabVyrCP), 0) +DBCC CHECKIDENT (TabVyrCP, RESEED, @iTemp) + +IF (@sklProOdvod IS NOT NULL) + UPDATE #tabOdved SET Sklad=@sklProOdvod + + + +EXEC dbo.hp_PrednabidniTabVyrCisProGenOdv @ProIDPrikaz=NULL +IF (@bezVyrCis=1) + DELETE #TabVyrCisProGenOdv + + +IF (@prevodDoVyssiho=0) + BEGIN + BEGIN TRY +-- pozor, nelze predem zadat do jake prijemky polozky odvodu generovat, vzdy se generuje nova, o prevedeni polozek se postarame nize + EXEC @ret=dbo.hp_OdvedeniPrikazu @RadaDokladu=@radaOdvNaSklad, @IDObdobi=NULL, @KonecneOdvedeni=0, @DatPorizeni=NULL, @SekejZakazky=1, @SekejPrikazy=1 + END TRY + BEGIN CATCH + SET @errMsg = 'Chyba pri odvadeni: ' + ERROR_MESSAGE() + END CATCH + END + ELSE + BEGIN + IF (@IDPrikazVyssi IS NOT NULL) + BEGIN + IF OBJECT_ID(N'tempdb..#TabOdved_IDMzdy', 'U') IS NOT NULL + DELETE FROM #TabOdved_IDMzdy + INSERT #TabOdved_IDMzdy (IDPrikaz, IDMzdy) SELECT @idPrikaz, @idMzdy + + SET @doklKV = (SELECT ID FROM dbo.TabPrKVazby WHERE IDPrikaz=@IDPrikazVyssi AND nizsi=@IDKmen AND IDOdchylkyDo IS NULL) + + EXEC @idPZ=dbo.hp_OdvedeniPrikazuPrevodem @DatPripadu=@aktDatum, @KonecneOdvedeniNatvrdo=0, @IDPrikazZdroj=@idPrikaz, @IDPrikazCil=@IDPrikazVyssi, + @Doklad=@doklKV, @IDDilec=@IDKmen, @mnozstvi=@mnozstvi, @IDOdvedeniVC=0, @IDZakazModif=@IDZakazModif + IF OBJECT_ID(N'tempdb..#TabGenPrijem', 'U') IS NOT NULL + DELETE FROM #TabGenPrijem + END -- @IDPrikazVyssi IS NOT NULL + END + + + + + +-- ID polozek puvodnich dokladu +DELETE FROM @idPZsOld + + +DECLARE prij CURSOR LOCAL FOR + SELECT ID FROM #TabGenPrijem +OPEN prij +WHILE (1=1) + BEGIN + FETCH NEXT FROM prij INTO @idPrij + IF (@@FETCH_STATUS<>0) BREAK + + INSERT @idPZsOld (ID) SELECT ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrij + + SELECT @datPrijem=DatPorizeni FROM dbo.TabDokladyZbozi WHERE ID=@idPrij + + SET @idPrijOld = NULL + +-- zjisti jestli na cilovem skladu mame nejakou otevrenou prijemku z dnesniho dne + SET @cnt = ISNULL( (SELECT COUNT(ID) FROM dbo.TabDokladyZbozi WHERE ID<>@idPrij AND PoradoveCislo>0 AND DruhPohybuZbo=0 AND RadaDokladu=@radaOdvNaSklad + AND CisloOrg=0 AND IDSklad=@sklProOdvod AND Realizovano=0 AND BlokovaniEditoru IS NULL AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@datPrijem)) + , 0) + IF (@cnt=0) -- nemame, vygeneruj ji + BEGIN + SELECT @dpz=DruhPohybuZbo, @dzDatum=DatPorizeni, @dzMena=Mena FROM dbo.TabDokladyZbozi WHERE ID=@idPrij + SET @datPrijem = @dzDatum + EXEC dbo.hp_InsertHlavickyOZ @ident=@idPrijOld OUT, @Sklad=@sklProOdvod, @DruhPohybu=@dpz, @RadaDokladu=@radaOdvNaSklad, + @Mena=@dzMena, @CisloOrg=0, @DatumPorizeni=@datPrijem + END + IF (@cnt=1) -- ma jen jednu + BEGIN + SELECT TOP(1) @idPrijOld=ID FROM dbo.TabDokladyZbozi WHERE ID<>@idPrij AND PoradoveCislo>0 AND DruhPohybuZbo=0 AND RadaDokladu=@radaOdvNaSklad + AND CisloOrg=0 AND IDSklad=@sklProOdvod AND Realizovano=0 AND BlokovaniEditoru IS NULL AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@datPrijem) + END + IF (@cnt>1) -- mam jich vic, vezmi tu posledni (nejnovejsi) + BEGIN + SET @idPrijOld = (SELECT TOP(1) ID FROM dbo.TabDokladyZbozi WHERE ID<>@idPrij AND PoradoveCislo>0 AND DruhPohybuZbo=0 AND RadaDokladu=@radaOdvNaSklad + AND CisloOrg=0 AND IDSklad=@sklProOdvod AND Realizovano=0 AND BlokovaniEditoru IS NULL + AND dbo.hf_TruncDate(DatPorizeni)=dbo.hf_TruncDate(@datPrijem) + ORDER BY DatPorizeni DESC) + END + IF (@idPrijOld IS NOT NULL) -- nakopiruj do ni polozky nove prijemky + BEGIN + IF (@aktualizujPolozkyExistPrij=0) AND (@idPrijOld IS NOT NULL) -- nechci existujici prijemku aktualizovat, novou polozku pridam + BEGIN + EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idPrijOld, @IDDokladSrc=@idPrij, @CisloOrgCil=0, @MUCil=NULL, @MenaCil=NULL, + @KurzCil=NULL, @JednotkaMenyCil=NULL, @KurzEuroCil=NULL, @CisloZakCil=NULL, @NOkruhCil=NULL, + @StredNakladCil=NULL, @StredVynosCil=NULL, @FormaDopravyCil=NULL, @VozidloCil=NULL, @ObjednavkaCil=NULL, + @PopisDodavkyCil=NULL, @NavaznyDobropisCil=NULL, @ZamestnanecCil=NULL, @DodFakCil=NULL, @Nasobek=1, + @SlevaCil=NULL, @VytvaretDokladovouVazbu=0, @VytvaretPolozkovouVazbu=0, @ChybaSkladana=@errMsg OUT, + @KopirovaniDokladu=0 + SET @idVPrVC = (SELECT IDVyrCis FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy) + SET @vc = NULL + IF (@idVPrVC IS NOT NULL) + SET @vc = (SELECT VyrCislo FROM dbo.TabVyrCisPrikaz WHERE ID=@idVPrVC) + SET @idPZNew = NULL + SET @idVCP = (SELECT TOP(1) vcp.ID FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabDokladyZbozi d WITH(NOLOCK) ON (d.ID=p.IDDoklad) + JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad) JOIN dbo.TabVyrCP vcp WITH(NOLOCK) ON (vcp.IDPolozkaDokladu=p.ID) + JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis) + WHERE d.ID=@idPrij AND d.DruhPohybuZbo=0 AND p.TypVyrobnihoDokladu IN (0) AND s.IDKmenZbozi=@IDKmen AND vcs.Nazev1=@vc) + IF (@vc IS NOT NULL) + SET @idPZNew = (SELECT TOP(1) p.ID FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabDokladyZbozi d WITH(NOLOCK) ON (d.ID=p.IDDoklad) + JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad) JOIN dbo.TabVyrCP vcp WITH(NOLOCK) ON (vcp.IDPolozkaDokladu=p.ID) + JOIN dbo.TabVyrCS vcs ON (vcs.ID=vcp.IDVyrCis) + WHERE p.IDDoklad=@idPrijOld AND d.DruhPohybuZbo=0 AND p.TypVyrobnihoDokladu IN (0) AND s.IDKmenZbozi=@IDKmen AND vcs.Nazev1=@vc) + ELSE + SET @idPZNew = (SELECT TOP(1) p.ID FROM dbo.TabPohybyZbozi p WITH(NOLOCK) JOIN dbo.TabStavSkladu s WITH(NOLOCK) ON (s.ID=p.IDZboSklad) + WHERE p.IDDoklad=@idPrijOld AND s.IDKmenZbozi=@IDKmen ORDER BY p.ID DESC) + IF (@idPZNew IS NOT NULL) + INSERT dbo.TabPrikazMzdyAZmetkyGenPZ (IDMzdy, TypGen, IDPohybu) SELECT @IDMzdy, 2, @idPZNew + END + + + IF (@aktualizujPolozkyExistPrij=1) AND (@idPrijOld IS NOT NULL) -- chci existujici prijemku aktualizovat (udaji nove polozky) + BEGIN + SELECT @dzMena=Mena, @dzKurz=Kurz, @dzKurzE=KurzEuro, @jednM=JednotkaMeny, @vstC=VstupniCena, @cOrg=CisloOrg + FROM dbo.TabDokladyZbozi WHERE ID=@idPrijOld + + DECLARE cPol CURSOR LOCAL FAST_FORWARD FOR + SELECT ID, IDZboSklad FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrij + OPEN cPol + WHILE (1=1) + BEGIN + FETCH NEXT FROM cPol INTO @idPZNew, @idSS + IF (@@FETCH_STATUS<>0) BREAK + + SET @cnt = ISNULL( (SELECT COUNT(ID) FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrijOld AND IDZboSklad=@idSS), 0) + IF (@cnt=0) -- nemam na starem dokladu polozku, zalozim + BEGIN + EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZOld OUT, @IDDoklad=@idPrijOld, @DruhPohybu=0, @CisloOrg=@cOrg, @IDZboSklad=@idSS, + @Mena=@dzMena, @Kurz=@dzKurz, @KurzEuro=@dzKurzE, @JednotkaMeny=@jednM, @SazbaSD=NULL, @SazbaDPH=NULL, + @ZakazanoDPH=0, @VstupniCena=@vstC + SET @cnt = ISNULL( (SELECT COUNT(ID) FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrijOld AND IDZboSklad=@idSS), 0) + END + IF (@cnt=1) -- polozka dohledana, aktualizuju + BEGIN + SELECT @idPZOld=ID FROM dbo.TabPohybyZbozi WHERE IDDoklad=@idPrijOld AND IDZboSklad=@idSS + UPDATE o SET o.Mnozstvi=o.Mnozstvi + n.Mnozstvi + FROM dbo.TabPohybyZbozi n, dbo.TabPohybyZbozi o WHERE n.ID=@idPZNew AND o.ID=@idPZOld +-- pokud mam VC, prepis je + IF EXISTS (SELECT 1 FROM dbo.TabVyrCP WHERE IDPolozkaDokladu=@idPZNew) + INSERT dbo.TabVyrCP (IDPolozkaDokladu, IDVyrCis, Nazev, Mnozstvi, CCEvid, DatVstup, Autor, DatExpirace) + SELECT @idPZOld, IDVyrCis, Nazev, Mnozstvi, CCEvid, DatVstup, Autor, DatExpirace FROM dbo.TabVyrCP WHERE ID=@idPZNew + END + + END + CLOSE cPol + DEALLOCATE cPol + END -- @idPrijOld IS NOT NULL + + END -- @cnt=1, mam existujici prijemku + + + + +-- kopie na technologicky sklad, aby se mohly delat provozni vydejky + SET @idPrijKopie = NULL + IF (@kopiiNaTechSklad=1) AND (@sklTechnicky IS NOT NULL) + BEGIN + SELECT @dpz=DruhPohybuZbo, @dzDatum=DatPorizeni, @dzMena=Mena FROM dbo.TabPohybyZbozi WHERE ID=@idPrij + EXEC dbo.hp_InsertHlavickyOZ @ident=@idPrijKopie OUT, @Sklad=@sklTechnicky, @DruhPohybu=@dpz, @RadaDokladu=@radaOdvNaSklad, + @Mena=@dzMena, @CisloOrg=0, @DatumPorizeni=@dzDatum + IF (@idPrijKopie IS NOT NULL) + EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=@idPrijKopie, @IDDokladSrc=@idPrij, @CisloOrgCil=0, @MUCil=NULL, @MenaCil=NULL, + @KurzCil=NULL, @JednotkaMenyCil=NULL, @KurzEuroCil=NULL, @CisloZakCil=NULL, @NOkruhCil=NULL, + @StredNakladCil=NULL, @StredVynosCil=NULL, @FormaDopravyCil=NULL, @VozidloCil=NULL, @ObjednavkaCil=NULL, + @PopisDodavkyCil=NULL, @NavaznyDobropisCil=NULL, @ZamestnanecCil=NULL, @DodFakCil=NULL, @Nasobek=1, + @SlevaCil=NULL, @VytvaretDokladovouVazbu=0, @VytvaretPolozkovouVazbu=0, @ChybaSkladana=@errMsg OUT, + @KopirovaniDokladu=0 + END -- kopii na TechSklad + + + + IF (@realizujPrijem=1) + BEGIN + BEGIN TRY +-- vypnuto, polozky se davaji do jedne denni prijemky, vygenerovana bude zrusena o krok dal +-- EXEC dbo.hp_Realizuj_Prijem @ID=@idPrij, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1 + IF (@idPrijKopie IS NOT NULL) + EXEC dbo.hp_Realizuj_Prijem @ID=@idPrijKopie, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1 + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + END CATCH + END + + +-- smaz vygenerovanou prijemku, davame to na sbernou s ID = @idPrijOld, viz kopie polozek vyse pres hp_generuj_navazny_doklad nebo kurzor + IF OBJECT_ID(N'tempdb..#TabPomSeznamDZProDel', 'U') IS NULL + CREATE TABLE #TabPomSeznamDZProDel (ID INT NOT NULL) + INSERT #TabPomSeznamDZProDel (ID) VALUES (@idPrij) + EXEC dbo.hp_SmazSeznamDokZbozi -- postara se i o smazani #TabPomSeznamDZProDel + DELETE FROM dbo.TabPrikazMzdyAZmetkyGenPZ WHERE IDMzdy=@IDMzdy AND TypGen IN (2,3) AND IDPohybu IN (SELECT ID FROM @idPZsOld) + +-- vycisti seed + SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabDokladyZbozi), 0) + DBCC CHECKIDENT (TabDokladyZbozi, RESEED, @iTemp) + SELECT @iTemp = 1 + ISNULL( (SELECT MAX(ID) FROM dbo.TabPohybyZbozi), 0) + DBCC CHECKIDENT (TabPohybyZbozi, RESEED, @iTemp) + + END +CLOSE prij +DEALLOCATE prij + + + + + + +-- cisteni +DROP TABLE IF EXISTS #TabGenPrijem +DROP TABLE IF EXISTS #TabPolotovProGenOdv +DROP TABLE IF EXISTS #TabVyrCisProGenOdv +DROP TABLE IF EXISTS #TabOdved_IDMzdy +DROP TABLE IF EXISTS #TabOdved + +DROP TABLE IF EXISTS #HDCTabGenOdvodZeMzdyKonfig diff --git a/_custom/Rootvin/sql/ep_Vyroba_GenVydejZeMzdy.sql b/_custom/Rootvin/sql/ep_Vyroba_GenVydejZeMzdy.sql index 0024285..20ec081 100644 --- a/_custom/Rootvin/sql/ep_Vyroba_GenVydejZeMzdy.sql +++ b/_custom/Rootvin/sql/ep_Vyroba_GenVydejZeMzdy.sql @@ -12,7 +12,8 @@ CREATE PROCEDURE dbo.ep_Vyroba_GenVydejZeMzdy @denSmena NVARCHAR(15)=NULL, @sklVydej NVARCHAR(30)=N'261', @radaVydej NVARCHAR(3)=N'223', - @respExistDokl BIT=1 + @respExistDokl BIT=1, + @genPrijemNaNeskladMnoz BIT=0 AS -- HD Consulting Strakonice, T. Buzin @@ -26,6 +27,7 @@ AS SET NOCOUNT ON DECLARE + @tranCount INT, @bChyba BIT, @opakReal BIT, @retVal INT=0, @@ -34,10 +36,12 @@ DECLARE @idUziv INT=0, @idZam INT, @sklTechnolog NVARCHAR(30), + @sklTechnologPolo NVARCHAR(30), @sklMatHlavni NVARCHAR(30), @sklPekarna NVARCHAR(30), @szDilec NVARCHAR(3) DECLARE + @idDZOut INT, @idDZPomocPrij INT, @radaPrijem NVARCHAR(3)='292', @menaPrij NVARCHAR(3), @@ -47,9 +51,11 @@ DECLARE @jednMPrij INT, @idPZPomocPrij INT, @idSSPomocPrij INT, + @idSSPomocPek INT, @mnozSklad NUMERIC(19,6), @mnozVydej NUMERIC(19,6), - @mnozPrij NUMERIC(19,6) + @mnozPrij NUMERIC(19,6), + @genDodatecnyPrijem BIT=0 @@ -62,13 +68,15 @@ SET @idUziv = ISNULL(@idUziv, 0) SET @denSmena = ISNULL(@denSmena, N'') IF (@sklMatHlavni IS NULL) - SELECT @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' + SELECT @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' AND CisloStr LIKE N'3%' IF (@sklTechnolog IS NULL) - SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%' + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%' AND Nazev NOT LIKE N'%polotov%' AND CisloStr LIKE N'2%' +IF (@sklTechnologPolo IS NULL) + SELECT @sklTechnologPolo=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%NEÚČ%pol%' AND CisloStr LIKE N'2%' IF (@sklTechnolog IS NULL) - SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%sklad%výdej%' + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%sklad%výdej%' AND CisloStr LIKE N'2%' IF (@sklPekarna IS NULL) - SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' + SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' AND CisloStr LIKE N'2%' IF EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky) @@ -311,7 +319,9 @@ DECLARE @alt702 NCHAR(1), @mnoz702 NUMERIC(19,6), @idMzda702 INT, - @aktDat DATETIME + @aktDat DATETIME, + @idKZPomoc INT, + @jc NUMERIC(19,6) SET @aktDat = GETDATE() @@ -398,25 +408,25 @@ WHILE (1=1) --- begin: prijemka nedostatecneho materialu + +-- begin: prijemka materialu pro vydejku (1:1) SET @idDZPomocPrij=NULL DECLARE pomPrij CURSOR LOCAL FOR - SELECT p.IDZboSklad, p.Mnozstvi + SELECT p.IDZboSklad, p.Mnozstvi, s.IDKmenZbozi FROM dbo.TabPohybyZbozi p INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) WHERE p.IDDoklad=@idVyd AND k.Material=1 AND k.Sluzba=0 OPEN pomPrij - WHILE (1=1) + WHILE (1=1) AND (1=0) BEGIN - FETCH NEXT FROM pomPrij INTO @idSSPomocPrij, @mnozVydej + FETCH NEXT FROM pomPrij INTO @idSSPomocPrij, @mnozVydej, @idKZPomoc IF (@@FETCH_STATUS<>0) BREAK - SET @mnozSklad = ISNULL( (SELECT Mnozstvi+MnozstviKPrijmu-MnozstviKVydeji FROM dbo.TabStavSkladu WHERE ID=@idSSPomocPrij), 0) - IF (@mnozVydej>@mnozSklad) + IF (@mnozVydej>0) BEGIN - SET @mnozPrij = @mnozVydej - @mnozSklad + SET @mnozPrij = @mnozVydej IF (@idDZPomocPrij IS NULL) BEGIN EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZPomocPrij OUT, @Sklad=@sklTechnolog, @DruhPohybu=0, @RadaDokladu=@radaPrijem, @CisloOrg=0 @@ -428,50 +438,90 @@ WHILE (1=1) EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZPomocPrij OUT, @IDDoklad=@idDZPomocPrij, @DruhPohybu=0, @CisloOrg=0, @IDZboSklad=@idSSPomocPrij, @Mena=@menaPrij, @Kurz=@kurzPrij, @KurzEuro=@kurzPrijE, @JednotkaMeny=@jednMPrij, @SazbaSD=NULL, @SazbaDPH=NULL, @ZakazanoDPH=NULL, @VstupniCena=@vstCPrij, @Mnozstvi=@mnozPrij, @PovolitDuplicitu=1 - END - END + IF (@idPZPomocPrij IS NOT NULL) + BEGIN + SET @jc = 0 + SET @idSSPomocPek = (SELECT ID FROM dbo.TabStavSkladu WHERE IDSklad=@sklPekarna AND IDKmenZbozi=@idKZPomoc) + IF (@idSSPomocPek IS NULL) + SET @idSSPomocPek = (SELECT ID FROM dbo.TabStavSkladu WHERE IDSklad=@sklMatHlavni AND IDKmenZbozi=@idKZPomoc) + IF (@idSSPomocPek IS NOT NULL) + SET @jc = ISNULL( (SELECT CASE MnozFinReal WHEN 0 THEN 0 ELSE StavSkladuSouvis/MnozFinReal END FROM dbo.TabStavSkladu WHERE ID=@idSSPomocPek), 0) + UPDATE dbo.TabPohybyZbozi SET JCbezDaniKc=ISNULL(@jc, 1) WHERE Id=@idPZPomocPrij + END -- @idPZPomocPrij + END -- @idDZPomocPrij + END -- @mnozVydej>0 END CLOSE pomPrij DEALLOCATE pomPrij IF (@idDZPomocPrij IS NOT NULL) BEGIN BEGIN TRY + EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=@idDZPomocPrij, @AktualizaceSlev=0 EXEC dbo.hp_Realizuj_Prijem @ID=@idDZPomocPrij, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1 END TRY BEGIN CATCH SET @errMsg = ERROR_MESSAGE() + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba (1) příjemky korekce (ID prijemky ' + CONVERT(nvarchar, @idDZPomocPrij) + N') naskladnění pro výdejku: ' + @errMsg, @idVyd END CATCH - END --- end: prijemka nedostatecneho materialu + END -- @idDZPomocPrij IS NOT NULL +-- end: prijemka materialu pro vydejku (1:1) + + + -- realizace vydejky IF (@realizujVydej=1) BEGIN + SET @tranCount=@@TRANCOUNT BEGIN TRY EXEC dbo.hp_Realizuj_Vydej @ID=@idVyd, @DatumRealizace=NULL, @Uzivatel=@idUziv, @Hlidat=0, @BylaChyba=@bChyba OUT END TRY BEGIN CATCH + IF (@tranCount=0) AND (@@TRANCOUNT>0) + ROLLBACK SET @opakReal=0 SET @errMsg = ERROR_MESSAGE() IF (CHARINDEX(N'71553', @errMsg)>0) SET @opakReal=1 IF (@opakReal=0) - INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba realizace výdejky příkazu: ' + @errMsg, @idVyd + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba realizace výdejky: ' + @errMsg, @idVyd END CATCH IF (@opakReal=1) - BEGIN + BEGIN BEGIN TRY - EXEC dbo.ep_Vyroba_DoplnSkladProVydejDleDokladu @IDDoklad=@idVyd, @errMsg=@errMsg OUT + SET @tranCount=@@TRANCOUNT + SET @errMsg = N'' + SET @genDodatecnyPrijem=1 + EXEC dbo.ep_Vyroba_DoplnSkladProVydejDleDokladu @IDDoklad=@idVyd, @errMsg=@errMsg OUT, @IDDokladPrijem=@idDZOut OUT IF (@errMsg=N'') EXEC dbo.hp_Realizuj_Vydej @ID=@idVyd, @DatumRealizace=NULL, @Uzivatel=@idUziv, @Hlidat=0, @BylaChyba=@bChyba OUT ELSE - INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba korekce naskladneni pro vydejku: ' + @errMsg, @idVyd + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba (2) příjemky korekce (ID ' + CONVERT(nvarchar, @idDZOut) + N') naskladnění pro výdejku: ' + @errMsg, @idVyd + END TRY + BEGIN CATCH + IF (@tranCount=0) AND (@@TRANCOUNT>0) + ROLLBACK TRAN + SET @errMsg = ERROR_MESSAGE() + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba (2) opakované realizace výdejky: ' + @errMsg, @idVyd + END CATCH + END + +-- znovu otestuj + IF EXISTS (SELECT 1 FROM dbo.TabDokladyZbozi WHERE ID=@idVyd AND Realizovano=0) AND (@genDodatecnyPrijem=0) + BEGIN + BEGIN TRY + SET @genDodatecnyPrijem=1 + EXEC dbo.ep_Vyroba_DoplnSkladProVydejDleDokladu @IDDoklad=@idVyd, @errMsg=@errMsg OUT, @IDDokladPrijem=@idDZOut OUT + IF (@errMsg=N'') + EXEC dbo.hp_Realizuj_Vydej @ID=@idVyd, @DatumRealizace=NULL, @Uzivatel=@idUziv, @Hlidat=0, @BylaChyba=@bChyba OUT + ELSE + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba (3) příjemky korekce (ID ' + CONVERT(nvarchar, @idDZOut) + N') naskladnění pro výdejku: ' + @errMsg, @idVyd END TRY BEGIN CATCH SET @errMsg = ERROR_MESSAGE() - INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba opakovane realizace výdejky příkazu: ' + @errMsg, @idVyd + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba (3) opakované realizace výdejky: ' + @errMsg, @idVyd END CATCH END diff --git a/_custom/Rootvin/sql/old/ep_Vyroba_GenVydejZeMzdy.sql b/_custom/Rootvin/sql/old/ep_Vyroba_GenVydejZeMzdy.sql new file mode 100644 index 0000000..3a4d371 --- /dev/null +++ b/_custom/Rootvin/sql/old/ep_Vyroba_GenVydejZeMzdy.sql @@ -0,0 +1,506 @@ +-- dbo.ep_Vyroba_GenVydejZeMzdy +CREATE PROCEDURE dbo.ep_Vyroba_GenVydejZeMzdy + @IDMzdy INT=NULL, + @IDDoklad INT=NULL, + @spotrebaTesto BIT=0, + @spotreba702 BIT=0, + @smazVydejTesto BIT=0, + @errMsg NVARCHAR(500)=N'' OUT, + @extTab NVARCHAR(50)=NULL, + @vydejAll BIT=0, + @realizujVydej BIT=0, + @denSmena NVARCHAR(15)=NULL, + @sklVydej NVARCHAR(30)=N'261', + @radaVydej NVARCHAR(3)=N'223', + @respExistDokl BIT=1 +AS + +-- HD Consulting Strakonice, T. Buzin +-- !! proceduru neupravujte, bude stejne pregenerovana pri startu Windows sluzby HDCDZApi !! + +-- @extTab - tabulka, do ktere budou vraceny pohyby vydejky @extTab (ID INT NOT NULL, IDPohZbo INT NOT NULL) +-- @vydejAll - bude vydano vse, nejen kde jde splnena podminka TabPrKVazby - dbo.hf_GetPrPDokladForPrKV(PrKV.ID)=@PrP_Doklad +-- pokud existuje objekt #HDCTabPrKVazbyGenPredna, jedu vydej podle nej + + +SET NOCOUNT ON + +DECLARE + @bChyba BIT, + @opakReal BIT, + @retVal INT=0, + @errID int, + @sql NVARCHAR(1000), + @idUziv INT=0, + @idZam INT, + @sklTechnolog NVARCHAR(30), + @sklTechnologPolo NVARCHAR(30), + @sklMatHlavni NVARCHAR(30), + @sklPekarna NVARCHAR(30), + @szDilec NVARCHAR(3) +DECLARE + @idDZPomocPrij INT, + @radaPrijem NVARCHAR(3)='292', + @menaPrij NVARCHAR(3), + @kurzPrij NUMERIC(19,6), + @kurzPrijE NUMERIC(19,6), + @vstCPrij TINYINT, + @jednMPrij INT, + @idPZPomocPrij INT, + @idSSPomocPrij INT, + @mnozSklad NUMERIC(19,6), + @mnozVydej NUMERIC(19,6), + @mnozPrij NUMERIC(19,6) + + + + + +IF OBJECT_ID(N'dbo.TabUserCfg', N'U') IS NOT NULL + SET @idUziv = (SELECT ID FROM dbo.TabUserCfg WHERE LoginName=SUSER_SNAME()) +SET @idUziv = ISNULL(@idUziv, 0) + + +SET @denSmena = ISNULL(@denSmena, N'') +IF (@sklMatHlavni IS NULL) + SELECT @sklMatHlavni=Cislo FROM dbo.TabStrom WHERE Nazev=N'Hlavní sklad - Materiál' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%neúč%' AND CisloStr LIKE N'2%' +IF (@sklTechnologPolo IS NULL) + SELECT @sklTechnologPolo=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%neúč%pol%' AND CisloStr LIKE N'2%' +IF (@sklTechnolog IS NULL) + SELECT @sklTechnolog=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Technolog%sklad%výdej%' +IF (@sklPekarna IS NULL) + SELECT @sklPekarna=Cislo FROM dbo.TabStrom WHERE Nazev LIKE N'Výroba - Pekárna' + + +IF EXISTS(SELECT 1 FROM dbo.TabPrikazMzdyAZmetky) + BEGIN + SELECT @retVal=MAX(ID) FROM dbo.TabPrikazMzdyAZmetky + DBCC CHECKIDENT(TabPrikazMzdyAZmetky, RESEED, @retVal) + END + ELSE + DBCC CHECKIDENT(TabPrikazMzdyAZmetky, RESEED, 1) + + +DROP TABLE IF EXISTS #TabPrKVazbyGen +CREATE TABLE #TabPrKVazbyGen ( + ID INT IDENTITY NOT NULL, + Generuj BIT NOT NULL DEFAULT 1, + PoKorekciDat BIT NOT NULL DEFAULT 0, + IDPrKV INT NOT NULL, + Doklad INT NOT NULL, + IDPrikaz INT NOT NULL, + Prednastaveno BIT NOT NULL DEFAULT 1, + Sklad NVARCHAR(30) NULL, + VyrStredisko NVARCHAR(30) NULL, + IDPracoviste INT NULL, + mnoz_zad NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_nepotrebne NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_skut_realizovane NUMERIC(19,6) NOT NULL DEFAULT 0, + Cena_real NUMERIC(19,6) NOT NULL DEFAULT 0, + Mnoz_odv NUMERIC(19,6) NOT NULL DEFAULT 0, + Cena_odv NUMERIC(19,6) NOT NULL DEFAULT 0, + MnozstviMax NUMERIC(19,6) NULL, + PuvodniMnozstviPoz NUMERIC(19,6) NULL, + MnozstviPoz NUMERIC(19,6) NOT NULL, + PomMnozPoz NUMERIC(19,6) NOT NULL DEFAULT 0, + IDPohZbo INT NULL, + PoznamkaNaDoklad NVARCHAR(max) NULL, + priorita INT NOT NULL DEFAULT 0, + vyssi INT NOT NULL, + nizsi INT NOT NULL, + DavkaTPV NUMERIC(19,6) NOT NULL DEFAULT 1, + pozice NVARCHAR(100) NULL DEFAULT N'', + Operace NCHAR(4) NULL, + FixniMnozstvi NUMERIC(19,6) NOT NULL DEFAULT 0, + mnozstvi NUMERIC(19,6) NOT NULL DEFAULT 1, + ProcZtrat NUMERIC(5,2) NOT NULL DEFAULT 0, + mnozstviSeZtratou NUMERIC(19,6) NOT NULL DEFAULT 0, + Prirez NUMERIC(19,6) NOT NULL DEFAULT 1, + Poznamka NTEXT NULL, + pom_pomer_A NUMERIC(19,6) NULL, + pom_pomer_B NUMERIC(19,6) NULL, + Dodavatel INT NULL, + MJ NVARCHAR(10) NULL, + mnoz_pozadovane AS (CONVERT(numeric(19,6),(CASE WHEN [mnoz_nepotrebne]>[mnoz_zad] THEN 0.0 ELSE [mnoz_zad] - [mnoz_nepotrebne] END))), + PRIMARY KEY (ID) +) + + + +DROP TABLE IF EXISTS #TabPrKVazbyGen_IDMzdy +CREATE TABLE #TabPrKVazbyGen_IDMzdy (IDPrikaz int, Doklad int, IDMzdy int) + + + +DROP TABLE IF EXISTS #TabPrKVazbyGenVC +CREATE TABLE #TabPrKVazbyGenVC ( + ID INT IDENTITY NOT NULL, + IDPolozky INT NOT NULL, + VyrCislo NVARCHAR(100) NOT NULL, + Mnozstvi NUMERIC(19,6) NOT NULL, + Sklad NVARCHAR(30) NULL, + IDKmenZbozi INT NULL, + IDVyrCP INT NULL, + PRIMARY KEY(ID) +) + + + + + + + +DECLARE + @RespektovatExistEvid bit, + @idDilec INT, + @IDPrikaz int=NULL, + @IDPrPostup INT=NULL, + @mnozstviPomer_A numeric(19,6), + @mnozstviPomer_B numeric(19,6), + @IDPrKV int, + @mnoz_zad numeric(19,6), + @PrKVDoklad int, + @PocetVazeb int, + @PrP_Doklad int + + +SET @RespektovatExistEvid = @respExistDokl + + +SELECT @errID=NULL, @errMsg='', @PocetVazeb=0 +SELECT @IDPrikaz=MZ.IDPrikaz, @mnozstviPomer_A=(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr), @mnozstviPomer_B=PrP.kusy_zad, @PrP_Doklad=PrP.Doklad, + @IDPrPostup=PrP.ID, @szDilec=k.SkupZbo + FROM dbo.TabPrikazMzdyAZmetky MZ + INNER JOIN dbo.TabPrPostup PrP ON (PrP.IDPrikaz=MZ.IDPrikaz AND PrP.Doklad=MZ.DokladPrPostup AND PrP.Alt=MZ.AltPrPostup AND PrP.IDOdchylkyDo IS NULL) + INNER JOIN dbo.TabPrikaz vp ON (vp.ID=MZ.IDPrikaz) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=vp.IDTabKmen) + WHERE MZ.ID=@IDMzdy + +UPDATE dbo.TabPrikazMzdyAZmetky SET GenerovanaMatVydejka=1 WHERE ID=@IDMzdy +-- pokud uz byla generovana vydejka, skonci +IF (@@ROWCOUNT=0) + RETURN 0 + + +SELECT @idZam=Zamestnanec FROM dbo.TabPrikazMzdyAZmetky WHERE ID=@IDMzdy +SELECT @idDilec = IDTabKmen FROM dbo.TabPrikaz WHERE ID=@IDPrikaz + + + +IF OBJECT_ID(N'tempdb..#HDCTabPrKVazbyGenPredna', N'U') IS NULL + BEGIN + IF (@mnozstviPomer_A<=0.0) + RETURN -1 + + IF (@vydejAll=1) + DECLARE crPom1334 CURSOR FAST_FORWARD LOCAL FOR + SELECT PrKV.ID, PrKV.Mnoz_zad, PrKV.Doklad + FROM dbo.TabPrKVazby PrKV + INNER JOIN dbo.TabPrikaz P ON (P.ID=PrKV.IDPrikaz) + INNER JOIN dbo.TabRadyPrikazu RP ON (RP.rada=P.rada) + INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi AND KZ.sluzba=0) + WHERE P.StavPrikazu IN (30,50) AND (P.kusy_zive>0.0 OR RP.KontrolovatRozpracPriUzav=0) AND PrKV.predzpracovano=0 AND PrKV.uzavreno=0 AND PrKV.RezijniMat=0 AND + PrKV.IDPrikaz=@IDPrikaz AND PrKV.prednastaveno=1 AND PrKV.IDOdchylkyDo IS NULL + ELSE + DECLARE crPom1334 CURSOR FAST_FORWARD LOCAL FOR + SELECT PrKV.ID, PrKV.Mnoz_zad, PrKV.Doklad + FROM dbo.TabPrKVazby PrKV + INNER JOIN dbo.TabPrikaz P ON (P.ID=PrKV.IDPrikaz) + INNER JOIN dbo.TabRadyPrikazu RP ON (RP.rada=P.rada) + INNER JOIN dbo.TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi AND KZ.sluzba=0) + WHERE P.StavPrikazu IN (30,50) AND (P.kusy_zive>0.0 OR RP.KontrolovatRozpracPriUzav=0) AND PrKV.predzpracovano=0 AND PrKV.uzavreno=0 AND PrKV.RezijniMat=0 AND + PrKV.IDPrikaz=@IDPrikaz AND dbo.hf_GetPrPDokladForPrKV(PrKV.ID)=@PrP_Doklad AND PrKV.prednastaveno=1 AND PrKV.IDOdchylkyDo IS NULL + OPEN crPom1334 + FETCH NEXT FROM crPom1334 INTO @IDPrKV, @Mnoz_zad, @PrKVDoklad + WHILE @@fetch_status=0 + BEGIN + UPDATE #TabPrKVazbyGen SET MnozstviPoz=@mnoz_zad * (pom_pomer_A+@mnozstviPomer_A)/pom_pomer_B, pom_pomer_A=pom_pomer_A+@mnozstviPomer_A + WHERE IDPrKV=@IDPrKV + IF (@@ROWCOUNT=0) + BEGIN + IF @RespektovatExistEvid=1 + SELECT @mnozstviPomer_A=SUM(MZ.kusy_odv+MZ.kusy_zmet_opr+MZ.kusy_zmet_neopr) + FROM dbo.TabPrikazMzdyAZmetky MZ WHERE MZ.IDPrikaz=@IDPrikaz AND MZ.DokladPrPostup=@PrP_Doklad AND MZ.GenerovanaMatVydejka=1 + INSERT INTO #TabPrKVazbyGen (IDPrKV, MnozstviPoz, pom_pomer_A, pom_pomer_B, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko, IDPracoviste, mnoz_zad, + Mnoz_nepotrebne, Mnoz_skut_realizovane, Cena_real, Mnoz_odv, Cena_odv, priorita, vyssi, nizsi, DavkaTPV, pozice, Operace, FixniMnozstvi, + mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka) + SELECT PrKV.ID, + PrKV.mnoz_zad * @mnozstviPomer_A/@mnozstviPomer_B, + @mnozstviPomer_A, @mnozstviPomer_B, + PrKV.Doklad, PrKV.IDPrikaz, PrKV.Prednastaveno, PrKV.Sklad, PrKV.VyrStredisko, PrKV.IDPracoviste, PrKV.mnoz_zad, PrKV.Mnoz_nepotrebne, + PrKV.Mnoz_skut_realizovane, PrKV.Cena_real, PrKV.Mnoz_odv, PrKV.Cena_odv, PrKV.priorita, PrKV.vyssi, PrKV.nizsi, PrKV.DavkaTPV, PrKV.pozice, PrKV.Operace, PrKV.FixniMnozstvi, + PrKV.mnozstvi, PrKV.ProcZtrat, PrKV.mnozstviSeZtratou, PrKV.Prirez, PrKV.Poznamka + FROM dbo.TabPrKVazby PrKV + WHERE PrKV.ID=@IDPrKV AND PrKV.uzavreno=0 + END + INSERT INTO #TabPrKVazbyGen_IDMzdy (IDPrikaz, Doklad, IDMzdy) VALUES (@IDPrikaz, @PrKVDoklad, @IDMzdy) + SET @PocetVazeb=@PocetVazeb + 1 + FETCH NEXT FROM crPom1334 INTO @IDPrKV, @Mnoz_zad, @PrKVDoklad + END + CLOSE crPom1334 + DEALLOCATE crPom1334 + + IF (@PocetVazeb<=0) + RETURN -2 + + END + ELSE + BEGIN -- pokud mam seznam na co vygenerovat vydejku, jedu podle nej + DELETE FROM #TabPrKVazbyGen + INSERT INTO #TabPrKVazbyGen + SELECT Generuj, PoKorekciDat, IDPrKV, Doklad, IDPrikaz, Prednastaveno, Sklad, VyrStredisko, IDPracoviste, mnoz_zad, Mnoz_nepotrebne, Mnoz_skut_realizovane, + Cena_real, Mnoz_odv, Cena_odv, MnozstviMax, PuvodniMnozstviPoz, MnozstviPoz, PomMnozPoz, IDPohZbo, PoznamkaNaDoklad, priorita, vyssi, nizsi, DavkaTPV, + pozice, Operace, FixniMnozstvi, mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka, pom_pomer_A, pom_pomer_B, Dodavatel + FROM #HDCTabPrKVazbyGenPredna + DROP TABLE #HDCTabPrKVazbyGenPredna + END + +-- preddefinovana mzda pro provazani +IF OBJECT_ID(N'tempdb..#HDCTabPrKVazbyGen_IDMzdyPredna', N'U') IS NOT NULL + BEGIN + DELETE FROM #TabPrKVazbyGen_IDMzdy + INSERT INTO #TabPrKVazbyGen_IDMzdy + SELECT IDPrikaz, Doklad, IDMzdy FROM #HDCTabPrKVazbyGen_IDMzdyPredna + DROP TABLE #HDCTabPrKVazbyGen_IDMzdyPredna + END + + + +EXEC dbo.hp_AktualizaceTabPrKVazbyGenVC @Vratka=0 +UPDATE #TabPrKVazbyGen SET Generuj=1, Sklad=@sklVydej + + +IF (@smazVydejTesto=1) + BEGIN +-- vazba je primo na kartu testa + IF (@szDilec<>N'701') AND EXISTS (SELECT 1 FROM #TabPrKVazbyGen WHERE IDPrikaz=@IDPrikaz AND nizsi IN (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=N'701')) + DELETE FROM #TabPrKVazbyGen WHERE IDPrikaz=@IDPrikaz AND nizsi IN (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=N'701') + +-- vazba je pres montaz SK702 + IF (@szDilec<>N'701') AND EXISTS (SELECT 1 FROM #TabPrKVazbyGen WHERE IDPrikaz=@IDPrikaz AND nizsi IN (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=N'702')) + DELETE FROM #TabPrKVazbyGen WHERE IDPrikaz=@IDPrikaz AND nizsi IN (SELECT ID FROM dbo.TabKmenZbozi WHERE SkupZbo=N'701') + END + + +DROP TABLE IF EXISTS #TabGenRezVyd +CREATE TABLE #TabGenRezVyd (ID int NOT NULL, PRIMARY KEY (ID)) + + +BEGIN TRY + EXEC @retVal=dbo.hp_generujRezVyd @RadaDokladu=@radaVydej, @DruhPohybuZbo=NULL, @IDObdobi=0, @DatPorizeni=NULL, @SekejZakazky=0, @SekejPrikazy=0, + @IDExistDoklad=@IDDoklad, @SekejOperace=0 +END TRY +BEGIN CATCH + SET @errMsg = 'Chyba generovani vydeje: ' + ERROR_MESSAGE() +END CATCH + + + + + +DECLARE + @idVyd INT, + @idKZ INT, + @idPZ INT, + @idSS INT, + @poslSarze NVARCHAR(100), + @errMsg702 NVARCHAR(500), + @idKZ702 INT, + @idPrikaz702 INT, + @doklKV702 INT, + @doklOp702 INT, + @alt702 NCHAR(1), + @mnoz702 NUMERIC(19,6), + @idMzda702 INT, + @aktDat DATETIME + +SET @aktDat = GETDATE() + + +-- potrebuju si vyrobit tisicikus ? musim pred realizaci vydejky na vyssi prikaz, udelam odvedenim prikazu na vyssi +/* +IF (@spotreba702=1) + BEGIN + DECLARE t CURSOR LOCAL FOR + SELECT k.ID, p.Mnozstvi + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + WHERE k.SkupZbo=N'702' AND k.Blokovano=0 + OPEN t + WHILE (1=1) + BEGIN + FETCH NEXT FROM t INTO @idKZ702, @mnoz702 + IF (@@FETCH_STATUS<>0) BREAK + + SET @idPrikaz702 = (SELECT ID FROM dbo.TabPrikaz WHERE IDPrikazVyssi=@IDPrikaz AND IDTabKmen=@idKZ702 AND StavPrikazu=30) + IF (@idPrikaz702 IS NOT NULL) + BEGIN +-- evidence operace peceni + SELECT TOP(1) @doklOp702=Doklad, @alt702=Alt FROM dbo.TabPrPostup WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@idPrikaz702 + EXEC @idMzda702=dbo.hp_ZaevidujOperaci @IDPrikaz=@idPrikaz702, @Doklad=@doklOp702, @Alt=@alt702, @Datum=NULL, @Stav=1, @IDZam=@idZam, @Kusy_odv=@mnoz702 + SET @idMzda702 = ISNULL(@idMzda702, 0) + IF (@idMzda702>0) + BEGIN +-- vydejku materialu nedelej, testo bylo uz odepsano svym prevedenim na vyssi +-- EXEC dbo.ep_Vyroba_GenVydejZeMzdy @IDMzdy=@idMzda702, @spotrebaTesto=1, @realizujVydej=1, @errMsg=@errMsg702 OUT + + EXEC dbo.ep_Vyroba_GenOdvodZeMzdy @IDMzdy=@idMzda702, @realizujPrijem=1, @errMsg=@errMsg702 OUT + END +-- odvedeni na vyssi prikaz + SELECT TOP(1) @doklKV702=Doklad FROM dbo.TabPrKVazby WHERE IDOdchylkyDo IS NULL AND IDPrikaz=@IDPrikaz AND nizsi=@idKZ702 + EXEC dbo.hp_OdvedeniPrikazuPrevodem @DatPripadu=@aktDat, @KonecneOdvedeniNatvrdo=0, @IDPrikazZdroj=@idPrikaz702, @IDPrikazCil=@IDPrikaz, + @Doklad=@doklKV702, @IDDilec=@idKZ702, @mnozstvi=@mnoz702, @IDOdvedeniVC=0 + END + END + CLOSE t + DEALLOCATE t + END +*/ + + +DECLARE vyd CURSOR LOCAL FOR + SELECT ID FROM #TabGenRezVyd +OPEN vyd +WHILE (1=1) + BEGIN + FETCH NEXT FROM vyd INTO @idVyd + IF (@@FETCH_STATUS<>0) BREAK + + IF (@denSmena<>N'') + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabDokladyZbozi_EXT WHERE ID=@idVyd) + INSERT dbo.TabDokladyZbozi_EXT (ID) VALUES (@idVyd) + UPDATE dbo.TabDokladyZbozi_EXT SET _Vyroba_DenSmena=@denSmena WHERE ID=@idVyd + END + + DECLARE pV CURSOR LOCAL FOR + SELECT p.ID, k.ID + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + WHERE p.IDDoklad=@idVyd AND k.Sluzba=0 + OPEN pV + WHILE (1=1) + BEGIN + FETCH NEXT FROM pV INTO @idPZ, @idKZ + IF (@@FETCH_STATUS<>0) BREAK + SET @idSS = (SELECT ID FROM dbo.TabStavSkladu WHERE IDKmenZbozi=@idKZ AND IDSklad=@sklPekarna) + SET @poslSarze = ISNULL( (SELECT _Prevod_PosledniSarze FROM dbo.TabStavSkladu_EXT WHERE ID=@idSS), N'') + IF (@poslSarze<>N'') + BEGIN + IF NOT EXISTS(SELECT 1 FROM dbo.TabPohybyZbozi_EXT WHERE ID=@idPZ) + INSERT dbo.TabPohybyZbozi_EXT (ID) VALUES (@idPZ) + UPDATE dbo.TabPohybyZbozi_EXT SET _Vyroba_Sarze=@poslSarze WHERE ID=@idPZ + END + END + CLOSE pV + DEALLOCATE pV + + + +-- begin: prijemka nedostatecneho materialu + SET @idDZPomocPrij=NULL + DECLARE pomPrij CURSOR LOCAL FOR + SELECT p.IDZboSklad, p.Mnozstvi + FROM dbo.TabPohybyZbozi p + INNER JOIN dbo.TabStavSkladu s ON (s.ID=p.IDZboSklad) + INNER JOIN dbo.TabKmenZbozi k ON (k.ID=s.IDKmenZbozi) + WHERE p.IDDoklad=@idVyd + AND k.Material=1 AND k.Sluzba=0 + OPEN pomPrij + WHILE (1=1) + BEGIN + FETCH NEXT FROM pomPrij INTO @idSSPomocPrij, @mnozVydej + IF (@@FETCH_STATUS<>0) BREAK + + SET @mnozSklad = ISNULL( (SELECT Mnozstvi+MnozstviKPrijmu-MnozstviKVydeji FROM dbo.TabStavSkladu WHERE ID=@idSSPomocPrij), 0) + IF (@mnozVydej>@mnozSklad) + BEGIN + SET @mnozPrij = @mnozVydej - @mnozSklad + IF (@idDZPomocPrij IS NULL) + BEGIN + EXEC dbo.hp_InsertHlavickyOZ @ident=@idDZPomocPrij OUT, @Sklad=@sklTechnolog, @DruhPohybu=0, @RadaDokladu=@radaPrijem, @CisloOrg=0 + SELECT @menaPrij=Mena, @kurzPrij=Kurz, @kurzPrijE=KurzEuro, @jednMPrij=JednotkaMeny, @vstCPrij=VstupniCena + FROM dbo.TabDokladyZbozi WHERE ID=@idDZPomocPrij + END + IF (@idDZPomocPrij IS NOT NULL) + BEGIN + EXEC dbo.hp_InsertPolozkyOZ @Ident=@idPZPomocPrij OUT, @IDDoklad=@idDZPomocPrij, @DruhPohybu=0, @CisloOrg=0, @IDZboSklad=@idSSPomocPrij, + @Mena=@menaPrij, @Kurz=@kurzPrij, @KurzEuro=@kurzPrijE, @JednotkaMeny=@jednMPrij, @SazbaSD=NULL, @SazbaDPH=NULL, + @ZakazanoDPH=NULL, @VstupniCena=@vstCPrij, @Mnozstvi=@mnozPrij, @PovolitDuplicitu=1 + END + END + END + CLOSE pomPrij + DEALLOCATE pomPrij + IF (@idDZPomocPrij IS NOT NULL) + BEGIN + BEGIN TRY + EXEC dbo.hp_Realizuj_Prijem @ID=@idDZPomocPrij, @DatumRealizace=NULL, @Uzivatel=@idUziv, @BylaChyba=@bChyba OUT, @VypnoutUpozorneniPriZajistovani=1 + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + END CATCH + END +-- end: prijemka nedostatecneho materialu + + +-- realizace vydejky + IF (@realizujVydej=1) + BEGIN + BEGIN TRY + EXEC dbo.hp_Realizuj_Vydej @ID=@idVyd, @DatumRealizace=NULL, @Uzivatel=@idUziv, @Hlidat=0, @BylaChyba=@bChyba OUT + END TRY + BEGIN CATCH + SET @opakReal=0 + SET @errMsg = ERROR_MESSAGE() + IF (CHARINDEX(N'71553', @errMsg)>0) + SET @opakReal=1 + IF (@opakReal=0) + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba realizace výdejky příkazu: ' + @errMsg, @idVyd + END CATCH + + IF (@opakReal=1) + BEGIN + BEGIN TRY + EXEC dbo.ep_Vyroba_DoplnSkladProVydejDleDokladu @IDDoklad=@idVyd, @errMsg=@errMsg OUT + IF (@errMsg=N'') + EXEC dbo.hp_Realizuj_Vydej @ID=@idVyd, @DatumRealizace=NULL, @Uzivatel=@idUziv, @Hlidat=0, @BylaChyba=@bChyba OUT + ELSE + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba korekce naskladneni pro vydejku: ' + @errMsg, @idVyd + END TRY + BEGIN CATCH + SET @errMsg = ERROR_MESSAGE() + INSERT dbo._hdc_ph_Log (Typ, LogText, IntValue) SELECT 10, N'Chyba opakovane realizace výdejky příkazu: ' + @errMsg, @idVyd + END CATCH + END + + END + + END +CLOSE vyd +DEALLOCATE vyd + + + + +IF (@extTab IS NOT NULL) AND EXISTS(SELECT 1 FROM #TabPrKVazbyGen WHERE IDPohZbo IS NOT NULL) + IF OBJECT_ID(@extTab, N'U') IS NOT NULL + BEGIN + SET @sql = N'DELETE FROM ' + @extTab + EXECUTE sp_executesql @sql + SET @sql = N'INSERT ' + @extTab + N' (ID, IDPohZbo) SELECT ID, IDPohZbo FROM #TabPrKVazbyGen WHERE IDPohZbo IS NOT NULL' + EXECUTE sp_executesql @sql + END + + +-- uklid +DROP TABLE IF EXISTS #TabPrKVazbyGen +DROP TABLE IF EXISTS #TabGenRezVyd +DROP TABLE IF EXISTS #TabPrKVazbyGen_IDMzdy +DROP TABLE IF EXISTS #TabPrKVazbyGenVC + + diff --git a/_custom/Rootvin/sql/trg__hdc_PZ_PuvodniVC_D.sql b/_custom/Rootvin/sql/trg__hdc_PZ_PuvodniVC_D.sql new file mode 100644 index 0000000..8092f5c --- /dev/null +++ b/_custom/Rootvin/sql/trg__hdc_PZ_PuvodniVC_D.sql @@ -0,0 +1,25 @@ +-- dbo.ET__hdc_PZ_PuvodniVC_D +CREATE TRIGGER dbo.ET__hdc_PZ_PuvodniVC_D ON dbo._hdc_PZ_PuvodniVC +WITH EXECUTE AS CALLER +FOR DELETE +AS +BEGIN + SET NOCOUNT ON + + DECLARE + @id INT + + + + + +-- cisteni + IF EXISTS (SELECT 1 FROM dbo._hdc_PZ_PuvodniVC) + BEGIN + SELECT @id=MAX(ID) FROM dbo._hdc_PZ_PuvodniVC + DBCC CHECKIDENT (_hdc_PZ_PuvodniVC, RESEED, @id) + END + ELSE + TRUNCATE TABLE dbo._hdc_PZ_PuvodniVC + +END diff --git a/_custom/Rootvin/uSvcCustom.pas b/_custom/Rootvin/uSvcCustom.pas index 131f194..b65e7ae 100644 --- a/_custom/Rootvin/uSvcCustom.pas +++ b/_custom/Rootvin/uSvcCustom.pas @@ -340,7 +340,7 @@ uses { TSDGPolozkaOZService } - function TSDGPolozkaOZService.GetByID(const AID: Integer): TPohybOZ; + function TSDGPolozkaOZService.GetByID (const AID: Integer): TPohybOZ; var lSQL: string; p: TDictionary; pds: TSDGSerioveCisloPohybOZService; @@ -377,7 +377,7 @@ uses - function TSDGPolozkaOZService.GetByParams(params: TDictionary): TObjectList; + function TSDGPolozkaOZService.GetByParams (params: TDictionary): TObjectList; var lSQL, where, podmSDGPolozka: string; id,idPZ, cnt, rNo: integer; lQry: TFDQuery; @@ -1056,6 +1056,8 @@ uses // pro micharnu nejsou prikazy pozastavovany where:= where + IfThen(where<>'', ' AND ', '') + 'main.StavPrikazu IN (30' + IfThen(typPrikazu<>1, ',40', '') + ')'; + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada<>N''009'''; + where:= where + IfThen(where<>'', ' AND ', '') + 'main.Rada LIKE N''0%'''; if (where<>'') then diff --git a/_custom/Rootvin/winSvc/consts.inc b/_custom/Rootvin/winSvc/consts.inc new file mode 100644 index 0000000..e69de29 diff --git a/_custom/Rootvin/winSvc/hdcDZApiCfg.xml b/_custom/Rootvin/winSvc/hdcDZApiCfg.xml new file mode 100644 index 0000000..12daafe --- /dev/null +++ b/_custom/Rootvin/winSvc/hdcDZApiCfg.xml @@ -0,0 +1,2 @@ + + diff --git a/_custom/Rootvin/winSvc/impl.inc b/_custom/Rootvin/winSvc/impl.inc new file mode 100644 index 0000000..8a16c39 --- /dev/null +++ b/_custom/Rootvin/winSvc/impl.inc @@ -0,0 +1,234 @@ + constructor THeoRTNZapisObjMatThread.Create (AOnTerminate: TNotifyEvent; AService: TService); + begin + inherited Create (false); // Create thread in NOT suspended mode + FMainService:= AService; + FLock:= TCriticalSection.Create; + FRunning:= false; + FTermEvent:= TEvent.Create (nil, False, False, ''); + + +// OnTerminate:= AOnTerminate; +// FreeOnTerminate:= true; + FreeOnTerminate:= false; // Ensure manual freeing of thread resources + end; + + + + + destructor THeoRTNZapisObjMatThread.Destroy; + begin +{$IFDEF DEBUG} + Write('Ukoncuji thread RTN Zapis objednavka materialu do ExpPr...'); +{$ENDIF} + if (FTimer<>0) then + CloseHandle (FTimer); + FTermEvent.Free; + FRunning:= false; + FMainService:= nil; + Terminate; + FLock.Free; + inherited; +{$IFDEF DEBUG} + WriteLn('OK'); +{$ENDIF} + end; + + + + procedure THeoRTNZapisObjMatThread.TerminatedSet; + begin + FTermEvent.SetEvent; + end; + + + + procedure THeoRTNZapisObjMatThread.ThreadTerminate; + begin + Terminate; + WaitFor; + end; + + + + procedure THeoRTNZapisObjMatThread.Execute; + const _Second = 10_000_000; + var lSQL, errMsg, url, outData, fName, loopCasTyp: string; + lLoop, idDigiFile, cnt, idx: Integer; + lLoopMax, koefProCas: integer; + logRunCnt: integer; + Msg: TMsg; + firstRun, inProg, inDL: boolean; + lQry: TFDQuery; + sqlConnX: TFDConnection; + + lBusy: LongInt; + liDueTime: LARGE_INTEGER; + + cfgFile: string; + specCfgXML: XML.XmlIntf.IXMLDocument; + n1: XML.XmlIntf.IXMLNode; + attribs: IXMLNodeList; + attrIdx: integer; + begin + lLoop:= 0; + idDigiFile:= 0; + logRunCnt:= 1; + + lLoopMax:= 3; // v minutach !!!! + try + try + CoInitialize(nil); + cfgFile:= ExtractFilePath(ParamStr(0)) + 'hdcDZApiCfg.xml'; + if (FileExists(cfgFile)) then + begin + specCfgXML:= Xml.XMLDoc.TXMLDocument.Create(nil); + specCfgXML.LoadFromFile (cfgFile); + specCfgXML.Active:= true; + if not(specCfgXML.IsEmptyDoc) then + begin + if (specCfgXML.DocumentElement<>nil) then + begin + n1:= specCfgXML.DocumentElement; + if (n1.NodeName='config') then + begin + attribs:= n1.AttributeNodes; + + attrIdx:= attribs.IndexOf('zapisObjMatExpPrIntMins'); + if (attrIdx>-1) then + if (attribs.Get(attrIdx).NodeValue<>null) then + lLoopMax:= attribs.Get(attrIdx).NodeValue; + end; // n1 = config + end; // specCfgXML.DocumentElement<>nil + end; // not specCfgXML.IsEmptyDoc + end; // FileExists(cfgFile) + except + end; + finally + begin + if (specCfgXML<>nil) then + specCfgXML:= nil; + CoUninitialize; + end; + end; + + datMod.LogInfo (Quick.Logger.etInfo, 'Zapis Objednavek materialu do ExpPr - interval: ' + lLoopMax.ToString + ' min.'); + lLoopMax:= lLoopMax * 60; // minuty na vteriny + + + firstRun:= true; + inProg:= false; + FRunning:= true; + + if (1=1) then // pro rychle vypnuti + begin + FTimer:= CreateWaitableTimer (nil, true, 'RTNZapisObjMatExpPrWaitableTimer'); + liDueTime.QuadPart:= -1*_Second; + + + sqlConnX:= TFDConnection.Create (nil); + sqlConnX.Params.SetStrings (datMod.sqlConnParams); + lSQL:= 'DECLARE @errMsg NVARCHAR(500)=N''''' + CRLF +'IF OBJECT_ID(N''dbo.ep_Vyroba_GenObjednavkuMatDoVyrobyNew'', N''P'') IS NOT NULL' + CRLF + + ' EXEC dbo.ep_Vyroba_GenObjednavkuMatDoVyrobyNew @errMsg OUT' + CRLF + 'SELECT @errMsg AS ErrMsg'; + lQry:= TFDQuery.Create(nil); + + try + lQry.Connection:= sqlConnX; + + while not(Terminated) or not(FRunning) do + begin + if (HDCDZApiService<>nil) then + if (HDCDZApiService.Terminated) then + begin + Terminate; + FRunning:= false; + end; + + PeekMessage (&Msg, 0, 0, 0, PM_NOREMOVE); { Create message queue } + + if (lLoop=lLoopMax) or (firstRun) then // pri startu a pak kazdou minutu + begin + idDigiFile:= 0; + firstRun:= false; + + if (logRunCnt<4) then + datMod.LogInfo (Quick.Logger.etInfo, 'Spoustim zapis Objednavky materialu do ExpPr c.' + logRunCnt.toString + '...'); + if (logRunCnt=4) then + datMod.LogInfo (Quick.Logger.etInfo, 'Spoustim zapis Objednavky - bezi, ale dal neloguju'); + + try + if not(inProg) then // nebezi uz ? + begin + + if (1=1) then // pro rychle vypnuti + begin + sqlConnX.Open; + if (sqlConnX.Connected) then + begin + inProg:= true; + lQry.Open(lSQL); + if (lQry.RecordCount>0) then + begin + lQry.First; + errMsg:= lQry.FieldByName('ErrMsg').AsString; + if (errMsg<>'') then + begin + datMod.LogInfo (Quick.Logger.etInfo, 'Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg); +{$IFDEF DEBUG} + WriteLn('Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg); +{$ENDIF} + end; + end; + lQry.Close; + inProg:= false; + end; // sql Connected + end; + end; + + except on E:Exception do + begin + inProg:= false; + errMsg:= E.Message; // datMod.sqlQry11.FieldByName('ErrMsg').AsString; + if (mamTabPrijataData) then + begin + datMod.LogInfo (Quick.Logger.etError, 'Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg); +{$IFDEF DEBUG} + WriteLn('Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg); +{$ENDIF} + end; + end; + end; + + + lLoop:= 0; + if (logRunCnt<5) then + Inc (logRunCnt); + end; + Inc (lLoop); + + if (FTimer<>0) then + SetWaitableTimer (FTimer, TLargeInteger(liDueTime), 0, nil, nil, false); + repeat + lBusy:= MsgWaitForMultipleObjects (1, FTimer, false, INFINITE, QS_ALLINPUT); + until lBusy = WAIT_OBJECT_0; +// Sleep (998); + + end; + finally + end; + + if (lQry<>nil) then + begin + lQry.Close; + FreeAndNil (lQry); + end; + if (sqlConnX<>nil) then + begin + sqlConnX.Close; + FreeAndNil (sqlConnX); + end; + + end; // 1=1 + + end; + + diff --git a/_custom/Rootvin/winSvc/mainPrivs.inc b/_custom/Rootvin/winSvc/mainPrivs.inc new file mode 100644 index 0000000..acecdc7 --- /dev/null +++ b/_custom/Rootvin/winSvc/mainPrivs.inc @@ -0,0 +1 @@ + rtnZapisObjMatThr: THeoRTNZapisObjMatThread; diff --git a/_custom/Rootvin/winSvc/mainSvcCont.inc b/_custom/Rootvin/winSvc/mainSvcCont.inc new file mode 100644 index 0000000..faa951d --- /dev/null +++ b/_custom/Rootvin/winSvc/mainSvcCont.inc @@ -0,0 +1,3 @@ + if (rtnZapisObjMatThr<>nil) then + if (rtnZapisObjMatThr.Suspended) then + rtnZapisObjMatThr.Resume; diff --git a/_custom/Rootvin/winSvc/mainSvcExec.inc b/_custom/Rootvin/winSvc/mainSvcExec.inc new file mode 100644 index 0000000..364390b --- /dev/null +++ b/_custom/Rootvin/winSvc/mainSvcExec.inc @@ -0,0 +1,6 @@ + if (rtnZapisObjMatThr<>nil) then + if not(rtnZapisObjMatThr.Started) then + begin + rtnZapisObjMatThr.Start; + datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby RTN Zapis objednavky materialu do ExpPr'); + end; diff --git a/_custom/Rootvin/winSvc/mainSvcPause.inc b/_custom/Rootvin/winSvc/mainSvcPause.inc new file mode 100644 index 0000000..a6a5856 --- /dev/null +++ b/_custom/Rootvin/winSvc/mainSvcPause.inc @@ -0,0 +1,3 @@ + if (rtnZapisObjMatThr<>nil) then + if not(rtnZapisObjMatThr.Suspended) then + rtnZapisObjMatThr.Suspend; diff --git a/_custom/Rootvin/winSvc/mainSvcStart.inc b/_custom/Rootvin/winSvc/mainSvcStart.inc new file mode 100644 index 0000000..7fd0a09 --- /dev/null +++ b/_custom/Rootvin/winSvc/mainSvcStart.inc @@ -0,0 +1,12 @@ + datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby Zapis objednavek materialu do ExpPr...'); +{$IFDEF DEBUG} + WriteLn ('Start sluzby Zapis objednavek materialu do ExpPr - inverval 10 minut...'); +{$ENDIF} + rtnZapisObjMatThr:= THeoRTNZapisObjMatThread.Create (ThreadTerminated, self); + if (rtnZapisObjMatThr.Started) then + begin + datMod.LogInfo (Quick.Logger.etInfo, ' OK'); +{$IFDEF DEBUG} + WriteLn (' OK'); +{$ENDIF} + end; diff --git a/_custom/Rootvin/winSvc/mainSvcStop.inc b/_custom/Rootvin/winSvc/mainSvcStop.inc new file mode 100644 index 0000000..f0a6617 --- /dev/null +++ b/_custom/Rootvin/winSvc/mainSvcStop.inc @@ -0,0 +1,18 @@ + if Assigned(rtnZapisObjMatThr) then + begin +{$IFDEF DEBUG} + WriteLn ('Ukoncuji sluzbu RTN Zapis objednavky materialu do ExpPr...'); +{$ENDIF} + datMod.LogInfo (Quick.Logger.etInfo, 'Ukoncuji sluzbu RTN Zapis objednavky materialu do ExpPr...'); + try + rtnZapisObjMatThr.ThreadTerminate; + FreeAndNil(rtnZapisObjMatThr); + except on E:Exception do +// add event in eventlog with reason why the service couldn't stop + LogMessage('Cannot stop service: ' + E.Message, EVENTLOG_ERROR_TYPE, 0, 1); + end; + datMod.LogInfo (Quick.Logger.etInfo, ' OK'); +{$IFDEF DEBUG} + WriteLn (' OK'); +{$ENDIF} + end; diff --git a/_custom/Rootvin/winSvc/readCfg.inc b/_custom/Rootvin/winSvc/readCfg.inc new file mode 100644 index 0000000..444693c --- /dev/null +++ b/_custom/Rootvin/winSvc/readCfg.inc @@ -0,0 +1,3 @@ + + +intervalRTNZapisObjMat \ No newline at end of file diff --git a/_custom/Rootvin/winSvc/types.inc b/_custom/Rootvin/winSvc/types.inc new file mode 100644 index 0000000..56f1c01 --- /dev/null +++ b/_custom/Rootvin/winSvc/types.inc @@ -0,0 +1,15 @@ + THeoRTNZapisObjMatThread = class(TThread) + private + FMainService: TService; + FLock: TCriticalSection; + FTermEvent: TEvent; + FRunning: boolean; + FTimer: THandle; + protected + procedure Execute; override; + procedure TerminatedSet; override; // XE2+ only * + public + constructor Create (AOnTerminate: TNotifyEvent; AService: TService); + destructor Destroy; override; + procedure ThreadTerminate; + end; diff --git a/_custom/Rootvin/winSvc/uses.inc b/_custom/Rootvin/winSvc/uses.inc new file mode 100644 index 0000000..e69de29 diff --git a/_custom/Rootvin/winSvc/usesTop.inc b/_custom/Rootvin/winSvc/usesTop.inc new file mode 100644 index 0000000..a39d800 --- /dev/null +++ b/_custom/Rootvin/winSvc/usesTop.inc @@ -0,0 +1 @@ + System.Threading, \ No newline at end of file diff --git a/_custom/Rootvin/winSvc/vars.inc b/_custom/Rootvin/winSvc/vars.inc new file mode 100644 index 0000000..188b7ec --- /dev/null +++ b/_custom/Rootvin/winSvc/vars.inc @@ -0,0 +1 @@ + intervalRTNZapisObjMat: integer; diff --git a/_custom/Rootvin/winSvc_zdroje.inc b/_custom/Rootvin/winSvc_zdroje.inc new file mode 100644 index 0000000..b13c85f --- /dev/null +++ b/_custom/Rootvin/winSvc_zdroje.inc @@ -0,0 +1,62 @@ +// arrDefs.Add('tbl_hdc_ph_Log'); + + arrDefs.Add('ep_hdcdzapi_GetKusovnik'); + arrDefs.Add('col_TabDokladyZbozi_EXT'); + arrDefs.Add('col_TabStavSkladu_EXT'); + arrDefs.Add('col_TabVazbyPrikazu_EXT'); + arrDefs.Add('col_TabPostup_EXT'); + arrDefs.Add('col_TabPrPostup_EXT'); + arrDefs.Add('col_TabPohybyZbozi_EXT'); + arrDefs.Add('col_TabEvidRozpracOperR_EXT'); + arrDefs.Add('col_TabKmenZbozi_EXT'); + arrDefs.Add('ef_GetDatumASmenu'); + arrDefs.Add('tbl_hdc_PZ_PuvodniVC'); + arrDefs.Add('tbl_TabVyrobaTestoVyroba'); + +// tabulka objednavek je Uzivatelska tabulka v Heliosu +// arrDefs.Add('tbl_TabVyrobaObjednavky'); + + arrDefs.Add('tbl_TabVyrobaOperaceStartStop'); + arrDefs.Add('tbl_TabVyrobaOperaceStartStopVydej'); + arrDefs.Add('ep_Vyroba_InsertEvidRozpracOper'); + arrDefs.Add('ep_Vyroba_InsertEvidRozpracOperPol'); + arrDefs.Add('ep_Vyroba_DoplnSkladProVydejDleDokladu'); + arrDefs.Add('ep_Vyroba_GenOdvodZeMzdy'); + arrDefs.Add('ep_Vyroba_GenVydejZeMzdy'); + arrDefs.Add('ep_Vyroba_Doklady_Micharna'); + arrDefs.Add('ep_Vyroba_Doklady_PomocPrijemka'); + + arrDefs.Add('ep_Vyroba_GenDenniVydejka'); + +// arrDefs.Add('ep_Vyroba_GenObjednavkuMatDoVyroby'); + arrDefs.Add('ep_Vyroba_GenObjednavkuMatDoVyrobyNew'); + arrDefs.Add('ep_GenerovaniDokladuOZ_HDC'); + + arrDefs.Add('ef_Kmen_VratPocetKsVKartonu'); + arrDefs.Add('ef_Kmen_VratPocetKANaPalete'); + + arrDefs.Add('ep_P03_HDC1'); + arrDefs.Add('ep_P03'); + arrDefs.Add('ep_P01_HDC1'); +// arrDefs.Add('ep_P01_HDCDZApi1'); + arrDefs.Add('ep_P01'); + arrDefs.Add('ep_V03_HDC1'); + arrDefs.Add('ep_V03'); +// arrDefs.Add(''); + + +// objednavky pres Gatema SDServer +// arrDefs.Add('bp_Gatema_SDGenDokZbo1'); + arrDefs.Add('bp_Gatema_SDGenDokZbo1_HDC'); +// arrDefs.Add('bp_Gatema_SDDecodeBarCode'); + arrDefs.Add('bp_Gatema_SDDecodeBarCode_HDC'); + + + arrDefs.Add('trg__TabPohybyZbozi_HDC_D'); + arrDefs.Add('trg__TabPohybyZbozi_HDC_IU'); + arrDefs.Add('trg__hdc_PZ_PuvodniVC_D'); + arrDefs.Add('trg__TabVyrCisPrikaz_HDC_D'); + arrDefs.Add('trg__TabVyrobaOperaceStartStop_D'); + arrDefs.Add('trg__TabPrikazMzdyAZmetky_HDC_D'); + arrDefs.Add('trg__TabPrikaz_HDC_D'); + diff --git a/_custom/Rootvin/zdroje.RES b/_custom/Rootvin/zdroje.RES index e11d333..317e9bd 100644 Binary files a/_custom/Rootvin/zdroje.RES and b/_custom/Rootvin/zdroje.RES differ diff --git a/_custom/Rootvin/zdroje.rc b/_custom/Rootvin/zdroje.rc index bab51a4..4ab2354 100644 --- a/_custom/Rootvin/zdroje.rc +++ b/_custom/Rootvin/zdroje.rc @@ -1,5 +1,6 @@ col_TabDokumenty_DokladProAPI RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\col_TabDokumenty_DokladProAPI.sql col_TabCisZam_EXT RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\col_CisZam_EXT.sql +col_TabPostup_EXT RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\col_TabPostup_EXT.sql col_TabPrPostup_EXT RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\col_TabPrPostup_EXT.sql col_TabStavSkladu_EXT RCDATA C:\_zakaznici\Rootvin\_sql\col_TabStavSkladu_EXT.sql col_TabDokladyZbozi_EXT RCDATA C:\_zakaznici\Rootvin\_sql\col_DokladyZbozi_EXT.sql @@ -16,6 +17,14 @@ ep_Vyroba_DoplnSkladProVydejDleDokladu RCDATA C:\_zakaznici\pluginy_obecne\HDCAp ep_Vyroba_InsertEvidRozpracOper RCDATA .\sql\ep_Vyroba_InsertEvidRozpracOper.sql ep_Vyroba_InsertEvidRozpracOperPol RCDATA .\sql\ep_Vyroba_InsertEvidRozpracOperPol.sql +ep_Vyroba_GenDenniVydejka RCDATA .\sql\ep_Vyroba_GenDenniVydejka.sql + +ep_Vyroba_GenObjednavkuMatDoVyroby RCDATA .\sql\ep_Vyroba_GenObjednavkuMatDoVyroby.sql +ep_Vyroba_GenObjednavkuMatDoVyrobyNew RCDATA .\sql\ep_Vyroba_GenObjednavkuMatDoVyrobyNew.sql + +ep_GenerovaniDokladuOZ_HDC RCDATA .\sql\ep_GenerovaniDokladuOZ_HDC.sql + + ep_P01_HDC1 RCDATA C:\_zakaznici\Rootvin\_sql\ep_P01_HDC1.sql ep_P01 RCDATA C:\_zakaznici\Rootvin\_sql\ep_P01.sql ep_P03_HDC1 RCDATA C:\_zakaznici\Rootvin\_sql\ep_P03_HDC1.sql @@ -29,12 +38,19 @@ trg__TabPohybyZbozi_HDC_IU RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabPo trg__TabPohybyZbozi_HDC_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabPohybyZbozi_HDC_D.sql tbl_hdc_PZ_PuvodniVC RCDATA C:\_zakaznici\Rootvin\_sql\tbl__hdc_PZ_PuvodniVC.sql ep_Vyroba_Doklady_Micharna RCDATA C:\_zakaznici\Rootvin\_sql\ep_Vyroba_Doklady_Micharna.sql +ep_Vyroba_Doklady_PomocPrijemka RCDATA C:\_zakaznici\Rootvin\_sql\ep_Vyroba_Doklady_PomocPrijemka.sql + +bp_Gatema_SDGenDokZbo1 RCDATA C:\_zakaznici\Rootvin\_sql\BP_Gatema_SDGenDokZbo1.sql +bp_Gatema_SDGenDokZbo1_HDC RCDATA C:\_zakaznici\Rootvin\_sql\BP_Gatema_SDGenDokZbo1_HDC.sql +bp_Gatema_SDDecodeBarCode RCDATA C:\_zakaznici\Rootvin\_sql\BP_Gatema_SDDecodeBarCode.sql +bp_Gatema_SDDecodeBarCode_HDC RCDATA C:\_zakaznici\Rootvin\_sql\BP_Gatema_SDDecodeBarCode_HDC.sql + + ef_GetDatumASmenu RCDATA C:\_zakaznici\Rootvin\_sql\ef_GetDatumASmenu.sql ef_DilecGetStroj RCDATA C:\_zakaznici\Rootvin\_sql\ef_DilecGetStroj.sql ef_Kmen_VratPocetKsVKartonu RCDATA C:\_zakaznici\Rootvin\_sql\ef_Kmen_VratPocetKsVKartonu.sql -tbl_TabVyrobaObjednavky RCDATA C:\_zakaznici\Rootvin\_sql\tbl__TabVyrobaObjednavky.sql -trg__TabVyrobaObjednavky_IU RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabVyrobaObjednavky_IU.sql -trg__TabVyrobaObjednavky_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabVyrobaObjednavky_D.sql +ef_Kmen_VratPocetKANaPalete RCDATA C:\_zakaznici\Rootvin\_sql\ef_Kmen_VratPocetKANaPalete.sql + tbl_TabVyrobaOperaceStartStop RCDATA C:\_zakaznici\Rootvin\_sql\tbl__TabVyrobaOperaceStartStop.sql tbl_TabVyrobaOperaceStartStopVydej RCDATA C:\_zakaznici\Rootvin\_sql\tbl__TabVyrobaOperaceStartStopVydej.sql tbl_TabVyrobaTestoVyroba RCDATA C:\_zakaznici\Rootvin\_sql\tbl__TabVyroba_TestoVyroba.sql @@ -42,3 +58,6 @@ trg__TabDokladyZbozi_HDC_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabDo trg__hdc_PZ_PuvodniVC_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__hdc_PZ_PuvodniVC_D.sql trg__TabVyrCisPrikaz_HDC_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabVyrCisPrikaz_HDC_D.sql trg__TabVyrobaOperaceStartStop_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabVyrobaOperaceStartStop_D.sql +trg__TabPrikazMzdyAZmetky_HDC_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabPrikazMzdyAZmetky_HDC_D.sql +trg__TabPrikaz_HDC_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabPrikaz_HDC_D.sql + diff --git a/_custom/Rootvin/zdroje.rc.bak b/_custom/Rootvin/zdroje.rc.bak new file mode 100644 index 0000000..057cc09 --- /dev/null +++ b/_custom/Rootvin/zdroje.rc.bak @@ -0,0 +1,46 @@ +col_TabDokumenty_DokladProAPI RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\col_TabDokumenty_DokladProAPI.sql +col_TabCisZam_EXT RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\col_CisZam_EXT.sql +col_TabPrPostup_EXT RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\col_TabPrPostup_EXT.sql +col_TabStavSkladu_EXT RCDATA C:\_zakaznici\Rootvin\_sql\col_TabStavSkladu_EXT.sql +col_TabDokladyZbozi_EXT RCDATA C:\_zakaznici\Rootvin\_sql\col_DokladyZbozi_EXT.sql +col_TabPohybyZbozi_EXT RCDATA C:\_zakaznici\Rootvin\_sql\col_PohybyZbozi_EXT.sql +col_TabEvidRozpracOperR_EXT RCDATA C:\_zakaznici\Rootvin\_sql\col_EvidRozpracOperR_EXT.sql +col_TabKmenZbozi_EXT RCDATA C:\_zakaznici\Rootvin\_sql\col_KmenZbozi_EXT.sql +col_TabVazbyPrikazu_EXT RCDATA C:\_zakaznici\Rootvin\_sql\col_VazbyPrikazu_EXT.sql + +ep_hdcdzapi_ZpracujPrijataData RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\ep_HDCDZApi_ZpracujPrijataData.sql +ep_hdcdzapi_GetKusovnik RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\ep_HDCDZApi_GetKusovnik.sql +ep_Vyroba_GenVydejZeMzdy RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\ep_Vyroba_GenVydejZeMzdy.sql +ep_Vyroba_GenOdvodZeMzdy RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\ep_Vyroba_GenOdvodZeMzdy.sql +ep_Vyroba_DoplnSkladProVydejDleDokladu RCDATA C:\_zakaznici\pluginy_obecne\HDCApi2\_custom\Rootvin\sql\ep_Vyroba_DoplnSkladProVydejDleDokladu.sql +ep_Vyroba_InsertEvidRozpracOper RCDATA .\sql\ep_Vyroba_InsertEvidRozpracOper.sql +ep_Vyroba_InsertEvidRozpracOperPol RCDATA .\sql\ep_Vyroba_InsertEvidRozpracOperPol.sql + +ep_P01_HDC1 RCDATA C:\_zakaznici\Rootvin\_sql\ep_P01_HDC1.sql +ep_P01 RCDATA C:\_zakaznici\Rootvin\_sql\ep_P01.sql +ep_P03_HDC1 RCDATA C:\_zakaznici\Rootvin\_sql\ep_P03_HDC1.sql +ep_P03 RCDATA C:\_zakaznici\Rootvin\_sql\ep_P03.sql +ep_V03_HDC1 RCDATA C:\_zakaznici\Rootvin\_sql\ep_V03_HDC1.sql +ep_V03 RCDATA C:\_zakaznici\Rootvin\_sql\ep_V03.sql +ep_V01_HDC1 RCDATA C:\_zakaznici\Rootvin\_sql\ep_V01_HDC1.sql +ep_V01 RCDATA C:\_zakaznici\Rootvin\_sql\ep_V01.sql + +trg__TabPohybyZbozi_HDC_IU RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabPohybyZbozi_HDC_IU.sql +trg__TabPohybyZbozi_HDC_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabPohybyZbozi_HDC_D.sql +tbl_hdc_PZ_PuvodniVC RCDATA C:\_zakaznici\Rootvin\_sql\tbl__hdc_PZ_PuvodniVC.sql +ep_Vyroba_Doklady_Micharna RCDATA C:\_zakaznici\Rootvin\_sql\ep_Vyroba_Doklady_Micharna.sql +ep_Vyroba_Doklady_PomocPrijemka RCDATA C:\_zakaznici\Rootvin\_sql\ep_Vyroba_Doklady_PomocPrijemka.sql +ef_GetDatumASmenu RCDATA C:\_zakaznici\Rootvin\_sql\ef_GetDatumASmenu.sql +ef_DilecGetStroj RCDATA C:\_zakaznici\Rootvin\_sql\ef_DilecGetStroj.sql +ef_Kmen_VratPocetKsVKartonu RCDATA C:\_zakaznici\Rootvin\_sql\ef_Kmen_VratPocetKsVKartonu.sql +tbl_TabVyrobaObjednavky RCDATA C:\_zakaznici\Rootvin\_sql\tbl__TabVyrobaObjednavky.sql +trg__TabVyrobaObjednavky_IU RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabVyrobaObjednavky_IU.sql +trg__TabVyrobaObjednavky_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabVyrobaObjednavky_D.sql +tbl_TabVyrobaOperaceStartStop RCDATA C:\_zakaznici\Rootvin\_sql\tbl__TabVyrobaOperaceStartStop.sql +tbl_TabVyrobaOperaceStartStopVydej RCDATA C:\_zakaznici\Rootvin\_sql\tbl__TabVyrobaOperaceStartStopVydej.sql +tbl_TabVyrobaTestoVyroba RCDATA C:\_zakaznici\Rootvin\_sql\tbl__TabVyroba_TestoVyroba.sql +trg__TabDokladyZbozi_HDC_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabDokladyZbozi_HDC_D.sql +trg__hdc_PZ_PuvodniVC_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__hdc_PZ_PuvodniVC_D.sql +trg__TabVyrCisPrikaz_HDC_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabVyrCisPrikaz_HDC_D.sql +trg__TabVyrobaOperaceStartStop_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabVyrobaOperaceStartStop_D.sql +trg__TabPrikazMzdyAZmetky_HDC_D RCDATA C:\_zakaznici\Rootvin\_sql\trg__TabPrikazMzdyAZmetky_HDC_D.sql diff --git a/_custom/Westra/customDefs.inc b/_custom/Westra/customDefs.inc new file mode 100644 index 0000000..31d1594 --- /dev/null +++ b/_custom/Westra/customDefs.inc @@ -0,0 +1,3 @@ + ,uHeOObj_Custom in '_custom\Westra\uHeOObj_Custom.pas' + ,uCtrlCustom in '_custom\Westra\uCtrlCustom.pas' + ,uSvcCustom in '_custom\Westra\uSvcCustom.pas' diff --git a/_custom/Westra/sqlDefs.inc b/_custom/Westra/sqlDefs.inc new file mode 100644 index 0000000..71a2b43 --- /dev/null +++ b/_custom/Westra/sqlDefs.inc @@ -0,0 +1 @@ +// arrDefs.Add('ep_HDCDZApi_ZpracujPrijataData'); diff --git a/_custom/Westra/uCtrlCustom.pas b/_custom/Westra/uCtrlCustom.pas new file mode 100644 index 0000000..b576c2c --- /dev/null +++ b/_custom/Westra/uCtrlCustom.pas @@ -0,0 +1,106 @@ +unit uCtrlCustom; + +interface + +uses + MVCframework, + MVCframework.Commons, + MVCframework.Serializer.Commons, +// MVCframework.Serializer.Intf, + System.Generics.Collections, // kvuli TDictionary + System.RegularExpressions, +// JsonDataObjects, + uCommons, // kvuli EServiceException + uCtrlBase, +// uSvc_Base, + helTabsBIDs, + uHeOObj_Base, + uHeOObj_Custom, + uSvcCustom, + MVCFramework.Swagger.Commons; // kvuli dokumentaci + +type + + [MVCPath('/westra')] + TWestraController = class(TBaseController) +{ + strict private + FSelfSvc: TWestraService; + strict protected + function GetWestraService: TWestraService; +} + public + destructor Destroy; override; + +// [MVCDoc('Pomocí POST zapíše obecná json data do Heliosu')] + [MVCPath('/zapisjson')] // zapis obecnych json data do Heliosu + [MVCHTTPMethod([httpPOST])] + [MVCSwagSummary('MBM Westra', 'Zápis JSON dat do db Heliosu', 'GORZapisJSONDoHeliosu')] + [MVCConsumes(TMVCMediaType.APPLICATION_JSON)] + procedure ZapisJSONDoHeliosu (CTX: TWebContext); + + [MVCPath('/nactiurl')] // zapis obecnych json data do Heliosu + [MVCHTTPMethod([httpGET])] + [MVCSwagSummary('MBM Westra', 'Načte data ze zadané URL adresy', 'GORNacteniDatURL')] + [MVCSwagParam(plQuery, 'url', 'URL adresa', ptString, true)] + procedure NactiDataZURL ([MVCFromQueryString('url', '')] sURL: string='' + ); + + end; + + + +implementation +uses + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + System.StrUtils, + System.SysUtils, + System.JSON, + JsonDataObjects, + Winapi.ActiveX, + uDataMod, + Quick.Logger; + +const + selSloupce = ''; + + + + +{ TWestraController } + destructor TWestraController.Destroy; + begin +// FSelfSvc.Free; + inherited; + end; + + + + procedure TWestraController.ZapisJSONDoHeliosu (CTX: TWebContext); + var respData, jsonData: string; +// o: System.JSON.TJSONObject; + begin + respData:= ''; + try + jsonData:= CTX.Request.Body.Trim; + if (jsonData<>'') then + GetWestraService.ZapisJsonDoHeliosu (jsonData, respData); + ResponseStatus(HTTP_STATUS.OK, 'OK'); + Render(respData); + except + RenderStatusMessage (200); + end; + end; + + + procedure TWestraController.NactiDataZURL (sURL: string = ''); + begin + + end; + + +end. diff --git a/_custom/Westra/uHeOObj_Custom.pas b/_custom/Westra/uHeOObj_Custom.pas new file mode 100644 index 0000000..39894cd --- /dev/null +++ b/_custom/Westra/uHeOObj_Custom.pas @@ -0,0 +1,7 @@ +unit uHeOObj_Custom; +{$RTTI EXPLICIT METHODS([vcPublic, vcPublished]) FIELDS([vcPrivate, vcProtected, vcPublic, vcPublished]) PROPERTIES([vcPublic, vcPublished])} + + +interface +implementation +end. diff --git a/_custom/Westra/uSvcCustom.pas b/_custom/Westra/uSvcCustom.pas new file mode 100644 index 0000000..695aade --- /dev/null +++ b/_custom/Westra/uSvcCustom.pas @@ -0,0 +1,140 @@ +unit uSvcCustom; + +interface + +uses + System.Classes, + System.JSON, + System.Generics.Collections, + Winapi.ActiveX, + System.DateUtils, + System.SysUtils, + JsonDataObjects, + uSvc_Base, + uCommons, // kvuli EServiceException + helTabsBIDs, + uHeoObj_Base, + uHeOObj_Custom, + uHeoObj_Vyroba, + uSvc_ObehZbozi, + uSvc_Vyroba; + + +const + CRLF = #13#10; + + + +type + TWestraService = class(TServiceBase) + public + procedure ZapisJsonDoHeliosu (jsonData: string; var respString: string); + end; + + + +implementation +uses + System.StrUtils, + FireDAC.Stan.Option, + FireDAC.Comp.Client, + FireDAC.Stan.Param, + MVCFramework.FireDAC.Utils, + MVCFramework.DataSet.Utils, + MVCFramework.Serializer.Commons; + + + + +{ TWestraService } + + procedure TWestraService.ZapisJsonDoHeliosu (jsonData: string; var respString: string); + var lSQL, taskStr, strTmp, strTmp2, code, rs, guidIdent: string; + guid: TGuid; + akce: string; + j, t, a, v: JsonDataObjects.TJSONObject; + i, ii, taskDZId, taskId, intTemp, idJSON: integer; + jeOld: boolean; + lQry: TFDQuery; + w: TStreamWriter; + jo: System.JSON.TJsonObject; + begin + idJSON:= 0; + respString:= '['; + + jo:= System.JSON.TJsonObject.Create; + + jsonData:= jsonData.Trim; + if (jsonData<>'') then + begin + lQry:= TFDQuery.Create(nil); + try + lQry.Connection:= FDM.sqlConn; + try + CoCreateGuid(guid); + if (System.SysUtils.CreateGUID(guid)=S_OK) then + guidIdent:= System.SysUtils.GUIDToString(guid) + else + guidIdent:= self.NewUUID32; + lSQL:= 'INSERT ' + tblPrijataJsonData + ' (IdPHIdent, GUIDIdent, JSONData) SELECT 0, CONVERT(uniqueidentifier, N' + guidIdent.QuotedString + '), N' + jsonData.QuotedString; + FDM.sqlConn.ExecSQL(lSQL); + lSQL:= 'SELECT ID FROM ' + tblPrijataJsonData + ' WHERE GUIDIdent=CONVERT(uniqueidentifier, N' + guidIdent.QuotedString + ')'; + lQry.Open(lSQL); + if (lQry.RecordCount=1) then + begin + idJSON:= lQry.FieldByName('ID').AsInteger; + respString:= 'OK'; + jo.AddPair('heliosid', idJSON.ToString); + end; + except on E:Exception do + begin + respString:= 'NOT OK'; + raise EServiceException.Create('Chyba zápisu JSON dat: ' + E.Message); + end; + end; + finally + FreeAndNil(lQry); + end; + + + CoInitialize(nil); + j:= TJsonObject.Parse(jsonData) as JsonDataObjects.TJsonObject; + try + if (j<>nil) then + if (j.Contains('akce')) then + begin + akce:= j.S['akce'].Trim; + if (idJSON>0) and (akce<>'') then + FDM.sqlConn.ExecSQL('UPDATE ' + tblPrijataJsonData + ' SET Akce=N' + akce.QuotedString + ' WHERE ID=' + idJSON.ToString); +{ + for i:=0 to j['tasks'].Count-1 do + begin + try + t:= j['tasks'].Items[i]; + taskDZId:= t.I['id']; // j['tasks'].Items[i].I['id']; + taskStr:= j['tasks'].Items[i].ObjectValue.ToString; + except on E:Exception do + end; + end; +} + end; + finally + j.Free; + end; + CoUninitialize; + + end + else + respString:= 'NO input data'; + + jo.AddPair('status', respString); + respString:= '[' +respString + ']'; + + respString:= jo.ToString; + + + end; + + + +end. diff --git a/_custom/Westra/uWebModCustom.inc b/_custom/Westra/uWebModCustom.inc new file mode 100644 index 0000000..9b18d5c --- /dev/null +++ b/_custom/Westra/uWebModCustom.inc @@ -0,0 +1,2 @@ + FEngine.AddController (TWestraController); + diff --git a/_custom/Westra/westraDP.xml b/_custom/Westra/westraDP.xml new file mode 100644 index 0000000..093b55c --- /dev/null +++ b/_custom/Westra/westraDP.xml @@ -0,0 +1,2 @@ + + diff --git a/_custom/Westra/winSvc/consts.inc b/_custom/Westra/winSvc/consts.inc new file mode 100644 index 0000000..e69de29 diff --git a/_custom/Westra/winSvc/impl.inc b/_custom/Westra/winSvc/impl.inc new file mode 100644 index 0000000..0a04d31 --- /dev/null +++ b/_custom/Westra/winSvc/impl.inc @@ -0,0 +1,499 @@ +// ########################################################### +// TQTXNetworkPath +// ########################################################### + + + procedure TQTXNetworkPath.Disconnect (const aForce: Boolean); + var mRes: Integer; + mCount: Integer; + begin +// Close network connection if connected + if (FConnected=True) and (FOwned=True) then + begin + +// Attempt to close the connection + mRes:= WNetCancelConnection (@FUNCData,aForce); + +/* + Since files can be open temporarily, we try to + wait a little before we re-try to close again. + A maximum of 100 attempts is set +*/ + if (mRes=ERROR_OPEN_FILES) then + begin + mCount:=0; + while (mRes=ERROR_OPEN_FILES) do + begin + Inc (mCount); + if (mCount=100) then + Break; + Sleep(100); + mRes:= WNetCancelConnection (@FUNCData,aForce); + end; + end; + + FConnected:=False; + FOwned:=False; + SetLength (FHostName,0); + SetLength (FRemotePath,0); + SetLength (FUser,0); + SetLength (FPassword,0); + SetLength (FURI,0); + end; + end; + + + + + procedure TQTXNetworkPath.ClearLastError; + begin + FFailed:= false; + SetLength (FLastError,0); + end; + + + + + procedure TQTXNetworkPath.setLastError (aValue:String); + begin + FLastError:= Trim (aValue); + FFailed:= Length(FLastError)>0; + end; + + + + + function TQTXNetworkPath.getRelativePath (aFilename:String):String; + begin + if (FConnected) then + result:= FURI + aFilename + else + result:= aFilename; + end; + + + + + destructor TQTXNetworkPath.Destroy; + begin + if (FConnected) then + Disconnect(True); + inherited; + end; + + + +// ########################################################### +// THeoWestraDataPumpFileThread +// ########################################################### + + constructor THeoWestraDataPumpFileThread.Create (AOnTerminate: TNotifyEvent; AService: TService); + begin + inherited Create (false); // Create thread in NOT suspended mode + FMainService:= AService; + FLock:= TCriticalSection.Create; + FRunning:= false; + FTermEvent:= TEvent.Create (nil, False, False, ''); + + +// OnTerminate:= AOnTerminate; +// FreeOnTerminate:= true; + FreeOnTerminate:= false; // Ensure manual freeing of thread resources + end; + + + + + destructor THeoWestraDataPumpFileThread.Destroy; + begin +{$IFDEF DEBUG} + Write('Ukoncuji thread WESTRA file...'); +{$ENDIF} + if (FTimer<>0) then + CloseHandle (FTimer); + FTermEvent.Free; + FRunning:= false; + FMainService:= nil; + Terminate; + FLock.Free; + inherited; +{$IFDEF DEBUG} + WriteLn('OK'); +{$ENDIF} + end; + + + + procedure THeoWestraDataPumpFileThread.TerminatedSet; + begin + FTermEvent.SetEvent; + end; + + + + procedure THeoWestraDataPumpFileThread.ThreadTerminate; + begin + Terminate; + WaitFor; + end; + + + + procedure THeoWestraDataPumpFileThread.Execute; + const _Second = 10_000_000; + var lSQL, errMsg, url, outData, scanPath, fName, fNameP1, fNameP2, fNameP3, fNameP4, fNameP5, loopCasTyp: string; + cisloZak, skp, selFile, fileExt: string; + idKmen: integer; + seznamNazvu: TList; + fNames, castiName: TStringDynArray; + srchPatterns: array[0..2] of string; + srchPattern: string; + + lLoop, idDigiFile, i, cnt, idx, fCount: Integer; + lLoopMax, koefProCas: integer; + logRunCnt: integer; + Msg: TMsg; + firstRun, inProg, inDL: boolean; + lQry: TFDQuery; + sqlConnX, sqlConnX2: TFDConnection; + sqlTrans: IFDPhysTransaction; + + lBusy: LongInt; + liDueTime: LARGE_INTEGER; + + cfgFile: string; + specCfgXML: XML.XmlIntf.IXMLDocument; + n1: XML.XmlIntf.IXMLNode; + attribs: IXMLNodeList; + attrIdx: integer; + + netPath: TQTXNetworkPath; + + function RemoveAlphas (const S: string): string; + begin + SetLength(result, S.Length); + var ResChr:= PChar(result); + var LActualLength:= 0; + for var i:=1 to S.Length do + if (CharInSet(s[i], ['0'..'9'])) then + begin + Inc(LActualLength); + ResChr^:= s[i]; + Inc(ResChr); + end; + SetLength(result, LActualLength); + end; + + + begin + lLoop:= 0; + idDigiFile:= 0; + logRunCnt:= 1; + +{ + koefProCas:= 0; // default vteriny + loopCasTyp:= '???'; + case DZTaksZapisTypCas of + 0: koefProCas:= 1; + 1: koefProCas:= 60; + 2: koefProCas:= 3600; + end; + lLoopMax:= koefProCas * intProcessDZTasksSec; + case DZTaksZapisTypCas of + 0: loopCasTyp:= 'sek'; + 1: loopCasTyp:= 'min'; + 2: loopCasTyp:= 'hod'; + end; +} + + lLoopMax:= 10; // v minutach !!!! + + scanPath:= 'Z:\'; + srchPatterns[0]:= '*.stp'; + srchPatterns[1]:= '*.step'; + srchPatterns[2]:= '*.dxf'; + + try + try + CoInitialize(nil); + cfgFile:= ExtractFilePath(ParamStr(0)) + 'westraDP.xml'; + if (FileExists(cfgFile)) then + begin + specCfgXML:= Xml.XMLDoc.TXMLDocument.Create(nil); + specCfgXML.LoadFromFile (cfgFile); + specCfgXML.Active:= true; + if not(specCfgXML.IsEmptyDoc) then + begin + if (specCfgXML.DocumentElement<>nil) then + begin + n1:= specCfgXML.DocumentElement; + if (n1.NodeName='config') then + begin + attribs:= n1.AttributeNodes; + + attrIdx:= attribs.IndexOf('fileScanIntervalMin'); + if (attrIdx>-1) then + if (attribs.Get(attrIdx).NodeValue<>null) then + lLoopMax:= attribs.Get(attrIdx).NodeValue; + + attrIdx:= attribs.IndexOf('pathToScan'); + if (attrIdx>-1) then + if (attribs.Get(attrIdx).NodeValue<>null) then + scanPath:= attribs.Get(attrIdx).NodeValue; + + end; // n1 = config + end; // specCfgXML.DocumentElement<>nil + end; // not specCfgXML.IsEmptyDoc + end; // FileExists(cfgFile) + except + end; + finally + begin + if (specCfgXML<>nil) then + specCfgXML:= nil; + CoUninitialize; + end; + end; + + datMod.LogInfo (Quick.Logger.etInfo, 'Westra DataPumpFile interval: ' + lLoopMax.ToString + ' min'); + lLoopMax:= lLoopMax * 60; // minuty na vteriny + + + firstRun:= true; + inProg:= false; + FRunning:= true; + + try +// netPath:= TQTXNetworkPath.Create(nil); +// netPath.Connect(); + except + end; + + + if (1=1) then // pro rychle vypnuti + begin + FTimer:= CreateWaitableTimer (nil, true, 'WestraDataPumpFileWaitableTimer'); + liDueTime.QuadPart:= -1*_Second; + + + try + while not(Terminated) or not(FRunning) do + begin + if (HDCDZApiService<>nil) then + if (HDCDZApiService.Terminated) then + begin + Terminate; + FRunning:= false; + end; + + PeekMessage (&Msg, 0, 0, 0, PM_NOREMOVE); { Create message queue } + + if (lLoop=lLoopMax) or (firstRun) then // pri startu a pak kazdou minutu + begin + firstRun:= false; + + if (logRunCnt<4) then + datMod.LogInfo (Quick.Logger.etInfo, 'Spoustim scan ' + logRunCnt.toString + '...'); + if (logRunCnt=4) then + datMod.LogInfo (Quick.Logger.etInfo, 'Spoustim Scan - bezi ale dal neloguju'); + + try + if not(inProg) then // nebezi uz ? + begin + + if (1=1) then // pro rychle vypnuti + begin + seznamNazvu:= TList.Create; + try + try + for srchPattern in srchPatterns do + begin + if not(Terminated) then + begin + fNames:= TDirectory.GetFiles (scanPath, srchPattern, TSearchOption.soAllDirectories); + seznamNazvu.AddRange (fNames); + end; // Terminated + end; // srchPattern + except // Ignorujeme chyby přístupu (např. Permission Denied) a pokračujeme + on E: EAccessViolation do ; + on E: EInOutError do ; + end; + fNames:= seznamNazvu.ToArray; + finally + seznamNazvu.Free; + end; + + if (fNames<>nil) then + if (Length(fNames)>0) then + begin + sqlConnX:= TFDConnection.Create (nil); + try + + sqlConnX.Params.SetStrings (datMod.sqlConnParams); + // sqlConnX.TxOptions.AutoCommit:= false; + sqlConnX.Open; + lQry:= TFDQuery.Create(nil); + lQry.Connection:= sqlConnX; + + for fName in fNames do + begin + if (Terminated) then + Break; + fNameP1:= fName.Replace(scanPath,''); + if (LeftStr(fNameP1,1)='\') then + fNameP1:= MidStr(fNameP1, 2, Length(fNameP1)); + + SetLength(castiName,0); + if (fNameP1.IndexOf('\')>-1) then + castiName:= System.StrUtils.SplitString (fNameP1, '\'); + + fNameP2:= ''; + cisloZak:= ''; + fNameP3:= ''; + idKmen:= 0; + selFile:= ''; + fNameP4:= ''; + fNameP5:= ''; + + if (Length(castiName)>0) then + begin + fNameP2:= castiName[0]; // zakazka W.... + if (Length(castiName)>1) then + fNameP3:= castiName[1]; // dilec ??? (03.100.1546) + if (Length(castiName)>2) then + fNameP4:= castiName[2]; // adresar DFX ??? + if (Length(castiName)>3) then + fNameP5:= castiName[3]; + end + else + begin + fNameP2:= ''; // zakazka W..... + if (fNameP1.IndexOf(' ')>-1) then + fNameP2:= LeftStr(fNameP1, fNameP1.IndexOf(' ')) + else + if (fNameP1.IndexOf('\')>-1) then + fNameP2:= LeftStr(fNameP1, fNameP1.IndexOf('\')); + end; + + if (fNameP2<>'') then + begin + if (fNameP2.IndexOf(' ')>-1) then + fNameP2:= LeftStr(fNameP2, fNameP2.IndexOf(' ')); + lQry.Open ('SELECT CisloZakazky FROM ' + tblZak + ' WHERE Nazev=N' + ('W'+fNameP2).QuotedString); + if (lQry.RecordCount=1) then + cisloZak:= lQry.FieldByName('CisloZakazky').AsString; + + if (cisloZak<>'') and (fNameP3<>'') then + begin + if (Length(fNameP3)-Length(fNameP3.Replace('.',''))=2) then + begin + lSQL:= 'SELECT ID FROM ' + tblKZ + ' WHERE SkupZbo LIKE N''V%'' AND ISNULL(SKP,N'''')=N' + fNameP3.QuotedString; + lQry.Open(lSQL); + if (lQry.RecordCount=1) then + idKmen:= lQry.FieldByName('ID').asInteger; + end; + + if (idKmen>0) then + begin + if (fNameP4<>'') then + for srchPattern in srchPatterns do + if (fNameP4.IndexOf(srchPattern.Replace('*',''))>-1) then + selFile:= fNameP4; + if (selFile='') and (fNameP5<>'') then + for srchPattern in srchPatterns do + if (fNameP5.IndexOf(srchPattern.Replace('*',''))>-1) then + selFile:= fNameP5; + + if (selFile<>'') then + begin + lSQL:= 'SELECT 1 FROM ' + tblDokumVaz + ' v WITH(NOLOCK) JOIN ' + tblDokum + ' d WITH(NOLOCK) ON (d.ID=v.IdDok) WHERE v.IdentVazby=8' + + ' AND v.IdTab=' + idKmen.ToString + ' AND d.Popis=N' + selFile.QuotedString + ' AND d.JmenoACesta=N' + fName.QuotedString; + lQry.Open (lSQL); + if (lQry.RecordCount=0) then + begin + lSQL:= 'DECLARE @d INT' + CRLF + 'INSERT ' + tblDokum + ' (Popis, JmenoACesta) SELECT N' + selFile.QuotedString + ', N' + fName.QuotedString + CRLF + + 'SET @d=SCOPE_IDENTITY()' + CRLF + 'INSERT ' + tblDokumVaz + ' (IdentVazby, IdTab, IdDok) SELECT 8, ' + idKmen.ToString + ', @d'; + try + sqlConnX.ExecSQL (lSQL); + except + end; + end; // nemam vazbu, zaloz ji + end; // selFile<>'' + end; // idKmen>0 + end; // cisloZak<>'' + + end; // fNameP2<>'' + + end; // for fName in fNames + finally + end; + end; + + + if (sqlConnX.Connected) then + inProg:= false; + if (lQry<>nil) then + begin + lQry.Close; + FreeAndNil (lQry); + end; + sqlConnX.Close; + FreeAndNil (sqlConnX); +// sqlConnX.Free; +// sqlConnX:= nil; + +// datMod.LogInfo (Quick.Logger.etInfo, 'Zrusena SQL connection - downloadPDF id ' + idDigiFile.ToString); + end; + end; // not(inProg) + + except on E:Exception do + begin + inProg:= false; + if (lQry<>nil) then + begin + lQry.Close; + FreeAndNil (lQry); + end; + if (sqlConnX<>nil) then + begin + if (sqlConnX.InTransaction) then + sqlConnX.Rollback; + sqlConnX.Close; + FreeAndNil (sqlConnX); +// sqlConnX.Free; +// sqlConnX:= nil; + end; + errMsg:= E.Message; // datMod.sqlQry11.FieldByName('ErrMsg').AsString; + end; + end; + + + lLoop:= 0; + if (logRunCnt<5) then + Inc (logRunCnt); + end; + Inc (lLoop); + + if (FTimer<>0) then + SetWaitableTimer (FTimer, TLargeInteger(liDueTime), 0, nil, nil, false); + repeat + lBusy:= MsgWaitForMultipleObjects (1, FTimer, false, INFINITE, QS_ALLINPUT); + until lBusy = WAIT_OBJECT_0; +// Sleep (998); + + end; + finally + end; + + end; + + if (sqlConnX2<>nil) then + begin + if (sqlConnX2.Connected) then + sqlConnX2.Close; + FreeAndNil (sqlConnX2); + end; + + end; + + diff --git a/_custom/Westra/winSvc/mainPrivs.inc b/_custom/Westra/winSvc/mainPrivs.inc new file mode 100644 index 0000000..412d7e3 --- /dev/null +++ b/_custom/Westra/winSvc/mainPrivs.inc @@ -0,0 +1 @@ + westraDataPumpFileThr: THeoWestraDataPumpFileThread; diff --git a/_custom/Westra/winSvc/mainSvcCont.inc b/_custom/Westra/winSvc/mainSvcCont.inc new file mode 100644 index 0000000..9d454c7 --- /dev/null +++ b/_custom/Westra/winSvc/mainSvcCont.inc @@ -0,0 +1,3 @@ + if (westraDataPumpFileThr<>nil) then + if (westraDataPumpFileThr.Suspended) then + westraDataPumpFileThr.Resume; diff --git a/_custom/Westra/winSvc/mainSvcExec.inc b/_custom/Westra/winSvc/mainSvcExec.inc new file mode 100644 index 0000000..208649a --- /dev/null +++ b/_custom/Westra/winSvc/mainSvcExec.inc @@ -0,0 +1,6 @@ + if (westraDataPumpFileThr<>nil) then + if not(westraDataPumpFileThr.Started) then + begin + westraDataPumpFileThr.Start; + datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby WESTRA DataPump file'); + end; diff --git a/_custom/Westra/winSvc/mainSvcPause.inc b/_custom/Westra/winSvc/mainSvcPause.inc new file mode 100644 index 0000000..3141315 --- /dev/null +++ b/_custom/Westra/winSvc/mainSvcPause.inc @@ -0,0 +1,3 @@ + if (westraDataPumpFileThr<>nil) then + if not(westraDataPumpFileThr.Suspended) then + westraDataPumpFileThr.Suspend; diff --git a/_custom/Westra/winSvc/mainSvcStart.inc b/_custom/Westra/winSvc/mainSvcStart.inc new file mode 100644 index 0000000..0515465 --- /dev/null +++ b/_custom/Westra/winSvc/mainSvcStart.inc @@ -0,0 +1,12 @@ + datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby WESTRA DataPump File - interval 10 minut...'); +{$IFDEF DEBUG} + WriteLn ('Start sluzby WESTRA DataPump File - inverval 10 minut...'); +{$ENDIF} + westraDataPumpFileThr:= THeoWestraDataPumpFileThread.Create (ThreadTerminated, self); + if (westraDataPumpFileThr.Started) then + begin + datMod.LogInfo (Quick.Logger.etInfo, ' OK'); +{$IFDEF DEBUG} + WriteLn (' OK'); +{$ENDIF} + end; diff --git a/_custom/Westra/winSvc/mainSvcStop.inc b/_custom/Westra/winSvc/mainSvcStop.inc new file mode 100644 index 0000000..9d43da9 --- /dev/null +++ b/_custom/Westra/winSvc/mainSvcStop.inc @@ -0,0 +1,18 @@ + if Assigned(westraDataPumpFileThr) then + begin +{$IFDEF DEBUG} + WriteLn ('Ukoncuji sluzbu WESTRA DataPump File...'); +{$ENDIF} + datMod.LogInfo (Quick.Logger.etInfo, 'Ukoncuji sluzbu WESTRA DataPump File...'); + try + westraDataPumpFileThr.ThreadTerminate; + FreeAndNil (westraDataPumpFileThr); + except on E:Exception do +// add event in eventlog with reason why the service couldn't stop + LogMessage('Cannot stop service: ' + E.Message, EVENTLOG_ERROR_TYPE, 0, 1); + end; + datMod.LogInfo (Quick.Logger.etInfo, ' OK'); +{$IFDEF DEBUG} + WriteLn (' OK'); +{$ENDIF} + end; diff --git a/_custom/Westra/winSvc/readCfg.inc b/_custom/Westra/winSvc/readCfg.inc new file mode 100644 index 0000000..e036683 --- /dev/null +++ b/_custom/Westra/winSvc/readCfg.inc @@ -0,0 +1,3 @@ + + +fileScanIntervalMin \ No newline at end of file diff --git a/_custom/Westra/winSvc/types.inc b/_custom/Westra/winSvc/types.inc new file mode 100644 index 0000000..28da5b1 --- /dev/null +++ b/_custom/Westra/winSvc/types.inc @@ -0,0 +1,48 @@ + THeoWestraDataPumpFileThread = class(TThread) + private + FMainService: TService; + FLock: TCriticalSection; + FTermEvent: TEvent; + FRunning: boolean; + FTimer: THandle; + protected + procedure Execute; override; + procedure TerminatedSet; override; // XE2+ only * + public + constructor Create (AOnTerminate: TNotifyEvent; AService: TService); + destructor Destroy; override; + procedure ThreadTerminate; + end; + + + TQTXNetworkPath = class(TObject) + private + FHostName: String; + FRemotePath: String; + FUser: String; + FPassword: String; + FConnected: Boolean; + FOwned: Boolean; + FLastError: String; + FFailed: Boolean; + FUNCData: packed array[0..4096] of char; + FURI: String; + protected + procedure ClearLastError; + procedure setLastError (aValue:String); + public + property Active:Boolean read FConnected; + property HostName:String read FHostName; + property NetworkPath:String read FRemotePath; + property LastError:String read FLastError; + property Failed:Boolean read FFailed; + + function getRelativePath (aFilename:String): string; + + function Connect (aHostName:String; + aNetworkPath:String; + const aUsername:String=''; + const aPassword:String=''): boolean; + procedure Disconnect (const aForce:Boolean=False); + destructor Destroy;override; + end; diff --git a/_custom/Westra/winSvc/uses.inc b/_custom/Westra/winSvc/uses.inc new file mode 100644 index 0000000..e69de29 diff --git a/_custom/Westra/winSvc/usesTop.inc b/_custom/Westra/winSvc/usesTop.inc new file mode 100644 index 0000000..9e7f5f2 --- /dev/null +++ b/_custom/Westra/winSvc/usesTop.inc @@ -0,0 +1 @@ + System.Net.HttpClient, System.Threading, System.Types, \ No newline at end of file diff --git a/_custom/Westra/winSvc/vars.inc b/_custom/Westra/winSvc/vars.inc new file mode 100644 index 0000000..10f7966 --- /dev/null +++ b/_custom/Westra/winSvc/vars.inc @@ -0,0 +1 @@ + intervalFileScan: integer; diff --git a/_custom/Westra/zdroje.RES b/_custom/Westra/zdroje.RES new file mode 100644 index 0000000..36f26e2 Binary files /dev/null and b/_custom/Westra/zdroje.RES differ diff --git a/_custom/Westra/zdroje.rc b/_custom/Westra/zdroje.rc new file mode 100644 index 0000000..e69de29 diff --git a/compileZdroje.cmd b/compileZdroje.cmd index 7029796..f97e16f 100644 --- a/compileZdroje.cmd +++ b/compileZdroje.cmd @@ -2,6 +2,7 @@ rem copy NUL sqlZdroje.res "C:\Program files (x86)\Embarcadero\Studio\23.0\bin\brcc32.exe" sqlZdroje.rc "C:\Program files (x86)\Embarcadero\Studio\23.0\bin\brcc32.exe" .\_custom\Rootvin\zdroje.rc +rem "C:\Program files (x86)\Embarcadero\Studio\23.0\bin\brcc32.exe" .\_custom\Westra\zdroje.rc rem "C:\Program files (x86)\Embarcadero\Studio\23.0\bin\brcc32.exe" .\_custom\INCOSystems\zdroje.rc rem "C:\Program files (x86)\Embarcadero\Studio\23.0\bin\brcc32.exe" .\_custom\Gornicky\zdroje.rc rem "C:\Program files (x86)\Embarcadero\Studio\23.0\bin\brcc32.exe" .\_custom\EMPolar\zdroje.rc diff --git a/globalDefs.inc b/globalDefs.inc index 39a38c3..f04d0f8 100644 --- a/globalDefs.inc +++ b/globalDefs.inc @@ -17,6 +17,7 @@ //{$DEFINE CUSTOM_CTRL_INCOSystems} //{$DEFINE CUSTOM_CTRL_Gornicky} //{$DEFINE CUSTOM_CTRL_EMPolar} +//{$DEFINE CUSTOM_CTRL_Westra} @@ -39,5 +40,8 @@ {$IFDEF CUSTOM_CTRL_EMPolar} {$DEFINE CUSTOM_CTRL_FILES} {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + {$DEFINE CUSTOM_CTRL_FILES} +{$ENDIF} diff --git a/hdcDZApi.dpr b/hdcDZApi.dpr index 7f19497..fdb477e 100644 --- a/hdcDZApi.dpr +++ b/hdcDZApi.dpr @@ -1,4 +1,4 @@ -program hdcDZApi; +program hdcDZApi; {$IFDEF DEBUG} {$APPTYPE CONSOLE} @@ -11,6 +11,11 @@ uses Vcl.SvcMgr, System.SysUtils, Winapi.Windows, + System.Classes, + +{$IFDEF DEBUG} + Web.WebReq, +{$ENDIF} MVCFramework.Middleware.Swagger, MVCFramework.Swagger.Commons, @@ -78,6 +83,7 @@ uses ,uHeOObj_Custom in '_custom\INCOSystems\uHeOObj_Custom.pas' ,uCtrlCustom in '_custom\INCOSystems\uCtrlCustom.pas' ,uSvcCustom in '_custom\INCOSystems\uSvcCustom.pas' + {$R .\_custom\INCOSystems\zdroje.RES} {$ENDIF} {$IFDEF CUSTOM_CTRL_Gornicky} @@ -93,6 +99,13 @@ uses ,uSvcCustom in '_custom\EMPolar\uSvcCustom.pas' {$R '_custom\EMPolar\zdroje.RES'} {$ENDIF} + +{$IFDEF CUSTOM_CTRL_Westra} + ,uHeOObj_Custom in '_custom\Westra\uHeOObj_Custom.pas' + ,uCtrlCustom in '_custom\Westra\uCtrlCustom.pas' + ,uSvcCustom in '_custom\Westra\uSvcCustom.pas' + {$R '_custom\Westra\zdroje.RES'} +{$ENDIF} ; @@ -123,7 +136,10 @@ var Event : TInputrecord; var started: boolean; var stopped: boolean; + Application.Initialize; Application.CreateForm (TdatMod, datMod); +// Application.CreateForm(TWebModule1, WebModule1); + // In debug mode the server acts as a console application. // Create the TService descendant manually. @@ -134,6 +150,10 @@ var Event : TInputrecord; HDCDZApiService.ServiceAfterInstall (HDCDZApiService); + + if (WebRequestHandler<>nil) then + WebRequestHandler.WebModuleClass := WebModuleClass; + // Simulate service start. HDCDZApiService.ServiceStart (HDCDZApiService, started); // Keep the console box running (ServerContainer1 code runs in the background) @@ -179,9 +199,32 @@ var Event : TInputrecord; begin - ReportMemoryLeaksOnShutdown:= false; + ReportMemoryLeaksOnShutdown:= true; {$IFDEF DEBUG} +{ + if not Application.DelayInitialize or Application.Installing then + Application.Initialize; + + Application.CreateForm(THDCDZApiService, HDCDZApiService); + Application.CreateForm(TdatMod, datMod); +// thread ÄŤekajĂ­cĂ­ na ENTER + TThread.CreateAnonymousThread( + procedure + var Stopped: Boolean; + begin + Writeln('Stiskem ENTER ukonÄŤete...'); + Readln; + + TThread.Queue(nil, + procedure + begin + HDCDZApiService.ServiceStop(HDCDZApiService, Stopped); + end); + end + ).Start; + Application.Run; +} SpustitJakoPrg; {$ELSE} if (FindCmdLineSwitch('dbg', true)) then diff --git a/hdcDZApi.dproj b/hdcDZApi.dproj index b2f47fd..e698b8e 100644 --- a/hdcDZApi.dproj +++ b/hdcDZApi.dproj @@ -5,7 +5,7 @@ VCL hdcDZApi.dpr True - Release + Debug Win64 2 Application @@ -132,8 +132,8 @@ true 3 2025 - 521 - CompanyName=HD Consulting s.r.o. Strakonice;FileDescription=HDC x Pro Holding DataZone komunikator (API);FileVersion=3.0.2025.521;InternalName=;LegalCopyright=(c) 2022-25 HD Consulting s.r.o. / Tomas Buzin;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=XE12.3.1;LastCompiledTime=2025.05.21 17:11:11 + 1205 + CompanyName=HD Consulting s.r.o. Strakonice;FileDescription=HDC x Pro Holding DataZone komunikator (API);FileVersion=3.0.2025.1205;InternalName=;LegalCopyright=(c) 2022-25 HD Consulting s.r.o. / Tomas Buzin;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=XE12.3.1;LastCompiledTime=2025.12.05 12:42:18 api2-5.ico 3 2 @@ -252,8 +252,6 @@ TurboPack Essentials Delphi Runtime package Png Components for Delphi DMVCFramework - CopyRight (2010-2024) Daniele Teti and the DMVCFramework Team - Devart Universal Data Access FMX Components - Devart Universal Data Access Components JVCL Application and Form Components JVCL Band Objects JVCL Non-Visual Components @@ -280,9 +278,12 @@ JVCL Time Framework JVCL Wizard JVCL XP Controls + Devart Universal Data Access FMX Components + Devart Universal Data Access Components Ethea SVGIconImageList FMX components - Helios Orange Components Express Cross Platform Library Icon Library by Developer Express Inc. + File C:\Users\Public\Documents\Embarcadero\Studio\23.0\Bpl\VirtualTreesDD290.bpl not found + Helios Orange Components TurboPack LockBox 3 Delphi runtime package Embarcadero Standard Components TurboPack Orpheus Delphi datataware designtime package @@ -292,6 +293,8 @@ Ethea IconFontsImageList FMX components Microsoft Office 2000 Sample Automation Server Wrapper Components Microsoft Office XP Sample Automation Server Wrapper Components + File D:\Data\_komponenty\TeeGrid\Compiled\Delphi29.win32\Bin\DCLVCLTeeGrid29.bpl not found + File D:\Data\_komponenty\TeeGrid\Compiled\Delphi29.win32\Bin\DCLFMXTeeGrid29.bpl not found diff --git a/hdcDZApi.res b/hdcDZApi.res index 69aa6c7..fec891c 100644 Binary files a/hdcDZApi.res and b/hdcDZApi.res differ diff --git a/uCtrlBase.pas b/uCtrlBase.pas index 31b1203..1380213 100644 --- a/uCtrlBase.pas +++ b/uCtrlBase.pas @@ -24,6 +24,7 @@ uses {$IF DEFINED(CUSTOM_CTRL_Rootvin)}, uSvcCustom {$ENDIF} {$IF DEFINED(CUSTOM_CTRL_INCOSystems)}, uSvcCustom {$ENDIF} {$IF DEFINED(CUSTOM_CTRL_Gornicky)}, uSvcCustom {$ENDIF} +{$IF DEFINED(CUSTOM_CTRL_Westra)}, uSvcCustom {$ENDIF} {$IF DEFINED(CUSTOM_CTRL_EMPolar)}, uSvcCustom {$ENDIF} {$IF DEFINED(CUSTOM_CTRL_GatemaSD)}, uSvcCustomSDG {$ENDIF} ; @@ -87,8 +88,12 @@ type {$IFDEF CUSTOM_CTRL_Gornicky} FGornickyService: TGornickyService; {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + FWestraService: TWestraService; +{$ENDIF} {$IFDEF CUSTOM_CTRL_EMPolar} FEMPNadobaService: TEMPNadobaService; + FEMPVytezeniDoklService: TEMPVytezeniDoklService; {$ENDIF} function GetDataModule: TdatMod; strict protected @@ -148,8 +153,12 @@ type {$IFDEF CUSTOM_CTRL_Gornicky} function GetGornickyService: TGornickyService; {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + function GetWestraService: TWestraService; +{$ENDIF} {$IFDEF CUSTOM_CTRL_EMPolar} function GetEMPNadobaService: TEMPNadobaService; + function GetEMPVytezeniDoklService: TEMPVytezeniDoklService; {$ENDIF} public constructor Create; override; @@ -267,8 +276,13 @@ uses FGornickyService.Free; {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + FWestraService.Free; +{$ENDIF} + {$IFDEF CUSTOM_CTRL_EMPolar} FEMPNadobaService.Free; + FEMPVytezeniDoklService.Free; {$ENDIF} if Assigned(FDM) then @@ -630,6 +644,16 @@ uses {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + function TBaseController.GetWestraService: TWestraService; + begin + if not Assigned(FWestraService) then + FWestraService:= TWestraService.Create (GetDataModule); + result:= FWestraService; + end; +{$ENDIF} + + {$IFDEF CUSTOM_CTRL_EMPolar} function TBaseController.GetEMPNadobaService: TEMPNadobaService; begin @@ -637,6 +661,13 @@ uses FEMPNadobaService:= TEMPNadobaService.Create (GetDataModule); result:= FEMPNadobaService; end; + + function TBaseController.GetEMPVytezeniDoklService: TEMPVytezeniDoklService; + begin + if not Assigned(FEMPVytezeniDoklService) then + FEMPVytezeniDoklService:= TEMPVytezeniDoklService.Create (GetDataModule); + result:= FEMPVytezeniDoklService; + end; {$ENDIF} diff --git a/uCtrlObehZbozi.pas b/uCtrlObehZbozi.pas index af79cdd..ec65bb0 100644 --- a/uCtrlObehZbozi.pas +++ b/uCtrlObehZbozi.pas @@ -98,7 +98,7 @@ type [MVCFromQueryString('sklad', '')] sklad: string=''; [MVCFromQueryString('od', '')] odDatum: string=''; [MVCFromQueryString('do', '')] doDatum: string=''; - [MVCFromQueryString('realizovane', '')] realizovane: string=''; + [MVCFromQueryString('realizovane', '')] realizovane: string='0'; [MVCFromQueryString('seznam', '0')] jenSeznam: string=''; [MVCFromQueryString('minimum', '')] minimumDat: string=''; [MVCFromQueryString('polozky', '1')] polozky: string=''; @@ -272,7 +272,7 @@ uses { TDokladOZController } procedure TDokladOZController.GetAll (cisloorg: string=''; druhpohybu: string=''; radadokladu: string=''; sklad: string=''; odDatum: string=''; - doDatum: string=''; realizovane: string=''; jenSeznam: string=''; minimumDat: string=''; polozky: string=''; + doDatum: string=''; realizovane: string='0'; jenSeznam: string=''; minimumDat: string=''; polozky: string=''; sdServer: string=''); var iId, iCisOrg, dpz: integer; params: TDictionary; diff --git a/uCtrlVyroba.pas b/uCtrlVyroba.pas index 7ce8775..6589a51 100644 --- a/uCtrlVyroba.pas +++ b/uCtrlVyroba.pas @@ -133,10 +133,12 @@ type [MVCSwagSummary('Výroba - výrobní příkaz', 'Vrátí výrobní příkaz', 'VyrobniPrikazGetByID')] [MVCSwagResponses(200, 'Success', TVyrobniPrikaz)] [MVCSwagParam(plPath, 'id', 'ID příkazu', ptString, false)] + [MVCSwagParam(plQuery, 'stav', 'Příkazy jen v požadovaném stavu (číselně, např. 30=zadáno)', ptString, false)] [MVCSwagParam(plQuery, 'operace', '1=vrátí seznam výrobní operace', ptString, false, '0')] [MVCSwagParam(plQuery, 'material', '1=vrátí seznam materiálových požadavků', ptString, false, '0')] [MVCSwagParam(plQuery, 'debug', '1=zapise SQL query do log souboru', ptString, false, '0')] procedure GetByID (id: string='0'; + [MVCFromQueryString('stav', '')] stav: string=''; [MVCFromQueryString('operace', '0')] operace: string=''; [MVCFromQueryString('material', '0')] material: string=''; [MVCFromQueryString('debug', '0')] debug: string='' @@ -1074,6 +1076,9 @@ uses if (debug='1') then params.Add('debug', debug); + stav:= sanitizeSQLString(stav); + if (stav='10') or (stav='20') or (stav='30') or (stav='40') or (stav='50') or (stav='60') then + params.Add('stav', stav); radaVPr:= sanitizeSQLString (radaVPr); @@ -1168,7 +1173,7 @@ uses - procedure TVyrobniPrikazController.GetByID (id: string='0'; operace: string=''; material: string=''; debug: string=''); + procedure TVyrobniPrikazController.GetByID (id: string='0'; stav: string=''; operace: string=''; material: string=''; debug: string=''); var iId: integer; params: TDictionary; begin @@ -1180,6 +1185,10 @@ uses if not(TryStrToInt(id, iId)) then iId:= 0; + stav:= sanitizeSQLString(stav); + if (stav='10') or (stav='20') or (stav='30') or (stav='40') or (stav='50') or (stav='60') then + params.Add('stav', stav); + operace:= sanitizeSQLString(operace); if (operace='1') then params.Add('operace', '1'); diff --git a/uHeOObj_Base.pas b/uHeOObj_Base.pas index 9069a03..96b7fe9 100644 --- a/uHeOObj_Base.pas +++ b/uHeOObj_Base.pas @@ -503,6 +503,8 @@ type FMena, FMJ, FMJEvidence: NullableString; FMnozstvi: Extended; FKurz: Extended; + FIDOldPolozka: NullableInt32; + FIDOldDoklad: NullableInt32; FIDPrikaz: NullableInt32; FTypVyrobnihoDokladu: NullableInt32; FUmisteni: TUmisteni; @@ -614,6 +616,14 @@ type [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'ID zdrojového výrobního příkazu', false, true)] property IDPrikaz: NullableInt32 read FIDPrikaz write FIDPrikaz; + [MVCColumn('IDOldDoklad')] + [MVCSwagJsonSchemaField(stInteger, 'IDOldDoklad', 'ID původního dokladu', false, true)] + property IDOldDoklad: NullableInt32 read FIDOldDoklad write FIDOldDoklad; + + [MVCColumn('IDOldPolozka')] + [MVCSwagJsonSchemaField(stInteger, 'IDOldPolozka', 'ID původní položky', false, true)] + property IDOldPolozka: NullableInt32 read FIDOldPolozka write FIDOldPolozka; + [MVCColumn('TypVyrobnihoDokladu')] [MVCSwagJsonSchemaField(stInteger, 'TypVyrobnihoDokladu', 'Typ výrobního dokladu - 0=odvádění výrobku, 1=výdej materiálu, ', false, true)] property TypVyrobnihoDokladu: NullableInt32 read FTypVyrobnihoDokladu write FTypVyrobnihoDokladu; diff --git a/uHeoObj_Vyroba.pas b/uHeoObj_Vyroba.pas index 5467971..a4d47d4 100644 --- a/uHeoObj_Vyroba.pas +++ b/uHeoObj_Vyroba.pas @@ -1364,7 +1364,7 @@ type [MVCTable('TabEvidRozpracOperR')] TEvidRozpracOperaceOperace = class(THeliosObjekty) private - FIDEvidRozpraceOper: integer; + FIDEvidRozpracOper: integer; FIDPrikaz: integer; FNazevDilce: NullableString; FSkupZboDilce: NullableString; @@ -1372,6 +1372,7 @@ type FDokladPrPostup: integer; FAltPrPostup: char; FNazevOperace: NullableString; + FOperace: string; FIDSdruzVyrOperaceR: NullableInt32; FIDVyrCis: NullableInt32; FTypEvidMnoz: NullableInt16; @@ -1382,12 +1383,18 @@ type FSk_cas_Obsluhy_T: byte; FPoznamka: NullableString; FJeSdruzenaOper: boolean; + FOdvadeci: boolean; +{$IFDEF CUSTOM_CTRL_INCOSystems} + FMamNeuzavrenePredchozi: boolean; +{$ENDIF} protected procedure OnAfterLoad; override; public - [MVCColumn('IDEvidRozpraceOper')] - [MVCSwagJsonSchemaField(stInteger, 'IDEvidRozpraceOper', 'Interní ID evidence rozpracovaných operací', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength - property IDEvidRozpraceOper: integer read FIDEvidRozpraceOper write FIDEvidRozpraceOper; + constructor Create; virtual; + + [MVCColumn('IDEvidRozpracOper')] + [MVCSwagJsonSchemaField(stInteger, 'IDEvidRozpracOper', 'Interní ID evidence rozpracovaných operací', true, false)] // typ, sysName, nazev, required, nullable, minLength, maxLength + property IDEvidRozpracOper: integer read FIDEvidRozpracOper write FIDEvidRozpracOper; [MVCColumn('IDPrikaz')] [MVCSwagJsonSchemaField(stInteger, 'IDPrikaz', 'Interní ID výrobního příkazu', true, false)] @@ -1448,6 +1455,20 @@ type [MVCColumn('RegCisDilce')] [MVCSwagJsonSchemaField(stString, 'RegCisDilce', 'Registracni cislo vyráběného dílce', false, true, 0, 30)] property RegCisDilce: NullableString read FRegCisDilce write FRegCisDilce; + + [MVColumn('Odvadeci')] + [MVCSwagJsonSchemaField(stBoolean, 'Odvadeci', 'Odváděcí operace', true, false)] + property Odvadeci: boolean read FOdvadeci write FOdvadeci; + + [MVColumn('Operace')] + [MVCSwagJsonSchemaField(stString, 'Operace', 'Operace', false, true, 0, 4)] + property Operace: string read FOperace write FOperace; + +{$IFDEF CUSTOM_CTRL_INCOSystems} + [MVCColumn('MamNeuzavrenePredchozi')] + [MVCSwagJsonSchemaField(stBoolean, 'MamNeuzavrenePredchozi', 'Existují neuzavřené rozpracované evidence operace daného příkazu s nižším číslem operace', true, false)] + property MamNeuzavrenePredchozi: boolean read FMamNeuzavrenePredchozi write FMamNeuzavrenePredchozi; +{$ENDIF} end; @@ -2325,6 +2346,17 @@ uses { TEvidRozpracOperaceOperace } + constructor TEvidRozpracOperaceOperace.Create; + begin + inherited; + FOdvadeci:= false; + FOperace:= ''; +{$IFDEF CUSTOM_CTRL_INCOSystems} + FMamNeuzavrenePredchozi:= false; +{$ENDIF} + end; + + procedure TEvidRozpracOperaceOperace.OnAfterLoad; begin FJeSdruzenaOper:= FIDSdruzVyrOperaceR.IsNull; diff --git a/uSvc_KmenZbozi.pas b/uSvc_KmenZbozi.pas index 064758c..2a33c09 100644 --- a/uSvc_KmenZbozi.pas +++ b/uSvc_KmenZbozi.pas @@ -254,7 +254,7 @@ uses lQry.Open (lSQL, [AID]); if (lQry.RecordCount>0) then begin - extInfoStr:= lQry.AsJSONObjectString; + extInfoStr:= lQry.AsJSONObject; {$IFDEF CUSTOM_CTRL_Rootvin} if (SQLColumnExists('dbo', tblKZe, rtnASOLTrideni)) then if not(lQry.FieldByName(rtnASOLTrideni).IsNull) then diff --git a/uSvc_Obecne.pas b/uSvc_Obecne.pas index 118f504..ea17640 100644 --- a/uSvc_Obecne.pas +++ b/uSvc_Obecne.pas @@ -358,7 +358,7 @@ uses try lQry.Open(lSQL, [AID]); if (lQry.RecordCount>0) then - extInfoStr:= lQry.AsJSONObjectString; + extInfoStr:= lQry.AsJSONObject; finally lQry.Free; end; @@ -495,7 +495,7 @@ uses try lQry.Open(lSQL, [idPlanKal]); if (lQry.RecordCount>0) then - extInfoStr:= lQry.AsJSONObjectString; + extInfoStr:= lQry.AsJSONObject; finally lQry.Free; end; diff --git a/uSvc_ObehZbozi.pas b/uSvc_ObehZbozi.pas index 4909e50..03f4722 100644 --- a/uSvc_ObehZbozi.pas +++ b/uSvc_ObehZbozi.pas @@ -398,8 +398,11 @@ uses end; - if (params.ContainsKey('')) then - if (params.Items['jenRealizovane']<>'1') then + if (params.ContainsKey('jenRealizovane')) then + if (params.Items['jenRealizovane']='1') then + where:= where + IfThen(where<>'', ' AND ', '') + 'DatRealizace IS NOT NULL'; + if (params.ContainsKey('jenReal')) then + if (params.Items['jenReal']='1') then where:= where + IfThen(where<>'', ' AND ', '') + 'DatRealizace IS NOT NULL'; @@ -487,7 +490,7 @@ uses try lQry.Open(lSQL, [AID]); if (lQry.RecordCount>0) then - extInfoStr:= lQry.AsJSONObjectString; + extInfoStr:= lQry.AsJSONObject; finally lQry.Free; end; @@ -709,7 +712,7 @@ uses {$IFDEF CUSTOM_CTRL_Rootvin} silo:= lQry.FieldByName('_Mouka_Silo').AsString; {$ENDIF} - extInfoStr:= lQry.AsJSONObjectString; + extInfoStr:= lQry.AsJSONObject; end; finally end; @@ -1084,15 +1087,15 @@ uses lSQL:= lSQL.Replace('main.', ''); + sqlConnX:= TFDConnection.Create(nil); + sqlConnX.ConnectionDefName:= sqlPoolName; + lQry:= TFDQuery.Create(nil); + {$IF DEFINED(CUSTOM_CTRL_Rootvin) or DEFINED(CUSTOM_CTRL_GatemaSD)} // test zda polozky pochazi z SD serveru if (idPZ>0) or (sdServer) then begin - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - - lQry:= TFDQuery.Create(nil); try lQry.FetchOptions.Mode:= fmAll; lQry.Connection:= sqlConnX; @@ -1101,22 +1104,15 @@ uses lSQL2:= lSQL2 + ' ORDER BY p.ID'; lQry.Open(lSQL2); if (lQry.RecordCount>0) then - lSQL:= lSQL2.Replace(' 1 AS A ', ' p.ID, p.IDPohZbo_New AS IDPolozkaDokladu, 0 AS IDVyrCis, p.VyrCislo AS VyrCis, p.PopisSarze AS Nazev, p.Mnozstvi, p.MnozstviEvidence AS MnozstviEvid' - + ', p.DatPorizeni AS DatVstup, p.DatumExpirace AS DatExpirace, 1 AS ZdrojSD, h.ID AS IDDokladGSD '); - + lSQL:= lSQL2.Replace(' 1 AS A ', ' 1000000000+p.ID AS ID, p.IDPohZbo_New AS IDPolozkaDokladu, 0 AS IDVyrCis, p.VyrCislo AS VyrCis, p.PopisSarze AS Nazev, p.Mnozstvi' + + ', p.MnozstviEvidence AS MnozstviEvid, p.DatPorizeni AS DatVstup, p.DatumExpirace AS DatExpirace, 1 AS ZdrojSD, h.ID AS IDDokladGSD '); finally - lQry.Free; end; - sqlConnX.Close; - sqlConnX.Free; end; {$ENDIF} - sqlConnX:= TFDConnection.Create(nil); - sqlConnX.ConnectionDefName:= sqlPoolName; - lQry:= TFDQuery.Create(nil); try lQry.FetchOptions.Mode:= fmAll; lQry.Connection:= sqlConnX; diff --git a/uSvc_Vyroba.pas b/uSvc_Vyroba.pas index 5e3461e..ea9e5d3 100644 --- a/uSvc_Vyroba.pas +++ b/uSvc_Vyroba.pas @@ -1,4 +1,4 @@ -unit uSvc_Vyroba; +unit uSvc_Vyroba; interface {$I 'GlobalDefs.inc'} @@ -56,25 +56,33 @@ const + '(SELECT TOP(1) pracoviste FROM ' + tblCPrac + ' WHERE ID=main.IDPracoviste) AS KodPracoviste,' + '(SELECT TOP(1) Nazev FROM ' + tblCPrac + ' WHERE ID=main.IDPracoviste) AS NazevPracoviste'; - selNazevOperaceEvidROpR = '(SELECT TOP(1) Nazev FROM ' + tblPrPost + ' WHERE IDOdchylkyDo IS NULL AND Doklad=main.DokladPrPostup AND Alt=main.AltPrPostup' - + ' AND IDPrikaz=main.IDPrikaz /*AND Priorita=0*/ ) AS NazevOperace, (SELECT TOP(1) k.Nazev1 FROM ' + tblPrikaz + ' p INNER JOIN ' - + tblKZ + ' k ON (k.ID=p.IDTabKmen) WHERE p.ID=main.IDPrikaz) AS Nazev1Dilce, (SELECT TOP(1) k.SkupZbo FROM ' + tblPrikaz + ' p INNER JOIN ' - + tblKZ + ' k ON (k.ID=p.IDTabKmen) WHERE p.ID=main.IDPrikaz) AS SkupZboDilce, (SELECT TOP(1) k.RegCis FROM ' + tblPrikaz + ' p INNER JOIN ' - + tblKZ + ' k ON (k.ID=p.IDTabKmen) WHERE p.ID=main.IDPrikaz) AS RegCisDilce'; + selNazevOperaceEvidROpR = '(SELECT TOP(1) Nazev FROM ' + tblPrPost + ' WITH(NOLOCK) WHERE IDOdchylkyDo IS NULL AND Doklad=main.DokladPrPostup AND Alt=main.AltPrPostup' + + ' AND IDPrikaz=main.IDPrikaz /*AND Priorita=0*/ ) AS NazevOperace, (SELECT TOP(1) k.Nazev1 FROM ' + tblPrikaz + ' p JOIN ' + + tblKZ + ' k WITH(NOLOCK) ON (k.ID=p.IDTabKmen) WHERE p.ID=main.IDPrikaz) AS Nazev1Dilce, (SELECT TOP(1) k.SkupZbo FROM ' + tblPrikaz + ' p JOIN ' + + tblKZ + ' k WITH(NOLOCK) ON (k.ID=p.IDTabKmen) WHERE p.ID=main.IDPrikaz) AS SkupZboDilce, (SELECT TOP(1) k.RegCis FROM ' + tblPrikaz + ' p JOIN ' + + tblKZ + ' k WITH(NOLOCK) ON (k.ID=p.IDTabKmen) WHERE p.ID=main.IDPrikaz) AS RegCisDilce' + + ', CONVERT(bit, ISNULL( (SELECT Odvadeci FROM ' + tblPrPost + ' WITH(NOLOCK) WHERE IDOdchylkyDo IS NULL AND Doklad=main.DokladPrPostup' + + ' AND Alt=main.AltPrPostup AND IDPrikaz=main.IDPrikaz), 0)) AS Odvadeci' + + ', ISNULL( (SELECT Operace FROM ' + tblPrPost + ' WITH(NOLOCK) WHERE IDOdchylkyDo IS NULL AND Doklad=main.DokladPrPostup' + + ' AND Alt=main.AltPrPostup AND IDPrikaz=main.IDPrikaz), N'''') AS Operace' +{$IFDEF CUSTOM_CTRL_INCOSystems} + + ', dbo.ef_Vyroba_EvidROpR_MamNeuzavrenouPredchozi (main.IDPrikaz, main.DokladPrPostup, main.AltPrPostup) AS MamNeuzavrenePredchozi' +{$ENDIF} + ; - selOperaceSpec = '(SELECT COUNT(ID) FROM ' + tblKPLHlav + ' WHERE DruhDokladu=5 AND IDOperace=TabPrPostup.ID) AS PocetKP' + selOperaceSpec = '(SELECT COUNT(ID) FROM ' + tblKPLHlav + ' WITH(NOLOCK) WHERE DruhDokladu=5 AND IDOperace=TabPrPostup.ID) AS PocetKP' + ', TabPrPostup.Kusy_zad AS _info_Kusy_zad, TabPrPostup.Kusy_nepotrebne AS _info_Kusy_nepotrebne, TabPrPostup.Kusy_pozadovane AS _info_Kusy_pozadovane' + ', TabPrPostup.ProcSplneni AS _info_ProcSplneni, TabPrPostup.Kusy_zive AS _info_Kusy_zive, TabPrPostup.Kusy_odv AS _info_Kusy_odv' + ', TabPrPostup.Kusy_zmet AS _info_Kusy_zmet, TabPrPostup.Kusy_zmet_opr_IO AS _info_Kusy_zmet_opr_IO, TabPrPostup.Kusy_zmet_neopr AS _info_Kusy_zmet_neopr' - + ', (SELECT s.Nazev FROM ' + tblCisStroj + ' s WHERE s.ID=main.IDStroje) AS StrojNazev, (SELECT s.Kod FROM ' + tblCisStroj + ' s WHERE s.ID=main.IDStroje) AS StrojKod'; + + ', (SELECT s.Nazev FROM ' + tblCisStroj + ' s WITH(NOLOCK) WHERE s.ID=main.IDStroje) AS StrojNazev, (SELECT s.Kod FROM ' + tblCisStroj + ' s WHERE s.ID=main.IDStroje) AS StrojKod'; selPolKoopObjSpec = ''; selVyrCisPrikazSpec = ''; - selEvidOperace = '(SELECT IDEvidRozpracOper FROM ' + tblRozpracOperR + ' WHERE ID=main.IDEvidRozpracOperR) AS IDEvidRozpracOper' - + ', (SELECT nazev FROM ' + tblPrPost + ' WHERE IDPrikaz=main.IDPrikaz AND Doklad=main.DokladPrPostup AND Alt=main.AltPrPostup AND IDOdchylkyDo IS NULL) AS NazevOperace'; + selEvidOperace = '(SELECT IDEvidRozpracOper FROM ' + tblRozpracOperR + ' WITH(NOLOCK) WHERE ID=main.IDEvidRozpracOperR) AS IDEvidRozpracOper' + + ', (SELECT nazev FROM ' + tblPrPost + ' WITH(NOLOCK) WHERE IDPrikaz=main.IDPrikaz AND Doklad=main.DokladPrPostup AND Alt=main.AltPrPostup AND IDOdchylkyDo IS NULL) AS NazevOperace'; selTPVStroj = 'p.pracoviste'; @@ -810,8 +818,8 @@ uses { TVyrobniPrikazService } function TVyrobniPrikazService.GetByID (const AID: integer; params: TDictionary=nil): TVyrobniPrikaz; - var lSQL, strTemp: string; - id, rNum: integer; + var lSQL, strTemp, stav: string; + id, rNum, iStav: integer; p: TDictionary; debug, stopDebug, operace, material: boolean; lOper: TObjectList; @@ -847,7 +855,7 @@ uses lQry.Connection:= sqlConnX; lQry.Open(lSQL, [AID]); if (lQry.RecordCount>0) then - extInfoStr:= lQry.AsJSONObjectString; + extInfoStr:= lQry.AsJSONObject; finally lQry.Free; end; @@ -858,8 +866,13 @@ uses material:= false; debug:= false; stopDebug:= false; + stav:= ''; + if (params<>nil) then begin + if (params.ContainsKey('stav')) then + if (params.Items['stav']<>'') then + stav:= params.Items['stav']; if (params.ContainsKey('operace')) then if (params.Items['operace']='1') then operace:= true; @@ -879,6 +892,13 @@ uses lSQL:= 'SELECT ' + GetTabCols('', tblVPr, 'main', false) + IfThen(selPrikazSpec<>'', ',' + selPrikazSpec, '') + ' FROM ' + tblVPr + ' main' + ' INNER JOIN ' + tblKZ + ' kz ON (kz.ID=main.IDTabKmen) LEFT JOIN ' + tblZak + ' zak ON (zak.ID=main.IDZakazka)' + ' LEFT JOIN ' + tblZakazModif + ' zmod ON (zmod.ID=main.IDZakazModif) WHERE main.ID=:ID'; + if (stav<>'') then + begin + if not(TryStrToInt(stav, iStav)) then + iStav:= 0; + if (iStav>0) then + lSQL:= lSQL + ' AND main.StavPrikazu=' + iStav.ToString; + end; if (selPrikazSpec='') then lSQL:= lSQL.Replace('TabPrikaz.', 'main.'); @@ -1596,7 +1616,7 @@ uses lQry.Connection:= sqlConnX; lQry.Open(lSQL, [AID]); if (lQry.RecordCount>0) then - extInfoStr:= lQry.AsJSONObjectString; + extInfoStr:= lQry.AsJSONObject; finally lQry.Free; end; @@ -2262,7 +2282,7 @@ uses try lQry.Open(lSQL, [AID]); if (lQry.RecordCount>0) then - extInfoStr:= lQry.AsJSONObjectString; + extInfoStr:= lQry.AsJSONObject; finally lQry.Free; end; diff --git a/uSvc_Zamestnanci.pas b/uSvc_Zamestnanci.pas index 43287f0..2ae58a0 100644 --- a/uSvc_Zamestnanci.pas +++ b/uSvc_Zamestnanci.pas @@ -165,7 +165,7 @@ uses lQry.Connection:= sqlConnX; lQry.Open(lSQL, [AID]); if (lQry.RecordCount>0) then - extInfoStr:= lQry.AsJSONObjectString; + extInfoStr:= lQry.AsJSONObject; finally lQry.Free; end; diff --git a/uWebMod.pas b/uWebMod.pas index 448a26d..05de7e3 100644 --- a/uWebMod.pas +++ b/uWebMod.pas @@ -18,6 +18,8 @@ uses {$IF DEFINED(CUSTOM_CTRL_Rootvin) OR DEFINED(CUSTOM_CTRL_INCOSystems) OR DEFINED(CUSTOM_CTRL_EMPolar) + OR DEFINED(CUSTOM_CTRL_Koramex) + OR DEFINED(CUSTOM_CTRL_Westra) OR DEFINED(CUSTOM_CTRL_Gornicky)} ,uCtrlCustom {$UNDEF CUSTOM_CTRL_GatemaSD} @@ -303,6 +305,10 @@ procedure TWebModule1.WebModuleCreate (Sender: TObject); {$I '_custom/Gornicky/uWebModCustom.inc'} {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + {$I '_custom/Westra/uWebModCustom.inc'} +{$ENDIF} + {$IFDEF CUSTOM_CTRL_EMPolar} {$I '_custom/EMPolar/uWebModCustom.inc'} {$ENDIF} diff --git a/uWinService.pas b/uWinService.pas index fa60571..f5af5ed 100644 --- a/uWinService.pas +++ b/uWinService.pas @@ -7,7 +7,7 @@ uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.SvcMgr, Vcl.Dialogs, Winapi.ShellAPI, Winapi.ActiveX, IdHTTPWebBrokerBridge, Xml.XmlIntf, Xml.xmldom, Xml.XMLDoc, JsonDataObjects, System.IOUtils, System.SyncObjs, IdBaseComponent, IdComponent, IdServerIOHandler, IdSSL, IdHTTP, IdURI, - IdSSLOpenSSL, IdSSLOpenSSLHeaders, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, + IdSSLOpenSSL, IdSSLOpenSSLHeaders, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdException, IdStack, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, @@ -17,6 +17,12 @@ uses {$ENDIF} {$IFDEF CUSTOM_CTRL_Gornicky} {$I ./_custom/Gornicky/winSvc/usesTop.inc} +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + {$I ./_custom/Westra/winSvc/usesTop.inc} +{$ENDIF} +{$IFDEF CUSTOM_CTRL_EMPolar} + {$I ./_custom/EMPolar/winSvc/usesTop.inc} {$ENDIF} flcCipher, Quick.Logger, Quick.Threads, Quick.Logger.Provider.Files; @@ -67,6 +73,10 @@ const {$I ./_custom/Gornicky/winSvc/consts.inc} {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + {$I ./_custom/Westra/winSvc/consts.inc} +{$ENDIF} + uqLicMutex = '{77567050-19D8-45EB-B32A-B431079E45AD}'; MY_MSG_SERVICE_CONTROL = 1; @@ -93,8 +103,8 @@ const type TSSLEventHandlers = class - procedure OnGetSSLPassword(var APassword: {$IF CompilerVersion < 27}AnsiString{$ELSE}string{$ENDIF}); - procedure OnQuerySSLPort(APort: Word; var VUseSSL: boolean); + procedure OnGetSSLPassword (var APassword: {$IF CompilerVersion < 27}AnsiString{$ELSE}string{$ENDIF}); + procedure OnQuerySSLPort (APort: Word; var VUseSSL: boolean); end; @@ -102,6 +112,17 @@ const {$I ./_custom/Gornicky/winSvc/types.inc} {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + {$I ./_custom/Westra/winSvc/types.inc} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_EMPolar} + {$I ./_custom/EMPolar/winSvc/types.inc} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Rootvin} + {$I ./_custom/Rootvin/winSvc/types.inc} +{$ENDIF} THeoZpracujJSONThread = class(TThread) private @@ -188,6 +209,15 @@ const {$IFDEF CUSTOM_CTRL_Gornicky} {$I ./_custom/Gornicky/winSvc/mainPrivs.inc} {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + {$I ./_custom/Westra/winSvc/mainPrivs.inc} +{$ENDIF} +{$IFDEF CUSTOM_CTRL_EMPolar} + {$I ./_custom/EMPolar/winSvc/mainPrivs.inc} +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Rootvin} + {$I ./_custom/Rootvin/winSvc/mainPrivs.inc} +{$ENDIF} {$IFDEF OMNIThreadLib} tskLicKontrola: IOmniTaskControl; @@ -279,16 +309,36 @@ var {$I ./_custom/Gornicky/winSvc/vars.inc} {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + {$I ./_custom/Westra/winSvc/vars.inc} +{$ENDIF} +{$IFDEF CUSTOM_CTRL_EMPolar} + {$I ./_custom/EMPolar/winSvc/vars.inc} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Rootvin} + {$I ./_custom/Rootvin/winSvc/vars.inc} +{$ENDIF} implementation uses System.StrUtils, System.Win.Registry, System.Variants, IdContext, System.Generics.Collections, System.DateUtils, + Winapi.WinSvc, Web.WebReq, System.Hash, MVCFramework.Commons, MVCFramework.Logger, {$IFDEF CUSTOM_CTRL_Gornicky} {$I ./_custom/Gornicky/winSvc/uses.inc} +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + {$I ./_custom/Westra/winSvc/uses.inc} +{$ENDIF} +{$IFDEF CUSTOM_CTRL_EMPolar} + {$I ./_custom/EMPolar/winSvc/uses.inc} +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Rootvin} + {$I ./_custom/Rootvin/winSvc/uses.inc} {$ENDIF} helTabsBIDs, uWebMod, uDataMod; @@ -344,6 +394,17 @@ uses {$I ./_custom/Gornicky/winSvc/impl.inc} {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + {$I ./_custom/Westra/winSvc/impl.inc} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_EMPolar} + {$I ./_custom/EMPolar/winSvc/impl.inc} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Rootvin} + {$I ./_custom/Rootvin/winSvc/impl.inc} +{$ENDIF} @@ -452,7 +513,7 @@ uses if (sqlConnX.Connected) then begin - lSQL:= 'SELECT d.ID FROM ' + tblPrijataJsonData + ' d WHERE d.Blokovano=0 AND d.DatZpracovani IS NULL'; + lSQL:= 'SELECT d.ID FROM ' + tblPrijataJsonData + ' d WITH(NOLOCK) WHERE d.Blokovano=0 AND d.DatZpracovani IS NULL'; lSQL:= lSQL + ' AND ISNULL(d.PosledniChyba,N'''')=N'''''; lSQL:= lSQL + ' AND d.Blokovano=0 '; // AND ISNULL( (SELECT COUNT(ID) FROM dbo._hdc_ph_Log WHERE LogText=N''Zpracovani API json'' AND IntValue=d.ID), 0)<4'; lSQL:= lSQL + ' ORDER BY d.ID'; @@ -472,7 +533,7 @@ uses lQry2:= TFDQuery.Create(nil); lQry2.Connection:= sqlConnX; - lQry2.Open('SELECT COUNT(ID) AS Pocet FROM dbo._hdc_ph_Log WHERE IntValue=' + idTask.ToString + ' AND LogText LIKE N''%Zpracova%'''); + lQry2.Open('SELECT COUNT(ID) AS Pocet FROM dbo._hdc_ph_Log WITH(NOLOCK) WHERE IntValue=' + idTask.ToString + ' AND LogText LIKE N''%Zpracova%'''); lQry2.First; cnt:= lQry2.FieldByName('Pocet').AsInteger; FreeAndNil(lQry2); @@ -1364,6 +1425,18 @@ Logger.WriteLog(logItem); {$I ./_custom/Gornicky/winSvc/mainSvcCont.inc} {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + {$I ./_custom/Westra/winSvc/mainSvcCont.inc} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_EMPolar} + {$I ./_custom/EMPolar/winSvc/mainSvcCont.inc} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Rootvin} + {$I ./_custom/Rootvin/winSvc/mainSvcCont.inc} +{$ENDIF} + if (zapisDZTasksThr<>nil) then if (zapisDZTasksThr.Suspended) then zapisDZTasksThr.Resume; @@ -1471,6 +1544,18 @@ Logger.WriteLog(logItem); {$I ./_custom/Gornicky/winSvc/mainSvcExec.inc} {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + {$I ./_custom/Westra/winSvc/mainSvcExec.inc} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_EMPolar} + {$I ./_custom/EMPolar/winSvc/mainSvcExec.inc} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Rootvin} + {$I ./_custom/Rootvin/winSvc/mainSvcExec.inc} +{$ENDIF} + end; @@ -1506,6 +1591,18 @@ Logger.WriteLog(logItem); {$I ./_custom/Gornicky/winSvc/mainSvcPause.inc} {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + {$I ./_custom/Westra/winSvc/mainSvcPause.inc} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_EMPolar} + {$I ./_custom/EMPolar/winSvc/mainSvcPause.inc} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Rootvin} + {$I ./_custom/Rootvin/winSvc/mainSvcPause.inc} +{$ENDIF} + Paused:= True; end; @@ -1613,6 +1710,7 @@ Logger.WriteLog(logItem); else begin datMod.LogInfo (Quick.Logger.etCritical, 'Nespravny format konfiguracniho souboru (hdcDZAPIcfg.dat)'); + datMod.LogInfo (Quick.Logger.etCritical, s); result:= false; CoUninitialize; Exit; @@ -1792,7 +1890,7 @@ Writeln('DB: ' + datMod.dbName); end; s:= 'Konfigurace - HTTP/S API port ' + apiPort.ToString + ' / SSL ' + IfThen(jeSSL, 'ano', 'ne') + ' / SQL server ' + datMod.dbServer + IfThen(datMod.dbPort<>1433, ':' + datMod.dbPort.ToString, ''); - s:= s + ' / databaze ' + datMod.dbName + ' / SQL conn Encrypted ' + IfThen(datMod.dbEncConn, 'ano', 'ne'); + s:= s + ' / databaze ' + datMod.dbName + ' / user ' + datMod.dbUser + ' / SQL conn Encrypted ' + IfThen(datMod.dbEncConn, 'ano', 'ne'); {$IFDEF CUSTOM_CTRL_Rootvin} s:= s + ' / custom ROOTVIN'; {$ENDIF} @@ -1807,6 +1905,12 @@ Writeln('DB: ' + datMod.dbName); {$ENDIF} {$IFDEF CUSTOM_CTRL_Gornicky} s:= s + ' / custom Gornicky'; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + s:= s + ' / custom MBM Westra'; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_EMPolar} + s:= s + ' / custom EMPolar'; {$ENDIF} datMod.LogInfo (Quick.Logger.etInfo, s); except on E:Exception do @@ -1880,6 +1984,20 @@ Writeln('DB: ' + datMod.dbName); result:= false; end; {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + if (datMod.dbName<>'Westra') then + begin + errMsg:= ' - Chybna DB: custom Westra x db ' + datMod.dbName; + result:= false; + end; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_EMPolar} + if (datMod.dbName<>'EMPolar') then + begin + errMsg:= ' - Chybna DB: custom EMPolar x db ' + datMod.dbName; + result:= false; + end; +{$ENDIF} {$ELSE} if (datMod.dbServer<>'') then begin @@ -1923,6 +2041,20 @@ Writeln('DB: ' + datMod.dbName); errMsg:= ' - Chybna DB'; result:= false; end; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_GornickyGrp} + if (sTemp<>'63887282') then + begin + errMsg:= ' - Chybna DB'; + result:= false; + end; +{$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + if (sTemp<>'60066130') then + begin + errMsg:= ' - Chybna DB'; + result:= false; + end; {$ENDIF} end; end; @@ -2034,7 +2166,7 @@ Writeln('DB: ' + datMod.dbName); ms: TMemoryStream; arrDefs: TStringList; i, iTemp: integer; - canCont, canCont2: boolean; + canCont, canCont2, canCont3: boolean; function LoadStringFromStream (const AStream: TStream): String; var lenX: Integer; begin @@ -2061,42 +2193,7 @@ Writeln('DB: ' + datMod.dbName); {$ENDIF} {$IFDEF CUSTOM_CTRL_Rootvin} -// arrDefs.Add('tbl_hdc_ph_Log'); - arrDefs.Add('ep_hdcdzapi_GetKusovnik'); - arrDefs.Add('col_TabDokladyZbozi_EXT'); - arrDefs.Add('col_TabStavSkladu_EXT'); - arrDefs.Add('col_TabVazbyPrikazu_EXT'); - arrDefs.Add('col_TabPrPostup_EXT'); - arrDefs.Add('col_TabPohybyZbozi_EXT'); - arrDefs.Add('col_TabEvidRozpracOperR_EXT'); - arrDefs.Add('col_TabKmenZbozi_EXT'); - arrDefs.Add('ef_GetDatumASmenu'); - arrDefs.Add('tbl_hdc_PZ_PuvodniVC'); - arrDefs.Add('tbl_TabVyrobaTestoVyroba'); - arrDefs.Add('tbl_TabVyrobaObjednavky'); - arrDefs.Add('tbl_TabVyrobaOperaceStartStop'); - arrDefs.Add('tbl_TabVyrobaOperaceStartStopVydej'); - arrDefs.Add('ep_Vyroba_InsertEvidRozpracOper'); - arrDefs.Add('ep_Vyroba_InsertEvidRozpracOperPol'); - arrDefs.Add('ep_Vyroba_DoplnSkladProVydejDleDokladu'); - arrDefs.Add('ep_Vyroba_GenOdvodZeMzdy'); - arrDefs.Add('ep_Vyroba_GenVydejZeMzdy'); - arrDefs.Add('ep_Vyroba_Doklady_Micharna'); - - arrDefs.Add('ep_P03_HDC1'); - arrDefs.Add('ep_P03'); - arrDefs.Add('ep_P01_HDC1'); -// arrDefs.Add('ep_P01_HDCDZApi1'); - arrDefs.Add('ep_P01'); - arrDefs.Add('ep_V03_HDC1'); - arrDefs.Add('ep_V03'); -// arrDefs.Add(''); - - arrDefs.Add('trg__TabPohybyZbozi_HDC_D'); - arrDefs.Add('trg__TabPohybyZbozi_HDC_IU'); - arrDefs.Add('trg__hdc_PZ_PuvodniVC_D'); - arrDefs.Add('trg__TabVyrCisPrikaz_HDC_D'); - arrDefs.Add('trg__TabVyrobaOperaceStartStop_D'); + {$I ./_custom/Rootvin/winSvc_zdroje.inc} {$ENDIF} {$IFDEF CUSTOM_CTRL_INCOSystems} @@ -2105,10 +2202,12 @@ Writeln('DB: ' + datMod.dbName); if (iTemp>-1) then arrDefs.Delete(iTemp); + arrDefs.Add('tbl_hdc_ph_PrijataJsonData_rozsireni'); arrDefs.Add('col_TabPredna_EXT'); arrDefs.Add('col_TabKmenZbozi_EXT'); arrDefs.Add('col_TabPrPostup_EXT'); arrDefs.Add('col_TabEvidRozpracOper_EXT'); + arrDefs.Add('ef_Vyroba_EvidROpR_MamNeuzavrenouPredchozi'); arrDefs.Add('ep_Vyroba_InsertEvidRozpracOper'); arrDefs.Add('ep_Vyroba_InsertEvidRozpracOperPol'); arrDefs.Add('ep_Vyroba_GenOdvodZeMzdy'); @@ -2116,6 +2215,7 @@ Writeln('DB: ' + datMod.dbName); arrDefs.Add('ep_HDCDZApi_ZpracujPrijataData'); {$ENDIF} + {$IFDEF CUSTOM_CTRL_Gornicky} iTemp:= arrDefs.IndexOf('ep_HDCDZApi_ZpracujPrijataData'); if (iTemp>-1) then @@ -2123,10 +2223,28 @@ Writeln('DB: ' + datMod.dbName); {$I '_custom/Gornicky/sqlDefs.inc'} {$ENDIF} + +{$IFDEF CUSTOM_CTRL_Westra} + iTemp:= arrDefs.IndexOf('ep_HDCDZApi_ZpracujPrijataData'); + if (iTemp>-1) then + arrDefs.Delete(iTemp); + {$I '_custom/Westra/sqlDefs.inc'} +{$ENDIF} + + +{$IFDEF CUSTOM_CTRL_EMPolar} + iTemp:= arrDefs.IndexOf('ep_HDCDZApi_ZpracujPrijataData'); + if (iTemp>-1) then + arrDefs.Delete(iTemp); + {$I '_custom/EMPolar/sqlDefs.inc'} +{$ENDIF} + + {$IFDEF CUSTOM_CTRL_Metalcasting} arrDefs.Add('col_TabDokumenty_DokladProAPI'); {$ENDIF} + errMsg:= 'Nacitani SQL definici...'; datMod.LogInfo (Quick.Logger.etInfo, errMsg); {$IFDEF DEBUG} @@ -2156,7 +2274,12 @@ Writeln('DB: ' + datMod.dbName); objectNazev:= LeftStr(lSQL, lSQL.IndexOf(Chr(13))).Replace('-- ', ''); - if (srcNazev.StartsWith('ep_', true)) or (srcNazev.StartsWith('ef_', true)) or (srcNazev.StartsWith('trg_')) then + if (srcNazev.StartsWith('ep_', true)) + or (srcNazev.StartsWith('bp_', true)) + or (srcNazev.StartsWith('ef_', true)) + or (srcNazev.StartsWith('hpx_', true)) + or (srcNazev.StartsWith('epx_', true)) + or (srcNazev.StartsWith('trg_', true)) then begin canCont:= false; hash1:= ''; @@ -2189,10 +2312,16 @@ Writeln('DB: ' + datMod.dbName); Continue; - if (srcNazev.StartsWith('ep_')) then + if (srcNazev.StartsWith('ep_')) or (srcNazev.StartsWith('bp_')) then begin - datMod.sqlConn.ExecSQL('DROP PROCEDURE IF EXISTS dbo.' + srcNazev); - datMod.LogInfo (Quick.Logger.etInfo, 'Pregenerovani procedury: ' + srcNazev); + canCont3:= true; + if (srcNazev.StartsWith('bp_')) and not(srcNazev.ToUpper.Contains('HDC')) then + canCont3:= false; + if (canCont3) then + begin + datMod.sqlConn.ExecSQL('DROP PROCEDURE IF EXISTS dbo.' + srcNazev); + datMod.LogInfo (Quick.Logger.etInfo, 'Pregenerovani procedury: ' + srcNazev); + end; end; if (srcNazev.StartsWith('ef_')) then @@ -2564,7 +2693,24 @@ ShellExecute(0, 'open', PChar(url), nil, nil, SW_SHOWNORMAL); if (datMod.sqlConn.Connected) and (iCanStart) then begin try - fServer.Active:= true; + try + fServer.Active:= true; + except + on E: Exception do + begin + OutputDebugString(PChar(E.ClassName + ' - ' + E.Message)); + raise; + end; + on E: EIdCouldNotBindSocket do + begin + if E.InnerException is EIdSocketError then + OutputDebugString(PChar( + 'WSAError: ' + + IntToStr(EIdSocketError(E.InnerException).LastError) + )); + raise; + end; + end; SQLKontroly; mamTabPrijataData:= datMod.SQLTableExists(tblPrijataJsonData); @@ -2592,6 +2738,17 @@ ShellExecute(0, 'open', PChar(url), nil, nil, SW_SHOWNORMAL); {$I ./_custom/Gornicky/winSvc/mainSvcStart.inc} {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + {$I ./_custom/Westra/winSvc/mainSvcStart.inc} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_EMPolar} + {$I ./_custom/EMPolar/winSvc/mainSvcStart.inc} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Rootvin} + {$I ./_custom/Rootvin/winSvc/mainSvcStart.inc} +{$ENDIF} datMod.LogInfo (Quick.Logger.etInfo, 'Start sluzby zpracovani prijatych JSON zprav (interval ' + intProcessDZTasksSec.ToString + ' ' + sTemp + ')'); zpracJsonThr:= THeoZpracujJSONThread.Create (ThreadTerminated); @@ -2647,6 +2804,8 @@ ShellExecute(0, 'open', PChar(url), nil, nil, SW_SHOWNORMAL); procedure THDCDZApiService.ThreadTerminated (Sender: TObject); begin + ServiceThread.Terminate; + Controller(SERVICE_CONTROL_STOP); if (Sender is TThread) then (Sender as TThread).ForceQueue(nil, Sender.Free); end; @@ -2727,6 +2886,17 @@ ShellExecute(0, 'open', PChar(url), nil, nil, SW_SHOWNORMAL); {$I ./_custom/Gornicky/winSvc/mainSvcStop.inc} {$ENDIF} +{$IFDEF CUSTOM_CTRL_Westra} + {$I ./_custom/Westra/winSvc/mainSvcStop.inc} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_EMPolar} + {$I ./_custom/EMPolar/winSvc/mainSvcStop.inc} +{$ENDIF} + +{$IFDEF CUSTOM_CTRL_Rootvin} + {$I ./_custom/Rootvin/winSvc/mainSvcStop.inc} +{$ENDIF} if Assigned(licThr) then begin