明 細 分 類 帳

範圍選擇 |
科目查詢 |
左右捲動 |
原始程式
原始檔-起始
/*---------( FSACR069.C )---------*/
#include "W_FSAC.H"
#define SX 20 /*左內框 */
#define SY 10 /*上內框 */
#define SC 48 /*內框寬, 多少行 */
struct
{ char KEY[8];
char ACN[21];
double AMT; /* 上期結轉 */
char YN; /* 使用否 */
} WORK;
void ShowACN(char *s,int x,int y,int len);
void SetDC(double amt);
void ShowLast();
void LevelBreak(char *str,int len,int sw);
void ShowHead();
void ShowData();
void ShowEnd();
char *ChainYn();
/*================================================================*/
FSACF001_T ACF001;
FSACF011_T ACF011;
double Dsum,Csum,Rest;
int Page;
char Yn;
char *Table="\
\
明 細 分 類 帳 \
============================================== \
月份: ----- 至: ----- \
明細科目別> 自: ------- -------------------- \
至: ------- -------------------- \
連續列印: ------ \
\
資料輸出裝置:-------- \
";
/*===========================================================================*/
void main()
{ USetBXYN(Table,SX,SY,SC);
OPEN_ACF001; OPEN_ACF011; R069Tx(); NamS=GET_NAME;
while(1)
{ Yn='N';
#define USER_GD
Ugd_Open("F4:科目查詢 F7:開始列印 Ctr_F7:結束列印");
#include <RPT1.H>
if(Field==1) UReadM(BXN(1),&Sday,0,V_WUSR,V_READ);
if(Field==2) UReadM(BXN(2),&Eday,0,V_WUSR,V_READ);
if(Field==3){ UReadS(BXN(3),Skey,"NL",V_WUSR,V_READ); ShowACN(Skey,BXN(4));
if(RetKey==F4){ ACF001Tx(); Utx_Pick(Tx,Skey,BX[3],BY[3],28," 科 目 查 詢 ",V_WUSR); }
}
if(Field==4){ if(Ekey[0]<=SPACE) UShowSL(BXN(5),Skey,V_WUSR);
UReadS(BXN(5),Ekey,"NL",V_WUSR,V_READ); ShowACN(Ekey,BXN(6));
if(RetKey==F4){ ACF001Tx(); Utx_Pick(Tx,Ekey,BX[5],BY[5],28," 科 目 查 詢 ",V_WUSR); }
}
if(Field==5){ UReadTog(BXN(7),&Yn,V_TOG,"YN","連續","換頁");
UShowSL( BXN(7),ChainYn(),V_WUSR);
}
#include <RPT2.H> /*條件設定完畢*/
/*------------------------------------------------------------------*/
if((Sa=ChkYM(Sday,ON))==0) continue; Sm=Sday.Y*12+Sday.M;
if((Ea=ChkYM(Eday,ON))==0) continue; Em=Eday.Y*12+Eday.M;
Ugd_Open("檔 案 處 理 中 請 稍 候 ....."); /* Sort FSACF011 */
/*------------------------------------------------------------------*/
OPEN_WORK; /*上期結轉*/
READ1(ACF001)
{ if(memcmp(p->KEY,Skey,7)<0) continue;
if(memcmp(p->KEY,Ekey,7)>0) continue;
if(p->KEY[4]<=SPACE) continue;
memset(&WORK,NULL,sizeof(WORK));
strcpy(WORK.KEY,p->KEY);
strcpy(WORK.ACN,p->ACN);
if(Sa>=13 && p->KEY[0]>='4' && p->KEY[0]<='8') I=13; /*虛科目*/
else I=0;
for(; I<Sa; I++) WORK.AMT+=p->AMT[0][I]-p->AMT[1][I];
Ufk_Write(WORKK,&WORK);
}
READ2
/*------------------------------------------------------------------*/
Sp=Usp_Open();
READ1(ACF011)
{ I=p->YM.Y*12 + p->YM.M;
if(I<Sm || Em<I) continue;
if(p->AC[4]<=SPACE) continue;
if(memcmp(p->AC,Skey,7)<0 || memcmp(Ekey,p->AC,7)<0) continue;
USprint(BufS,"%S-----%M----",p->AC,p->YM);
Usp_InsIp(Sp,BufS,L);
}
READ2
Ugd_Close();
/*------------------------------------------------------------------*/
Ugd_Open("列印中 Ctr_F7:結束列印");
Page=0;
while(RetKey!=ESC)
{ if(Usp_GetIp(Sp,&L)==OFF) break;
lseek(ACF011K->ffd,L*sizeof(ACF011),SEEK_SET);
read(ACF011K->ffd,&ACF011,sizeof(ACF011));
if(Yn=='Y') LevelBreak(ACF011.AC,7,ON);
else LevelBreak(ACF011.AC,7,OFF);
if(K0==0){ K0=1; ShowHead(); }
ShowData();
if(Psf=='S' && K0>=21){ UWait(OFF,"Esc:重新選擇 任一鍵繼續"); UCls(); K0=0; }
if(Psf=='P' && K0>=K1){ fprintf(Stream,"%c",12); K0=0; }
}
ShowLast(); ShowEnd();
Usp_Close(Sp); LineReturn(ON); Ufk_Close(WORKK);
}
}
/*===========================================================================*/
void ShowACN(char *s,int x,int y,int len)
{
if(Ufk_Read(ACF001K,&ACF001,s)==OFF) memset(&ACF001,NULL,sizeof(ACF001));
UShowSL(x,y,len,ACF001.ACN,V_WUSR);
}
/*===========================================================================*/
void SetDC(double amt)
{
if(amt>=0) strcpy(TmpS,"借"); else strcpy(TmpS,"貸");
}
/*===========================================================================*/
void ShowHead()
{ FSACF001_T F001;
if(Ufk_Read(ACF001K,&F001,LastKey)==OFF) memset(&F001,NULL,sizeof(F001));
if(K0<=3)
{
#ifdef HP-5L /*1998/8/27*/
LockItemHead(2,"~I",NamS,"~Z2W1G2X24");
#else
LockItemHead(2,"~IG2Z2",NamS,"~Z1");
#endif
UPrint("#自 %M--- 到 %M--- 列印:%M------ 第%I- 頁 ",Sday,Eday,Day,++Page);
UPrint("%S----- %S------------------ ",LastKey,F001.ACN);
UPrint("==================================================================================================");
UPrint("傳票日期 摘 要 借方金額 貸方金額 餘額 傳票號 兌現日期");
UPrint("-------- --------------------------------- ----------- ----------- -- ----------- ------ --------");
}
else
{
#ifdef HP-5L /*1998/8/27*/
LockItemHead(2,"~I",NamS,"~Z2W1G2X24");
#else
LockItemHead(2,"~IG2","","~Z1");
#endif
UPrint("%S----- %S------------------ ",LastKey,F001.ACN);
UPrint("==================================================================================================");
}
if(P0==1)
{ if(RetKey==ESC) return;
if(Ufk_Read(WORKK,&WORK,LastKey)==OFF) memset(&WORK,NULL,sizeof(WORK));
Rest=WORK.AMT; SetDC(Rest);
UPrint(" (上期結轉) %S %F,-------- ",TmpS,fabs(Rest));
WORK.YN='Y'; Ufk_Write(WORKK,&WORK); /*表示已使用過*/
}
}
/*===========================================================================*/
void ShowData()
{
if(ACF011.DC=='D')
{ Dsum+=ACF011.AMT; Rest+=ACF011.AMT; SetDC(Rest);
UPrint("%M------ %S------------------------------- %F,-------- %S %F,-------- %S---- %M------",ACF011.YM,ACF011.RM,ACF011.AMT,TmpS,fabs(Rest),ACF011.KEY,ACF011.CYM);
}
else
{ Csum+=ACF011.AMT; Rest-=ACF011.AMT; SetDC(Rest);
UPrint("%M------ %S------------------------------- %F,-------- %S %F,-------- %S---- %M------",ACF011.YM,ACF011.RM,ACF011.AMT,TmpS,fabs(Rest),ACF011.KEY,ACF011.CYM);
}
}
/*===========================================================================*/
void ShowLast()
{
SetDC(Dsum-Csum);
UPrint("==================================================================================================");
UPrint(" %F,-------- %F,-------- %S %F,-------- (不含上期結轉) ",Dsum,Csum,TmpS,fabs(Dsum-Csum));
Dsum=Csum=0;
}
/*===========================================================================*/
void ShowEnd()
{ int sw=ON;
lseek(WORKK->kfd,0L,SEEK_SET); /*有餘額,但本期未發生交易,則顯示餘額*/
for(RetKey=ON; RetKey!=ESC && RetKey; )
{ if(Ufk_SeqRead(WORKK,&WORK,"","")!=ON) continue;
if(WORK.YN=='Y' || WORK.AMT==0f) continue;
if(sw)
{ K0=1; UPrint(""); UPrint(""); sw=OFF;
UPrint(" 有餘額, 但本期未發生交易者 ");
UPrint("=============================================");
UPrint("科目號 科 目 名 稱 DC 累計餘額");
UPrint("------- -------------------- -- -------------");
}
if(WORK.AMT>0f) strcpy(TmpS,"借");
else { strcpy(TmpS,"貸"); WORK.AMT=-WORK.AMT; }
UPrint("%S----- %S------------------ %S %f,----------",WORK.KEY,WORK.ACN,TmpS,WORK.AMT);
}
}
/*===========================================================================*/
void LevelBreak(char *str,int len,int sw)
{
if(LastKey[0]==NULL) strcpy(LastKey,str);
if(memcmp(LastKey,str,len)==0) return;
ShowLast(); strcpy(LastKey,str); P0=0;
switch(Psf)
{ case 'P': if(sw){ for(I=0; I<3; I++) UPrint(""); ShowHead(); }
else { fprintf(Stream,"%c",12); K0=0; } break;
case 'S': if(K0<=23 && K0) UWait(OFF,"Esc:重新選擇 任一鍵繼續");
UCls(); K0=0; break;
case 'V': UPrint(""); UPrint(""); ShowHead(); break;
}
}
/*===========================================================================*/
R069Tx()
{
if((fpNDX=fopen(NDXDISK,"r+b"))==NULL) UFatal("無科目索引");
L=filelength(fileno(fpNDX))/NDXL+30; /*計算配置個數*/
Tx=Utx_Open(47,3,80,24,L,8,ON);
while(1)
{ if(fread(TmpS,NDXL,1,fpNDX) < 1) break;
if(TmpS[0]<=SPACE || TmpS[4]<=SPACE || TmpS[0]>='Z') continue;
Utx_Ins(Tx,TmpS);
}
}
/*================================================================*/
char *ChainYn()
{ switch(Yn)
{ case 'Y': return "連續";
case 'N': return "換頁";
default : return " ";
}
}
原始檔-結束
Byron Wey Oct.21.1998