ATKEDE ;ATK verwerking EDI (Export) [ 12/05/2003 9:42 AM ] ;Electronic Data Interchange ; CHKORD(KLNr) Quit ''$L($$GETORD(KLNr)) ; GETORD(KLNr) New R,ORDNr,OLNr,EDIORDNr,KlOLNr,EdiTime Set (ORDNrs,ORDNr)="" For Set ORDNr=$O(^KOD(KLNr,"F",ORDNr)) Quit:ORDNr="" Do .Set R=^KOD(KLNr,"F",ORDNr,1),EDIORDNr=$P(R,D,35) .Quit:EDIORDNr="" .Set OLNr=100 .For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Do Quit:ORDNrs[ORDNr ..Set R=^KOD(KLNr,"F",ORDNr,OLNr),PRNr=$P(R,D,2),KlOLNr=$P(R,D,35),EdiTime=$P(R,D,38) ..Quit:'PRNr Quit:KlOLNr="" Quit:EdiTime ..Set ORDNrs=ORDNrs_D_ORDNr Set $E(ORDNrs)="" Quit ORDNrs ; CTK0 New Do INIT^vhTERMINA Set KLNr="" For Set KLNr=$O(^ATK("EDI","E","PAR","KL",KLNr)) Quit:KLNr="" Do VERWERK(KLNr,1) Quit ; VERWERK(KLNr,CTK0) New %K,%TC,I,R,Dir,Dev,File,ORDNrs,ORDNr,Order,EMailAdr,LD,Input,OrdRef New EDIORDNr,EdiTime,OLNr,PRNr,LCount,EdiRef,KlOLNr Set CTK0=$G(CTK0),EdiTime=$H,EMailAdr=^ATK("EDI","E","PAR","KL",KLNr,"EMAIL") Set ORDNrs=$$GETORD(KLNr) If 'CTK0 Do .Do:$L(ORDNrs) ..Set Dir=$$DIRUSER^vhDEV ..Do DISPLAY^vhScherm("ATKEDE") ..For I=1:1:$L(ORDNrs,D) Do ...Set LCount=0,ORDNr=$P(ORDNrs,D,I),OLNr=100 ...For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Do ....Set R=^KOD(KLNr,"F",ORDNr,OLNr),PRNr=$P(R,D,2),KlOLNr=$P(R,D,35) ....If PRNr,$L(KlOLNr) Set LCount=LCount+1 ...Set R="1\"_ORDNr_D_$$EDIREF(KLNr,ORDNr,1)_D_LCount ...Set R=R_D_$$GETLOG^ATKEDI(KLNr,$$EDIREF^ATKEDE(KLNr,ORDNr,1),"I"),ORDNrs(I)=R ..Do INIT^vhLIST("ATKEDE","SELORD",.LD) ..Do WRITE^vhLIST(.LD) ..For Set Input=$$SCROLL^vhLIST(.LD) Do Quit:"\-\CANC\EXPORT\"[(D_Input_D) ...If Input="COM" Set Input="" Do CALL^vhMenu("ATKEDESB") ...If "\-\CANC\"[(D_Input_D) Set:$$^vhTXTPOP("FILE","EXIT")'="-" Input="" Quit ...Do EXEC^vhMenu("ATKEDESB",.Input) ...If Input="EXPORT",'$$CHKSEND(.ORDNrs) Set Input=$$^vhTXTPOP("ATKEDE","BEVEXPORT") ..Set ORDNrs="" ..If Input="EXPORT" For I=1:1 Set R=$G(ORDNrs(I)) Quit:R="" If $P(R,D) Set ORDNrs=ORDNrs_D_$P(R,D,2) ..Set $E(ORDNrs)="" Else Set Dir=^ATK("EDI","E","PAR","DIR") Do:$L(ORDNrs) .For I=1:1 Set ORDNr=$P(ORDNrs,D,I) Quit:ORDNr="" Do ..For Do ADD^vhLock("^KOD(KLNr,""F"",ORDNr)") Quit:%TC Do ...If CTK0 Hang 5 Quit ...Do LDISP^vhLock("^KOD(KLNr,""F"",ORDNr)","Order "_ORDNr) .Set File=$$FILENR(),Dev=$$OPEN^vhDEV(Dir,"NR"_File_".BEV","W","M") .Quit:0[Dev .Set EMailAdr=$P(EMailAdr,D,2) .Set Order="BI\####\"_File_D_D_EMailAdr .For I=1:1:$L(ORDNrs,D) Do ..Set ORDNr=$P(ORDNrs,D,I) ..Set R=^KOD(KLNr,"F",ORDNr,1),OrdRef=$P(R,D,3),EDIORDNr=$P(R,D,35) ..If $L(EDIORDNr),$D(^ATK("EDI","L",KLNr,"I",EDIORDNr)) ..Else Set EDIORDNr=$$EDIREF(KLNr,ORDNr,1) ..Do FETCH(ORDNr,.Order) ..If $L(EDIORDNr),$D(^ATK("EDI","L",KLNr,"I",EDIORDNr)) Do LOG(KLNr,"I",EDIORDNr,"B",EdiTime,File) .Use 0 .Do CONVERT(Dev,.Order) .Close Dev .Do EDIDATE(.Order,EdiTime) .If $G(CTK0) Do MAIL(KLNr,ORDNrs,File,Dir,EMailAdr) Quit .Set R=$$^vhTXTPOP("ATKEDE","EXPORT",,"NR"_File_".BEV",$P(Dir,D,4,5),EMailAdr) .Do LOG(KLNr,"E",File,"E",EdiTime) For I=1:1 Set ORDNr=$P(ORDNrs,D,I) Quit:ORDNr="" Do REMOVE^vhLock("^KOD(KLNr,""F"",ORDNr)") Quit ; CONVERT(Dev,Order) New ONr,LNr Set ONr="" Use Dev Write $$TRANSREC(Order),! For Set ONr=$O(Order(ONr)) Quit:ONr="" Do .Use Dev .Write $$TRANSREC(Order(ONr)),! .Set LNr="" .For Set LNr=$O(Order(ONr,LNr)) Quit:LNr="" Do ..Use Dev ..Write $$TRANSREC(Order(ONr,LNr)),! Quit ; TRANSREC(Rec) New R,RecOut,Kode,LNext,LRec,Label,Len,Type,Piece,Value,From,To Set Kode=$P(Rec,D),Ret=Kode,LNext="",From=$L(Ret)+1 For Set LNext=$O(^ATK("EDI","E",Kode,LNext)) Quit:LNext="" Do .Set LRec=^ATK("EDI","E",Kode,LNext) .Set Label=$P(LRec,D,1) .Set Len=$P(LRec,D,2) .Set Type=$P(LRec,D,3) .Set Piece=$P(LRec,D,4) .Set Value=$P(Rec,D,Piece) .If Type="N" Set Value=$$ADDNUM(Value,Len) .Else Set Value=$$ADDALFA(Value,Len) .Set To=From+Len-1 .Set $E(Ret,From,To)=Value .Set From=To+1 Quit Ret ; ADDNUM(Value,Len) Set Value=$J(Value,$P(Len,"."),$P(Len,".",2)) Quit Value ; ADDALFA(VAlue,Len) Set Value=$E(Value_$J("",Len-$L(Value)),1,Len) Quit Value ; FETCH(ORDNr,Order) New R,KLNr,ONr,LNr,KlOLNr,EDIORDNr,OrdDat,VwCust,VwLVH,Sort New LaNaam,LaNaam2,LaStraat,LaPostK,LaWoonPl,LaLand New OLNr,PRNr,OLUNr,BONNr,EdiTime,Faktor New IdentNr,PakRef,KortTxt,Omschr,Aantal,LevDat,LevWk,Prijs,GrOrde,Munt Set R=^KO1(ORDNr,"F"),KLNr=$P(R,D),R=^KOD(KLNr,"F",ORDNr,1),OrdDat=$P(R,D,2),EDIORDNr=$P(R,D,35) Set VwCust=$P($P(R,D,9),"#"),VwLVH=$$USERNAME^vhUSER($P($P(R,D,8),"#"),-1) Set R=^KOD(KLNr,"F",ORDNr,3),LaNaam=$P(R,D,2),LaNaam2=$P(R,D,3),LaStraat=$P(R,D,5) Set LaPostK=$P(R,D,6),LaWoonPl=$P(R,D,7),LaLand=$$LAND^vhRtn1($P(R,D,8)) Set ONr=$O(Order(""),-1)+1,R="OH\"_KLNr_D_ORDNr_D_D_EDIORDNr_D_$$CONVDATE^vhDTyp(OrdDat,"DKP","DSN") Set R=R_D_VwCust_D_VwLVH_D_LaNaam_D_LaNaam2_D_LaStraat_D_LaPostK_D_LaWoonPl_D_LaLand_D_$$EDIREF(KLNr,ORDNr),Order(ONr)=R Set OLNr=100 For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Do .Set R=^KOD(KLNr,"F",ORDNr,OLNr),PRNr=$P(R,D,2),Aantal=$P(R,D,3),Omschr=$P(R,D,5),Prijs=$P(R,D,6) .Set OLUNr=$P(R,D,15),GrOrde=$E($P(R,D,21)),Munt=$P(R,D,22),LevWk=$P(R,D,25) .Set KlOLNr=$P(R,D,35),Faktor=$P(R,D,36),PakRef=$P(R,D,37),EdiTime=$P(R,D,38) .Quit:EdiTime .Set (IdentNr,LevDat)="" Set:'Faktor Faktor=1 .If PRNr Quit:KlOLNr="" Do ..Set BONNr=$G(^ORDW("IO",ORDNr,OLUNr)) ..If BONNr,$D(^ORDW("D",BONNr,"D",ORDNr,OLUNr)) Do ...Set R=^ORDW("D",BONNr),LevDat=$$EXTDATE^vhDTyp($P(R,D,5),"DSN"),LevWk="" ..Else Set LevDat=$$EXTDATE^vhDTyp(LevWk,"DSN"),LevWk="" ..Set R=^KPR(PRNr,0),KortTxt=$P(R,D),R=^KPR(PRNr,2),IdentNr=$TR($P(R,D,25),".","") ..Set R="OL\"_KLNr_D_ORDNr_D_OLUNr_D_$P(KlOLNr,".")_D_$P(KlOLNr,".",2)_D_$P(KlOLNr,".",3) ..Set R=R_"\K"_D_IdentNr_D_PakRef_D_KortTxt_D_(Aantal/Faktor)_D_LevDat_D_LevWk_D_(Prijs*Faktor)_D_GrOrde_D_Munt ..Set Sort($J(KlOLNr,8))=R .Else Do Set KlOLNr="" For Set KlOLNr=$O(Sort(KlOLNr)) Quit:KlOLNr="" Set R=Sort(KlOLNr),LNr=$O(Order(ONr,""),-1)+1,Order(ONr,LNr)=R Quit ; EDIDATE(Order,EdiTime) New R,ONr,LNr,KLNr,ORDNr,OLUNr,OLNr Set ONr="",EdiTime=$G(EdiTime,$H) For Set ONr=$O(Order(ONr)) Quit:ONr="" Do .Set LNr="" .For Set LNr=$O(Order(ONr,LNr)) Quit:LNr="" Do ..Set R=Order(ONr,LNr),KLNr=$P(R,D,2),ORDNr=$P(R,D,3),OLUNr=$P(R,D,4) ..Set OLNr=^ORD("IU",ORDNr,OLUNr) ..If KLNr,ORDNr,OLNr Set $P(^KOD(KLNr,"F",ORDNr,OLNr),D,38)=EdiTime Quit ; EDIREF(KLNr,ORDNr,OnlyNr) New R,OrdRef,EdiRef Set R=^KOD(KLNr,"F",ORDNr,1),OrdRef=$P(R,D,3) Set EdiRef=$P(OrdRef,"EDI ",2) Set:$G(OnlyNr) EdiRef=$P(EdiRef,"/") Set:EdiRef="" EdiRef=$P(R,D,35) Quit EdiRef ; MAIL(KLNr,ORDNrs,File,Dir,EMailAdr) New I,UserId,Ref,Text,MailId For I=$L(ORDNrs):-1:1 Set:$E(ORDNrs,I)=D $E(ORDNrs,I)=", " Set UserId=$$USERID^vhUSER("ATKEDE") Set:UserId="" UserId=$$USERID^vhUSER("Chris W") Set Ref(1)="KL\"_KLNr_"\R\O" Set Text="Het bestand ŞBNR"_File_".BEVŞb in "_$P(Dir,D,4,5)_" bevat volgende orders:~~"_ORDNrs Set Text=Text_"~~Gelieve dit bestand als bijlage via E-mail te versturen naar ŞB"_EMailAdr_"Şb." Set MailId=$$SYSTEM^vhMAIL("KL",KLNr,"VHISIE - EDI export",UserId,Text,.Ref,1,1) Quit ; EMAILADR(KLNr,EMailAdr) New Optie,Pers,Count Set Optie("AANSPR")=0,Optie("AUTOSEL")=0,Optie("CONNECT")="E" Set Optie("FILTER")=1,Optie("PIECE")="5,6",Optie("TITEL")="EDI export - E-Mail adres" Set Pers="",Count=0 For Set Pers=$O(^ATK("EDI","E","PAR","KL",KLNr,"EMAIL",Pers)) Quit:Pers="" Set Count=Count+1,Optie("BEFORE",Count)=^ATK("EDI","E","PAR","KL",KLNr,"EMAIL",Pers) Set:'$D(Optie("BEFORE",1)) Optie("BEFORE",1)=^ATK("EDI","E","PAR","KL",KLNr,"EMAIL") Set Optie("SELECT")=$P(EMailAdr,D),Optie("VWBEPERK")="AK3" Set EMailAdr=$$SELECT^PERSS("K",KLNr,.Optie) Quit EMailAdr ; MARK New R Set R=ORDNrs(LD("SELECT")),$P(R,D)='$P(R,D),ORDNrs(LD("SELECT"))=R Do LINE^vhLIST(.LD,LD("SELECT")) Quit ; CHKEXP(BONNrs) New I,Ok Set Ok=0 For I=1:1 Quit:'$D(ORDNrs(I)) If $P(ORDNrs(I),D) Set Ok=1 Quit Quit Ok ; MENUITEM() New MenuItem Set MenuItem="Transfert naar "_$TR($P(Dir,D,4,5),D,"/") Quit MenuItem ; LOG(KLNr,ImpExp,EDIORDNr,Aktie,EdiTime,LogRef) New R,ONr,LNr,LCount,KlOLNr,IdentNr,PRNr,Aantal,LevDat,LevWk,Prijs,GrOrde,Munt If '$G(CUserId) New CUserId Set CUserId=$$DEVUSER^vhUSER($G(io,$$IO^cQ5)) Do:"\B\E\"[(D_ImpExp_D) Do:ImpExp="E"!(Aktie="B") .Set LCount=0,ONr="" .For Set ONr=$O(Order(ONr)) Quit:ONr="" Do ..Set R=Order(ONr) ..If Aktie="B",$P(R,D,15)'=EDIORDNr Quit ..Set LNr="" ..For Set LNr=$O(Order(ONr,LNr)) Quit:LNr="" Do ...Set LCount=LCount+1 ...Quit:Aktie'="B" ...Set R=Order(ONr,LNr) ...Quit:$P(R,D)'="OL" ...Set KlOLNr=$TR($P(R,D,5,7),D,"."),IdentNr=$P(R,D,9),Aantal=$P(R,D,12) ...Set LevDat=$P(R,D,13),LevWk=$P(R,D,14),Prijs=$P(R,D,15),GrOrde=$P(R,D,16),Munt=$P(R,D,17) ...Set R=$G(^KPR2(IdentNr_" ")),PRNr=$P(R,D),LevDat=$$INTDATE^vhDTyp(LevDat,"DSN") ...Set LevWk=$$INTDATE^vhDTyp($E(LevWk,1,4)_"/"_$E(LevWk,5,6),"DW4") ...Set R=KlOLNr_D_PRNr_D_Aantal_D_$S(LevDat:LevDat,1:LevWk)_D_Prijs_D_GrOrde_D_Munt ...Set ^ATK("EDI","L",KLNr,ImpExp,EDIORDNr,Aktie,EdiTime,LCount)=R Set EdiTime=$G(EdiTime,$H),R=$G(^ATK("EDI","L",KLNr,ImpExp,EDIORDNr)) Set:$L(R) R=R_D Set R=R_CUserId_"#"_Aktie_"#"_EdiTime_"#"_$G(LogRef)_"#"_$G(LCount) Set ^ATK("EDI","L",KLNr,ImpExp,EDIORDNr)=R Quit ; FILENR() New R,NextNr Lock +^ATK("EDI","N") Set R=$G(^ATK("EDI","N")) Set:$P(R,D,2)'=+$H R="",$P(R,D,2)=+$H Set ($P(R,D),NextNr)=$P(R,D)+1,^ATK("EDI","N")=R Lock -^ATK("EDI","N") Quit DM_DD_$TR($J(NextNr,2)," ",0) ; ; Tonen van het detail van een order LOGDET(LD) New R,Input,LDTemp,Line Merge LDTemp=LD Set LD("OFFSET")=LD("SELECT")-1_"`",LD("SELECT")="" Set $P(LD("POS"),";",3)=$P(LD("POS"),";") Set $P(LD("SET"),"`",7)="" Do WRITE^vhLIST(.LD) For Set Input=$$DETAIL() Quit:"\-\CANC\ENTER\"[(D_Input_D) Do .If Input="V" Do MOVE^vhLIST(.LD,"DO",1) .If Input="R" Do MOVE^vhLIST(.LD,"UP",1) Set R=LD("OFFSET")+1 Merge LD=LDTemp Set LD("SELECT")=R Do WRITE^vhLIST(.LD) Quit ; DETAIL() New R,Input,LDD,Detail Set R=LD("OFFSET")+1,R=@LD("F")@(R) Do BLDDET(R,.Detail),INIT^vhLIST("ATKEDE","SELORDD",.LDD) Do WRITE^vhLIST(.LDD) For Set Input=$$SCROLL^vhLIST(.LDD) Do Quit:"\-\CANC\ENTER\V\R\"[(D_Input_D) Do .If Input="COM" Set Input="" Do CALL^vhMenu("ATKEDESBD") .If "\-\CANC\ENTER\V\R\"[(D_Input_D) Quit .Do EXEC^vhMenu("ATKEDESBD",.Input) Quit Input ; ; Opbouw van het detail van een order BLDDET(R,Detail) New ORDNr,EdiRef,SortKey,PRNr,Aktie,EdiTime,LCount,OLNr,KlOLNr Set ORDNr=$P(R,D,2),EdiRef=$P(R,D,3) Set Aktie=$P($P(R,D,5),"#",2),EdiTime=$P($P(R,D,5),"#",3) For LCount=1:1 Set R=$G(^ATK("EDI","L",KLNr,"I",EdiRef,"I",EdiTime,LCount)) Quit:R="" Do .Set (SortKey,KlOLNr)=$P(R,D),PRNr=$P(R,D,2) Set:'PRNr PRNr="?"_SortKey .Set:PRNr SortKey=SortKey_$$SORTKEY^PRODUKT(PRNr) .Set Detail("S",SortKey)=R,Detail("P",PRNr)=SortKey .Set:$L(KlOLNr) Detail("P",PRNr,KlOLNr)=SortKey Set OLNr=100 For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Do .Set R=^KOD(KLNr,"F",ORDNr,OLNr),PRNr=$P(R,D,2),KlOLNr=$P(R,D,35) .Quit:'PRNr Quit:KlOLNr="" .Set SortKey=$G(Detail("P",PRNr,KlOLNr)) .Set:SortKey="" SortKey=$G(Detail("P",PRNr)) .Set:SortKey="" SortKey=$G(Detail("P","?"_KlOLNr)) .Set:SortKey="" SortKey="~"_$$SORTKEY^PRODUKT(PRNr) .Set R=$P(R,D,3)_D_$P(R,D,25)_D_$P(R,D,6)_D_$E($P(R,D,21))_D_$P(R,D,22) .Set $P(Detail("S",SortKey),D,2)=PRNr,$P(Detail("S",SortKey),D,8,99)=R Set SortKey="",LCount="" For Set SortKey=$O(Detail("S",SortKey)) Quit:SortKey="" Do .Set R=Detail("S",SortKey),$P(R,D,5)=$J($P(R,D,5),0,2),$P(R,D,10)=$J($P(R,D,10),0,2) .Set LCount=LCount+1,Detail(LCount)=R Kill Detail("S"),Detail("P") Quit ; ; Ophalen van de problemen van een bericht GETPROB(R) New Prob,Detail,LCount Set Prob=$S($P(R,D,4)'=$P($P(R,D,5),"#",5):"l",1:" ")_" " Do BLDDET(R,.Detail) For LCount=1:1 Set R=$G(Detail(LCount)) Quit:R="" Do .If $E(Prob,2)'="a",$P(R,D,3)'=$P(R,D,8) Set $E(Prob,2)="a" .If $E(Prob,3)'="w",$P(R,D,4)'=$P(R,D,9) Set $E(Prob,3)="w" .If $E(Prob,4)'="p",$P(R,D,5,7)'=$P(R,D,10,12) Set $E(Prob,4)="p" Quit Prob ; ; Controle van alle geselecteerde orders voor export CHKSEND(ORDNrs) New IEOk,LCount Set IEOk=1 For LCount=1:1 Set R=$G(ORDNrs(LCount)) Quit:R="" Do Quit:'IEOk .Quit:'$P(R,D) .Set IEOk='$L($TR($$GETPROB(R)," wp","")) Quit IEOk ; ; Nog niet afgewerkt CHKBEV New Set $ZT="^cA406",Q="K" Do ^cA604 Set Dagen=$G(^ATK("EDI","E","PAR","OBV"),1) Set KLNr="",CompDate=$$CALCDATE^vhDTyp(,"A",-Dagen) For Set KLNr=$O(^ATK("EDI","L",KLNr)) Quit:KLNr="" Do .Set EDIORDNr="" .For Set EDIORDNr=$O(^ATK("EDI","L",KLNr,"I",EDIORDNr)) Quit:EDIORDNr="" Do ..Set R=^ATK("EDI","L",KLNr,"I",EDIORDNr),R=$P(R,D,$L(R,D)) ..If $P(R,"#",2)'="B",$P(R,"#",3)'>CompDate Set Onbev(KLNr,EDIORDNr)="" Do:$D(Onbev) .Set KLNr="" .For Set KLNr=$O(Onbev(KLNr)) Quit:KLNr="" Do ..Kill Txt,Ref ..Set LCount=2,Txt(1)="Volgende EDI-berichten zijn nog niet bevestigd",Txt(2)="" ..Set EDIORDNr="" ..For Set EDIORDNr=$O(Onbev(KLNr,EDIORDNr)) Quit:EDIORDNr="" Do ...Set R=$G(Txt(LCount)) Set:$L(R)>60 LCount=LCount+1,R="" ...Set R=R_$J(EDIORDNr,10),Txt(LCount)=R ...Kill Onbev(KLNr,EDIORDNr) ..ZWrite Txt ..;Set MailId=$$SYSTEM^vhMAIL("KL",KLNr,"VHISIE - EDI niet bevestigd",3,.Txt,.Ref,1,1) Quit ;