《 DOSマシーンでFORMが使えません ---- 第2弾 》
-
使用ソフト THE PIPS
-
使用ハード サーバー J3100/VX-501
クライアント FUTURE32α
J3100PV466/201J
J3100SL-081VW
J3100PV2(PV49933V)
-
使用プリンター PT-352
PT-3067
キヤノン レーザショット B406E
前回 THE PIPS No.151 のネットワークの事例の、さらに≪INEXT≫ を使用した場合です。
《前回からの改良点》
1. プログラムのキャビネットに、UNIONを設定しました。
2. プログラムのキャビネットとデータのキャビネットを別々にしました。
USEINF(3)を使用していますので、同じキャビネットに混在していますと、キャビネ
ット使用不能になります。
3. IUSE から IEND までの時間を、できるだけ短くしました。
4. USEINF の3(読み書き可能)を使用しました。
X変数=1 ------- キャビネット使用可能
X変数=0 ------- キャビネット使用不能
5. 次のデータを読むために MENU を呼んでいましたが、
MENU画面の入力済みデータをDISP文で消去する方法にしました。
6. SET と USEINF を併用しました。
《今回の追加点》
1. ネットワーク上で INEXT を使用しているので、データのアクセスの度に IEND して
います。(最初の現在行になるため)
そのため、INEXT の回数が 0 になるので X1 で INEXT の回数を管理しています。
2. データの登録では、継続と新規のデータを区別するために X3 で管理しています。
《内容》
共済NOを入力しますと、
1. 初めに継続者名簿を検索します。
2. データを修正して登録します。
同じ共済NOならば、INEXT して次の継続者名簿を検索します。
該当がなければメッセージを表示して、マスター名簿から検索して新規のデータを表
示します。
該当すれば1と同様です。
3. 新規のデータを表示します。
4. データを登録します。
5. 共済NOを入力しますと、今度はマスター名簿から検索してきます。
《プログラムの手順》
<健康診断AUTO P1>
データを画面に呼出した後の修正PROGRAMです。(プログラム略)
<健康診断AUTO P2>
P1での<判定><取消><脱退>
P3での<健康診断登録><健康診断画面消去><継続読み><新規読み> の GOSUB文です。
(<判定>,<脱退>の部分は省略)
<健康診断AUTO P3>
2行目 SETで設定します。
他のクライアントと同時に共済NOを入力した時にエラーになりますので。
5行目 ENV関数を使用します
CPMとDOSとDOS/Vとでは表示行数が違うためです。
8行目 X1,X3変数をCLEARします
X1=INEXTの回数を管理します
X3 --- 登録する時に
0 --- 新規登録
1 --- 継続登録
9行目 登録するとここに戻ります。
11行目 次検索でERRするとここに戻ります。
13行目 共済NO(V1)をV27に保存します。
14行目 共済NOを入力します。
17行目 前回の共済NO = 今回の共済NO かつ X39=0 ならば 次検索します。
18行目 前回の共済NO = 今回の共済NO かつ X39=0 ならば 質問に戻ります。
19行目 前回の共済NO <>今回の共済NO ならば 継続者名簿を検索します。
20行目 前回の共済NO = 今回の共済NO かつ X39=-1 ならばマスター名簿を検索します。
21行目 X30 ---ERR(0)
0 ならば 質問へ それ以外ならば $1へ
22行目 SETを解除します。
24行目 NO1-7のGOSUB文へ飛びます。
1 --- [次検索] ----- 質問へ
ERRならば$新規CHKへ
2 --- [修正] ----- NO訂正後、 質問へ
そのまま 質問へ
3 --- [取消] ----- $コ-ドへ
4 --- [登録] ----- $コ-ド1へ
5 --- [前検索] ----- 質問へ
6 --- [最初] ----- 質問へ
7 --- [最後] ----- 質問へ
42行目 1-7以外ならば 質問へ
43行目 継続者名簿を検索します。
45行目 ERRチェックします。
46行目 X3=1を入力します。
47行目 継続者名簿になければ$ERR1に飛びます。
48行目 排他処理をしているかチェックします。
ERRでなければ排他処理します。
49行目 排他処理していなければ、GOSUB<継続読み>に飛びます。
50行目 排他処理していれば、GOSUB<更新中>に飛びます。
51行目 質問へ戻ります。
52行目 メッセージを出し$1へ
55行目 X39=-1を入力します。
$1へ戻った時に、共済NOを前回と同じ場合には20行目の条件となりマスター名簿
を検索します。
57行目 マスター名簿を検索します。
62行目 ERRチェックします。
63行目 X39=-1を入力します。
$1へ戻った時に、共済NOが前回と同じ場合には20行目の条件となりマスター名簿
を検索します。
64行目 X3=0を入力します。
65行目 ERR=0ならば、GOSUB<新規読み>に飛びます。
66行目 質問へ戻ります。
67行目 メッセージを出し$1へ
69行目 X39=-1を入力します。
$1へ戻った時に、共済NOが前回と同じ場合には20行目の条件となりマスター名簿
を検索します。
71行目 継続者名簿に登録します。
73行目 初めに共済NOを入力した時は、継続者名簿を検索しますので、X3=1が46行目で入
ります。$一人目に飛びます。
74行目 同じ共済NOを2回続けて入力しますと、いったん、52行目の$ERR1へ飛び、その後
57行目の$新規CHKへ飛びX3=0が64行目で入ります。
そして、77行目の$新加入へ飛んでIAPPENDします。
75行目 2件目以降を継続者名簿を検索した時は、X1=1以上が入りますので、その回数だけ
INEXTします。そして、78行目の$一人目へ飛びます。
78行目 <健康診断登録>へGOSUBします。
79行目 <健康診断画面消去>へGOSUBします。
80行目 X3=0 にして初期化します。
81行目 質問へ戻ります。
《サブルーチンの説明》
<最後> 全件数を表示させます。
88行目 次のデータがなければ、$件数表示へ飛びます。
89行目 次のINEXTをします。
92行目 全件数を表示します。
93行目 INEXTのX1が1つプラスしていますので 1 をマイナスします。
96行目 最後のデータを表示します。
<最初> 最初のデータを表示します。
108行目 初めに実行しますと、INEXTしていませんので0回ですので、
$最初読みへ飛びます。
110行目 すでにINEXTをしていますと、X1に数字が入っています。
111行目 最初のデータを表示する前に排他処理している#記号を消去しますので、前のデ
ータを表示させる処理 <最初> <前検索> では、INEXTしてからIWRITEで#記号を
消去しています。
115行目 1件目のデータを表示しますので、INEXTの回数を0にします。
<健康診断登録>
$登録:DISP [01,21],SP80;
DISP [16,21],COLOR(Y)," 登 録 中 ",COLOR(W);
LET X40=10;
CLEAR V2,26;
LET V3=[4,@入力日];LET V4=[4,@入力者];
LET V5=[4,@シNO]; LET V6=[4,@支部]; LET V7=[4,@班];
LET V8=[4,@TEL1]; LET V9=[4,@氏名]; LET V10=[4,@ヨミガナ];
LET V11=[4,@ク]; LET V12=[4,@区]; LET V13=[4,@ホ];
LET V14=[4,@保険];LET V15=[4,@J]; LET V16=[4,@受診];
LET V17=[4,@シ]; LET V18=[4,@種別]; LET V19=[4,@S];
LET V20=[4,@性]; LET V21=[4,@生年]; LET V22=[4,@記号];
LET V23=[4,@国保];LET V24=[4,@カ]; LET V25=[4,@会場];
IWRITE V30,@入力日 =V3,@入力者 =V4,@シNO =V5,@支部 =V6,@班 =V7;
IWRITE V30,@TEL1 =V8,@氏名 =V9,@ヨミガナ =V10,@ク =V11,@区 =V12,@ホ =V13;
IWRITE V30,@保険 =V14,@J =V15,@受診 =V16,@シ =V17,@種別 =V18,@S =V19;
IWRITE V30,@性 =V20,@生年 =V21,@記号 =V22,@国保 =V23,@カ =V24,@会場 =V25;
CLEAR V2,25;
LET V2=[4,@月]; LET V3=[4,@日]; LET V4=[4,@備考];
LET V5=[4,@PC計];LET V6=[4,@納入額];LET V7=[4,@差額];
IWRITE V30,@月 =V2,@日 =V3,@備考 =V4,@PC計 =V5,@納入額 =V6,@差額 =V7,@# ="";
DISP [01,21],SP80;
RETURN;
<健康診断画面消去>
DISP [16,04],SP6; DISP [31,04],SP6;DISP [44,04],SP4;
DISP [60,04],SP2; DISP [63,04],SP4; DISP [68,04],SP2;
DISP [03,08],SP1; DISP [05,08],SP6; DISP [13,08],SP16;
DISP [30,08],SP16;DISP [47,08],SP1; DISP [49,08],SP2;
DISP [52,08],SP1; DISP [54,08],SP4; DISP [64,08],SP6;
DISP [03,12],SP1; DISP [05,12],SP6; DISP [14,12],SP1;
DISP [16,12],SP6; DISP [24,12],SP7; DISP [33,12],SP5;
DISP [39,12],SP1; DISP [41,12],SP22;DISP [64,12],SP2;DISP [68,12],SP2;
DISP [06,16],SP6; DISP [16,16],SP6; DISP [25,16],SP6;
DISP [32,16],SP20;
RETURN;
<取消>
IF X3=0 THEN RETURN;
GOSUB A/DATA:USEINFCHK;
IUSE V30;ISEARCH V30,V1;
IF X1=0 THEN GOTO $一人目;
FOR X2=1 TO X1;IWRITE V30,@# ="";INEXT V30;NEXT;
$一人目:IWRITE V30,@# ="";IEND V30;
LET X40=100;LET X39=-1;RETURN;
<継続読み>
CLEAR V2,22/24,26;IWRITE V30,@# ="#";
IREAD V30,V4=@入力者 ,V5=@シNO ,V6=@支部 ,V7=@班 ;
IREAD V30,V9=@氏名 ,V10=@ヨミガナ ,V11=@ク ,V12=@区 ,V13=@ホ ;
IREAD V30,V14=@保険 ,V15=@J ,V16=@受診 ,V17=@シ ,V18=@種別 ,V19=@S ;
IREAD V30,V20=@性 ,V21=@生年 ,V22=@記号 ,V26=@国保 ,V24=@カ ,V25=@会場 ;
LET [4,@NO]=V2;LET [4,@入力者]=V4;
LET [4,@シNO]=V5;LET [4,@支部]=V6; LET [4,@班]=V7;
LET [4,@氏名]=V9; LET [4,@ヨミガナ]=V10;
LET [4,@ク]=V11; LET [4,@区]=V12; LET [4,@ホ]=V13;
LET [4,@保険]=V14;LET [4,@J]=V15; LET [4,@受診]=V16;
LET [4,@シ]=V17; LET [4,@種別]=V18; LET [4,@S]=V19;
LET [4,@性]=V20; LET [4,@生年]=V21; LET [4,@記号]=V22;
LET [4,@国保]=V26;LET [4,@カ]=V24; LET [4,@会場]=V25;
DISP [05,04],V2, U(%(STRING$(60,04)));
DISP [31,04],V4, U(%(STRING$(60,06)));DISP [60,04],V5, U(%(STRING$(60,02)));
DISP [63,04],V6, U(%(STRING$(60,04)));DISP [68,04],V7, U(%(STRING$(60,02)));
DISP [13,08],V9, U(%(STRING$(60,16)));DISP [30,08],V10,U(%(STRING$(60,16)));
DISP [52,08],V11,U(%(STRING$(60,01)));DISP [54,08],V12,U(%(STRING$(60,04)));
DISP [03,12],V13,U(%(STRING$(60,01)));DISP [05,12],V14,U(%(STRING$(60,06)));
DISP [14,12],V15,U(%(STRING$(60,01)));DISP [16,12],V16,U(%(STRING$(60,06)));
DISP [03,08],V17,U(%(STRING$(60,01)));DISP [05,08],V18,U(%(STRING$(60,06)));
DISP [47,08],V19,U(%(STRING$(60,01)));DISP [49,08],V20,U(%(STRING$(60,02)));
DISP [64,08],V21,U(%(STRING$(60,06)));DISP [24,12],V22,U(%(STRING$(60,07)));
DISP [33,12],V26,U(%(STRING$(60,05)));DISP [39,12],V24,U(%(STRING$(60,01)));
DISP [41,12],V25,U(%(STRING$(60,22)));
CLEAR V2,22;
IREAD V30,V2=@月 ,V3=@日 ,V4=@備考 ,V5=@PC計 ,V6=@納入額 ,V7=@差額 ;
IEND V30;
LET [4,@月]=V2; LET [4,@日]=V3; LET [4,@備考]=V4;
LET [4,@PC計]=V5;LET [4,@納入額]=V6;LET [4,@差額]=V7;
DISP [64,12],V2,U(%(STRING$(60,02)));DISP [68,12],V3,U(%(STRING$(60,02)));
DISP [32,16],V4,U(%(STRING$(60,20)));DISP [06,16],V5,U(%(STRING$(60,06)));
DISP [16,16],V6,U(%(STRING$(60,06)));DISP [25,16],V7,U(%(STRING$(60,06)));
RETURN;
<新規読み>
DISP [60,04],SP2; DISP [63,04],SP4; DISP [68,04],SP2;
DISP [03,08],SP1; DISP [05,08],SP6; DISP [13,08],SP16;
DISP [30,08],SP16;DISP [47,08],SP1; DISP [49,08],SP2;
DISP [52,08],SP1; DISP [54,08],SP4; DISP [64,08],SP6;
DISP [03,12],SP1; DISP [05,12],SP6; DISP [14,12],SP1;
DISP [16,12],SP6; DISP [24,12],SP7; DISP [33,12],SP5;
DISP [39,12],SP1; DISP [41,12],SP22;DISP [64,12],SP2;DISP [68,12],SP2;
DISP [06,16],SP6; DISP [16,16],SP6; DISP [25,16],SP6;
DISP [32,16],SP20;
CLEAR V2,26;
IREAD V29,V5=@シNO ,V6=@支部 ,V7=@班 ,V8=@氏名 ,V9=@ヨミガナ ;
IREAD V29,V22=@国保記号 ,V24=@国保 ;
IEND V29;
LET [4,@シNO]=V5; LET [4,@支部]=V6; LET [4,@班]=V7;LET [4,@氏名]=V8;
LET [4,@記号]=V22;LET [4,@国保]=V24;LET [4,@ヨミガナ]=V9;
DISP [60,04],V5, U(%(STRING$(60,02)));DISP [63,04],V6, U(%(STRING$(60,04)));
DISP [68,04],V7, U(%(STRING$(60,02)));DISP [24,12],V22,U(%(STRING$(60,07)));
DISP [13,08],V8, U(%(STRING$(60,16)));DISP [30,08],V9, U(%(STRING$(60,16)));
DISP [33,12],V24,U(%(STRING$(60,05)));
LET V10="1";LET V11="新規";
LET [4,@ク]=V10; LET [4,@区]=V11;
DISP [52,08],V10,U(%(STRING$(60,1)));
DISP [54,08],V11,U(%(STRING$(60,4)));
RETURN;
<KENKO>
SET/N;F;;3;1;4;60;;;
LET V30="A/NENKO:KENIND"; LET V29="A/MF:MF2IND";
LET V28="A/DATA:SIBUIND";LET X1=0;CLEAR V1/27;
DISP OPEN(1,1,80,ENV(6)-3)/N;
$始: CLEAR V1;
MENU/N/A;G;A/DATA:2;ESC;
$コード: CLEAR V1,27;CLEAR X1,3;
$コード1:LET Z2=TODAY;LET V26=NUM$(Z2);LET V25=MID$(V26,3,6);
DISP [16,04],COLOR(W),V25;G;A/DATA:健康診断ダミー/1;LET [4,@入力日]=V25;
$1: DISP [01,22],SP80;
DISP [01,21],SP80,[01,21],COLOR(Y),"[ESC]=終了",COLOR(W);
LET V27=V1;
INPUT [44,04],V1,U(NNNN);
IF ERR(0)=55 THEN GOTO $終了;
LET [4,@共済]=V1;
IF V27=V1 AND X39=0 THEN GOSUB A/DATA:次検索;
IF V27=V1 AND X39=0 THEN GOTO $質問;
IF V27<>V1 THEN GOTO $継続CHK;
IF V27=V1 AND X39=-1 THEN GOTO $新規CHK;
IF X30=0 THEN GOTO $質問 ELSE GOTO $1;
$終了:SET;F;M;4;0;;;RETURN;
$質問:DISP [01,21],SP80;CLEAR V23;
DISP [01,22],"次検索[1] 修正[2] 取消[3] 登録[4] 前検索[5] 最初[6] 最後[7]";
INPUT [65,22],V23,COLOR(Y),U(X/AS);
LET V23=FORM$(V23,1);LET X38=10;
IF V23="1" THEN GOSUB A/DATA:次検索;
IF V23="1" AND X39=0 THEN GOTO $質問;
IF V23="1" AND X39=-1 THEN GOTO $新規CHK;
IF V23="2" THEN GOSUB A/DATA:健康診断修正;
IF V23="3" THEN GOSUB A/DATA:健康診断画面消去;
IF V23="3" THEN GOSUB A/DATA:取消;
IF V23="3" THEN GOTO $コード;
IF V23="" THEN GOTO $質問;
IF V23="4" THEN GOTO $登録;
IF V23="5" THEN GOSUB A/DATA:前検索;
IF V23="5" THEN GOTO $質問;
IF V23="6" THEN GOSUB A/DATA:最初;
IF V23="6" THEN GOTO $質問;
IF V23="7" THEN GOSUB A/DATA:最後;
IF V23="7" THEN GOTO $質問;
IF VAL(V23)<1 OR VAL(V23)>7 THEN GOTO $質問;
$継続CHK:
CLEAR X1/30;GOSUB A/DATA:NENKOUSEINFCHK;IUSE V30;ISEARCH V30,V1;
LET X30=ERR(0);
LET X3=1;
IF X30<>0 THEN GOTO $ERR1;
IREAD V30,V2=@# ;
IF V2="" THEN GOSUB A/DATA:継続読み;
IF V2="#" THEN GOSUB A/DATA:更新中;
GOTO $質問;
$ERR1:IEND V30;BELL;
DISP [01,22],SP80;
DISP [01,22],COLOR(R),"該当する共済NO",V1,"は、ありません";
DISP COLOR(W);SLEEP 5;DISP [01,22],SP80;LET X39=-1;
GOTO $1;
$新規CHK:
CLEAR X30;
GOSUB A/DATA:MFUSEINFCHK;
IUSE V29;
ISEARCH V29,V1;
LET X30=ERR(0);
LET X39=-1;
LET X3=0;
IF X30=0 THEN GOSUB A/DATA:新規読み;
GOTO $質問;
$ERR2:IEND V30;BELL;DISP [01,22],SP80;
DISP [01,22],COLOR(R),"該当する共済NO",V1,"は、ありません";
DISP COLOR(W);SLEEP 5;DISP [01,22],SP80;LET X39=-1;
GOTO $1;
$登録: GOSUB A/DATA:NENKOUSEINFCHK;
IUSE V30;ISEARCH V30,V1;
IF X1=0 AND X3=1 THEN GOTO $一人目;
IF X3=0 THEN GOTO $新加入;
FOR X2=1 TO X1;INEXT V30;NEXT;
GOTO $一人目;
$新加入:IAPPEND V30,@共済 =V1;
$一人目:GOSUB A/DATA:健康診断登録;IEND V30;
GOSUB A/DATA:健康診断画面消去;
LET X3=0;
GOTO $コード1;
<最後>
GOSUB A/DATA:NENKOUSEINFCHK;
IUSE V30;ISEARCH V30,V1;
LET X1=1;
$繰り返し:INEXT V30;
IF ERR(0)<>0 THEN GOTO $件数表示;
LET X1=X1+1;
GOTO $繰り返し;
$件数表示:LET X39=-1;
DISP [01,19],"全件数は",%X1,"件です";SLEEP 2;DISP [01,19],SP80;
LET X1=X1-1;
IEND V30;
GOSUB A/DATA:NENKOUSEINFCHK;
IUSE V30;ISEARCH V30,V1;
FOR X11=1 TO X1;
IWRITE V30,@# ="";
INEXT V30;
IF ERR(0)<>0 THEN GOTO $読み;
NEXT;
$読み:GOSUB A/DATA:継続読み;RETURN;
<最初>
LET X39=0;GOSUB A/DATA:NENKOUSEINFCHK;
IUSE V30;ISEARCH V30,V1;
LET X3=1;
IF X1=0 THEN GOTO $最初読み;
FOR X2=1 TO X1;
INEXT V30;
IWRITE V30,@# ="";
NEXT;
IEND V30;
$最初読み:
LET X1=0;GOSUB A/DATA:NENKOUSEINFCHK;
IUSE V30;ISEARCH V30,V1;GOSUB A/DATA:継続読み;RETURN;
<前検索>
LET X39=0;GOSUB A/DATA:NENKOUSEINFCHK;
IUSE V30;ISEARCH V30,V1;
LET X3=1;
FOR X2=1 TO X1;
INEXT V30;
IWRITE V30,@# ="";
NEXT;
IEND V30;
LET X1=X1-1;
IUSE V30;ISEARCH V30,V1;
IF X1=0 THEN GOTO $前候補;
FOR X4=1 TO X1;
IWRITE V30,@# ="";
INEXT V30;
NEXT;
GOSUB A/DATA:継続読み;
RETURN;
$前候補:LET X39=-1;GOSUB A/DATA:継続読み;RETURN;
<次検索>
LET X39=0;GOSUB A/DATA:NENKOUSEINFCHK;
IUSE V30;ISEARCH V30,V1;LET X1=X1+1;
LET X3=1;
FOR X2=1 TO X1;
IWRITE V30,@# ="";
INEXT V30;
IF ERR(0)<>0 THEN GOTO $次候補;
NEXT;
GOSUB A/DATA:継続読み;RETURN;
$次候補:LET X39=-1;
IEND V30;
DISP [01,21],SP80;
DISP [01,21],COLOR(M), "条件を満足するデータは、見つかりません!!";
DISP COLOR(W);BELL;SLEEP 5;DISP [01,21],SP80;
RETURN;
<更新中>
IEND V30;
DISP [01,21],SP80;
DISP [01,21],COLOR(M), "共済NO ",V1,"は更新中ですので、呼び出せません!!";
DISP COLOR(W);CLEAR V1;BELL;SLEEP 5;DISP [01,21],SP80;RETURN;
<MFUSEINFCHK>
LET V20="A/MF";
$CC1:LET X37=USEINF(3,V20);
IF X37=1 THEN GOTO $CC3 ELSE GOTO $CC2;
$CC2:DISP COLOR(Y),[01,22],"キャビネットは使用中";
GOTO $CC1;
$CC3:RETURN;
<NENKOUSEINFCHK>
LET V20="A/NENKO";
$CC1:LET X37=USEINF(3,V20);
IF X37=1 THEN GOTO $CC3 ELSE GOTO $CC2;
$CC2:DISP COLOR(Y),[01,22],"キャビネットは使用中";
GOTO $CC1;
$CC3:RETURN;