# # ITSV GmbH # CCDB - Command and Control Database # # FILE: dquersmfile_SVCL52BUILDASSOC.txt # DESCRIPTION: DQUERY definition for DQUERY SVCL52BUILDASSOC # builds all possible associations of access to ZUORDnungen # from all available USP Personen/Unternehmen-Combinations # @querytitle SVCLEAR-52-0002 - erstelle mögliche Kombinationen - EXTREM LANGE LAUFZEIT @querydescription erstellt alle möglichen Zuordnungs-Zugriffs-Kombinationen basierende auf Personen/Unternehmen-Kombinationen
ACHTUNG: diese Abfrage läuft bis zu 100 Stunden!! aus der Tabelle SVCLUSPPERS @group SVCLCASETOOLS @querytype function @function seqtrans.seqtrans @FLIST KUR,UPARID,UNAME,VSNR,PPARID,PNAME,TRAEGER,BKNR,VUMFANG,VOLLMACHTVON,VOLLMACHTBIS,ELDASNR,ZUOID,ZUOINHPARID,ZUOINHROLLE,ZUOVON,ZUOBIS @puth 1 ~query.tsteps # # <>: drop table if yet exists # sql drop table if exists SVCL52CASSOC # # <>: create table afresh # sql create table SVCL52CASSOC(KUR varchar(32), UPARID varchar(32), UNAME varchar(255), VSNR varchar(32), PPARID varchar(32), PNAME varchar(255), TRAEGER varchar(8), BKNR varchar(32), VUMFANG varchar(32), VOLLMACHTVON varchar(32), VOLLMACHTBIS varchar(32), ELDASNR varchar(32), ZUOID varchar(32), ZUOINHPARID varchar(32), ZUOINHROLLE varchar(32), ZUOVON varchar(32), ZUOBIS varchar(32)) # # <>: get base data from SVCLUSPPERS # pre_qexpression this.options.maxrecsteps = 10000000000; this.FLIST = this.query.FLIST; this.FTLIST = "::"+this.FLIST.split(",").join("::,::")+"::"; this.recscreated = 0; sql select ub.KUR,ub.VERFAHRENSRECHT,ub.SVBPKVER, up.PARTNERID as PPARID, up.VSNR, up.NAMENSZUSAMMENFASSUNG as PNAME, uu.PARTNERID as UPARID, uu.NAMENSZUSAMMENFASSUNG as UNAME from SVCLUSPPERS ub left join SVCLUSPPSTAMM up on up.SV_BKR_VERSCHL=ub.SVBPKVER left join SVCLKURSSTAMM uu on uu.KUR = ub.KUR result_varname ub post_qexpression this.recstoprocess = this.ub.getRowCount(); this.recsprocessed = 0; this.curecnum = 0; this.ppush([this.phead("STARTED"),"RECSTOPROCESS="+this.recstoprocess,"",""]); # # <>: check if UB loop complete # ub_loop: if (this.curecnum>=this.recstoprocess) goto ub_done # # <>: process one UB record # pre_qexpression this.curubrec = this.ub.getRowObject(this.curecnum); this.UPARID = this.curubrec.UPARID; this.VSNR = this.curubrec.VSNR; this.PNAME = this.curubrec.PNAME; this.UNAME = this.curubrec.UNAME; this.progstat.recstoprocess = this.recstoprocess; this.progstat.recsprocessed = this.recsprocessed; this.progstat.recscreated = this.recscreated; if (this.pcallback && ((this.recsprocessed%100)==0)) this.pcallback(this.progstat); logger.debug(this.phead("UBREC.RECSTOPROCESS="+this.recstoprocess+".CURECNUM="+this.curecnum)+".PNAME="+this.curubrec.PNAME+".UNAME="+this.curubrec.UNAME); gosub ub_proc_record params.UPARID @@UPARID@@ params.VSNR @@VSNR@@ params.PNAME @@PNAME@@ params.UNAME @@UNAME@@ post_qexpression this.recsprocessed++; this.curecnum++; then_goto ub_loop # # <>: all UB records done # ub_done: pre_qexpression this.ppush([this.phead("FINISHED"),"RECSTOPROCESS="+this.recstoprocess,"RECSPROCESSED="+this.recsprocessed,"RECSCREATED="+this.recscreated]); end # # ------------------------------------------------------------------------------ # SUBROUTINE: ub_proc_record # INPUT: UPARID - Unternehmens-Partner-ID # UNAME - Namenszusammenfassung of Unternehmen # VSNR - VSNR of Person # PNAME - Namenszusammenfassung of Person # # <>: get all ELDA-SNRs current UB user has access to # ub_proc_record: pre_qexpression this.local.UPARID = this.local.params.UPARID; this.local.UNAME = this.local.params.UNAME; this.local.VSNR = this.local.params.VSNR; this.local.PNAME = this.local.params.PNAME; sql select SERIENNUMMER from SVCLESNRPERS where VSNR=::VSNR:: named_params VSNR result_varname es post_qexpression this.local.estoprocess = this.es.getRowCount(); # # <>: get all own and bevollmächtigte BKNRs # sql select '' as VUMFANG, '' as VOLLMACHTVON, '' as VOLLMACHTBIS, SVT, BKNR from SVCLBKNRSSTAMM where PARTNERID=::UPARID:: UNION select vo.VUMFANG, vo.BEGINNDAT as VOLLMACHTVON, vo.ENDEDAT as VOLLMACHTBIS, vobk.SVT, vobk.BKNR from SVCLZPVOLLMACHTEN vo left join SVCLBKNRSSTAMM vobk on vobk.PARTNERID=vo.PARTNERID where vo.PARTNERBEZUGID=::UPARID:: named_params UPARID result_varname bk post_qexpression this.local.bkstoprocess = this.bk.getRowCount(); this.local.curbknum = 0; logger.debug(this.phead("PROC_BK_ES")+".UPARID="+this.local.UPARID+".VSNR="+this.local.VSNR+ ".BK_TO_PROCESS="+this.local.bkstoprocess+".ES_TO_PROCESS="+this.local.estoprocess); # # <>: process only if at least one ELDA-SNR AND one BKNR # if (this.local.bkstoprocess<1 || this.local.estoprocess<1) return # # <>: process all BKNRs # bk_loop: if (this.local.curbknum>=this.local.bkstoprocess) return # # <>: setup processing loop for ELDA-SNRs # qexpression this.local.curesnum = 0; # # <>: process current BKNR against all ELDA-SNRs # es_loop: pre_qexpression logger.debug(this.phead("ES_LOOP")+".ES="+this.local.curesnum+"/"+this.local.estoprocess+".BK="+this.local.curbknum+"/"+this.local.bkstoprocess); if (this.local.curesnum>=this.local.estoprocess) goto bk_es_done # # <>: process current BKNR against current ELDA-SNR # pre_qexpression this.curbkrec = this.bk.getRowObject(this.local.curbknum); this.local.SVT = this.curbkrec.SVT; this.local.BKNR = this.curbkrec.BKNR; this.local.curesrec = this.es.getRowObject(this.local.curesnum); this.local.SERIENNUMMER = this.local.curesrec.SERIENNUMMER; logger.debug(this.phead("BK-ES")+".SVT="+this.local.SVT+".BKNR="+this.local.BKNR+".SERIENNUMMER="+this.local.SERIENNUMMER); gosub bkes_proc_record params.SVT @@SVT@@ params.BKNR @@BKNR@@ params.SERIENNUMMER @@SERIENNUMMER@@ post_qexpression this.local.curesnum++; # # <>: # goto es_loop # # <>: all ELDA-SNR done against current BKNR, move up # bk_es_done: qexpression this.local.curbknum++; then_goto bk_loop # # ------------------------------------------------------------------------------ # SUBROUTINE: bkes_proc_record # INPUT: SVT # BKNR # SERIENNUMMER # # <>: get all applicable ELDA-SNR to check associations to # bkes_proc_record: pre_qexpression this.local.SVT = this.local.params.SVT; this.local.BKNR = this.local.params.BKNR; this.local.SERIENNUMMER = this.local.params.SERIENNUMMER; logger.debug(this.phead("bkes_proc_record")+".recstepcount="+this.recstepcount+".SVT="+this.local.SVT+".BKNR="+this.local.BKNR+".SERIENNUMMER="+this.local.SERIENNUMMER); sql select * from SVCLZUORD where TRAEGER=::SVT:: and BKNR=::BKNR:: and SERIENNUMMER=::SERIENNUMMER:: named_params SVT,BKNR,SERIENNUMMER result_varname zuo post_qexpression logger.debug(this.phead("ZUO")+".SVT="+this.local.SVT+".BKNR="+this.local.BKNR+".SNR="+this.local.SERIENNUMMER+".COUNT="+this.zuo.getRowCount()); this.local.zuostoprocess = this.zuo.getRowCount(); this.local.curzuonum = 0; # # <>: ZUO processing loop # zuo_proc_loop: if (this.local.curzuonum>=this.local.zuostoprocess) return # # <>: process one ZUO # pre_qexpression this.local.curzuorec = this.zuo.getRowObject(this.local.curzuonum); this.local.KUR = this.curubrec.KUR; this.local.UPARID = this.curubrec.UPARID; this.local.UNAME = this.curubrec.UNAME; this.local.VSNR = this.curubrec.VSNR; this.local.PPARID = this.curubrec.PPARID; this.local.PNAME = this.curubrec.PNAME; this.local.TRAEGER = this.local.SVT; this.local.BKNR = this.local.BKNR; this.local.VUMFANG = this.curbkrec.VUMFANG; this.local.VOLLMACHTVON = this.curbkrec.VOLLMACHTVON; this.local.VOLLMACHTBIS = this.curbkrec.VOLLMACHTBIS; this.local.ELDASNR = this.local.SERIENNUMMER; this.local.ZUOID = this.local.curzuorec.ID; this.local.ZUOINHPARID = this.local.curzuorec.INHPARID; this.local.ZUOINHROLLE = this.local.curzuorec.INHROLLE; this.local.ZUOVON = this.local.curzuorec.AKTIVVONDATNUM; this.local.ZUOBIS = this.local.curzuorec.AKTIVBISDATNUM; sql insert into SVCL52CASSOC(@@FLIST@@) values(@@FTLIST@@) named_params @@FLIST@@ post_qexpression this.recscreated++; this.local.curzuonum++; then_goto zuo_proc_loop