Đề 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 xuất tại công ty TNHH ống thép Hòa Phát

Nguyên vật liệu chính của quá trình sản xuất là các loại vật liệu thép ở dạng thép cuộn như vật liệu thép 0.8 ly, vật liệu thép 0.9 ly, vật liệu thép 1.2 ly và các loại vật liệu phụ như hợp kim nhôm, chất hãm axit, ôxi già, kẽm Có tất cả 27 loại vật liệu thép, mỗi loại được dùng để tạo ra một nhóm bán thành phẩm thép bản rộng nên có 27 nhóm bán thành phẩm với tổng số 330 loại. Từ bán thành phẩm sẽ sản xuất ra 281 loại ống đen, tiếp tục sản xuất ống đen thành 76 loại ống mạ. Hiện tại, công ty có 5 kho: kho ống mạ, kho ống đen, kho bán thành phẩm, kho vật liệu thép và kho vật liệu phụ

doc110 trang | Chia sẻ: haianh_nguyen | Lượt xem: 1394 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đề 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 xuất tại công ty TNHH ống thép Hòa Phát, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
154 và 621 được mở tiểu khoản theo nhóm vật tư, các tài khoản 622 và 627 được mở tiểu khoản theo từng công đoạn sản xuất. Cách thức phân bổ chi phí Nói chung, khi xuất nguyên vật liệu chính cũng như các chi phí sản xuất khác cho sản xuất sản phẩm, chỉ biết tổng số xuất và xuất cho công đoạn nào mà không biết cụ thể cho từng loại sản phẩm. Do đó, để tính được giá thành thực tế của sản phẩm, phải phân bổ chi phí cho từng loại sản phẩm theo định mức về số lượng nguyên vật liệu chính tương ứng đã xác định trước khi bắt đầu tháng sản xuất. Công thức phân bổ: Ví dụ, đầu kì có định mức vật liệu X (đơn vị tính: kilogam) cho sản xuất 2 loại sản phẩm như sau: 1 Sản phẩm A cần 10 kg vật liệu X 1 Sản phẩm B cần 15 kg vật liệu X Cuối kì tính được tổng giá trị vật liệu X xuất dùng trong kì để sản xuất sản phẩm A và sản phẩm B là 5 000 000, hoàn thành nhập kho 1300 sản phẩm A và 800 sản phẩm B. Khi đó, phân bổ vật liệu X cho sản xuất từng loại sản phẩm là: sản phẩm A: sản phẩm B: Các chi phí khác như chi phí vật liệu phụ, chi phí sản xuất chung, nhân công…nếu không tính được trực tiếp cho từng đối tượng thì phân bổ theo chi phí nguyên vật liệu chính. Coi như không có sản phẩm dở dang và không có hao hụt nên toàn bộ chi phí được tính vào sản phẩm của từng công đoạn. Tính giá thành của bán thành phẩm Sơ đồ hạch toán: Các nghiệp vụ trong tháng: (1): Khi xuất vật liệu thép để sản xuất bán thành phẩm, ghi: Nợ TK 6210 Có TK 1521 Biết rõ xuất vật liệu thép để sản xuất loại bán thành phẩm nào nên có thể tính trực tiếp chi phí vật liệu chính cho từng đối tượng mà không cần phân bổ (2): Khi xuất vật liệu phụ để sản xuất bán thành phẩm, ghi: Nợ TK 6210 Có TK 1522 (3): Cuối tháng, tính ra tiền lương và các khoản phải trả công nhân trực tiếp sản xuất: Nợ TK 6220 Có TK 334,338… (4): Tập hợp hợp chi phí sản xuất chung trong tháng: Nợ TK 6270 Có TK 214,334… Các bút toán kết chuyển cuối tháng: (5): Kết chuyển chi phí nguyên vật liệu trực tiếp. Nợ TK 1540 Có TK 6210 (6): Kết chuyển chi phí nhân công trực tiếp Nợ TK 1540 Có TK 6220 (7): Kết chuyển chi phí sản xuất chung Nợ TK 1540 Có TK 6270 (8): Tính ra giá thành bán thành phẩm nhập kho Nợ TK 1550 Có TK 1540 Tính giá thành ống đen Sơ đồ hạch toán: Các nghiệp vụ trong tháng: (1): Khi xuất bán thành phẩm để sản xuất ống đen, ghi: Nợ TK 6211 Có TK 1550 Xuất chung chung, không chỉ rõ xuất cho từng loại là bao nhiêu nên cuối kì phải tiến hành phân bổ như đã trình bày ở trên (2): Khi xuất vật liệu phụ để sản xuất ống đen, ghi: Nợ TK 6211 Có TK 1522 (3): Cuối tháng, tính ra tiền lương và các khoản phải trả công nhân trực tiếp sản xuất: Nợ TK 6221 Có TK 334,338… (4): Tập hợp hợp chi phí sản xuất chung trong tháng: Nợ TK 6271 Có TK 214,334… Sau khi phân bổ chi phí, thực hiện các bút toán kết chuyển cuối tháng: (5): Kết chuyển chi phí nguyên vật liệu trực tiếp Nợ TK 1541 Có TK 6211 (6): Kết chuyển chi phí nhân công trực tiếp Nợ TK 1541 Có TK 6221 (7): Kết chuyển chi phí sản xuất chung Nợ TK 1541 Có TK 6271 (8): Tính ra giá thành ống đen nhập kho Nợ TK 1551 Có TK 1541 Tính giá thành ống mạ Sơ đồ hạch toán: Các nghiệp vụ trong tháng: (1): Khi xuất ống đen để sản xuất ống mạ, ghi: Nợ TK 6212 Có TK 1551 Xuất chung chung, không chỉ rõ xuất cho từng loại là bao nhiêu nên cuối kì phải tiến hành phân bổ như đã trình bày ở trên (2): Khi xuất vật liệu phụ để sản xuất ống mạ, ghi: Nợ TK 6212 Có TK 1522 (3): Cuối tháng, tính ra tiền lương và các khoản phải trả công nhân trực tiếp sản xuất: Nợ TK 6222 Có TK 334,338… (4): Tập hợp hợp chi phí sản xuất chung trong tháng: Nợ TK 6272 Có TK 214,334… Các bút toán kết chuyển cuối tháng: (5): Kết chuyển chi phí nguyên vật liệu trực tiếp Nợ TK 1542 Có TK 6212 (6): Kết chuyển chi phí nhân công trực tiếp Nợ TK 1542 Có TK 6222 (7): Kết chuyển chi phí sản xuất chung Nợ TK 1542 Có TK 6272 (8): Tính ra giá thành ống mạ nhập kho Nợ TK 1552 Có TK 1542 Để tính giá thành đơn vị, kế toán phải tập hợp tất cả các phiếu nhập kho để tính số lượng sản phẩm hoàn thành nhập kho của từng loại. 4.Sơ đồ luồng thông tin của hệ thống hiện tại Chứng từ bao gồm các loại chứng từ vật tư như phiếu xuất kho, phiếu nhập kho và các chứng từ kế toán như phiếu chi tiền mặt (trong trường hợp mua vật tư dùng luôn cho sản xuất mà không nhập vào kho vật tư), các phiếu kế toán, các bút toán phân bổ. Dưới đây là một số mẫu chứng từ đang dùng tại công ty: Phiếu chi: Phiếu xuất kho: Mẫu sổ nhật kí chung: Mẫu sổ cái tài khoản: Mỗi dòng trong sổ cái tương ứng với hai dòng trong sổ nhật kí chung Công việc tính giá thành được thực hiện sau khi tiến hành phân bổ và kết chuyển các chi phí sản xuất, bao gồm tính tổng giá thành và giá thành đơn vị của từng loại sản phẩm. Các báo cáo về chi phí và giá thành được lập ra không chỉ dựa vào kết quả tính giá thành mà còn dựa vào các kết quả trung gian có được khi tiến hành phân bổ các loại chi phí. Các báo cáo chi phí giá thành đang được dùng tại công ty bao gồm: 1. Bảng kê chứng từ theo sản phẩm 2. Tổng hợp phát sinh theo sản phẩm 3. Sổ chi tiết tài khoản 154 4. Phân tích giá thành 5. Phân tích hiệu quả kinh doanh cho từng loại sản phẩm 6. Tổng hợp chi phí theo khoản mục 7. Báo cáo chi tiết chi phí theo khoản mục 8. Bảng kê chi phí theo khoản mục 9. Báo cáo nguyên vật liệu trong giá thành 10.Báo cáo nguyên vật tồn liệu trên phân xưởng 11.Báo cáo tổng hợp chi phí giá thành 12.Báo cáo phân bổ nguyên vật liệu 13.Báo cáo phân bổ chi phí sản xuất chung vầ chi phí nhân công Dưới đây là một số mẫu báo cáo: 5.Sơ đồ luồng dữ liệu của hệ thống hiện tại Sơ đồ luồng dữ liệu mức 0: Sơ đồ luồng dữ liệu mức 1: Phân rã xử lý 3.0 Phân rã xử lý 2.0 Sơ đồ luồng dữ liệu mức 2: Phân rã xử lý 2.4: 6.Vấn đề của hệ thống tính giá thành hiện tại Vấn đề Mất rất nhiều thời gian để lập báo cáo về chi phí và giá thành, không lập được tất cả các báo cáo cần thiết Không tính được giá thành từng loại sản phẩm trong nhóm sản phẩm mà chỉ tính được giá thành của nhóm từ đó quy đổi ra giá thành sản phẩm từng loại theo tỉ lệ xác định trước, do đó không chính xác. Nguyên nhân Việc tập hợp chi phí sản xuất ở công ty khá phức tạp do quy trình sản xuất sản phẩm trải qua các công đoạn với nhiều đối tượng tính giá thành. Số lượng chứng từ lớn, nhiều nghiệp vụ phát sinh trong khi chỉ có một người đảm nhiệm với phương pháp thủ công. Nhiều đối tượng tập hợp chi phí và nhiều đối tượng tính giá thành nên phải mở nhiều sổ chi tiết để theo dõi Tính toán phải trải qua nhiều bước với khối lượng lớn, để tính được giá thành của giai đoạn này phải tính được giá thành của công đoạn trước đó Mong muốn của người làm kế toán sản xuất Tính giá thành bằng cách dùng phần mềm kế toán như các phân hệ kế toán khác đang dùng để có thể giải quyết được những vấn đề nêu trên, có thể nhanh chóng kết xuất các báo cáo chi phí và giá thành chi tiết cho từng loại sản phẩm. 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 Giải pháp tổng thể Tin học hóa hệ thống tính giá thành bằng cách 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 trong phần mềm kế toán đang dùng. Tích hợp cơ sở dữ liệu của hệ thống này vào cơ sở dữ liệu của hệ thống thông tin kế toán, có thể sử dụng các kết quả của các phân hệ khác. ii.thiết kế logic 1.Sơ đồ luồng dữ liệu mới Sơ đồ luồng dữ liệu mức 0: Sơ đồ luồng dữ liệu mức 1: Phân rã xử lý 3.0 Sơ đồ luồng dữ liệu mức 2 Phân rã xử lý 3.2: Phân rã xử lý 3.4: 2.Sơ đồ luồng thông tin mới 3.Thiết kế cơ sở dữ liệu logic Giải thích một số từ ngữ Trong phần này những từ ngữ dưới đây được hiểu như sau: Chứng từ: bao gồm các loại chứng từ vật tư như phiếu xuất kho, phiếu nhập kho, chứng từ kế toán như phiếu chi, phiếu kế toán, các bút toán phân bổ… hay nói chung là tất cả các nghiệp vụ kinh tế cần định khoản. Đối tượng: những đối tượng công nợ của nghiệp vụ kinh tế phát sinh như người mua, người bán, người nhận tiền… Vật tư: không chỉ bao gồm các loại nguyên vật liệu ban đầu của quá trình sản xuất mà còn bao gồm các loại bán thành phẩm và các loại thành phẩm thép ống đen vì chúng lại được dùng làm nguyên vật liệu cho giai đoạn sản xuất tiếp theo Sản phẩm: không chỉ bao gồm các loại sản phẩm cuối cùng mà bao gồm tất cả các loại thành phẩm và bán thành phẩm. Tài khoản giá thành: là tài khoản dùng để tổng hợp tất cả các loại chi phí theo từng đối tượng tính giá thành Mối quan hệ giữa các thực thể của hệ thống tính giá thành: Chứng từ của hệ thống tính giá thành có nhiều loại nhưng có thể lưu trong cùng một tệp số liệu gọi là tệp chứng từ bởi vì có thể chia các phần tử thông tin trên mỗi chứng từ thành hai nhóm: nhóm chung (ví dụ: số chứng từ, ngày…) và nhóm chi tiết (ví dụ: mã vật tư, số lượng…). Khi định khoản, mỗi dòng của phần chi tiết chứng từ sẽ tương ứng với một cặp tài khoản Nợ – Có trong sổ nhật kí chung và trong sổ cái. Mỗi sản phẩm thuộc về một tài khoản giá thành nhưng mỗi tài khoản giá thành có thể bao gồm nhiều sản phẩm (vì những sản phẩm này tuy khác loại nhưng có chung giá thành). Một sản phẩm có thể được sản xuất từ nhiều loại vật liệu chính đồng thời một loại vật liệu chính có thể được dùng để sản xuất nhiều loại sản phẩm. Giữa sản phẩm và vật liệu chính xác định một định mức về số lượng vật liệu chính Sơ đồ thực thể quan hệ Sơ đồ thực thể quan hệ trên có 6 thực thể và 2 mối quan hệ N@M nên cơ sở dữ liệu logic bao gồm 8 tệp Sơ đồ cấu trúc dữ liệu iii.thiết kế vật lý ngoài 1.Các màn hình nhập số liệu: Thêm tài khoản Thêm nhóm vật tư Thêm vật tư Thêm phiếu chi Thêm phiếu xuất Thêm định mức vật liệu chính: Phân bổ chi phí vật liệu chính Phân bổ các chi phí còn lại Tính giá thành Lựa chọn báo cáo 2.Trình tự các thao tác tính giá thành Để tính được giá thành một cách chính xác, người sử dụng cần thực hiện các thao tác theo đúng trình tự sau: Hàng ngày, cập nhật các chứng từ liên quan. Đối với các phiếu xuất kho, nếu chọn “Tự động áp giá xuất” thì chỉ cần nhập số lượng vật tư bởi vì theo phương pháp trung bình tháng: đến cuối tháng mới tính ra giá thực tế của vật tư xuất kho. Khi tính giá vốn, chương trình sẽ tự động áp đơn giá vào các phiếu xuất kho đã nhập. Cuối tháng, đối với từng công đoạn sản xuất thực hiện các bước sau: Tính giá vốn hàng xuất kho Phân bổ chi phí Tính giá thành Sau khi tính xong giá thành (của một công đoạn), quay trở lại bước tính giá vốn (tính cho công đoạn tiếp theo). Hình minh họa trình tự tính giá thành: Sau khi thực hiện xong các bước trên mới có thể xem và in các báo cáo về chi phí - giá thành Màn hình chính: Các nghiệp vụ cuối tháng Báo cáo chi phí-giá thành iv.thiết kế vật lý trong 1.Thiết kế cơ sở dữ liệu vật lý trong Gộp tất cả các loại thành phẩm, bán thành phẩm vào tệp Vật Tư và thêm vào tệp này trường “Loại vật tư” để phân biệt: 1-Vật tư, hàng hóa; 2-Thành phẩm ngoài ra cũng thêm vào tệp này trường “Mã nhóm”. Thêm tệp nhóm vật tư với các trường: “Mã nhóm”, “Tên nhóm”, “Bậc nhóm”, “Nhóm cuối”, “Nhóm mẹ”. Tệp Sản Phẩm bao gồm tất cả các đối tượng tính giá thành, lúc đó trường “TK giá thành” không còn ý nghĩa nên loại bỏ trường này khỏi tệp Sản Phẩm. Giữa Sản Phẩm và Vật Tư ngoài mối quan hệ N@M về định mức số lượng vật liệu chính còn mối quan hệ 1@N: một đối tượng tính giá thành có thể bao gồm nhiều loại thành phẩm hoặc bán thành phẩm. Đối với tệp Định Mức, thêm trường “Số lượng sản phẩm” còn trường “Định mức” thì chia chi tiết thành 12 trường ứng với 12 tháng. Đối với tệp tài khoản, thêm trường “Tài khoản giá thành” nhận các giá trị: C-Tài khoản giá thành, K-Không phải tài khoản giá thành. Đối với tệp đối tượng, thêm trường “Mã số thuế” Thêm tệp Phân bổ để xác định các bút toán phân bổ, tệp này có các trường sau: “Số thứ tự”, “Tên bút toán”, “Tài khoản có”, “Tài khoản nợ”, “Chọn” Đối với tệp chứng từ, thêm trường “Số thứ tự” (dùng làm khóa chính thay cho hai trường “Loại chứng từ” và “Số chứng từ”) còn tệp định khoản, thêm trường “Số thứ tự 0” để thể hiện thứ tự của một dòng trong phần chi tiết của chứng từ và cùng với trường “Số thứ tự” sẽ tạo thành khóa chính. 2.Sơ đồ cấu trúc dữ liệu của cơ sở dữ liệu vật lý trong 3.Cấu trúc các tệp Tệp chứng từ: chungtu.dbf Name Type Wid Dec Diễn giải STT C 10 Số thứ tự LOAI_CT C 2 Loại chứng từ SO_CT C 10 Số chứng từ NGAY D 8 Ngày chứng từ MA_DT C 16 Mã đối tượng MA_KHO C 8 Mã kho DIEN_GIAI C 128 Diễn giải Tệp định khoản: dK.DBF Name Type Wid Dec Diễn giải STT C 10 Số thứ tự chứng từ STT0 C 3 Số thứ tự từng dòng trong chứng từ LOAI_CT C 2 Loại chứng từ SO_CT C 10 Số chứng từ MA_VT C 16 Mã vật tư SO_LUONG N 13 3 Số lượng DON_GIA N 12 2 Đơn giá THANH_TIEN N 15 2 Thành tiền MA_SP C 16 Mã sản phẩm TK_NO C 8 Tài khoản nợ TK_CO C 8 Tài khoản có Tệp kho: KHO.dbf Name Type Wid Dec Diễn giải MA_KHO C 8 Mã kho TEN_KHO C 64 Tên kho Tệp Đối tượng: DT.DBF Name Type Wid Dec Diễn giải MA_DT C 16 Mã đối tượng TEN_DT C 64 Tên đối tượng DIA_CHI C 48 Địa chỉ MA_SO_THUE C 18 Mã số thuế Tệp tài khoản: TK.DBF Name Type Wid Dec Diễn giải MA_TK C 8 Mã tài khoản TEN_TK C 100 Tên tài khoản BAC_TK N 1 Bậc tài khoản TK_ME C 8 Tài khoản mẹ TK_GT C 1 Tài khoản giá thành Tệp phân bổ: phanbo.dbf Name Type Wid Dec Diễn giải STT N 2 Số thứ tự phân bổ của bút toán TEN_BT C 48 Tên bút toán TK_NO C 8 Tài khoản nợ TK_CO C 8 Tài khoản có CHON C 1 Có thực hiện hay không Tệp nhóm vật tư: NHOMVT.dbf Name Type Wid Dec Diễn giải MA_NHOM C 8 Mã nhóm vật tư TEN_NHOM C 64 Tên nhóm vật tư BAC_NHOM N 1 Bậc nhóm NHOM_ME C 8 Nhóm mẹ NHOM_CUOI C 1 Nhóm cuối Tệp vật tư: vattu.dbf Name Type Wid Dec Diễn giải MA_VT C 16 Mã vật tư TEN_VT C 64 Tên vật tư DON_VI C 8 Đơn vị tính LOAI_VT C 1 Loại vật tư MA_NHOM C 8 Mã nhóm TK_VT C 8 Tài khoản vật tư Tệp sản phẩm: sanpham.dbf Name Type Wid Dec Diễn giải MA_SP C 16 Mã sản phẩm TEN_SP C 64 Tên sản phẩm DON_VI C 10 Đơn vị tính Tệp định mức: DinhMuc.DBF Name Type Wid Dec Diễn giải MA_SP C 16 Mã sản phẩm SO_LUONGSP N 15 2 Số lượng sản phẩm MA_VT C 16 Mã vật tư SO_LUONG01 N 15 4 Định mức về số lượng vật tư tháng 1 SO_LUONG02 N 15 4 Định mức về số lượng vật tư tháng 2 SO_LUONG03 N 15 4 Định mức về số lượng vật tư tháng 3 SO_LUONG04 N 15 4 Định mức về số lượng vật tư tháng 4 SO_LUONG05 N 15 4 Định mức về số lượng vật tư tháng 5 SO_LUONG06 N 15 4 Định mức về số lượng vật tư tháng 6 SO_LUONG07 N 15 4 Định mức về số lượng vật tư tháng 7 SO_LUONG08 N 15 4 Định mức về số lượng vật tư tháng 8 SO_LUONG09 N 15 4 Định mức về số lượng vật tư tháng 9 SO_LUONG10 N 15 4 Định mức về số lượng vật tư tháng10 SO_LUONG11 N 15 4 Định mức về số lượng vật tư tháng11 SO_LUONG12 N 15 4 Định mức về số lượng vật tư tháng12 4.Tích hợp vào cơ sở dữ liệu của hệ thống thông tin kế toán hiện tại Tệp Tích hợp vào tệp Tệp Tích hợp vào tệp Chungtu.dbf Ct.dbf TK.DBF DMTK.DBF DK.DBF CT0.DBF NHOMVT.DBF DMNHVT.DBF KHO.DBF DMKHO.DBF VATTU.DBF DMVT.DBF DT.DBF DMDT.DBF SanPham.DBF DMSP.DBF PhanBo.DBF DMPB1.DBF DinhMuc.DBF DMDMVT.DBF Tệp: CT.DBF Name Type Wid Dec Tương ứng trong CHUNGTU.DBF STT C 10 STT MA_CT C 2 LOAI_CT NGAY_CT D 8 NGAY SO_CT C 10 SO_CT DIEN_GIAI0 C 128 DIEN_GIAI MA_DT C 16 MA_DT MA_KHO C 8 MA_KHO Tệp: CT0.DBF Name Type Wid Dec Tương ứng trong DK.DBF STT C 10 STT STT0 C 3 STT0 MA_CT C 2 LOAI_CT SO_CT C 10 SO_CT TK_NO C 8 TK_NO TK_CO C 8 TK_CO TIEN N 15 THANH_TIEN MA_VT C 16 MA_VT GIA N 12 2 DON_GIA SO_LUONG N 13 3 SO_LUONG MA_SP C 16 MA_SP Tệp: DMDT.DBF giống tệp DT.DBF Tệp: DMKHO.DBF giống tệp KHO.DBF Tệp: DMPB1.DBF Name Type Wid Dec Tương ứng trong PHANBO.DBF STT N 2 STT TK_CO C 8 TK_CO TEN_BT C 48 TEN_BT TK_NO C 8 TK_NO TAG C 1 CHON Tệp DMTK.DBF Name Type Wid Dec Tương ứng trong DMTK.DBF TK C 8 MA_TK TEN_TK C 100 TEN_TK BAC_TK N 1 BAC_TK TK_ME C 8 TK_ME TK_GT C 1 TK_GT Tệp DMNHVT.DBF Name Type Wid Dec Tương ứng trong NHOMVT.DBF MA_NH C 8 MA_NHOM TEN_NH C 64 TEN_NHOM BAC_NH N 1 BAC_NHOM NH_CUOI C 1 NHOM_CUOI NH_ME C 8 NHOM_ME Tệp DMVT.DBF Name Type Wid Dec Tương ứng trong tệp VATTU.DBF MA_VT C 8 MA_VT TEN_VT C 64 TEN_VT DVT C 8 DON_VI MA_NH C 8 MA_NHOM LOAI_VT C 1 LOAI_VT TK_VT C 8 TK_VT Tệp DMSP.DBF giống tệp SANPHAM.DBF Tệp DMDMVT.DBF giữ nguyên như tệp DINHMUC.DBF 5.Sơ đồ phân rã chương trình: 6. Các thuật toán chính của chương trình KHhkhkhkhkhkhk kkk 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, lưu 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 à Phân bổ chi phí à Tính giá thành. Các thao tác này được lặp lại đối với từng 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)) 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,; [(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]) 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 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 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 EXCLUSIVE INDEX 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 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 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 CREATE TABLE (M_Temp + [Tk627]) (Tk C(8), Ps_No N(15, 2),; Ps_No_Nt N(15, 2),Ps_Co N(15, 2), Ps_Co_Nt N(15, 2)) 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]) 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_Giai0 = 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 STORE [Ps_No7_00] TO _Str_Dau_Ky7, _Str_Cuoi_Ky7 STORE [Ps_No8_00] TO _Str_Dau_Ky8, _Str_Cuoi_Ky8 FOR _i = M_Th_Bd_Ht TO _Thang1 – 1 _Str_Dau_Ky1 = _Str_Dau_Ky1 +[+(Ps_No1_]+TRAN(_i,[@L 99]) +[-; Ps_Co1_]+TRAN(_i,[@L 99])+[)] _Str_Dau_Ky2 = _Str_Dau_Ky2 +[+(Ps_No2_]+TRAN(_i,[@L 99]) +[-; Ps_Co2_]+TRAN(_i,[@L 99])+[)] _Str_Dau_Ky7 = _Str_Dau_Ky7 +[+(Ps_No7_]+TRAN(_i,[@L 99]) +[-; Ps_Co7_]+TRAN(_i,[@L 99])+[)] _Str_Dau_Ky8 = _Str_Dau_Ky8 +[+(Ps_No8_]+TRAN(_i,[@L 99]) +[-; Ps_Co8_]+TRAN(_i,[@L 99])+[)] ENDFOR FOR _i = M_Th_Bd_Ht TO _Thang2 _Str_Cuoi_Ky1 = _Str_Cuoi_Ky1 +[+(Ps_No1_]+TRAN(_i,[@L 99]) +[-; Ps_Co1_]+TRAN(_i,[@L 99])+[)] _Str_Cuoi_Ky2 = _Str_Cuoi_Ky2 +[+(Ps_No2_]+TRAN(_i,[@L 99]) +[-; Ps_Co2_]+TRAN(_i,[@L 99])+[)] _Str_Cuoi_Ky7 = _Str_Cuoi_Ky7 +[+(Ps_No7_]+TRAN(_i,[@L 99]) +[-; Ps_Co7_]+TRAN(_i,[@L 99])+[)] _Str_Cuoi_Ky8 = _Str_Cuoi_Ky8 +[+(Ps_No8_]+TRAN(_i,[@L 99]) +[-; Ps_Co8_]+TRAN(_i,[@L 99])+[)] ENDFOR SELECT 0 USE (M_Code + [CtTmp]) ALIAS CtTmp COPY STRUCTURE TO (M_Temp + [K_CtTmp0]) COPY STRUCTURE TO (M_Temp + [K_CtTmp1]) USE IN CtTmp USE (M_Temp + [K_CtTmp0]) EXCLUSIVE IN 0 USE (M_Temp + [K_CtTmp1]) EXCLUSIVE IN 0 DO ScanFile WITH M.Ngay_Ct1, M.Ngay_Ct2, [(Tk_No = "] + _Tk + [").OR.; (Tk_Co = "] + _Tk + [")], [(Tk = '] + _Tk + [')], [K_CtTmp0] _Key2 = [!EMPTY(Ma_Vt).AND.(Tk_Co = "] + _Tk + [")] DO ScanFileV WITH M.Ngay_Ct1, M.Ngay_Ct2, [(.T.)], _Key2, [K_CtTmp1] USE (M_Dm_Nam + [DmVt]) ORDER Ma_Vt ALIAS M_DmVt IN 0 SELECT K_CtTmp1 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 K_CtTmp1 INDEX ON Tk_Co + Ma_Sp TAG Stt SELECT K_CtTmp0 INDEX ON Tk + Ma_Sp + DTOS(Ngay_Ct) TAG Stt SELECT 0 USE (M_Data_Nam + [CDK]) ORDER Tk_Ma_Sp ALIAS K_Cd USE (M_Dm_Nam + [DmSp]) ORDER Ma_Sp ALIAS M_DmSp IN 0 SELECT Tk, Ma_Sp, SPACE(50) AS Ten_Sp, SPACE(50) AS Ten_Tk, ; 000000000000000 AS Dau_Ky,SUM(&_Str_Dau_Ky1) AS Dau_Ky1,; SUM(&_Str_Dau_Ky2) AS Dau_Ky2,SUM(&_Str_Dau_Ky7) AS; Dau_Ky7, SUM(&_Str_Dau_Ky8) AS Dau_Ky8, ; 000000000000000 AS SL_Nhap,000000000000000 AS Ps_No, ; 000000000000000 AS Ps_No1, 000000000000000 AS Ps_No2, ; 000000000000000 AS Ps_No7, 000000000000000 AS Ps_No8, ; 000000000000000 AS Ps_Co, 00000000000000 AS Ps_Co1,; 000000000000000 AS Ps_Co2,000000000000000 AS Ps_Co7, ; 000000000000000 AS Ps_Co8,000000000000000 AS SL_SPDD_QD, ; 000000000000000 AS SL_SPDD,000 AS MD_HT, ; 000000000000000 AS Gia,000000000000000 AS Gia_Thanh, ; 000000000000000 AS Cuoi_Ky,SUM(&_Str_Cuoi_Ky1) AS ; Cuoi_Ky1, SUM(&_Str_Cuoi_Ky2) AS Cuoi_Ky2,; SUM(&_Str_Cuoi_Ky7) AS Cuoi_Ky7, SUM(&_Str_Cuoi_Ky8); AS Cuoi_Ky8,000000000000000.00 AS DM_Vat_Tu,; 000000000000000.00 AS DM_Luong, ; 000000000000000.00 AS DM_CPchung ; FROM K_Cd ; WHERE (Tk = _Tk) AND !EMPTY(Ma_Sp); INTO TABLE (M_Temp + [K_SoTmp0]) ; GROUP BY Tk, Ma_Sp IF ThisForm.chkDoDangTheoSP.Value = 1 REPLACE ALL Dau_Ky WITH Dau_Ky1 + Dau_Ky2 + Dau_Ky7 +; Dau_Ky8 ELSE REPLACE ALL Dau_Ky1 WITH 0, Dau_Ky2 WITH 0, Dau_Ky7; WITH 0, Dau_Ky8 WITH 0, Cuoi_Ky1 WITH 0, ; Cuoi_Ky2 WITH 0, Cuoi_Ky7 WITH 0, ; Cuoi_Ky8 WITH 0 ENDIF SELECT Tk, Ma_Sp ; FROM K_CtTmp0 ; WHERE (Tk + Ma_Sp NOT IN(SELECT Tk + Ma_Sp FROM; K_SoTmp0)) ; INTO TABLE (M_Temp + [K_SoTmp1]) ; GROUP BY Tk, Ma_Sp USE IN K_SoTmp1 _Dummy1 = [M_DmSp.DM_621_] + TRANS(_Thang2, [@L 99]) _Dummy2 = [M_DmSp.DM_622_] + TRANS(_Thang2, [@L 99]) _Dummy7 = [M_DmSp.DM_627_] + TRANS(_Thang2, [@L 99]) SELECT K_SoTmp0 APPEND FROM (M_Temp + [K_SoTmp1]) SET RELATION TO Ma_Sp INTO M_DmSp REPLACE ALL Ten_Sp WITH M_DmSp.Ten_Sp, DM_Vat_Tu WITH &_Dummy1,DM_Luong WITH &_Dummy2, ; DM_CPchung WITH &_Dummy7 SET RELATION TO SELECT K_SoTmp0 GO TOP SCAN _Tk = Tk _Ma_Sp = Ma_Sp M.Du_No1 = Dau_Ky WAIT WINDOW M_Process + [ ] + _Tk NOWAIT SELECT K_CtTmp0 SEEK _Tk +_Ma_Sp SUM Ps_No TO M.Ps_No1 REST WHILE (Tk = _Tk).AND.(Ma_Sp =; _Ma_Sp) FOR (TK_DU = [621]) SEEK _Tk +_Ma_Sp SUM Ps_No TO M.Ps_No2 REST WHILE (Tk = _Tk).AND.(Ma_Sp = ; _Ma_Sp) FOR (TK_DU = [622]) SEEK _Tk +_Ma_Sp SUM Ps_No TO M.Ps_No7 REST WHILE (Tk = _Tk).AND.(Ma_Sp = ; _Ma_Sp) FOR (TK_DU = [627]) SEEK _Tk +_Ma_Sp SUM Ps_No TO M.Ps_No8 REST WHILE (Tk = _Tk).AND.(Ma_Sp = ; _Ma_Sp) FOR (!INLIST(TK_DU, [621],[622],[627])) SELECT K_Cd SEEK _Tk +_Ma_Sp IF FOUND() M.MD_HT = &_MD_HT M.SL_SPDD = &_SL_SPDD ELSE STORE 0 TO M.MD_HT, M.SL_SPDD ENDIF SELECT K_CtTmp1 SEEK _Tk +_Ma_Sp SUM So_Luong TO M.SL_Nhap ; REST WHILE (Tk_Co = _Tk).AND.(Ma_Sp = _Ma_Sp) SELECT K_SoTmp0 M.Ps_No = M.Ps_No1 + M.Ps_No2 + M.Ps_No7 + M.Ps_No8 REPLACE SL_Nhap WITH M.SL_Nhap, SL_SPDD WITH M.SL_SPDD,; MD_HT WITH M.MD_HT,Ps_No WITH M.Ps_No, Ps_No1; WITH M.Ps_No1, Ps_No2 WITH M.Ps_No2, ; Ps_No7 WITH M.Ps_No7, Ps_No8 WITH M.Ps_No8 ENDSCAN DELETE FOR Dau_Ky = 0 AND Dau_Ky1 = 0 AND Dau_Ky2 = 0 AND; Dau_Ky7 = 0 AND Dau_Ky8 = 0 AND SL_Nhap = 0 AND; Ps_No1 = 0 AND Ps_No2 = 0 AND Ps_No7 = 0 AND Ps_No8; = 0 AND Ps_Co = 0 AND Ps_Co1 = 0 AND Ps_Co2 = 0 AND ; Ps_Co7 = 0 AND Ps_Co8 = 0 AND Cuoi_Ky1 = 0 AND ; Cuoi_Ky2 = 0 AND Cuoi_Ky7 = 0 AND Cuoi_Ky8 = 0 PACK REPLACE ALL SL_SPDD_QD WITH SL_SPDD * MD_HT / 100, Cuoi_Ky ; WITH Cuoi_Ky1 + Cuoi_Ky2 + Cuoi_Ky7 + Cuoi_Ky8 _For = '((Cuoi_Ky = 0) OR (SL_SPDD_QD + MD_HT # 0))' *!* Tinh gia tri do dang cuoi ky DO CASE CASE (ThisForm.OptGrpPP_Danh_Gia.Value = 1) && Theo vt truc tiep REPLACE Cuoi_Ky1 WITH ROUND((Dau_Ky1 + Ps_No1) / (SL_Nhap; + SL_SPDD) * SL_SPDD, 0); FOR SL_Nhap + SL_SPDD # 0 AND &_For REPLACE ALL Cuoi_Ky2 WITH 0, Cuoi_Ky7 WITH 0, Cuoi_Ky8 ; WITH 0 FOR &_For CASE (ThisForm.OptGrpPP_Danh_Gia.Value = 2) &&San luong HTTĐ REPLACE Cuoi_Ky1 WITH ROUND((Dau_Ky1 + Ps_No1) / (SL_Nhap; + SL_SPDD) * SL_SPDD, 0) ; FOR SL_Nhap + SL_SPDD # 0 AND &_For REPLACE Cuoi_Ky2 WITH ROUND((Dau_Ky2 + Ps_No2) / (SL_Nhap; + SL_SPDD_QD) * SL_SPDD_QD, 0); FOR SL_Nhap + SL_SPDD_QD # 0 AND &_For REPLACE Cuoi_Ky7 WITH ROUND((Dau_Ky7 + Ps_No7) / (SL_Nhap ; + SL_SPDD_QD) * SL_SPDD_QD, 0) ; FOR SL_Nhap + SL_SPDD_QD # 0 AND &_For REPLACE Cuoi_Ky8 WITH ROUND((Dau_Ky8 + Ps_No8) / (SL_Nhap ; + SL_SPDD_QD) * SL_SPDD_QD, 0) ; FOR SL_Nhap + SL_SPDD_QD # 0 AND &_For CASE (ThisForm.OptGrpPP_Danh_Gia.Value = 3) && Dinh muc REPLACE ALL Cuoi_Ky1 WITH ROUND(SL_SPDD*DM_Vat_Tu, 0),; Cuoi_Ky2 WITH ROUND(DM_Luong*SL_SPDD_QD,; 0),Cuoi_Ky7 WITH ROUND(DM_Cpchung; *SL_SPDD_QD,0), Cuoi_Ky8 WITH 0 FOR &_For ENDCASE REPLACE ALL Cuoi_Ky WITH Cuoi_Ky1 + Cuoi_Ky2 + Cuoi_Ky7 + ; Cuoi_Ky8 REPLACE ALL Ps_Co WITH Dau_Ky + Ps_No - Cuoi_Ky,Ps_Co1 WITH ; Dau_Ky1 + Ps_No1 - Cuoi_Ky1, Ps_Co2 WITH Dau_Ky2 +; Ps_No2 - Cuoi_Ky2, Ps_Co7 WITH Dau_Ky7 + Ps_No7 - ; Cuoi_Ky7,Ps_Co8 WITH Dau_Ky8 + Ps_No8 - Cuoi_Ky8 SELECT K_SoTmp0 INDEX ON Tk + Ma_Sp TAG Stt REPLACE ALL Gia WITH IIF(SL_Nhap # 0, ROUND(Ps_Co / SL_Nhap, 0), 0) USE IN M_DmSp USE IN K_CtTmp0 USE IN K_CtTmp1 USE IN K_SoTmp0 USE IN K_Cd SELECT K_SoTmp IF RECCOUNT() # 0 THISFORM.Grid2.RecordSource = [] THISFORM.Grid2.RecordSourceType = 0 ZAP THISFORM.Grid2.RecordSourceType = 1 THISFORM.Grid2.RecordSource = [K_SoTmp] ENDIF APPEND FROM (M_Temp + [K_SoTmp0]) DELETE ALL FOR EMPTY(Ma_Sp) THISFORM.Grid2.SETALL("DynamicForeColor", "IIF( NOT" + _For + ", ; RGB(0, 0, 128), RGB(0, 0, 0))", "Column") WAIT CLEAR GO TOP THISFORM.Refresh ThisForm.LockScreen = .F. 4.Thủ tục cập nhật giá PROCEDURE CmdCapNhatGia.Click() IF RECCOUNT('K_SoTmp') = 0 RETURN ENDIF _Screen.MousePointer = 11 THISFORM.LockScreen = .T. WAIT WINDOW M_Process NOWAIT LOCAL _i, _Dummy USE (M_Data_Nam + [CDK]) ORDER Tk_Ma_Sp ALIAS K_Cd IN 0 USE (M_Data_Nam + [Ct]) ORDER Stt ALIAS K_Ct IN 0 USE (M_Data_Nam + [Ct0]) ORDER Stt0 ALIAS K_Ct0 IN 0 USE (M_Data_Nam + [SoCai]) ORDER Stt ALIAS K_SoCai IN 0 USE (M_Temp+[K_CtTmp1]) ORDER Stt ALIAS K_CtTmp1 Exclusive IN 0 SELECT K_SoTmp SCAN _Tk = Tk _Ma_Sp = Ma_Sp IF SL_nhap # 0 SELECT K_CtTmp1 SEEK _Tk + _Ma_Sp SCAN REST WHILE (Tk_Co = _Tk).AND.(Ma_Sp = _Ma_Sp) REPLACE Gia WITH K_SoTmp.Gia, Tien WITH; ROUND(So_Luong * K_SoTmp.Gia, 0), ; Gia_Nt WITH K_SoTmp.Gia, Tien_Nt WITH ; ROUND(So_Luong * K_SoTmp.Gia, 0) SELECT K_Ct0 SEEK K_CtTmp1.Stt + K_CtTmp1.Stt0 IF FOUND() REPLACE Tien WITH K_CtTmp1.Tien, Tien_Nt ; WITH K_CtTmp1.Tien_Nt, Ma_Sp; WITH K_SoTmp.Ma_Sp IF K_Ct0.Nh_Ct = [1] REPLACE Tien_Nhap WITH Tien + Tien5,; Tien_N_Nt WITH Tien_Nt + ; Tien_Nt5, Tien_Xuat WITH 0,; Tien_X_Nt WITH 0 ELSE REPLACE Tien_Nhap WITH 0, Tien_N_Nt; WITH 0, Tien_Xuat WITH Tien,; Tien_X_Nt WITH Tien_Nt ENDIF ENDIF DO UpdateSocai WITH K_CtTmp1.Stt IN (M_Prog+[PubLic]) SELECT K_CtTmp1 ENDSCAN SEEK _Tk + _Ma_Sp SUM Tien TO _Tien REST WHILE (Tk_Co = _Tk).AND.(Ma_Sp ; = _Ma_Sp) _Chenh_Lech = K_SoTmp.Ps_Co - _Tien IF _Chenh_Lech # 0 SEEK _Tk + _Ma_Sp IF FOUND() REPLACE Tien WITH Tien + _Chenh_Lech, Tien_Nt; WITH Tien_Nt + _Chenh_Lech SELECT K_Ct0 SEEK K_CtTmp1.Stt + K_CtTmp1.Stt0 IF FOUND() REPLACE Tien WITH K_CtTmp1.Tien, Tien_Nt ; WITH K_CtTmp1.Tien_Nt IF K_Ct0.Nh_Ct = [1] REPLACE Tien_Nhap WITH Tien + Tien5, ; Tien_N_Nt WITH Tien_Nt + ; Tien_Nt5, Tien_Xuat WITH 0, ; Tien_X_Nt WITH 0 ELSE REPLACE Tien_Nhap WITH 0, Tien_N_Nt WITH 0,; Tien_Xuat WITH Tien, Tien_X_Nt WITH Tien_Nt ENDIF ENDIF DO UpdateSocai WITH K_CtTmp1.Stt IN (M_Prog + [PubLic]) ENDIF ENDIF SELECT K_CtTmp1 ENDIF SELECT K_Cd SEEK _Tk + _Ma_Sp IF !FOUND() APPEND BLANK REPLACE Tk WITH _Tk, Ma_Sp WITH _Ma_Sp ELSE _DummyN1 = [Ps_No1_] + TRANS(ThisForm.txtThang1.Value,; [@L 99]) _DummyN2 = [Ps_No2_] + TRANS(ThisForm.txtThang1.Value, ; [@L 99]) _DummyN7 = [Ps_No7_] + TRANS(ThisForm.txtThang1.Value,; [@L 99]) _DummyN8 = [Ps_No8_] + TRANS(ThisForm.txtThang1.Value,; [@L 99]) _DummyC1 = [Ps_Co1_] + TRANS(ThisForm.txtThang1.Value,; [@L 99]) _DummyC2 = [Ps_Co2_] + TRANS(ThisForm.txtThang1.Value,; [@L 99]) _DummyC7 = [Ps_Co7_] + TRANS(ThisForm.txtThang1.Value,; [@L 99]) _DummyC8 = [Ps_Co8_] + TRANS(ThisForm.txtThang1.Value,; [@L 99]) REPLACE &_DummyN1 WITH 0, &_DummyN2 WITH 0,; &_DummyN7 WITH 0, &_DummyN8 WITH 0 REPLACE &_DummyC1 WITH 0, &_DummyC2 WITH 0,; &_DummyC7 WITH 0, &_DummyC8 WITH 0 FOR _i = ThisForm.txtThang1.Value TO ThisForm.txtThang2.Value _DummyN1 = [Ps_No1_] + TRANS(_i, [@L 99]) _DummyN2 = [Ps_No2_] + TRANS(_i, [@L 99]) _DummyN7 = [Ps_No7_] + TRANS(_i, [@L 99]) _DummyN8 = [Ps_No8_] + TRANS(_i, [@L 99]) _DummyC1 = [Ps_Co1_] + TRANS(_i, [@L 99]) _DummyC2 = [Ps_Co2_] + TRANS(_i, [@L 99]) _DummyC7 = [Ps_Co7_] + TRANS(_i, [@L 99]) _DummyC8 = [Ps_Co8_] + TRANS(_i, [@L 99]) REPLACE &_DummyN1 WITH 0, &_DummyN2 WITH 0,; &_DummyN7 WITH 0, &_DummyN8 WITH 0 REPLACE &_DummyC1 WITH 0, &_DummyC2 WITH 0,; &_DummyC7 WITH 0, &_DummyC8 WITH 0 NEXT ENDIF _DummyN1 = [Ps_No1_] + TRANS(ThisForm.txtThang2.Value, [@L 99]) _DummyN2 = [Ps_No2_] + TRANS(ThisForm.txtThang2.Value, [@L 99]) _DummyN7 = [Ps_No7_] + TRANS(ThisForm.txtThang2.Value, [@L 99]) _DummyN8 = [Ps_No8_] + TRANS(ThisForm.txtThang2.Value, [@L 99]) _DummyC1 = [Ps_Co1_] + TRANS(ThisForm.txtThang2.Value, [@L 99]) _DummyC2 = [Ps_Co2_] + TRANS(ThisForm.txtThang2.Value, [@L 99]) _DummyC7 = [Ps_Co7_] + TRANS(ThisForm.txtThang2.Value, [@L 99]) _DummyC8 = [Ps_Co8_] + TRANS(ThisForm.txtThang2.Value, [@L 99]) REPLACE &_DummyN1 WITH K_SoTmp.Ps_No1, &_DummyN2 WITH K_SoTmp.Ps_No2,&_DummyN7 WITH ; K_SoTmp.Ps_No7, &_DummyN8 WITH K_SoTmp.Ps_No8 REPLACE &_DummyC1 WITH K_SoTmp.Ps_Co1, &_DummyC2; WITH K_SoTmp.Ps_Co2, &_DummyC7 WITH; K_SoTmp.Ps_Co7, &_DummyC8 WITH K_SoTmp.Ps_Co8 _DummyN1 = [SL_SPDD] + TRANS(ThisForm.txtThang2.Value, [@L 99]) _DummyN2 = [MD_HT] + TRANS(ThisForm.txtThang2.Value, [@L 99]) REPLACE &_DummyN1 WITH K_SoTmp.SL_SPDD, &_DummyN2 ; WITH K_SoTmp.MD_HT SELECT K_SoTmp ENDSCAN USE IN K_Ct0 USE IN K_Ct USE IN K_Cd USE IN K_SoCai USE IN K_CtTmp1 SELECT K_SoTmp GO TOP THISFORM.LockScreen = .F. _Screen.MousePointer = 0 =MESSAGEBOX(M_End_Proc, 64, M_App_Name) 5.Thủ tục cập nhật sổ cái PROCEDURE UpDateSoCai PROCEDURE UpDateSoCai PARAMETER _Stt LOCAL _Select, _Used_Ct, _Used_Ct0, _Used_SoCai, _inTransaction _Select = SELECT() _Used_Ct = USED([K_Ct]) _Used_Ct0 = USED([K_Ct0]) _Used_SoCai = USED([K_SoCai]) IF NOT _Used_Ct USE (M_Data_Nam + [Ct]) ORDER Stt ALIAS K_Ct AGAIN IN 0 ENDIF IF NOT _Used_Ct0 USE (M_Data_Nam + [Ct0]) ORDER Stt0 ALIAS K_Ct0 AGAIN IN 0 ENDIF IF NOT _Used_SoCai USE (M_Data_Nam + [SoCai]) ORDER Stt ALIAS K_SoCai Again IN 0 ENDIF SELECT K_Ct SEEK _Stt SELECT K_Ct0 SEEK _Stt IF !FOUND([K_Ct]) OR !FOUND([K_Ct0]) IF NOT _Used_Ct USE IN K_Ct ENDIF IF NOT _Used_Ct0 USE IN K_Ct0 ENDIF IF NOT _Used_SoCai USE IN K_SoCai ENDIF SELECT (_Select) RETURN ENDIF _inTransaction = TXNLEVEL() IF _inTransaction = 0 BEGIN TRANSACTION ENDIF *!* Xoá định khoản DO UpdateCdK WITH _Stt, -1 SELECT K_SoCai SEEK _Stt SCAN REST WHILE K_SoCai.Stt = _Stt DELETE UNLOCK ENDSCAN *! Các định khoản giá vốn, giá bán SELECT K_Ct0 SEEK _Stt SCAN REST WHILE Stt = _Stt SCATTER MEMVAR M.Ma_Dt0 = M.Ma_Dt IF !EMPTY(M.Tk_No + M.Tk_Co) AND ((K_Ct0.Posted = [C]) OR; (K_Ct0.Ma_Ct $ [HD,TL])) DO UpDateSocai0 WITH [] ENDIF IF !EMPTY(M.Tk_No2 + M.Tk_Co2) AND (K_Ct0.Posted = [C]) DO UpDateSocai0 WITH [2] ENDIF IF !EMPTY(M.Tk_No3 + M.Tk_Co3) AND (K_Ct0.Posted = [C]) DO UpDateSocai0 WITH [3] ENDIF IF !EMPTY(M.Tk_No4 + M.Tk_Co4) AND (K_Ct0.Posted = [C]) DO UpDateSocai0 WITH [4] ENDIF IF !EMPTY(M.Tk_No5 + M.Tk_Co5) AND (K_Ct0.Posted = [C]) DO UpDateSocai0 WITH [5] ENDIF IF !EMPTY(M.Tk_No6 + M.Tk_Co6) AND (K_Ct0.Posted = [C]) DO UpDateSocai0 WITH [6] ENDIF IF !EMPTY(M.Tk_No7 + M.Tk_Co7) AND (K_Ct0.Posted = [C]) DO UpDateSocai0 WITH [7] ENDIF SELECT K_Ct0 ENDSCAN DO UpdateCdK WITH _Stt, 1 DO UpDateTTien WITH _Stt IF _inTransaction = 0 END TRANSACTION ENDIF IF NOT _Used_Ct USE IN K_Ct ENDIF IF NOT _Used_Ct0 USE IN K_Ct0 ENDIF IF NOT _Used_SoCai USE IN K_SoCai ENDIF SELECT (_Select) RETURN tài liệu tham khảo 1. Giáo trình Hệ Thống Thông Tin Quản Lý TS Trương Văn Tú – TS Trần Thị Song Minh NXB Thống Kê, Hà Nội, 2000 2. Giáo trình Kế Toán Máy TS Trần Thị Song Minh NXB Thống Kê, Hà Nội, 2000 3. Project Guide Apptech Limited - First Edition, 1999, India 4. Microsoft Visual Foxpro – Online Document. 5. Hướng dẫn thực hành về kế toán chi phí sản xuất và tính giá thành sản phẩm trong doanh nghiệp. PTS.Võ Văn Nhị – ThS.Phạm Thanh Liêm – ThS.Lý Kim Huê NXB Thống Kê, Hà Nội, 1999 6. Kế toán tập hợp chi phí sản xuất và tính giá thành sản phẩm Nhà giáo ưu tú Vũ Huy Cẩm NXB Thống Kê, Hà Nội, 1996 7. Hướng dẫn thực hành chế độ kế toán mới. TS. Phạm Văn Dược - Đặng Kim Cương NXB Thống Kê, Hà Nội, 1999

Các file đính kèm theo tài liệu này:

  • docK0342.doc
Tài liệu liên quan