// // SAP-USR02-Abgleich.vdm Christian Ziemski 26.04.2006 // 02.11.2006 // // Hilfreich z.B. vor Systemkopien P40 -> K40. // // In einem Buffer wird die USR02 Liste aus z.B. K40 erwartet (größere/aktuellere Liste). // Im nächsten Buffer dann die USR02 Liste aus z.B. P40. // // Format: (aus SE16, mit LANGEN Feldbezeichnern!!!) // // Tabelle: USR02 // Angezeigte Felder: 32 von 37 Feststehende Führungsspalten: 2 Listbreite 0500 // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // | |Mandant|Benutzer |Initialkennwort |Gültig von|Gültig bis|Benutzertyp|Benutzergruppe|Zaehler Falschanmeldungen Benutzer|Benutzersperre|Abrechnungsnr.|Name Ben. Anl.|Anlegedatum|Letzes Login-Datum|Letzte Login-Uhrzeit|Initialkennwort |letzte PWänd.|Codeversion|Initialkennwort |letzte PWänd.|Codeversion|Initialkennwort |letzte PWänd.|Codeversion|Initialkennwort |letzte PWänd.|Codeversion|Initialkennwort |letzte PWänd.|Codeversion|Version des Benutzerstamms|Codeversion|Zeitzone| // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // | |030 |ADAM |xxxxxxxxxxxxxxxx|00.00.0000|00.00.0000|A | | 0 |64 |C23220 |BRENZINGER |07.02.2002 |17.04.2006 |08:26:57 |xxxxxxxxxxxxxxxx|07.02.2002 |B |xxxxxxxxxxxxxxxx|00.00.0000 | |xxxxxxxxxxxxxxxx|00.00.0000 | |xxxxxxxxxxxxxxxx|00.00.0000 | |xxxxxxxxxxxxxxxx|00.00.0000 | | |B |CET | // | |030 |ALE_ADMI_USR|xxxxxxxxxxxxxxxx|00.00.0000|00.00.0000|C |NON_DIALOG | 0 | 0 | |JANISCH |12.08.2000 |21.04.2006 |00:00:00 |xxxxxxxxxxxxxxxx|00.00.0000 | |xxxxxxxxxxxxxxxx|00.00.0000 | |xxxxxxxxxxxxxxxx|00.00.0000 | |xxxxxxxxxxxxxxxx|00.00.0000 | |xxxxxxxxxxxxxxxx|00.00.0000 | | |B |CET | // | |030 |ALLOUCHERIE |xxxxxxxxxxxxxxxx|00.00.0000|00.00.0000|A | | 0 |64 | |MEYER |25.09.2001 |21.04.2006 |15:43:18 |xxxxxxxxxxxxxxxx|02.10.2001 |B |xxxxxxxxxxxxxxxx|00.00.0000 | |xxxxxxxxxxxxxxxx|00.00.0000 | |xxxxxxxxxxxxxxxx|00.00.0000 | |xxxxxxxxxxxxxxxx|00.00.0000 | | |B |CET | // | |030 |ALVAREZ |xxxxxxxxxxxxxxxx|00.00.0000|02.11.2005|A | | 0 | 0 | |ZIEMSKI |16.09.2005 |00.00.0000 |00:00:00 |xxxxxxxxxxxxxxxx|00.00.0000 | |xxxxxxxxxxxxxxxx|00.00.0000 | |xxxxxxxxxxxxxxxx|00.00.0000 | |xxxxxxxxxxxxxxxx|00.00.0000 | |xxxxxxxxxxxxxxxx|00.00.0000 | | |B | | // | |030 |ARIEL |xxxxxxxxxxxxxxxx|00.00.0000|00.00.0000|A | | 0 |64 |C62651 |MEYER |25.09.2001 |21.04.2006 |13:11:39 |xxxxxxxxxxxxxxxx|20.03.2006 |B |xxxxxxxxxxxxxxxx|15.12.2005 |B |xxxxxxxxxxxxxxxx|27.09.2005 |B |xxxxxxxxxxxxxxxx|26.09.2005 |B |xxxxxxxxxxxxxxxx|01.07.2005 |B | |B |CET | //-------------------------------------------------------------------------------------- // // // Das Makro ermittelt // - die gültigen User der beiden Listen, // - die gültigen User, die nur in Liste 1 (K40) existieren // - alle User, die nur in Liste 1 (K40) existieren // // ================================================================================== // // Register usage: // // #80 Benutzersperre 0, 64, ... // // #81 Current buffer user list from K40 // #82 next buffer user list from P40 // #83 result buffer valid users K40 // #84 result buffer valid users P40 // #85 result buffer valid users in K40 but not in P40 // #86 result buffer users in K40 but not in P40 // // // #91 buf number 1 for GETLIST // #93 buf number 2 // #94 top left corner of users in buffer #84 // #95 bottom right corner of users in buffer #84 // // #103 temp. // #104 temp. // 103 temp. // // 80 Benutzer // 81 Gültig bis Datum TT.MM.JJJJ // 82 Gültig bis Datum JJJJ-MM-TT // 83 Aktuelles Datum JJJJ-MM-TT // // //=================================================================================== #81=Buf_Num #82=#81+1 #83=Buf_Free Buf_Switch(#83) // valid K40 users File_Save_As("|(VEDIT_TEMP)\sap-usr02-abgleich-1.txt", OK+NOMSG) Buf_Switch(#81) // date of today as yyy-mm-dd Out_Reg(83) Date(REVERSE+NOCR+NOMSG+VALUE,'-') Out_Reg(CLEAR) #91=#81 #93=#83 Call("GETLIST") // K40 if (#83==#82) { // if no second list available Buf_Switch(#83) BoF Ins_Text("Gültige User aus Liste 1 (K40)") Ins_Newline Ins_Text("--------------------------------------------------------------------------") Ins_Newline return } #84=Buf_Free Buf_Switch(#84) File_Save_As("|(VEDIT_TEMP)\sap-usr02-abgleich-2.txt", OK+NOMSG) #91=#82 #93=#84 Call("GETLIST") // P40 //---------------------------------- // get corners of user column Buf_Switch(#84) // valid P40 users BoF Search("||", ADVANCE+COUNT,3) #94=Cur_Pos EoF if (At_BoL) { Line(-1) } #95=Cur_Pos + 24 // At col of end of user (after closing |) // search valid users of K40 who are not in P40 #85=Buf_Free // for results Buf_Switch(#85) File_Save_As("|(VEDIT_TEMP)\sap-usr02-abgleich-3.txt", OK+NOMSG) Buf_Switch(#83) // valid K40 users BoF while (! At_EOF) { Search("||", ADVANCE+COUNT,3) #103=CP Search("||") Reg_Copy_Block(80, #103, Cur_Pos) // Benutzer BoL Reg_Copy_Block(104,Cur_Pos, Cur_Pos+222) Buf_Switch(#84) // valid P40 users Search_Block("|@(80)|[|W]||", #94,#95, BEGIN+COLUMN+NOERR) if (Error_Match) { Buf_Switch(#85) Reg_Ins(104) Ins_Newline(1) } Buf_Switch(#83) // valid K40 users Line(1, ERRBREAK) } //---------------------------------- // get corners of user column Buf_Switch(#82) // P40 users BoF Search("|<-----", COUNT,2) Line(1) // auf 1. User Search("||", ADVANCE+COUNT,3) #94=Cur_Pos EoF if (At_BoL) { Line(-1) } if (Match("-------")==0) { Line(-1) } #95=Cur_Pos + 24 // At col of end of user (after closing |) // search all users of K40 who are not in P40 #86=Buf_Free // for results Buf_Switch(#86) File_Save_As("|(VEDIT_TEMP)\sap-usr02-abgleich-4.txt", OK+NOMSG) Buf_Switch(#81) // K40 users BoF Search("|<-----", COUNT,2) Line(1) // auf 1. User while (! At_EOF) { if (Match("----") == 0) { break } Search("||", ADVANCE+COUNT,3) #103=CP Search("||") Reg_Copy_Block(80, #103, Cur_Pos) // Benutzer BoL Reg_Copy_Block(104,Cur_Pos, Cur_Pos+222) Buf_Switch(#82) // P40 users // Search_Block(@80, #94,#95, BEGIN+COLUMN+NOERR) Search_Block("|@(80)|[|W]||", #94,#95, BEGIN+COLUMN+NOERR) if (Error_Match) { Buf_Switch(#86) Reg_Ins(104) Ins_Newline(1) } Buf_Switch(#81) // K40 users Line(1, ERRBREAK) } Buf_Switch(#81) BoF Buf_Switch(#82) BoF Buf_Switch(#83) BoF Ins_Text("Gültige User aus Liste 1 (K40)") Ins_Newline Ins_Text("--------------------------------------------------------------------------") Ins_Newline Buf_Switch(#84) BoF Ins_Text("Gültige User aus Liste 2 (P40)") Ins_Newline Ins_Text("--------------------------------------------------------------------------") Ins_Newline Buf_Switch(#85) BoF Ins_Text("Gültige User aus Liste 1 (K40), die aber nicht in Liste 2 (P40) existieren (oder dort nicht gültig sind)") Ins_Newline Ins_Text("--------------------------------------------------------------------------") Ins_Newline Buf_Switch(#86) BoF Ins_Text("Alle User aus Liste 1 (K40), die gar nicht in Liste 2 (P40) existieren") Ins_Newline Ins_Text("--------------------------------------------------------------------------") Ins_Newline return //======================================================================= :GETLIST: Buf_Switch(#91) BoF Search("|<-----", COUNT,2) Line(1) // auf 1. User while (! At_EOF) { if (Match("----") == 0) { break } Search("||", ADVANCE+COUNT,3) #103=CP Search("||") // Reg_Copy_Block(80, #103, Cur_Pos) // Benutzer Search("||", ADVANCE+COUNT,3) #103=CP Search("||") Reg_Copy_Block(81, #103, Cur_Pos) // Gültig bis TT.MM.JJJJ Search("||", ADVANCE+COUNT,4) #80=Num_Eval(SUPPRESS) // Benutzersperre (0, 64, ...) Out_Reg(82) Reg_Type_Block(81, 6,6+4) Message("-") Reg_Type_Block(81, 3,3+2, APPEND) Message("-") Reg_Type_Block(81, 0,0+2, APPEND) Out_Reg(CLEAR) #103=1 // temp. flag: User is valid if (#80 != 0) { // gesperrt? #103=0 } if (Reg_Compare(82,"0000-00-00") != 0) { // wenn eingeschränkte Gültigkeit if (Reg_Compare(82,@(83)) == 2) { // gültig bis < heute #103=0 } } if (#103) { // User immer noch gültig BoL Reg_Copy(103, 1) Buf_Switch(#93) Reg_Ins(103) Buf_Switch(#91) } Line(1, ERRBREAK) } return