Chương III. Xây dựng phần mềm kế toán cho Cục Địa chất và khoáng sản Việt Nam
3.3. Néi dung phÇn mÒm
3.3.6. Xây dựng lớp các thanh công cụ và màn hình giao diện
3.3.6.2. Xây dựng các các màn hình giao diện cho chương trình
Trong trong bất kể chương trình kế toán nào, xây dựng chương trình đổi số tiền ra chữ mang tính bắt buộc. Chương trình đổi số ra chữ có thể thực hiện cho tất cả các màn hình nhập liệu, phiếu thu, phiếu chi, phiếu nhập - xuất bảng báo biểu ... cần hiển thị số tiền bằng chữ. Chương trình đổi số tiền ra chữ
được viết như sau : FUNCTION dois
PARAMETER M.nnum
PRIVATE M.str, M.tmp, M.strtmp, M.nexact
m.nexact = SET('EXACT') SET EXACT ON
m.tmp = INT(M.nnum/1000000000) m.strtmp = ALLTRIM(xuly3(M.tmp)) m.str = '('
IF M.strtmp<>' '
m.str = M.str+M.strtmp+' tû ' ENDIF
m.nnum = M.nnum-M.tmp*1000000000 m.tmp = INT(M.nnum/1000000)
m.strtmp = ALLTRIM(xuly3(M.tmp)) IF M.strtmp<>' '
m.str = M.str+M.strtmp+' triệu ' ENDIF
m.nnum = M.nnum-M.tmp*1000000 m.tmp = INT(M.nnum/1000)
m.strtmp = ALLTRIM(xuly3(M.tmp)) IF M.strtmp<>' '
m.str = M.str+M.strtmp+' ngh×n ' ENDIF
m.nnum = M.nnum-M.tmp*1000
m.strtmp = ALLTRIM(xuly3(M.nnum)) m.str = M.str+M.strtmp
IF M.str<>'('
m.str = M.str+' đồng)' ENDIF
SET EXACT &nexact RETURN M.str
FUNCTION xuly3 PARAMETER M.nnum PRIVATE M.str, M.tmp
m.tmp = INT(M.nnum/100) m.str = ' '
IF M.tmp>0
m.str = dv2chu(M.tmp)+' tr¨m' ENDIF
m.nnum = M.nnum-M.tmp*100 m.tmp = INT(M.nnum/10) IF M.tmp>0
IF M.tmp=1
m.str = M.str+' mười' ELSE
m.str = M.str+dv2chu(M.tmp)+' mươi' ENDIF
ELSE
IF (M.str<>' ') .AND. (M.nnum-M.tmp*10)>0 m.str = M.str+dv2chu(M.tmp)
ENDIF ENDIF
m.tmp = M.nnum-M.tmp*10 IF (M.tmp>0)
m.str = M.str+dv2chu(M.tmp) ENDIF
RETURN M.str FUNCTION dv2chu PARAMETER M.dv PRIVATE M.str DO CASE
CASE M.dv=1 m.str = ' mét' CASE M.dv=2
m.str = ' hai'
CASE M.dv=3 ...
CASE M.dv=8 m.str = ' tám' CASE M.dv=9
m.str = ' chÝn' CASE M.dv=0
m.str = ' linh' ENDCASE
RETURN M.str
- Xây dựng màn hình nhập chứng từ kế toán
H×nh 3.12
Viết lệnh cho nút điều khiển “thêm“ của phần 1 SELECT ct1
SET DELETED OFF
CALCULATE MAX(ct1_id) ALL TO X SET DELETED ON
CALCULATE MAX(ct1_id) ALL TO Y lcoldtalk = SET("TALK")
SET TALK OFF
lcolddeleted = SET("DELETED") SET DELETED OFF
CALCULATE MAX(ct1_id) ALL TO lmaxid IF val(x)-val(y)=0
IF val(x)=0
lmaxid="100000"
ENDIF ENDIF
lmaxid =ALLTRIM(STR(VAL(lmaxid) + 1)) APPEND BLANK
REPLACE ct1_id WITH lmaxid REPLAC ct1.thang WITH m.thang
** Restore talk setting SET TALK &lcoldtalk
SET DELETED &lcolddeleted THISFORM.Text1.SetFocus Thisform.REFRESH
Viết lệnh cho nút điều khiển “Xoá“ của phần 1 lcsoctid = ct1.ct1_id
cMessageTitle = 'Thong bao'
c_delete1_loc1="Ban that su muon xoa chung tu "+alltrim(lcsoctid )+" ?"
nDialogType = 4 +32+256
cAnswer=MESSAGEBOX(c_delete1_loc1,nDialogType, MessageTitle)
IF cAnswer = 6
BEGIN TRANSACTION SELECT ct1
Delete IF !EOF()
Skip 1 ENDIF
IF EOF() AND !BOF() Skip -1
ENDIF SELECT ct2
Delete FOR ct1_id = lcsoctid END TRANSACTION
SELECT ct1
thisform.REFRESH ENDIF
Viết lệnh cho nút điều khiển “Thêm“ của phần 2 SELECT ct2
lcOldTalk = SET("TALK") SET TALK OFF
lcOldDeleted = SET("DELETED") SET DELETED OFF
APPEND BLANK
REPLACE ct1_id with ct1.ct1_id in ct2
* Restore talk setting SET TALK &lcOldTalk
SET DELETED &lcOldDeleted thisform.Refresh
Viết lệnh cho nút điều khiển “Xoá“ của phần 2 lcOrderID = ct2.ct1_ID
cMessageTitle = 'Thong bao'
c_delete1_loc1="Ban that su muon xoa chung tu"+alltrim(lcOrderID )+" ?"
nDialogType = 4 +32+256
cAnswer=MESSAGEBOX(c_delete1_loc1,nDialogType, MessageTitle) IF cAnswer=6
SELECT ct2 Delete
IF !EOF() Skip 1 ENDIF
IF EOF() AND !BOF() Skip -1
ENDIF
thisform.Refresh ENDIF
Viết chương trình sử dụng phím “Ctrl+Insert” để chạy thư điển mã chi phí LPARAMETERS nKeyCode, nShiftAltCtrl
IF lastkey()=7
DO Form("Tudien_mcp") ENDIF
IF lastkey()=146 && Ban phim : Ctrl+Insert thisform.cmdNewCt2.click()
ENDIF
*
Viết chương trình kiểm tra định khoản sai
Trong khi nhập liệu, người sử dụng hay nhầm lẫn trong định khoản phiếu Thu ghi Có, phiếu Chi ghi Nợ. Để khắc phục ta viết chương trình thông báo lỗi như sau :
IF(alltrim(ct2.tK_no)=alltrim(ct2.tK_co)and
left(alltrim(ct2.tK_co),2)="11") or (left(alltrim(ct2.tK_no),2)="11" and
!left(alltrim(ct2.tK_co),2)="11" and ct1.thuchi=.F.) or
(left(alltrim(ct2.tK_co),2)="11" and !left(alltrim(ct2.tK_no),2)="11"
and ct1.thuchi=.T.)
cmessagetext = 'Ban nhap Thu - Chi sai roi hay kiem tra lai ! ' DO thongbao.prg
ENDIF
*
Viết chương trình tính tổng tiền trên bảng nhập IF ct2.ngoai_te>0 AND ct2.ty_gia>0
REPLAC ct2.tien WITH ct2.ngoai_te*ct2.ty_gia ENDIF
dktien=alltrim(ct2.ct1_ID) m.tientong=0
SUM(ct2.tien) FOR dktien=alltrim(ct2.ct1_ID) TO m.tientong thisform.TextTongTien.Value = m.tientong
thisform.TextTienChu.Value = DoiS(m.tientong) THISFORM.REFRESH
*
Viết chương trình “Xem“, “ In“ phiếu thu - chi PUBLIC cFamvi
cFamvi=Ct1.ct1_id DO inthuchi.prg IF Ttien>0
SET SEPARATOR TO '.'
IF cThuchi=.T. && In phieu thu REPORT FORM phieuthu.frx PREVIEW WINDOW cWINDOWREPORT
ELSE
IF cThuchi=.F. && In phieu chi REPORT FORM phieuchi.frx
PREVIEW WINDOW cWINDOWREPORT
ENDIF ENDIF
SET SEPARATOR TO ENDIF
SELECT Ct1
Release Ttien, cThuchi, Tien1, Tien2, Tien3, Tien4, Tien5, Tien6 Release cTk1, cTk2, cTk3, cTk4, cTk5, cTk6, N, cNo, cCo, cFamvi thisform.REFRESH
- Chương trình chuyển số dư của năm trước sang năm thực hiện Bước sang năm tài chính mới bất cứ người làm công tác kế toán nào cũng phải chuyển số dư của các tài khoản, sổ, thẻ chi tiết tài khoản từ cuối năm trước sang đầu năm thực hiện. Công việc này làm mất nhiều thời gian và dẽ sẩy ra nhầm lẫn. Với một chương trình ngắn gọn sẽ giúp người kế toán thực hiện toàn bộ công việc vất vả đó một cách nhanh chóng vối độ chính sác tuyệt
đối. Chương trình được thực hiện như sau :
**** Chuyendu.prg CLOSE DATABASE gctable = GETFILE('dbc') n1=len(alltrim(gctable ))-10
cmdpath2=left(alltrim(gctable ),n1) IF LEN(ALLTRIM(cmdpath1))=3 .OR.
UPPER(cmdpath1)==UPPER(SYS(5)+'\Ac2005\') .OR.
UPPER(cmdpath1)==UPPER(SYS(5)+'\Ac2005\help\').OR.
UPPER(cmdpath1)==UPPER(SYS(5)+'\Ac2005\data\data\')
cmessagetext = 'Day la du lieu goc, Ban khong co quyen truy nhap ! ' DO thongbao.prg
ELSE
SET path to &cmdpath2
SET DEFAULT TO &pathwork Chapnhan=0
IF file("ketoan.dbc")=.T.
Chapnhan=1
OPEN database ketoan.dbc SHARED
***--- Lay so du cuoi ky nam truoc chuyen sang nam nay
SELECT Candoick.tk, Candoick.dkno, Candoick.dkco, Candoick.duno,Candoick.duco FROM ketoan!Candoick
ORDER BY Candoick.tk into table aCandoi USE aCandoi Exclusive
REPLAC all dkno with duno, dkco with duco REPLAC all duno with 0, duco with 0
Delet for (dkno+dkco)=0 PACK
SELECT Congnock.tk,Congnock.ma_khac, Congnock.ma_khach, Congnock.ho_ten, Congnock.don_vi,Congnock.dkno,
Congnock.dkco, Congnock.duno, Congnock.duco;
FROM ketoan!Congnock ORDER BY Congnock.tk INTO TABLE aCongno && Cong no dau ky
USE aCongno Exclusive
REPLAC all dkno with duno, dkco with duco REPLAC all duno with 0, duco with 0
Delet for (dkno+dkco)=0 PACK
SELECT Cpsxck.paht, Cpsxck.ma_cp, Cpsxck.dn_vl, Cpsxck.dn_nc, Cpsxck.dn_kh, Cpsxck.dn_ql, Cpsxck.dn_kc, Cpsxck.ck_vl, Cpsxck.ck_nc, Cpsxck.ck_kh, Cpsxck.ck_ql, Cpsxck.ck_kc, Cpsxck.ttoan_dk, Cpsxck.ttoan_ck FROM
ketoan!Cpsxck ORDER BY Cpsxck.ma_cp INTO TABLE aCpsx USE aCpsx Exclusive
REPLAC all dn_vl with ck_vl, dn_nc with ck_nc, dn_kh with ck_kh, dn_ql with ck_ql, dn_kc with ck_kc
REPLAC ttoan_ck with 0 for left(alltrim(ma_cp),2)=="02"
or left(alltrim(ma_cp),2)=="03"
REPLAC all ttoan_dk with ttoan_ck
REPLAC all ck_vl with 0, ck_nc with 0, ck_kh with 0, ck_ql with 0, ck_kc with 0
Delet for (dn_vl+dn_nc+dn_kh+dn_ql+dn_kc+ttoan_dk)=0 PACK
SELECT *;
FROM ketoan!listcno;
GROUP BY listcno.tk;
ORDER BY listcno.tk INTO TABLE aListcno
&& Danh sach cong no SELECT Macp.ma_cp, Macp.noidung;
FROM ketoan!Macp;
GROUP BY Macp.ma_cp;
ORDER BY Macp.ma_cp INTO TABLE aMacp
&& Ma chi phi (macp) SELECT *;
FROM ketoan!madv;
GROUP BY madv.ma_dv;
ORDER BY madv.ma_dv, madv.don_vi
INTO TABLE aMadv && Ma don vi (Madv) SELECT *;
FROM ketoan!makg;
GROUP BY makg.ma_khach;
ORDER BY makg.ma_khach INTO TABLE aMakg SELECT *;
FROM ketoan!makhac GROUP BY makhac.ma_khac;
ORDER BY makhac.ma_khac, makhac.noidung INTO TABLE aMakhac && Ma khac SELECT *;
FROM ketoan!makho GROUP BY makho.ma_kho;
ORDER BY makho.ma_kho INTO TABLE aMakho SELECT *;
FROM ketoan!mats;
GROUP BY mats.ma_ts;
ORDER BY mats.ma_ts, mats.tents INTO TABLE aMats
SELECT *;
FROM ketoan!taikhoan;
GROUP BY taikhoan.tk;
ORDER BY taikhoan.tk INTO TABLE aTaikhoan SELECT *;
FROM ketoan!tdv INTO TABLE aTdv SELECT *;
FROM ketoan!tscd;
ORDER BY tscd.ma_ts, tscd.tents INTO TABLE Tmptscd USE Tmptscd Exclusive
Delete FOR ALLTRIM(ta_gm)='Giảm' PACK
REPLAC all ta_gm WITH '' GOTO TOP
SCAN FOR .NOT. EOF()
REPLAC khns_dk WITH khns_dk+kh_ns REPLAC khbs_dk WITH khbs_dk+kh_bs REPLAC khk_dk WITH khk_dk+kh_k
REPLAC kh_dk WITH khns_dk+khbs_dk+khk_dk REPLAC kh_ns WITH 0
REPLAC kh_bs WITH 0 REPLAC kh_k WITH 0 REPLAC kh_thang WITH 12 ENDSCAN
TOTAL ON ma_ts TO aTscd SELECT *;
FROM ketoan!vtck;
ORDER BY vtck.ma_vt, vtck.tenvt, vtck.tk, vtck.ten_kho;
INTO TABLE aVtdk && Vat tu SELECT *;
FROM ketoan!qhns;
INTO TABLE aSxkdt USE aSxkdt Exclusive REPLAC all ntcs with scpn
REPLAC all spntn with 0, sdn with 0, scpn with 0 ENDIF
ENDIF
**--- Hoan thanh chuyen ve thu muc dang lam viec CLOSE DATABASE
SET path to &cmdpath1
OPEN database ketoan.dbc SHARED SET DEFAULT TO &pathwork IF Chapnhan=1
USE ketoan!candoidk SHARED && Chuyen so du dau ky can doi Delet all
APPEN from aCandoi USE in candoidk
USE ketoan!congnodk SHARED && Chuyen so du dau ky cong no Delet all
APPEN from aCongno USE in congnodk
USE ketoan!Cpsxdk SHARED && Chi phi san xuat Delet all
APPEN from aCpsx
USE in Cpsxdk ...
USE ketoan!Tdv SHARED && Vat tu Delet all
APPEN from aTdv USE in Tdv ENDIF
**---KÕt thóc
- Viết chương trình kế nối dữ liệu của các đơn vị nội bộ gửi đến Các đơn vị địa chất ở xa trung tâm Liên đoàn không thê tổ chức dùng chung dữ liệu qua mạng Internet vì chi phí quá cao. Giải pháp kết nối dữ liệu
để tổng hợp báo cáo toàn Liên đoàn khi các đơn vị gửi báo về người sử dụng chỉ cần nhắp chuột chọn dữ liệu của đơn vị cần kết nối, như vậy đã hoàn thành báo cáo tổng hợp toàn Liên đoàn. Chương trình được thực hiện như sau :
**-- ketnoi.prg
CLOSE DATABASE
SET PATH TO &cmdpath2 SET DEFAULT TO &pathwork chapnhan=0
IF FILE("ketoan.dbc")=.T.
chapnhan=1
OPEN DATABASE ketoan.DBC SHARED
***--- Lay so lieu cua Don vi cap duoi SELECT *;
FROM ketoan!ct1;
WHERE ct1.thang >= dauqui;
AND ct1.thang <= cuoiqui INTO TABLE kct1 SELECT ct2.*;
FROM ketoan!ct1 inner JOIN ketoan!ct2 ; ON ct1.ct1_id = ct2.ct1_id;
WHERE ct1.thang >= dauqui;
AND ct1.thang <= cuoiqui INTO TABLE kct2 SELECT *;
FROM ketoan!vtfs1;
WHERE vtfs1.thang >= dauqui;
AND vtfs1.thang <= cuoiqui INTO TABLE kvt1 SELECT vtfs2.*;
FROM ketoan!vtfs1 inner JOIN ketoan!vtfs2 ; ON vtfs1.ct1_id = vtfs2.ct1_id;
WHERE vtfs1.thang >= dauqui;
AND vtfs1.thang <= cuoiqui INTO TABLE kvt2 ENDIF
**--- Hoan thanh chuyen ve thu muc dang lam viec CLOSE DATABASE
SET PATH TO &cmdpath1
OPEN DATABASE ketoan.DBC SHARED SET DEFAULT TO &pathwork
IF chapnhan=1
USE ketoan!ct1 SHARED && Chung tu SET DELETED OFF
CALCULATE MAX(ct1_id) ALL TO x SET DELETED ON
CALCULATE MAX(ct1_id) ALL TO Y lcoldtalk = SET("TALK")
SET TALK OFF
lcolddeleted = SET("DELETED") SET DELETED OFF
CALCULATE MAX(ct1_id) ALL TO lmaxid IF VAL(x)-VAL(Y)=0
IF VAL(x)=0
lmaxid="100000"
ENDIF
ENDIF
lmaxid =ALLTRIM(STR(VAL(lmaxid) + 1)) nlmaxid=VAL(lmaxid )
SET TALK &lcoldtalk
SET DELETED &lcolddeleted USE
SELECT 22
USE kct2 ALIAS kct2 EXCLUSIVE Delet FOR tien=0
PACK
REPLAC all kct2.ct1_id with alltrim(str(val(kct2.ct1_id)-100000)) SELECT 21
USE kct1 ALIAS kct1 EXCLUSIVE GOTO TOP
SCAN FOR NOT EOF() nlmaxid=nlmaxid+1
chiso12=ALLTRIM(kct1.ct1_id)
REPLAC kct1.ct1_id WITH ALLTRIM(STR(nlmaxid)) SELECT 22
REPLAC kct2.ct1_id WITH ALLTRIM(STR(nlmaxid)) FOR alltrim(str(val(kct2.ct1_id)+100000))= =chiso12 SELECT 21
ENDSCAN USE IN kct1 USE IN kct2
**--- Vat tu
USE ketoan!vtfs1 SHARED && Vat tu SET DELETED OFF
CALCULATE MAX(ct1_id) ALL TO x SET DELETED ON
CALCULATE MAX(ct1_id) ALL TO Y lcoldtalk = SET("TALK")
SET TALK OFF
lcolddeleted = SET("DELETED") SET DELETED OFF
CALCULATE MAX(ct1_id) ALL TO lmaxid IF VAL(x)-VAL(Y)=0
IF VAL(x)=0
lmaxid="100000"
ENDIF ENDIF
lmaxid =ALLTRIM(STR(VAL(lmaxid) + 1)) nlmaxid=VAL(lmaxid )
SET TALK &lcoldtalk
SET DELETED &lcolddeleted USE
SELECT 22
USE kvt2 ALIAS kvt2 EXCLUSIVE Delet FOR tien=0
PACK
REPLAC all kvt2.ct1_id with alltrim(str(val(kvt2.ct1_id)-100000)) SELECT 21
USE kvt1 ALIAS kvt1 EXCLUSIVE GOTO TOP
SCAN FOR NOT EOF() nlmaxid=nlmaxid+1
chiso12=ALLTRIM(kvt1.ct1_id)
REPLAC kvt1.ct1_id WITH ALLTRIM(STR(nlmaxid)) SELECT 22
REPLAC kvt2.ct1_id WITH ALLTRIM(STR(nlmaxid)) FOR alltrim(str(val(kvt2.ct1_id)+100000))==chiso12
SELECT 21 ENDSCAN
USE IN kvt1 USE IN kvt2
***--- ket noi
USE ketoan!ct1 SHARED && Chung tu APPEN FROM kct1
USE ketoan!ct2 SHARED APPEN FROM kct2
USE ketoan!vtfs1 SHARED && Vat tu APPEN FROM kvt1
USE ketoan!vtfs2 SHARED && Vat tu APPEN FROM kvt2
USE ENDIF
- Giải pháp lập trình định khoản các bút toán trung gian
Các khoản chi phí tiền lương, chi phí vật liệu, chi phí BH, chi phí khấu hao TSCĐ phát sinh trong kỳ đựơc tập trung cho các đối tượng sản xuất. Để giảm bớt các công việc cho người kế toán trong việc định khoản các bút toán trung gian. Chương trình được xây dựng như sau :
H×nh 3.13
Lập trình cho nút điều khiển “Thực hiện“
lcoldtalk = SET("TALK") SET TALK OFF
lcolddeleted = SET("DELETED") SET DELETED OFF
*!* ================================
*!*
*!* Ket chuyen Tien luong Ghi co TK 3341, 3348
*!* Phan bo 1
*!*=================================
IF ccheck1=1 IF qui=="I"
ctapctl="PB11"
ELSE
IF qui=="II"
ctapctl= "PB12"
ELSE
IF qui=="III"
ctapctl= "PB13"
ELSE
IF qui=="IV"
ctapctl= "PB14"
ENDIF ENDIF
ENDIF ENDIF
SELECT ct2.ct1_id, Ct1.so_ct, Ct1.Tap_ct, ct2.ma_cp, ct2.ma_khac, ct2.tk_no, ct2.tk_co, ct2.dien_giai, ct2.tien, SUM(ct2.tien), Ct1.thang FROM ketoan!Ct1 INNER JOIN ketoan!ct2 ON Ct1.ct1_id = ct2.ct1_id WHERE Ct1.thang >=dauqui AND Ct1.thang <=cuoiqui AND LEFT(ALLTRIM(ct2.tk_no),3) = "334"AND NOT EMPTY(ct2.ma_cp) = .T. GROUP BY ct2.tk_no, ct2.ma_cp,
ct2.ma_khac ORDER BY ct2.tk_no, ct2.ma_cp, ct2.ma_khac INTO TABLE pbcptl1
REPLAC all tk_co with tk_no USE in pbcptl1
SELECT 20
USE pbcptl1 alias pbcptl1
REPLAC all tap_ct with ctapctl, tien with sum_tien,dien_giai with ("Phân bổ tiền lương qúi "+qui), so_ct with '', thang with cuoiqui
GOTO top
SCAN for not eof()
IF left(alltrim(ma_cp),2)=="01"
REPLAC tk_no with "6351"
ELSE
IF left(alltrim(ma_cp),2)=="02" or
left(alltrim(ma_cp),2)=="03"
REPLAC tk_no with "631"
ELSE
IF left(alltrim(ma_cp),2)=="04"
REPLAC tk_no with "66121"
ELSE
IF left(alltrim(ma_cp),2)=="05"
REPLAC tk_no with "66122"
ELSE
REPLAC tk_no with "6622"
ENDIF ENDIF
ENDIF ENDIF
ENDSCAN
**-- Ghi Phan bo luong vao tep Ct1, ct2
SELECT ct2
Delet for upper(alltrim(tap_ct))==upper(alltrim(ctapctl))or val(ct1_id)=0 SELECT Ct1
Delet for upper(alltrim(tap_ct))==upper(alltrim(ctapctl)) or val(ct1_id)=0 SELECT Ct1
IF !EOF() Skip 1 ENDIF
IF EOF() AND !BOF() Skip -1
ENDIF
CALCULATE MAX(ct1_id) ALL TO lmaxid IF val(lmaxid)=0
lmaxid="100000"
ENDIF
lmaxid =ALLTRIM(STR(VAL(lmaxid) + 1)) APPEND BLANK
REPLAC ct1_id with lmaxid, tap_ct with ctapctl, thang with cuoiqui, ho_ten with ("Phân bổ chi phí tiền lương")
SELECT 20
REPLAC all ct1_id with lmaxid SELECT ct2
APPEN from pbcptl1 USE in pbcptl1
ENDIF
*!* ===========================
*!* Ket chuyen vat lieu Ghi co TK 15
*!* Phan bo 2
*!*===========================
IF ccheck2=1 IF qui=="I"
ctapctvl="PB21"
ELSE
IF qui=="II"
ctapctvl= "PB22"
ELSE
IF qui=="III"
ctapctvl= "PB23"
ELSE
IF qui=="IV"
ctapctvl= "PB24"
ENDIF ENDIF
ENDIF ENDIF
SELECT vtfs1.ct1_id, vtfs1.so_ct, vtfs1.ngay_ct, vtfs1.ma_khach,
vtfs2.ma_khac, vtfs2.ma_cp, vtfs1.ho_ten, vtfs1.don_vi, vtfs1.dien_giai, vtfs2.tk_no, vtfs2.tk_co, vtfs2.tien, vtfs1.thang FROM ketoan!vtfs1 INNER JOIN ketoan!vtfs2 ON vtfs1.ct1_id = vtfs2.ct1_id WHERE vtfs1.thang >= dauqui AND vtfs1.thang <= cuoiqui AND LEFT(ALLTRIM(vtfs2.tk_co),2) == "15" ORDER BY vtfs1.ct1_id, vtfs1.so_ct INTO TABLE pbcpvl2
REPLAC dien_giai with "Phân bổ vật liệu" for left(alltrim(tk_no),1)="6"
USE in pbcpvl2 SELECT 21
USE pbcpvl2 alias pbcpvl2 EXCLUSIVE
ALTER TABLE pbcpvl2 ADD COLUMN tap_ct c(10) REPLAC all tap_ct with ctapctvl
SELECT pbcpvl2.ct1_id, pbcpvl2.so_ct, pbcpvl2.tap_ct,
pbcpvl2.ngay_ct, pbcpvl2.ma_khach, pbcpvl2.ho_ten, pbcpvl2.don_vi, pbcpvl2.thang FROM pbcpvl2 GROUP BY pbcpvl2.ct1_id ORDER BY pbcpvl2.ct1_id INTO TABLE pbcpvl1
USE in pbcpvl1 SELECT 20
USE pbcpvl1 alias pbcpvl1 N=Reccount()
IF n=0
APPEN blank N=Reccount() ENDIF
DIMENSION amang1(N,8) COPY TO Array amang1 USE in pbcpvl1
**---Ghi vao tep Ct1, ct2 SELECT ct2
Delet for upper(alltrim(tap_ct))=upper(alltrim(ctapctvl)) or val(ct1_id)=0 SELECT Ct1
Delet for upper(alltrim(tap_ct))=upper(alltrim(ctapctvl)) or val(ct1_id)=0 FOR i=1 to n
SELECT Ct1
CALCULATE MAX(ct1_id) ALL TO lmaxid IF val(lmaxid)=0
lmaxid="100000"
ENDIF
lmaxid =ALLTRIM(STR(VAL(lmaxid) + 1)) APPEND BLANK
REPLAC ct1_id with alltrim(lmaxid), so_ct with alltrim(amang1(i,2)), tap_ct with alltrim(amang1 (i,3)), ngay_ct with amang1 (i,4), ma_khach with alltrim(amang1 (i,5)), ho_ten with alltrim(amang1 (i,6)),don_vi with alltrim(amang1 (i,7)), thang with amang1 (i,8)
SELECT pbcpvl2
REPLAC pbcpvl2.ct1_id with alltrim(lmaxid) for alltrim(pbcpvl2.ct1_id)==alltrim(amang1 (i,1)) ENDFOR
USE in pbcpvl2 SELECT ct2
APPEN from pbcpvl2 ENDIF
*** --- Ket thuc Phan bo Vat lieu
*!* =========================
*!*
*!* Phan bo chi phi theo tieu thuc
*!*
*!*=========================
IF !empty(ThisForm.text1.value) IF cTien>0
SELECT macp.ma_cp, macp.kehoach, macp.luong, macp.khac, macp.tien FROM ketoan!macp WHERE macp.kehoach > 0 or macp.luong > 0 or macp.khac > 0 ORDER BY macp.ma_cp Into table pbocp1
USE in pbocp1 SELECT 20
USE pbocp1 alias pbocp1 EXCLUSIVE
ALTER TABLE pbocp1 ADD COLUMN ct1_id c(6) ALTER TABLE pbocp1 ADD COLUMN ma_khac c(10) ALTER TABLE pbocp1 ADD COLUMN tap_ct c(10) ALTER TABLE pbocp1 ADD COLUMN tk_no c(10) ALTER TABLE pbocp1 ADD COLUMN tk_co c(10) ALTER TABLE pbocp1 ADD COLUMN dien_giai c(50) ALTER TABLE pbocp1 ADD COLUMN thang n(2)
REPLAC all tap_ct with cTapct, thang with cuoiqui, tk_co with cTkco