| 1 | GECSUNUM ;WISC/RFJ-get next counter number                          ;01 Nov 93 | 
|---|
| 2 | ;;2.0;GCS;**34**;MAR 14, 1995 | 
|---|
| 3 | Q | 
|---|
| 4 | ; | 
|---|
| 5 | ; | 
|---|
| 6 | COUNTER(GECSNAME) ;  return next counter number | 
|---|
| 7 | ;  gecsname=station-batch type-fiscal year | 
|---|
| 8 | ;  example for fms: 460-FMS:MO-94 | 
|---|
| 9 | ;  return next counter number | 
|---|
| 10 | I $L($G(GECSNAME))<10!($L($G(GECSNAME))>20) Q "invalid format for "_$G(GECSNAME) | 
|---|
| 11 | N %,DA | 
|---|
| 12 | ; | 
|---|
| 13 | S DA=+$O(^GECS(2101.5,"B",GECSNAME,0)) | 
|---|
| 14 | I 'DA D | 
|---|
| 15 | .   ;  add entry to file | 
|---|
| 16 | .   L +^GECS(2101.5,0) | 
|---|
| 17 | .   ;  check to make sure another job did not add entry between locks | 
|---|
| 18 | .   S DA=+$O(^GECS(2101.5,"B",GECSNAME,0)) I DA Q | 
|---|
| 19 | .   S %=^GECS(2101.5,0) | 
|---|
| 20 | .   F DA=$P(%,"^",3)+1:1 Q:'$D(^GECS(2101.5,DA)) | 
|---|
| 21 | .   S ^GECS(2101.5,DA,0)=GECSNAME_"^0" | 
|---|
| 22 | .   S ^GECS(2101.5,"B",GECSNAME,DA)="" | 
|---|
| 23 | .   S $P(%,"^",3)=DA,$P(%,"^",4)=$P(%,"^",4)+1,^GECS(2101.5,0)=% | 
|---|
| 24 | .   L -^GECS(2101.5,0) | 
|---|
| 25 | ; | 
|---|
| 26 | L +^GECS(2101.5,DA) | 
|---|
| 27 | S %=$P(^GECS(2101.5,DA,0),"^",2)+1 | 
|---|
| 28 | I %>9999999 S %=1 | 
|---|
| 29 | I %=0 S %=1 | 
|---|
| 30 | S $P(^GECS(2101.5,DA,0),"^",2)=% | 
|---|
| 31 | L -^GECS(2101.5,DA) | 
|---|
| 32 | Q % | 
|---|
| 33 | ; | 
|---|
| 34 | ACOUNTER(GECSNAME) ;  return next alphanumeric counter number | 
|---|
| 35 | ;  gecsname=station-batch type-fiscal year | 
|---|
| 36 | ;  example for fms: 460-FMS:MO-94 | 
|---|
| 37 | ;  return next alphanumeric counter number | 
|---|
| 38 | I $L($G(GECSNAME))<10!($L($G(GECSNAME))>20) Q "invalid format for "_$G(GECSNAME) | 
|---|
| 39 | N %,DA,GECALPHA,GECCNT,X1,X2,X3 | 
|---|
| 40 | ; | 
|---|
| 41 | S GECALPHA="ABCDEFGHIJKLMNPQRSTUVWXYZA" | 
|---|
| 42 | S DA=+$O(^GECS(2101.5,"B",GECSNAME,0)) | 
|---|
| 43 | I 'DA D | 
|---|
| 44 | .   ;  add entry to file | 
|---|
| 45 | .   L +^GECS(2101.5,0) | 
|---|
| 46 | .   ;  check to make sure another job did not add entry between locks | 
|---|
| 47 | .   S DA=+$O(^GECS(2101.5,"B",GECSNAME,0)) I DA Q | 
|---|
| 48 | .   S %=^GECS(2101.5,0) | 
|---|
| 49 | .   F DA=$P(%,"^",3)+1:1 Q:'$D(^GECS(2101.5,DA)) | 
|---|
| 50 | .   S ^GECS(2101.5,DA,0)=GECSNAME_"^0" | 
|---|
| 51 | .   S ^GECS(2101.5,"B",GECSNAME,DA)="" | 
|---|
| 52 | .   S $P(%,"^",3)=DA,$P(%,"^",4)=$P(%,"^",4)+1,^GECS(2101.5,0)=% | 
|---|
| 53 | .   L -^GECS(2101.5,0) | 
|---|
| 54 | ; | 
|---|
| 55 | L +^GECS(2101.5,DA) | 
|---|
| 56 | S %=$P(^GECS(2101.5,DA,0),"^",2) | 
|---|
| 57 | I %?1N2A D  G ACNTEND | 
|---|
| 58 | . I %="9ZZ"!(%="9zz") S %=1 Q  ;Highest value reached, start over at 1 | 
|---|
| 59 | . S X3=$E(%,3) | 
|---|
| 60 | . S X2=$E(%,2) | 
|---|
| 61 | . S X1=$E(%,1) | 
|---|
| 62 | . S X3=$$ALPHA(X3) ;increment 3rd digit alpha | 
|---|
| 63 | . I X3="A" D  ;if 3rd digit alpha equal "A", then increment 2nd digit alpha | 
|---|
| 64 | .. S X2=$$ALPHA(X2) ; increment 2nd digit alpha | 
|---|
| 65 | .. I X2="A" S X1=X1+1 ;if 2nd digit alpha equal "A", then increase 1st digit number | 
|---|
| 66 | . S %=X1_X2_X3 | 
|---|
| 67 | I %?2N1A D  G ACNTEND | 
|---|
| 68 | . I %="99Z"!(%="99z") S %="0AA" Q  ;Highest value reached, begin using alpha for 2nd digit | 
|---|
| 69 | . S X3=$E(%,3) | 
|---|
| 70 | . S GECCNT=$E(%,1,2)+1 ; increment number by 1 | 
|---|
| 71 | . I GECCNT>99 S GECCNT="00" D  ;reset cnt to zero and increment 3rd digit alpha | 
|---|
| 72 | .. S X3=$$ALPHA(X3) ;increment 3rd digit alpha | 
|---|
| 73 | . I $L(GECCNT)=1 S GECCNT="0"_GECCNT | 
|---|
| 74 | . S %=GECCNT_X3 | 
|---|
| 75 | S %=%+1 | 
|---|
| 76 | I %>999 S %="00A" ;Highest all numeric value reached, begin using alpha as 3rd digit | 
|---|
| 77 | ACNTEND S $P(^GECS(2101.5,DA,0),"^",2)=% | 
|---|
| 78 | L -^GECS(2101.5,DA) | 
|---|
| 79 | Q % | 
|---|
| 80 | ; | 
|---|
| 81 | ALPHA(A) ;Increment alpha character to next letter in the alphabet | 
|---|
| 82 | ; A = Any letter in the alphabet except O to prevent confusion with zero | 
|---|
| 83 | N X,Y | 
|---|
| 84 | I A'?1A!(A="") Q "Z" ;when in doubt return "Z" | 
|---|
| 85 | S X=A X ^%ZOSF("UPPERCASE") S A=Y | 
|---|
| 86 | I A="O" Q "P" | 
|---|
| 87 | S A=$E(GECALPHA,$F(GECALPHA,A)) | 
|---|
| 88 | Q A | 
|---|