5.Sơ đồ phân rã chơng trình:

Một phần của tài liệu Xây dựng phân hệ kế toán chi phí sản xuất và tính giá thành sp tại công ty TNHH Hòa Phát.doc (Trang 75 - 112)

Chơng iii

5.Sơ đồ phân rã chơng trình:

T ậ p h ợ p c h i p h í s ả n x u ấ t P h â n b ổ c h i p h í s ả n x u ấ t T í n h g i á t h à n h s ả n x u ấ t L ậ p c á c b á o c á o C h i p h í n h â n c ô n g t r ự c t i ế p C h i p h í s ả n x u ấ t c h u n g C h i p h í n g u y ê n v ậ t l i ệ u p h ụ C h i p h í n g u y ê n v ậ t l i ệ u c h í n h P h â n b ổ c h i p h í v ậ t l i ệ u c h í n h P h â n b ổ c á c c h i p h í k h á c T í n h s ố l ư ợ n g s ả n p h ẩ m h o à n t h à n h T í n h t ổ n g g i á t h à n h v à g i á t h à n h đ ơ n v ị B ả n g p h â n t í c h g i á t h à n h B á o c á o t ổ n g h ợ p c h i p h í g i á t h à n h B á o c á o p h â n b ổ n g u y ê n v ậ t l i ệ u C á c b á o c á o k h á c X á c đ ị n h t ỉ l ệ p h â n b ổ v ậ t l i ệ u c h í n h T r a c ứ u đ ị n h m ứ c s ố l ư ợ n g v ậ t l i ệ u c h í n h T r a c ứ u s ả n p h ẩ m h o à n t h à n h T í n h t ỉ l ệ p h â n b ổ v ậ t l i ệ u c h í n h

6. Các thuật toán chính của chơng trình Trang - 77 - Trang - 77 - B ắ t đ ầ u C h ọ n t ệ p Đ ịn h k h o ả n T í n h t ổ n g c ủ a t r ư ờ n g " T h à n h t i ề n " t h e o t ừ n g " M ã s ả n p h ẩ m " Đ ọ c b ả n g h i T í n h g i á t h à n h đ ơ n v ị s ả n p h ẩ m t ừ n g l o ạ i C h u y ể n s a n g b ả n g h i t i ế p t h e o Đ s đ < Đ i ề u k i ệ n v ề t h ờ i g i a n > Đ C ậ p n h ậ t g i á K ế t t h ú c < T K n ợ = 1 5 4 > < T K n ợ = 1 5 5 > T í n h t ổ n g c ủ a t r ư ờ n g " S ố l ư ợ n g " t h e o t ừ n g " M ã s ả n p h ẩ m " B ả n g h i c u ố i ? đ s s s T h u ậ t t o á n t í n h g i á t h à n h s ả n x u ấ t

B ắ t đ ầ u M ở c á c t ệ p c ầ n t h i ế t đ ể p h â n b ổ T ạ o r a t ệ p c á c t ạ m t h ờ i đ ể l ư u c á c k ế t q u ả t r u n g g i a n C h ọ n t ệ p D A N H M ụ c P h â n B ổ Đ ọ c b ả n g h i K i ể m t r a b i ế n M . C h ọ n = [ x ] X á c đ ị n h b ú t t o á n p h â n b ổ : T K n ợ , T K c ó P h â n b ổ c h i p h í s ả n x u ấ t t h e o b ú t t o á n đ ã x á c đ ị n h Đ ị n h k h o ả n k ế t q u ả p h â n b ổ v à o t ệ p đ ịn h k h o ả n C h u y ể n s a n g b ả n g h i t i ế p t h e o B ả n g h i c u ố i ? Đ Đ s s K ế t t h ú c X ó a c á c t ệ p T ạ m t h ờ i T h u ậ t t o á n t ổ n g q u á t p h â n b ổ c h i p h í s ả n x u ấ t

Trang - 79 - B ắ t đ ầ u C h ọ n t ệ p Đ ịn h k h o ả n T í n h t ổ n g c ủ a t r ư ờ n g " T h à n h t i ề n " t h e o t ừ n g " M ã v ậ t t ư " L ư u k ế t q u ả v à o t ệ p t ạ m t h ờ i Đ ọ c b ả n g h i T í n h t ỉ l ệ p h â n b ổ v ậ t l i ệ u c h í n h C h ọ n t ệ p đ ịn h m ứ c C h u y ể n s a n g b ả n g h i t i ế p t h e o B ả n g h i c u ố i ? Đ s s < Đ i ề u k i ệ n v ề t h ờ i g i a n > . A N D . < T K n ợ = 6 2 1 1 > Đ P h â n b ổ c h i p h í v ậ t l i ệ u c h í n h Đ ị n h k h o ả n k ế t q u ả p h â n b ổ B ắ t đ ầ u T h u ậ t t o á n p h â n b ổ c h i p h í n g u y ê n v ậ t l i ệ u c h í n h B ắ t đ ầ u L ấ y c á c t h a m s ố đ ể l ậ p b á o c á o X ử l ý s ố l i ệ u đ ể t ạ o r a m ộ t t ệ p t ạ m t r ư ớ c k h i l ê n b á o c á o L ọ c r a c á c s ố l i ệ u t ừ c á c t ệ p d ữ l i ệ u p h á t s i n h v à s ố d ư P r e v i e w b á o c á o I n b á o c á o K ế t t h ú c B r o w s e t ệ p s ố l i ệ u t ạ m t h ờ i B r o w s e t ệ p s ố l i ệ u t ạ m t h ờ i T h u ậ t t o á n t ổ n g q u á t l ậ p b á o c á o

Kết luận

Xây dựng phần mềm để phục vụ công tác kế toán tập hợp chi phí sản xuất và tính giá thành sản phẩm nói chung là một phạm vi rộng, tuy nhiên, đề tài “Xây dựng phân hệ kế toán tập hợp chi phí sản xuất và tính giá thành sản phẩm tại công ty TNHH ống thép Hòa Phát” chỉ giới hạn trong những điều kiện cụ thể tại công ty này. Đây là một doanh nghiệp sản xuất điển hình với quy trình sản xuất gồm nhiều công đoạn và phải tính giá thành cho sản phẩm của từng công đoạn theo thứ tự tơng ứng. Phơng pháp tính giá thành tại công ty là giá thành công đoạn dựa trên định mức về số l- ợng vật t, kì tính giá thành là tháng, hình thức ghi sổ là nhật kí chung. Chuyển phơng pháp tính giá vốn hàng xuất kho từ trung bình di động sang trung bình tháng bằng cách sử dụng chức năng “Tự động áp giá vốn”.

Trong cơ sở dữ liệu của hệ thống tính giá thành đã thiết kế, tệp Định Khoản là tệp dữ liệu trung tâm, lu trữ toàn bộ các nghiệp vụ phát sinh và tệp này sẽ đợc tích hợp vào tệp CT0.DBF trong cơ sở dữ liệu của hệ thống thông tin kế toán hiện tại.

Với phơng pháp tính giá thành hiện tại ở công ty ống thép Hòa Phát, phân bổ chi phí là khâu chủ yếu trong quá trình tính giá thành. Việc phân bổ chi phí có thể chia làm hai bớc chính theo thứ tự: một là phân bổ chi phí nguyên vật liệu chính, hai là phân bổ các chi phí còn lại (nh nguyên vật liệu phụ, nhân công trực tiếp và chi phí sản xuất chung) dựa vào kết quả phân bổ chi phí nguyên vật liệu chính.

Giá thành sản phẩm phải tính lần lợt từ công đoạn đầu tiên cho đến công đoạn cuối cùng vì chỉ có thể tính đợc giá thành của một công đoạn khi đã biết giá thành của công đoạn trớc đó. Để có kết quả đúng, ngời sử dụng phải tuân theo quy định về trình tự các thao tác, đó là: Tính giá vốn 

công đoạn sản xuất. Cuối cùng mới là xem và in các báo cáo về chi phí và giá thành.

Phụ lục

1.Thủ tục phân bổ chi phí nguyên vật liệu chính PROCEDURE CmdPhanBo.Click() LOCAL _Dummy M.Thang1 = THISFORM.txtThang1.Value M.Thang2 = THISFORM.txtThang2.Value M.Thang = THISFORM.txtThang2.Value IF M.Thang2 = 0 RETURN ENDIF

M.Ngay_Ct1 = CTOD([01/] + TRAN(M.Thang1, '@L ##') + [/] + M_Nam) M.Ngay_Ct2 = GOMONTH(M.Ngay_Ct1, 1 + (M.Thang2 - M.Thang1)) - 1 SELECT 0

USE (M_Data_Nam + [Ct]) ORDER Stt ALIAS K_Ct

SELECT 0 USE (M_Data_Nam + [Ct0]) ORDER Stt0 ALIAS K_Ct0

SELECT 0

USE (M_Data_Nam + [SoCai]) ORDER Stt ALIAS K_SoCai SELECT 0

USE (M_Dm_Nam + [DmSp]) ORDER Ma_Sp ALIAS M_DmSp SELECT M_DmPb1

_CoKhong = [K]

SCAN FOR (Tag = [x])

M.Stt = M_W_Id + [PB3] + RIGHT(M_Nam, 2) + TRANS(M.Thang2,; [@L 99]) + TRANS(Stt, [@L 99])

M.Ten_Bt = Ten_Bt

M.Stt0 = TRANS(Stt, [@L 999]) M.Tk =

ALLTRIM(Tk_Co) M.Tk0 =

ALLTRIM(Tk_No) M.SttOld =

M.Stt &&EVAL([Stt] + TRAN(M.Thang, '@L ##')) _Loai_Pb =

LEFT(Loai_Pb, 1) M.SttNew = M.Stt

IF EMPTY(M.Tk) OR EMPTY(M.Tk0) OR EMPTY(_Loai_Pb) WAIT WINDOWS [Chua khai bao du tai khoan trong danh muc!] SELECT M_DmPb1

LOOP ENDIF

SELECT 0

CREATE TABLE (M_Temp + [Nhap_Tp]) (Ma_Vt C(16), Ma_Sp C(16),; So_Luong N(15, 3),Tk_No C(8), Tk_Co C(8)) (adsbygoogle = window.adsbygoogle || []).push({});

DO ScanFileV WITH M.Ngay_Ct1, M.Ngay_Ct2, [(.T.)],; [(! EMPTY(Ma_Kho)).AND.(Tk_Co = "] + M.Tk0 + [")], [Nhap_Tp]

USE (M_Dm_Nam + [DmVt]) ORDER Ma_Vt ALIAS M_DmVt IN 0 SELECT Nhap_Tp

SET RELATION TO Ma_Vt INTO M_DmVt REPLACE ALL

Ma_Sp WITH M_DmVt.Ma_Sp SET RELATION TO

USE IN M_DmVt

SELECT Ma_Sp, SUM(So_Luong) AS So_Luong, Tk_Co AS Tk,;

M.Stt AS Stt0, 000000000000000.0000 AS He_So,; 000000000000000.0000 AS He_So_Vt ;

FROM Nhap_Tp ;

INTO TABLE (M_Temp + [M_DmTmp]) ; GROUP BY Ma_Sp

SELECT M_DmTmp

INDEX ON Ma_Sp TAG Ma_Sp SET ORDER TO 0 _Dummy0 = [] DO CASE CASE INLIST(_Loai_Pb, [0], [1]) _Dummy = [M_DmSp.DM_621_] + TRANS(M.Thang2, [@L 99]) CASE _Loai_Pb = [2] _Dummy0 = [Tien2] _Dummy = [M_DmSp.DM_622_] + TRANS(M.Thang2, [@L 99]) CASE _Loai_Pb = [3] _Dummy0 = [Tien3]

_Dummy = [M_DmSp.DM_623_] + TRANS(M.Thang2, [@L 99]) CASE _Loai_Pb = [4]

_Dummy0 = [Tien7]

_Dummy = [M_DmSp.DM_627_] + TRANS(M.Thang2, [@L 99]) CASE _Loai_Pb = [9]

_Dummy = [M_DmSp.DM_Tong_] + TRANS(M.Thang2, [@L 99]) ENDCASE

SET RELATION TO Ma_Sp INTO M_DmSp ADDITIVE REPLACE ALL He_So WITH &_Dummy * So_Luong SET RELATION TO

USE IN Nhap_Tp

IF RECCOUNT([M_DmTmp])=0

WAIT WINDOW [Chua khai bao dinh muc hoac khong co thanh; pham nhap kho!] TIME 3

USE IN M_DmTmp SELECT M_DmPb1 LOOP ENDIF SELECT K_Ct SEEK M.SttOld IF K_Ct.Stt = M.SttOld IF _CoKhong = [K]

_CoKhong = Yes_No([Cac but toan phan bo loai nhu vay cua; thang: ] + STR(M.Thang,2) + [ Stt: ] + ;

ALLTRIM(M.Stt0) + [ da co, phan bo lai?]) IF UPPER(_CoKhong) # [C]

USE IN M_DmTmp EXIT

ENDIF ENDIF

DO DeleteCt WITH M.SttOld IN (M_Prog + [PubLic]) ENDIF

SELECT 0

USE (M_Code + [CtTmp]) ALIAS K_CtTemp COPY STRU TO (M_Temp + [K_CtTmp])

SELECT 0

USE (M_Temp + [K_CtTmp]) EXCLU ALIAS K_CtTmp USE IN K_CtTemp

_Key = [(Tk_No = "] + M.Tk + [").OR.(Tk_Co = "] + M.Tk + [")] DO ScanFile WITH M.Ngay_Ct1, M.Ngay_Ct2, _Key,; (adsbygoogle = window.adsbygoogle || []).push({});

[(Tk = "] + M.Tk + [")], [K_CtTmp] SELECT K_CtTmp

IF RECCOUNT() = 0

WAIT WINDOWS NOWAIT [Khong co so lieu de phan bo!] USE IN K_CtTmp

USE IN M_DmTmp SELECT M_DmPb1 LOOP

ENDIF

IF _Loai_Pb = [0] && Phân bổ theo định mức số lợng của vật t USE (M_Dm_Nam + [DmDmVt]) ALIAS M_DmDmVt IN 0

SELECT 0

CREATE TABLE (M_Temp + [V_CtTmp]) (Nh_Ct C(1),;

Ma_Vt C(16), So_Luong N(15, 3), Tien N(15, 2)) DO ScanFileV WITH M.Ngay_Ct1, M.Ngay_Ct2, [(.T.)], ;

[(!EMPTY(Ma_Vt)).AND.((Tk_No = "] +; M.Tk + [").OR.] + [((Tk_Co = "] + M.Tk +;

[".AND.Tk_No # "] + M.Tk0 + ")))], ; [V_CtTmp]

SELECT V_CtTmp

INDEX ON Ma_Vt TAG Ma_Vt SET ORDER TO 0

SELECT Ma_Vt FROM M_DmDmVt INTO TABLE (M_Temp + [V_DmVt0]) GROUP BY Ma_Vt

SELECT V_DmVt0 SCAN

_Ma_Vt = ALLTRIM(Ma_Vt) SELECT V_CtTmp

REPLACE ALL Ma_Vt WITH _Ma_Vt FOR Ma_Vt = _Ma_Vt SELECT V_DmVt0 ENDSCAN USE IN V_DmVt0 IF (This.Parent.Parent.chkPhanBoVTthua.Value = 1) AND ; FILE(M_Data_Nam + [CDVDD.DBF]) SELECT 0

USE (M_Data_Nam + [CDVDD]) ALIAS V_CdvDD SELECT [2] AS Nh_Ct, Tk, Ma_Vt, SUM(So_Luong); AS So_Luong,SUM(Tien) AS Tien, ;

SUM(Tien) AS Ps_No ;

FROM V_CdvDD ;

WHERE (Thang = m.Thang1 - 1).AND.; (Tk = M.Tk).AND.;

(INLIST(Loai_DD, [1], [3])) ; INTO TABLE (M_Temp + [V_DdTmp1]) ; GROUP BY Tk, Ma_Vt

SELECT [1] AS Nh_Ct, Tk, Ma_Vt,;

SUM(So_Luong) AS So_Luong, ;

SUM(Tien) AS Tien, SUM(Tien) AS Ps_Co ; FROM V_CdvDD ;

WHERE (Thang = m.Thang2).AND.;

(Tk = M.Tk).AND.(INLIST(Loai_DD, [1], [3])); INTO TABLE (M_Temp + [V_DdTmp2]) ;

GROUP BY Tk, Ma_Vt USE IN V_CdvDD

USE IN V_DdTmp1 USE IN V_DdTmp2 SELECT V_CtTmp

APPEND FROM (M_Temp + [V_DdTmp1]) APPEND FROM (M_Temp + [V_DdTmp2]) (adsbygoogle = window.adsbygoogle || []).push({});

SELECT K_CtTmp

APPEND FROM (M_Temp + [V_DdTmp1]) APPEND FROM (M_Temp + [V_DdTmp2])

ENDIF

_Dummy = [So_Luong] + TRANS(M.Thang2, [@L 99]) SELECT Ma_Sp, Ma_Vt, IIF(So_LuongSP#0,;

&_Dummy/So_LuongSP, 00000000000.000000) AS SL_DinhMuc,; 0000000000000.00 AS SL_Nhap, 0000000000000.00 AS Gia, ; 0000000000000.00 AS T_SL_Nhap, 0000000000000.00 AS So_Luong, ; 0000000000000.00 AS T_So_Luong, 0000000000000.00 AS Tien, ; 0000000000000000 AS Tien_621, 0000000000000.00 AS T_Tien_621,; 0000000000000.000000 AS T_DinhMuc, 0000000000000.00 AS Dinh_Muc,; 0000000000000.000000 AS He_So, 0000000000000.000000 AS T_He_So, ;SPACE(80) AS Ten_Sp, SPACE(8) AS Dvt ;

FROM M_DmDmVt ;

WHERE Ma_Sp IN (SELECT Ma_Sp FROM M_DmTmp) ; INTO TABLE (M_Temp + [M_DmTmp0]) ;

ORDER BY Ma_Sp, Ma_Vt SET ORDER TO Ma_Sp IN M_DmTmp SELECT V_CtTmp

INDEX ON Ma_Vt TAG Ma_Vt SET ORDER TO 0

SELECT DISTINCT Ma_Vt FROM M_DmTmp0 ; INTO TABLE (M_Temp + [M_DmTmp6])

USE (M_Dm_Nam + [DmVt]) ORDER Ma_Vt ALIAS M_DmVt IN 0 SELECT M_DmTmp6

SCAN

_Ma_Vt = ALLTRIM(M_DmTmp6.Ma_Vt) IF !SEEK(M_DmTmp6.Ma_Vt, [M_DmVt])

SELECT V_CtTmp

REPLACE Ma_Vt WITH _Ma_Vt FOR Ma_Vt = _Ma_Vt SELECT M_DmTmp6 ENDIF ENDSCAN USE IN M_DmTmp6 USE IN M_DmVt * Tính tổng số tiền, số lợng của các vật t đã sử dụng

SELECT Ma_Vt, SUM(IIF(Nh_Ct = [2], So_Luong, - So_Luong)) AS So_Luong, SUM(IIF(Nh_Ct = [2], Tien, - Tien)) AS Tien, ; 000000000000.000 AS Gia ;

FROM V_CtTmp ;

WHERE So_Luong # 0 AND Tien # 0 ; INTO TABLE (M_Temp + [VtTmp]) ; GROUP BY Ma_Vt

INDEX ON Ma_Vt TAG Ma_Vt USE IN V_CtTmp

SELECT Ma_Vt, SUM(SL_DinhMuc) AS T_Dinhmuc ; FROM M_DmTmp0 ;

INTO TABLE (M_Temp + [M_DmTmp2]) ; GROUP BY Ma_Vt

SELECT M_DmTmp2

INDEX ON Ma_Vt TAG Ma_Vt SELECT M_DmTmp0

SET RELATION TO Ma_Vt INTO M_DmTmp2 && Tong dinh muc ve luong ma vat tu nay da san xuat

REPLACE ALL T_DinhMuc WITH M_DmTmp2.T_DinhMuc SET RELATION TO

SELECT M_DmTmp0

SET RELATION TO Ma_Sp INTO M_DmTmp && Tong so luong SP nhap kho hoan thanh

REPLACE ALL SL_Nhap WITH M_DmTmp.So_Luong SELECT Ma_Vt, SUM(SL_Nhap) AS T_SL_Nhap;

FROM M_DmTmp0 ;

INTO TABLE (M_Temp + [M_DmTmp3]) ; GROUP BY Ma_Vt (adsbygoogle = window.adsbygoogle || []).push({});

SELECT M_DmTmp3

INDEX ON Ma_Vt TAG Ma_Vt SELECT M_DmTmp0

SET RELATION TO Ma_Vt INTO M_DmTmp3

&& Tong so luong nhap kho cua cac thanh pham duoc tao boi ma_vt

REPLACE ALL T_SL_Nhap WITH M_DmTmp3.T_SL_Nhap SET RELATION TO

USE IN M_DmTmp3

SET RELATION TO Ma_Vt INTO M_DmTmp2 && Tong dinh muc ve luong ma vat tu nay da san xuat

REPLACE ALL T_DinhMuc WITH M_DmTmp2.T_DinhMuc REPLACE ALL He_So WITH SL_DinhMuc * SL_Nhap SELECT Ma_Vt, SUM(He_So) AS T_He_So;

FROM M_DmTmp0 ;

INTO TABLE (M_Temp + [M_DmTmp4]) ; GROUP BY Ma_Vt

SELECT M_DmTmp4

INDEX ON Ma_Vt TAG Ma_Vt SELECT M_DmTmp0

SET RELATION TO Ma_Vt INTO M_DmTmp4 && Tong he so phan bo

REPLACE ALL T_He_So WITH M_DmTmp4.T_He_So **********************

SET RELATION TO Ma_Vt INTO VtTmp

REPLACE ALL T_Tien_621 WITH VtTmp.Tien, T_So_Luong;

WITH VtTmp.So_Luong SET

RELATION TO

REPLACE ALL Tien_621 WITH T_Tien_621*He_So / T_He_So,; So_Luong WITH T_So_Luong * He_So / T_He_So FOR (T_He_So) # 0

SELECT Ma_Vt, T_Tien_621, T_So_Luong, SUM(Tien_621) AS Tien_621, SUM(So_luong) AS So_Luong,;

000000000000000.00 AS CL_Tien, 000000000000000.00 AS CL_SL_Xuat;

FROM M_DmTmp0 ;

INTO TABLE (M_Temp + [M_DmTmp5]) ; GROUP BY Ma_Vt

SELECT M_DmTmp5

REPLACE ALL CL_Tien WITH T_Tien_621 - Tien_621,; CL_SL_Xuat WITH T_So_Luong - So_Luong

SCAN FOR CL_Tien # 0 OR CL_SL_Xuat # 0 _Ma_Vt = Ma_Vt

_CL_Tien = CL_Tien

_CL_SL_Xuat = CL_SL_Xuat SELECT M_DmTmp0

CALCULATE MAX(Tien_621) TO _Max_Tien_621; FOR Ma_Vt = _Ma_Vt LOCATE FOR Tien_621 = _Max_Tien_621 AND Ma_Vt = _Ma_Vt

REPLACE Tien_621 WITH Tien_621 + _CL_Tien, So_Luong ; WITH So_Luong + _CL_SL_Xuat (adsbygoogle = window.adsbygoogle || []).push({});

SELECT M_DmTmp5 ENDSCAN

SELECT M_DmTmp0 SET RELATION TO **********************

SELECT Ma_Sp, SUM(Tien_621) AS Tien ; FROM M_DmTmp0 ;

INTO TABLE (M_Temp + [M_DmTmp1]) ; GROUP BY Ma_Sp

INDEX ON Ma_Sp TAG Ma_Sp SELECT M_DmTmp

SET RELATION TO Ma_Sp INTO M_DmTmp1 REPLACE ALL He_So_Vt WITH M_DmTmp1.Tien SET RELATION TO

REPLACE ALL He_So WITH He_So_Vt FOR He_So_Vt # 0 SET ORDER TO 0 IN M_DmTmp USE IN M_DmDmVt USE IN VtTmp USE IN M_DmTmp0 USE IN M_DmTmp1 USE IN M_DmTmp2 USE IN M_DmTmp4 USE IN M_DmTmp5

ELSE && Phân bổ lơng và nhân công

IF FILE(M_Data_Nam + [CdVDD.DBF]) AND; !EMPTY(_Dummy0)

USE (M_Data_Nam + [CdVDD]) ALIAS V_CdVDD IN 0 SELECT Ma_Sp, So_Luong, M.Tk AS Tk, &_Dummy0 AS; Tien, &_Dummy0 AS Ps_No;

FROM V_CdVDD ;

WHERE (Thang = M.Thang1 - 1).AND.; (Loai_DD = [2]).AND.(&_Dummy0 # 0); INTO TABLE (M_Temp + [V_SpDD1])

SELECT Ma_Sp, So_Luong, M.Tk AS Tk, &_Dummy0 AS ; Tien, &_Dummy0 AS Ps_Co ;

FROM V_CdVDD ;

WHERE (Thang = M.Thang2).AND.; (Loai_DD = [2]).AND.(&_Dummy0 # 0); INTO TABLE (M_Temp + [V_SpDD2]) USE IN V_SpDD1

USE IN V_SpDD2 USE IN V_CdvDD SELECT K_CtTmp

APPEND FROM (M_Temp + [V_SpDD1])

APPEND FROM (M_Temp + [V_SpDD2]) ENDIF

ENDIF

SELECT M_DmTmp

DELETE FOR He_So = 0 SUM

He_So TO M.TongHeSo IF M.TongHeSo = 0

WAIT WINDOWS NOWAIT [Chua khai bao he so phan bo!] USE IN M_DmTmp USE IN K_CtTmp SELECT M_DmPb1 LOOP ENDIF SELECT K_CtTmp INDEX ON Tk TAG TkStt TOTAL TO (M_Temp + [K_CtTmp1]) ON Tk

USE IN K_CtTmp SELECT 0

USE (M_Temp + [K_CtTmp1]) ALIAS K_CtTmp1 EXCLUSIVEINDEX ON Tk TAG Tk

SELECT 0

USE (M_Code + [DmCt]) ORDER Ma_Ct ALIAS M_DmCt SEEK [PK]

_Ma_Ct = Ma_Ct _Nh_Ct = Nh_Ct

_So_Ct = PADR(ALLTR(STR((M_DmCt->So_Ct + 1))), FSIZE([So_Ct])) REPLACE So_Ct WITH So_Ct + 1

USE IN M_DmCt (adsbygoogle = window.adsbygoogle || []).push({});

M.Len = LEN(ALLTR(M.Tk)) SELECT K_CtTmp1

SCATTER MEMVAR BLANK M.Stt = M.SttNew M.Stt0 = [001] M.User_Id = M_User_Id M.Ma_Ct = _Ma_Ct M.Nh_Ct = _Nh_Ct M.So_Ct = _So_Ct M.Ngay_Ct = M.Ngay_Ct2 M.Posted = [C] m.Ma_TTe = M_Ma_TTe0 _Ten_Bt = ALLTRIM(M.Ten_Bt) SELECT K_CtTmp1 SCAN M.Tk_Co = K_CtTmp1->Tk

WAIT WINDOWS NOWAIT M_Process + [Tk ghi co: ] + ; ALLTR(M.Tk_Co) && Lấy đuôi của Tk có (621)

_Tag_Tk_No = RIGHT(M.Tk_Co, LEN(M.Tk_Co) - M.Len) _Tien = K_CtTmp1->Ps_No - K_CtTmp1->Ps_Co

_Tien1 = _Tien SELECT M_DmTmp SCAN

M.Ma_Sp = Ma_SP

M.Tk_No = ALLTRIM(M_DmTmp->Tk) + _Tag_Tk_No IF !SEEK(m.Tk_No, [M_DmTk])

m.Tk_No = m_DmTmp->Tk ENDIF

WAIT WINDOW NOWAIT M_Process + [, Tk ghi No: ] + ; ALLTRIM(M.Tk_No)+[ - Tk ghi co: ]+ALLTR(M.Tk_Co) M.Dien_Giai=_Ten_Bt +[; ]+ALLTRIM(M.Tk_No)+[-]+; ALLTRIM(M.Tk_Co)+[- Sản phẩm: ]+ALLTRIM(M.Ma_Sp) SKIP IF EOF() SKIP –1 M.Tien = _Tien1 ELSE SKIP –1

M.Tien = ROUND((_Tien * M_DmTmp->He_So / ; M.TongHeSo), 0)

_Tien1 = _Tien1 - M.Tien ENDIF M.Tien_Nt = M.Tien M.Tien9 = M.Tien M.Tien_Nt9 = M.Tien_Nt SELECT K_Ct0 APPEND BLANK GATHER MEMVAR M.Stt0 = TRANS(VAL(M.Stt0) + 1, [@L 999]) SELECT M_DmTmp ENDSCAN SELECT K_CtTmp1 ENDSCAN M.Dien_Giai0 = _Ten_Bt M.TTien = _Tien M.TTien_Nt = _Tien SELECT K_Ct

APPEND BLANK GATHER MEMVAR

DO UpDateSoCai WITH K_Ct.Stt IN (M_Prog + [Public]) USE IN

M_DmTmp USE IN K_CtTmp1 SELECT M_DmPb1 ENDSCAN USE IN K_Ct USE IN K_Ct0 USE IN K_SoCai USE IN M_DmSp =MESSAGEBOX(M_End_Proc, 64, M_App_Name) 2.Thủ tục phân bổ các chi phí khác: PROCEDURE CmdPhanBo.Click()

WAIT WIND M_Process NOWAIT THISFORM.SetAll([MousePointer], 11) THISFORM.LockScreen = .T.

M.Thang1 = THISFORM.txtThang1.Value

M.Thang2 = THISFORM.txtThang2.Value M.Thang = THISFORM.txtThang2.Value

IF M.Thang2 = 0

RETURN ENDIF

SELECT 0

USE (M_Data_Nam + [Ct]) ORDER Stt ALIAS K_Ct SELECT 0

USE (M_Data_Nam + [Ct0]) ORDER Stt0 ALIAS K_Ct0 SELECT 0

USE (M_Data_Nam + [SoCai]) ORDER Stt ALIAS K_SoCai M.Ngay_Ct1 = CTOD([01/] + TRAN(M.Thang1, '@L ##') + [/] + M_Nam)M.Ngay_Ct2 = GOMONTH(M.Ngay_Ct1, 1 + (M.Thang2 - ; M.Thang1)) - 1

M.Ngay_Ct = M.Ngay_Ct2 M.Ma_Ct = [PK]

M.Nh_Ct = [3]

M.Ma_NVU = [K]

M.Ma_TTe = M_Ma_TTe0 M.Ty_Gia = 1

M.Posted = [C] M.Ty_Gia = 1

M_Tk = ALLTRIM(THIS.Parent.txtTk.Value) && Tk phan bo = "627" M_Tk_Den = ALLTRIM(THIS.Parent.txtTk_Den.Value) && Den Tk = "154" M_Tk2 = ALLTRIM(THIS.Parent.txtTk2.Value) && Theo ty le = "622" M_Tk3 = ALLTRIM(THIS.Parent.txtTk3.Value) && Theo ty le = "621" M_Tk4 = ALLTRIM(THIS.Parent.txtTk4.Value) && Theo ty le = "623" M_Tk_Den2 = ALLTRIM(THIS.Parent.txtTk_Den2.Value) && Den Tk= 154" SELECT K_SoTmp ZAP SELECT M_DmTk SEEK M_Tk _Stt = M_W_ID + [P2] + TRANSFORM(RECNO(), [@L 999]) + ; TRANSFORM(M.Thang, [@L 99])

DO DeleteCt WITH _Stt IN (M_Prog + [PubLic]) SELECT 0 (adsbygoogle = window.adsbygoogle || []).push({});

CREATE TABLE (M_Temp + [Tk622]) (Tk C(8), Ma_Sp C(16), TK_DU C(8), ; Ps_No N(15, 2), Ps_No_Nt N(15, 2),Ps_Co N(15, 2), ; Ps_Co_Nt N(15, 2))

_KeyTkDen = [(Tk_DU = "] + M_Tk_Den2 + [")] _KeyTkDi = [(Tk = "] + M_Tk2 + [")]

IF !EMPTY(M_Tk3)

_KeyTkDi = _KeyTkDi + [.OR.(Tk = "] + M_Tk3 + [")] ENDIF

IF !EMPTY(M_Tk4)

_KeyTkDi = _KeyTkDi + [.OR.(Tk = "] + M_Tk4 + [")] ENDIF _Key = [(] + _KeyTkDi + [).AND.(] + _KeyTkDen + [)] DO ScanFile WITH M.Ngay_Ct1, M.Ngay_Ct2, [(.T.)], _Key, [Tk622]

SELECT 0

DO ScanFile WITH M.Ngay_Ct1, M.Ngay_Ct2, [(Tk_No = M_Tk); .OR.(Tk_Co = M_Tk)], [(Tk = '] + M_Tk + [')], [Tk627] SELECT Tk, SUM(Ps_No - Ps_Co) AS Tien;

FROM Tk627 ;

INTO TABLE (M_Temp + [K_So627]) ; GROUP BY Tk

SELECT K_So627 DELETE FOR Tien = 0 PACK This.Parent.Grid2.RecordSource = [K_SoTmp] This.Parent.Grid2.RecordSourceType = 1 THISFORM.LockScreen = .F. SCAN M.Stt = _Stt M.Stt = M.Stt + TRANS(RECNO(), [@L 99]) _Tk =

ALLTRIM(Tk) _Tien = Tien

IF SEEK(M_Tk2 +

RIGHT(ALLTRIM(_Tk), 1), [M_DmTk]) _Tk622 =

M_Tk2 + RIGHT(ALLTRIM(_Tk), 1) ELSE

_Tk622 = M_Tk2 ENDIF

SELECT Tk, Tk_Du, Ma_Sp, SUM(PS_Co - Ps_No) AS Tien622,; 0000000000000.00 AS

Tien627 ; FROM Tk622 ;

INTO TABLE (M_Temp +

[Phan_Bo]) ; GROUP BY Tk, Tk_DU, Ma_SP ;

ORDER BY Tien622 SUM Tien622 TO _Tong622 IF _Tong622 = 0

USE IN Phan_Bo LOOP

ENDIF SELECT Phan_Bo

REPLACE ALL Tien627 WITH ROUND(_Tien*Tien622 / _Tong622, 0) SUM Tien627 TO _Tong627

IF _Tong627 # _Tien

LOCATE FOR Tien622 # 0 IF FOUND()

REPLACE Tien627 WITH Tien627 + _Tien - _Tong627 ENDIF

ENDIF

SELECT Phan_Bo SCAN

M.Stt0 = TRANSFORM(RECNO(), [@L 999]) (adsbygoogle = window.adsbygoogle || []).push({});

M.Dien_Giai = [Phân bổ ] + ALLTRIM(_Tk) + [ --> ] + ; ALLTRIM(M_Tk_Den)

M.Tien_Nt = Tien627 M.Tien = Tien627

M.Tk_No = STRT(Tk_DU, M_Tk_Den2, M_Tk_Den) FOR _i = FSIZE([Tk], [M_DmTk]) TO 1 STEP –1

M.Tk_No = LEFT(M.Tk_No, _i) IF SEEK(M.Tk_No, [M_DmTk])

EXIT ENDIF ENDFOR

M.Tk_Co = _Tk

FOR _i = FSIZE([Tk], [M_DmTk]) TO 1 STEP –1 M.Tk_Co = LEFT(M.Tk_Co, _i)

IF SEEK(M.Tk_Co, [M_DmTk]) EXIT ENDIF ENDFOR M.Ma_Sp = Ma_Sp M.Ma_TTe = M_Ma_TTe0 M.Ma_NVu = [K]

INSERT INTO K_Ct0 FROM MEMVAR M.Tien0 = Tien622

M.Tk_No0 = Tk_DU M.Tk_Co0 = Tk

M.Ty_Le = Tien627 * 100 / _Tien

INSERT INTO K_SoTmp FROM MEMVAR ENDSCAN

M.Dien_Giai M.Tong_Tien = _Tien INSERT INTO K_Ct FROM

MEMVAR M.Tien0 = _Tong622

M.Tien = _Tien M.Tien_Nt = _Tien

m.Tien9 = m.Tien m.Tien_Nt9 = m.Tien_Nt

STORE [] TO M.Tk_No0, M.Tk_Co0, M.Tk_No, M.Tk_Co, M.Ma_Sp M.Ty_Le = 100

INSERT INTO K_SoTmp FROM MEMVAR USE IN Phan_Bo

DO UpDateSoCai WITH M.Stt IN (M_Prog + [PUBLIC]) SELECT K_So627 ENDSCAN USE IN K_Ct USE IN K_Ct0 USE IN K_SoCai USE IN Tk627 USE IN Tk622 USE IN K_So627 SELECT K_SoTmp GO TOP This.Parent.Grid2.SetAll("DynamicFontBold", "IIF(Ty_Le = 100, .T., .F.)", ; "Column") This.Parent.Grid2.Refresh

WAIT WINDOW NOWAIT M_End_Proc THISFORM.SetAll([MousePointer], 0)

3.Thủ tục tính giá thành PROCEDURE Recalculate()

LPARAMETER _Thang1, _Thang2, _Tk IF _Thang2 < _Thang1

RETURN ENDIF

LOCAL _Str_Dau_Ky1, _Str_Dau_Ky2, _Str_Dau_Ky7, _Str_Dau_Ky8, _i, ; _MD_HT, _SL_SPDD

ThisForm.LockScreen = .T.

_Tk = ALLTRIM(_Tk)

m.Ngay_Ct1 = CTOD([01/] + TRANS(_Thang1, [@L 99]) + [/] + M_Nam) m.Ngay_Ct2 = GOMONTH(CTOD([01/] + TRANS(_Thang2, [@L 99]) + [/] +;

M_Nam), 1) – 1 M.Ngay_Ct0

= CTOD([01/] + TRANS(M_Th_Bd_Ht, [@L 99]) + [/] + M_Nam) _SL_SPDD = [SL_SPDD] + TRAN(_Thang2, [@L 99]) _MD_HT = [MD_HT] + TRAN(_Thang2, [@L 99])

STORE [Ps_No1_00] TO _Str_Dau_Ky1, _Str_Cuoi_Ky1 STORE [Ps_No2_00] TO _Str_Dau_Ky2, _Str_Cuoi_Ky2 (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Xây dựng phân hệ kế toán chi phí sản xuất và tính giá thành sp tại công ty TNHH Hòa Phát.doc (Trang 75 - 112)