維護1
原始程式
原始檔-起始
/*---------( FSACM001.C )--------------*/
#include "W_FSAC.H"
FSACF001_T ACF001 ;
/*===========================================================================*/
int Condition()
{
sprintf(BufS,"%-7s %-s",ACF001.KEY,ACF001.ACN);
fwrite(BufS,NDXL,1,fpNDX);
/* 以下用來清除會計主檔的 借貸筆數 與 金額,但保留科目名(良偉)
memset(&ACF001.DC_NO,NULL,sizeof(ACF001.DC_NO));
memset(&ACF001.AMT ,NULL,sizeof(ACF001.AMT));
*/
return ON;
}
/*===========================================================================*/
void main()
{
OPEN_ACF001;
fpNDX=fopen(NDXDISK,"w+b");
Ufk_Pack(ACF001K,&ACF001,Condition);
}
原始檔-結束
原始程式
原始檔-起始
/*---------( FSACM011.C )--------------*/
#include "W_FSAC.H"
FSACF011_T ACF011;
/*===========================================================================*/
int Condition()
{
return ON;
}
/*===========================================================================*/
main()
{
UCls();
OPEN_ACF011;
Ufk_Pack(ACF011K,&ACF011,Condition);
}
原始檔-結束
原始程式
原始檔-起始
/*---------( FSACMX11.C )----不存相同key者-----*/
#include "W_FSAC.H"
FKIP *ACFX11K; /* 傳 票 主 檔 8=KEY 8 bytes, 1=分錄可指到 256 筆, 2=index 可指到 65536 筆 */
#define OPEN_ACFX11 ACFX11K=Ufk_Open("FSACFX11",sizeof(FSACF011_T),8,1,2)
#define ANO 120 /*ARRAY 陣列筆數*/
FSACF011_T ACF011,ACF011A[ANO],ACF011B[ANO];
long rec=0,LLL,TTT;
char recS[64];
/*===========================================================================*/
main()
{
UCls(); NamS=GET_NAME;
OPEN_ACF011; OPEN_ACFX11;
TTT = filelength(ACF011K->ffd)/ACF011K->frl; /*檔案總筆數*/
Ugd_Open("檔案重整中.... 共<%ld>筆 ",TTT);
LLL=0; /*累計張數*/
RetKey=C_PGUP; /*第一筆*/
while(1)
{ if(Ufk_PgUD(ACF011K,ACF011.KEY)==OFF) break;
Read1Page();
Write1Page();
RetKey=PGDN; /*下一筆*/
LLL++;
}
if(LLL<1) UFatal("第一筆錯誤");
UWait(ON,"***重整完畢*** 原<%ld>筆 共處理<%ld>筆 <%ld>張 ",TTT,rec,LLL);
Ufk_Close(ACF011K); Ufk_Close(ACFX11K);
system("COPY FSAC?X11 FSAC?011");
system("DEL FSAC?X11");
}
/*===========================================================================*/
void Read1Page()
{
ACF011.KEY[6]=NULL; /*從每張的頭開始,故將分錄號碼清為NULL*/
memset(&ACF011A,NULL,sizeof(ACF011A)); /*讀資料時要先將Buffer清掉*/
for(DiskRec=0; DiskRec<ANO; DiskRec++)
{ sprintf(BufS,"%s%c",ACF011.KEY,DiskRec+2); /*從 2 開始讀*/
if(Ufk_Read(ACF011K,&ACF011A[DiskRec],BufS)==OFF) break;
rec++; /*累計筆數*/
if(rec%60==0)
{ sprintf(recS,"第<%ld>筆 第<%ld>張",rec,LLL);
UShowS(49,STATUS_ROW,recS,V_STATUS);
}
}
memcpy(ACF011B,ACF011A,sizeof(ACF011B)); /*以供存入,刪除時修改用*/
if(DiskRec==0) /*保留傳票號碼,其他資料全部清除*/
{ memset(&ACF011.KEY[0]+sizeof(ACF011.KEY),NULL,sizeof(ACF011)-sizeof(ACF011.KEY));
ACF011.KI='2'; /*內定為轉帳傳票*/
}
else
{ ACF011=ACF011A[0]; ACF011.KEY[6]=NULL; /*設給ACF011以便操作*/
}
Modify=OFF; OffSet=0; /*讀入時一定要Modify=OFF*/
}
/*===========================================================================*/
void Write1Page()
{ int i,rec;
if(ACF011.KEY[0]<=SPACE) { UWait(ON,".. 請 先 輸 入 傳 票 編 號 ! .."); RetKey=ENTER; return;}
if(AddCash()==OFF){ RetKey=ENTER; return; } /*補現金傳票*/
for(rec=i=0; i<ANO; i++)
{ if(ACF011A[i].AC[0]==NULL) continue; /* 1'st byte=NULL*/
sprintf(ACF011A[i].KEY,"%s%c",ACF011.KEY,rec+2); /*重新從 2 開始編*/
ACF011A[i].KI=ACF011.KI;
ACF011A[i].YM=ACF011.YM;
Ufk_Write(ACFX11K,&ACF011A[i]);
rec++;
}
}
/*===========================================================================*/
int AddCash() /*補現金傳票,以ACF011.KEY為KEY*/
{ FSACF011_T F011;
memset(&F011,NULL,sizeof(F011)); /* 清為 null */
ACF011.KEY[6]=NULL;
sprintf(F011.KEY,"%s%c",ACF011.KEY,1); /*分錄 1 為補現金項*/
strcpy(F011.AC,"1101 ");
F011.KI=ACF011.KI;
F011.YM=ACF011.YM;
for(F011.AMT=0f, I=0; I<ANO; I++)
{ if(ACF011A[I].AC[0]==NULL) continue; /* 1'st byte=NULL*/
F011.AMT+=ACF011A[I].AMT; /*累加整張補現金用*/
if(ACF011.KI=='1' && ACF011A[I].DC=='D'){ UWait(ON,"第 %d 分錄不該為 (借) 吧 !!! , 請確認傳票別",I+1); return OFF;}
if(ACF011.KI=='2' && ACF011A[I].DC=='C'){ UWait(ON,"第 %d 分錄不該為 (貸) 吧 !!! , 請確認傳票別",I+1); return OFF;}
}
if(ACF011.KI=='1'){ strcpy(F011.RM,"補現金收入傳票"); F011.DC='D'; }
if(ACF011.KI=='2'){ strcpy(F011.RM,"補現金支出傳票"); F011.DC='C'; }
if(ACF011.KI=='3' || F011.AMT==0f) Ufk_Del(ACFX11K,F011.KEY); /*或許被修改才變成 3,或分錄加總為0,表無分錄,刪掉補現金分錄*/
else Ufk_Write(ACFX11K,&F011);
return ON;
}
原始檔-結束
原始程式
原始檔-起始
/*---------( FSACM071.C )--------------*/
/*功能: */
/*有些公司沒用F5對沖票據,造成手誤, */
/*借貸兌現日期不匹配,或金額不匹配 */
/*不處理者: */
/*1.借或貸尚缺者,表示只一方 */
/*2.日期匹配,表可對沖 */
/*處理者: */
/*1.己填借和貸,但日期卻不匹配者,會改成相同*/
/*2.會找出並警告支票號碼重覆者 */
/*使用者應記錄錯誤傳票號,然後回去修改 */
/*然後反覆利用此程式偵測,直到無錯誤為止*/
#include "W_FSAC.H"
#define SX 28 /*左內框 */
#define SY 10 /*上內框 */
#define SC 28 /*內框寬, 多少行 */
/*-----------------------------------------------------------------*/
struct
{ char KEY[7+1]; /*票據+兌現日*/
long IP[2]; /*0借方第幾筆,1貸方第幾筆(從第1算起,0表示無)*/
DATE YM[2]; /*兌現日*/
double AMT[2]; /*金額*/
char REC[2][8]; /*傳票號*/
} WORK;
void RmError(int i);
char *ChainKI(char KI);
/*-----------------------------------------------------------------*/
FSACF011_T ACF011,*ptr;
int Ar,Bw;
char KI,Yn;
long LL;
char *Table="\
\
票據<兌現日>修正處理 \
========================== \
票據種類: ---------- \
\
執行(YN): - \
\
Esc:放棄 \
";
/*===========================================================================*/
main()
{
NamS=GET_NAME; OPEN_ACF011;
UCls();
USetBXYN(Table,SX,SY,SC);
UDrawBox( SX-2, SY-1, SX+SC+1, SY+SR+1, V_WBOX, V_W_IN, YES, 3);
UShowTable( SX, SY, SX+SC-1, SY+SR, Table, V_W_IN);
while(1)
{ Field=1; KI='1'; Yn='N';
UShowC(BXN(2),Yn,V_WUSR);
do
{ if(Field==1){ UReadTog(BXN(1),&KI,V_TOG,"12",ChainKI('1'),ChainKI('2')); UShowSL(BXN(1),ChainKI(KI),V_BLUE); }
if(Field==2){ UReadC(BXN(2),&Yn,"YN",V_WUSR,V_READ); }
switch(RetKey)
{ case LEFT : case UP : if(--Field<1) Field=4; break;
case RIGHT: case DOWN: if(++Field>4) Field=1; break;
case ESC : exit(0);
}
}while(Yn!='Y' && RetKey!=ESC);
LL=0;
Ugd_Open("找到了< >張票據 , 修改兌現日期共< >張 ");
OPEN_WORK;
READ1(ACF011)
{ if(KI=='1'){ strcpy(SelKey,"1141"); Ar=1; Bw=0; } /*應收票據,屬借,讀1貨記錄,再寫入0借日期*/
else { strcpy(SelKey,"2141"); Ar=0; Bw=1; } /*應付票據,屬貸,讀0借記錄,再寫入1貸日期*/
if(memcmp(p->AC,SelKey,4)!=0) continue; /*應收科目*/
memset(&WORK,NULL,sizeof(WORK));
USprint(WORK.KEY,"%S-----",p->RM); /*要比對 票據*/
Ufk_Read(WORKK,&WORK,NULL);
if(p->DC=='D') I=0; else I=1; /*0=借方,1=貸方*/
if(WORK.IP[I]>0){ ptr=p; RmError(I); } /*應空白,否則重複,錯*/
WORK.IP[I] = L+1; /*記錄第幾筆,L由READ1()遞增*/
WORK.YM[I] = p->CYM; /*記錄兌現日*/
WORK.AMT[I] = p->AMT; /*記錄金額*/
memcpy(&WORK.REC[I],p->KEY,sizeof(p->KEY)); /*記錄傳票號,金額錯時可顯示*/
Ufk_Write(WORKK,&WORK);
UShowL(21,STATUS_ROW,5,++LL,"",V_STATUS);
}
READ2
Ufk_Flush(WORKK);
/*------------------------------------------------------------------*/
lseek(WORKK->ffd,0L,SEEK_SET);
for(LL=0; ;)
{ if(read(WORKK->ffd,&WORK,sizeof(WORK)) < 1) break;
if(WORK.KEY[0]<=SPACE) continue;
if(WORK.IP[0]==0L || WORK.IP[1]==0L) continue; /*未對沖掉,不處理*/
if(memcmp(&WORK.YM[0],&WORK.YM[1],sizeof(WORK.YM[0]))==0) continue; /*兌現日同,可對沖,不處理*/
if(WORK.AMT[0]!=WORK.AMT[1]) /*金額不同,嚴重錯誤*/
UWait(ON,"支票號碼 %S----- ,借傳票<%S---->,貸傳票<%S---->,兌現日期不同,金額不相同",WORK.KEY,WORK.REC[0],WORK.REC[1]);
L = WORK.IP[Ar]-1; /*應收用0(借)來蓋1(貸),故讀1(貸),準備修改*/
lseek(ACF011K->ffd,L*sizeof(ACF011),SEEK_SET);
read(ACF011K->ffd,&ACF011,sizeof(ACF011));
ACF011.CYM = WORK.YM[Bw]; /*改日期,不改摘要*/
lseek(ACF011K->ffd,L*sizeof(ACF011),SEEK_SET);
write(ACF011K->ffd,&ACF011,sizeof(ACF011));
UShowL(51,STATUS_ROW,5,++LL,"",V_STATUS);
}
UShowS(66,STATUS_ROW,"任按一鍵繼續",V_RED_F);
UGetKb(); Ugd_Close();
Ufk_Close(WORKK);
}
}
/*===========================================================================*/
void RmError(int i)
{ FSACF011_T F011;
long ip;
ip=tell(ACF011K->ffd);
lseek(ACF011K->ffd,(WORK.IP[i]-1)*sizeof(F011),SEEK_SET);
read(ACF011K->ffd,&F011,sizeof(F011));
UWait(ON,"傳票: %S---- 與 %S---- 的支票號碼 %S----- 重復",F011.KEY,ptr->KEY,ptr->RM);
lseek(ACF011K->ffd,ip,SEEK_SET);
}
/*===========================================================================*/
char *ChainKI(char KI)
{ switch(KI)
{ case '1': return "應收票據";
case '2': return "應付票據";
default : return " ";
}
}
原始檔-結束
Byron Wey Oct.21.1998