Đánh giá chủ đề:
  • 1 Votes - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Help] Giúp mình cập nhật đơn giá bình quân gia quyền
#1
Mình có cái database access như cái link dưới, bi giờ mình muốn tạo một cái form tabular chẳng hạn, để khi sửa đổi thông tin một dòng nào đó thì lập tức nguyên một tabular form sẽ được cập nhật lại đơn giá bình quân gia quyền và cập nhật lại cột thành tiền thì làm thế nào hả các bạn?
thk you...

qlkho




Có bạn nào chuyên gia kế toán cho mình hỏi với

Theo mình biết thì Đơn giá bình quân gia quyền được tính như sau:

Don gia BQGQ=(Giá trị hàng tồn / Số lượng hàng tồn)

=> Đơn giá BQGQ thay đổi sau khi nhập mặt hàng có đơn giá khác với giá cũ

Vậy sau khi xuất một mặt hàng có đơn giá BQGQ thì Đơn giá mặt hàng đó có thay đổi hay không?

Mình nghĩ câu trả lời là không, Các bạn thấy đúng không?



[url=https://drive.google.com/file/d/0B7kM2os_eKc5N0UwelFLSjZHWGM/view?usp=sharing][/url]
Chữ ký của thucgia Hix, Access quả nhiên lợi hại !!!! http://vibigaba.esy.es/
ღღღღღTài sản của thucgia (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#2
007  Tôi không phải chuyên gia kế toán nhưng cũng có biết chút ít nên chia sẽ ý kiến như sau:
- Công thức tính GBQGQ của bạn gần đúng.
- Khi xuất hàng với giá BQGQ thì không làm thay đổi đơn giá BQ.


Tối biết có mấy các tính BQGQ như sau:
1. BQGQ cuối kỳ: đến cuối kỳ mới tính giá vốn hàng xuất. Cách này dễ tính nhưng dồn đến cuối tháng mới tính nên sẽ không phản ánh giá ngay lúc phát sinh nghiệp vụ
      GBQGQ= (Giá trị hàng tồn đầu kỳ + Giá trị hàng nhập trong kỳ) / (Số lượng hàng tồn ĐK+ Số lượng hàng nhập TK)

2. Tính GBQGQ sau mỗi lần nhập: khi có phát sinh nhập hàng là tính trước khi xuất hàng. Phải dùng phần mềm để tính vì phải tính toán liên tục khi nghiệp vụ nhập xuất phát sinh.
      GBQGQ = (Giá trị hàng tồn đầu kỳ + Giá trị hàng nhập trước khi xuất) / (Số lượng hàng tồn ĐK+ Số lượng hàng nhập trước khi xuất)

3. Tính GBQGQ cuối kỳ trước: cách này dễ tính. Dựa vào số lượng tồn kho cuối kỳ trước để tính ra giá xuất. Phương pháp này sẽ không phản ánh đúng giá thực của vật tư nhập trong kỳ này.
      GBQGQ= (Giá trị hàng tồn cuối kỳ trước) / (Số lượng hàng tồn cuối kỳ trước)
(công thức bạn gần đúng ở chỗ này)

Mỗi phương pháp có ưu nhược điểm, bạn nghiên cứu thêm nhé. Tôi thì thích dùng phương pháp 2.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn thucgia , Noname
#3
Mình thấy bài bạn post lên mấy ngày nay. Nhưng suy nghĩ mãi mà không biết phải hỗ trợ bạn như thế nào. Khác với excel, BQGQ trên access không hề đơn giản. khi chạy BQGQ không thể xử lý bằng cách thay đổi 1 record là nó chạy ngay ra kết quả được. Vì không khéo nó rất dễ bị lỗi “Out Of Memory”.
Thông thường báo cáo tài chính có 2 báo cáo sử dụng đơn giá BQGQ là báo cáo kho (tháng, năm) và sổ hàng hóa.
Công thức của nó cho từng loại hàng hóa là:
Đơn giá BQGQ = (Giá trị tồn đầu + Giá trị nhập) / (Số lượng tồn đầu + Số lượng nhập)
Vì vậy chỉ khi hàng nhập là có đơn giá khác với đơn giá BQGQ cũ thì đơn giá BQGQ mới sẽ thay đổi ngay. Hàng hóa xuất trong khoảng giữa hai lần nhập sẽ lấy đơn giá vốn chính là đơn giá BQGQ giữa 2 lần nhập. Lý do số lượng nhập xuất trong năm rất nhiều dễ bị thiếu bộ nhớ khi chạy code.
Một điều nữa nếu trong tháng có một loại hàng hóa nào không được nhập xuất thì trên bảng báo cáo kho sẽ không có tên hàng đó. Vì vậy, trên table để tính BQGQ bạn phải bổ sung thêm một record có các giá trị = 0 cho các hàng hóa không có nhập xuất nếu là BC tháng.
Bạn không thể xử lý một Báo cáo chung cho cả ứng dụng mà phải xử lý ngắt ra từng năm. Lấy các số liệu tồn cuối của năm trước làm tồn đầu năm sau để tránh lỗi thiếu bộ nhớ.
Thêm nữa nếu chỉ xử lý đơn giản thì sẽ xảy ra rất nhiều chuyện. Lỗi khi hết hàng, âm hàng. Số lượng hàng hóa đã hết mà giá trị hàng hóa vẫn còn (do đơn giá BQGQ là số lẽ khi nhân với số lượng bán sẽ nhỏ hơn giá trị tồn).
Vì vậy cách xử lý của tôi rất phức tạp, tôi đưa nhiều đoạn mã vào nhiều event xử lý từng phần để bảo đảm tốc độ của phần mềm. Tôi chỉ có thể gởi cho bạn một đoạn code chung để hỗ trợ cho bạn. Đoạn code này chỉ có giá trị tham khảo. Còn cách xử lý là do bạn quyết định. Đoạn code này sẽ căn cứ vào một table đã được sắp xếp lại theo thứ tự nhập xuất theo ngày để xử lý tạo sổ hàng hóa. Tất cả các record phát sinh của một loại hàng hóa / ngày trong được cộng lại trên một record (Nếu báo cáo tháng của sổ hàng hóa sẽ bổ sung record có giá trị 0 cho loại hàng nào không có phát sinh, nếu báo cáo năm thì không cần) – Đối với báo cáo hàng tồn kho thì gom các phát sinh hàng hóa trong tháng thành 1 record cho từng loai hàng bổ sung hàng không phát sinh trong tháng.
Chú giải trong code SOHANGHOACHITIET là table. Table SOHANGHOACHITIET được sắp xếp như sau:
Các record trong cùng 1 loại hàng sắp liên tục theo ngày, hết loại hàng này mới đến loại hàng khác.
Các field của SOHANGHOACHITIET.
[TT] = Thứ tự
[TENHANG] = Tên hàng
[BQTK] = Đơn giá bình quân trong kỳ
[SLTDK] = Số lượng tồn đầu kỳ
[GTTDK] = Giá trị tồn đầu kỳ
[SLNTK] = Số lượng nhập trong kỳ
[GTNTK] = Giá trị nhập trong kỳ
[SLXTK] = Số lượng xuất 
[GTXTK] = Giá trị xuất trong kỳ
[SLHTK] = Số lượng hao hụt trong kỳ (Nếu không có hao hụt thì bỏ phần này)
[GTHTK] = Giá trị hao hụt trong kỳ
[SLTCK] = Số lượng tồn cuối kỳ
[GTTCK] = Giá trị tồn cuối kỳ
Các tham số trong code
MAHANG = Tham số cho tên hàng
SLT = Tham số số lượng tồn cuối
GTT = Tham số giá trị tồn cuối
BQT = Tham số đơn giá bình quân
STT = Tham số cho Số thứ tự

Code này xử lý trên form Form_NXTHANGHOA. Trong table SOHANGHOACHITIET có các giá trị tồn đầu của record đầu tiên / từng loại hàng hóa được lấy từ giá trị tồn cuối kỳ trước, và trên record đầu tiên của từng loại hàng không tính các giá trị tồn đầu. 


Mã:
Private Sub XEM_Click()
On Error GoTo Biloi
Dim stDocName As String
Dim CSDL As Database
Dim BangHH As Recordset 
Dim MAHANG As String  
Dim SLT, GTT, BQT As Double  
Dim STT As Integer

Set CSDL = CurrentDb
Set BangHH = CSDL.OpenRecordset("SOHANGHOACHITIET", DB_OPEN_DYNASET)
SLT = 0
GTT = 0
STT = 0
MAHANG = ""
BangHH.MoveFirst
Do While Not BangHH.EOF
    BangHH.Edit
    BangHH![TT] = STT + 1
    If BangHH![TENHANG] = MAHANG Then
    BangHH![SLTDK] = SLT
    BangHH![GTTDK] = GTT
    BangHH![GTXTK] = BangHH![SLXTK] * BangHH![BQTK]
    BangHH![SLTCK] = BangHH![SLTDK] + BangHH![SLNTK] - BangHH![SLXTK] - BangHH![SLHTK]
    BangHH![GTHTK] = BangHH![SLHTK] * BangHH![BQTK]
    BangHH![GTTCK] = BangHH![GTTDK] + BangHH![GTNTK] - BangHH![GTXTK] - BangHH![GTHTK]
    SLT = BangHH![SLTCK]
    GTT = BangHH![GTTCK]
    Else
    If BangHH![NGAY] < Form_NXTHANGHOA.NGAYDAU.Value Then
    BangHH![GTTDK] = BangHH![SLTDK] * BangHH![BQDK]
    BangHH![GTXTK] = BangHH![SLXTK] * BangHH![BQTK]
    BangHH![GTHTK] = BangHH![SLHTK] * BangHH![BQTK]
    BangHH![GTTCK] = BangHH![SLTCK] * BangHH![BQCK]
    SLT = BangHH![SLTCK]
    GTT = BangHH![GTTCK]
    Else
    BangHH![GTTDK] = BangHH![SLTDK] * BangHH![BQDK]
    BangHH![GTXTK] = BangHH![SLXTK] * BangHH![BQTK]
    BangHH![SLTCK] = BangHH![SLTDK] + BangHH![SLNTK] - BangHH![SLXTK] - BangHH![SLHTK]
    BangHH![GTHTK] = BangHH![SLHTK] * BangHH![BQTK]
    BangHH![GTTCK] = BangHH![GTTDK] + BangHH![GTNTK] - BangHH![GTXTK] - BangHH![GTHTK]
    SLT = BangHH![SLTCK]
    GTT = BangHH![GTTCK]
    End If
    End If
    STT = BangHH![TT]
    MAHANG = BangHH![TENHANG]
    BangHH.Update
BangHH.MoveNext
Loop
BangHH.Close

    stDocName = "RNXTONHANGCHITIET"
    DoCmd.OpenReport stDocName, acPreview


Biloi:
    
End Sub
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn thucgia , phuongtrannhat1409
#4
(13-09-15, 10:07 PM)tranthanhan1962 Đã viết: Mình thấy bài bạn post lên mấy ngày nay. Nhưng suy nghĩ mãi mà không biết phải hỗ trợ bạn như thế nào. Khác với excel, BQGQ trên access không hề đơn giản. khi chạy BQGQ không thể xử lý bằng cách thay đổi 1 record là nó chạy ngay ra kết quả được. Vì không khéo nó rất dễ bị lỗi “Out Of Memory”.
Thông thường báo cáo tài chính có 2 báo cáo sử dụng đơn giá BQGQ là báo cáo kho (tháng, năm) và sổ hàng hóa.
Công thức của nó cho từng loại hàng hóa là:
Đơn giá BQGQ = (Giá trị tồn đầu + Giá trị nhập) / (Số lượng tồn đầu + Số lượng nhập)
Vì vậy chỉ khi hàng nhập là có đơn giá khác với đơn giá BQGQ cũ thì đơn giá BQGQ mới sẽ thay đổi ngay. Hàng hóa xuất trong khoảng giữa hai lần nhập sẽ lấy đơn giá vốn chính là đơn giá BQGQ giữa 2 lần nhập. Lý do số lượng nhập xuất trong năm rất nhiều dễ bị thiếu bộ nhớ khi chạy code.
Một điều nữa nếu trong tháng có một loại hàng hóa nào không được nhập xuất thì trên bảng báo cáo kho sẽ không có tên hàng đó. Vì vậy, trên table để tính BQGQ bạn phải bổ sung thêm một record có các giá trị = 0 cho các hàng hóa không có nhập xuất nếu là BC tháng.
Bạn không thể xử lý một Báo cáo chung cho cả ứng dụng mà phải xử lý ngắt ra từng năm. Lấy các số liệu tồn cuối của năm trước làm tồn đầu năm sau để tránh lỗi thiếu bộ nhớ.
Thêm nữa nếu chỉ xử lý đơn giản thì sẽ xảy ra rất nhiều chuyện. Lỗi khi hết hàng, âm hàng. Số lượng hàng hóa đã hết mà giá trị hàng hóa vẫn còn (do đơn giá BQGQ là số lẽ khi nhân với số lượng bán sẽ nhỏ hơn giá trị tồn).
Vì vậy cách xử lý của tôi rất phức tạp, tôi đưa nhiều đoạn mã vào nhiều event xử lý từng phần để bảo đảm tốc độ của phần mềm. Tôi chỉ có thể gởi cho bạn một đoạn code chung để hỗ trợ cho bạn. Đoạn code này chỉ có giá trị tham khảo. Còn cách xử lý là do bạn quyết định. Đoạn code này sẽ căn cứ vào một table đã được sắp xếp lại theo thứ tự nhập xuất theo ngày để xử lý tạo sổ hàng hóa. Tất cả các record phát sinh của một loại hàng hóa / ngày trong được cộng lại trên một record (Nếu báo cáo tháng của sổ hàng hóa sẽ bổ sung record có giá trị 0 cho loại hàng nào không có phát sinh, nếu báo cáo năm thì không cần) – Đối với báo cáo hàng tồn kho thì gom các phát sinh hàng hóa trong tháng thành 1 record cho từng loai hàng bổ sung hàng không phát sinh trong tháng.
Chú giải trong code SOHANGHOACHITIET là table. Table SOHANGHOACHITIET được sắp xếp như sau:
Các record trong cùng 1 loại hàng sắp liên tục theo ngày, hết loại hàng này mới đến loại hàng khác.
Các field của SOHANGHOACHITIET.
[TT] = Thứ tự
[TENHANG] = Tên hàng
[BQTK] = Đơn giá bình quân trong kỳ
[SLTDK] = Số lượng tồn đầu kỳ
[GTTDK] = Giá trị tồn đầu kỳ
[SLNTK] = Số lượng nhập trong kỳ
[GTNTK] = Giá trị nhập trong kỳ
[SLXTK] = Số lượng xuất 
[GTXTK] = Giá trị xuất trong kỳ
[SLHTK] = Số lượng hao hụt trong kỳ (Nếu không có hao hụt thì bỏ phần này)
[GTHTK] = Giá trị hao hụt trong kỳ
[SLTCK] = Số lượng tồn cuối kỳ
[GTTCK] = Giá trị tồn cuối kỳ
Các tham số trong code
MAHANG = Tham số cho tên hàng
SLT = Tham số số lượng tồn cuối
GTT = Tham số giá trị tồn cuối
BQT = Tham số đơn giá bình quân
STT = Tham số cho Số thứ tự

Code này xử lý trên form Form_NXTHANGHOA. Trong table SOHANGHOACHITIET có các giá trị tồn đầu của record đầu tiên / từng loại hàng hóa được lấy từ giá trị tồn cuối kỳ trước, và trên record đầu tiên của từng loại hàng không tính các giá trị tồn đầu. 


Mã:
Private Sub XEM_Click()
On Error GoTo Biloi
Dim stDocName As String
Dim CSDL As Database
Dim BangHH As Recordset 
Dim MAHANG As String  
Dim SLT, GTT, BQT As Double  
Dim STT As Integer

Set CSDL = CurrentDb
Set BangHH = CSDL.OpenRecordset("SOHANGHOACHITIET", DB_OPEN_DYNASET)
SLT = 0
GTT = 0
STT = 0
MAHANG = ""
BangHH.MoveFirst
Do While Not BangHH.EOF
    BangHH.Edit
    BangHH![TT] = STT + 1
    If BangHH![TENHANG] = MAHANG Then
    BangHH![SLTDK] = SLT
    BangHH![GTTDK] = GTT
    BangHH![GTXTK] = BangHH![SLXTK] * BangHH![BQTK]
    BangHH![SLTCK] = BangHH![SLTDK] + BangHH![SLNTK] - BangHH![SLXTK] - BangHH![SLHTK]
    BangHH![GTHTK] = BangHH![SLHTK] * BangHH![BQTK]
    BangHH![GTTCK] = BangHH![GTTDK] + BangHH![GTNTK] - BangHH![GTXTK] - BangHH![GTHTK]
    SLT = BangHH![SLTCK]
    GTT = BangHH![GTTCK]
    Else
    If BangHH![NGAY] < Form_NXTHANGHOA.NGAYDAU.Value Then
    BangHH![GTTDK] = BangHH![SLTDK] * BangHH![BQDK]
    BangHH![GTXTK] = BangHH![SLXTK] * BangHH![BQTK]
    BangHH![GTHTK] = BangHH![SLHTK] * BangHH![BQTK]
    BangHH![GTTCK] = BangHH![SLTCK] * BangHH![BQCK]
    SLT = BangHH![SLTCK]
    GTT = BangHH![GTTCK]
    Else
    BangHH![GTTDK] = BangHH![SLTDK] * BangHH![BQDK]
    BangHH![GTXTK] = BangHH![SLXTK] * BangHH![BQTK]
    BangHH![SLTCK] = BangHH![SLTDK] + BangHH![SLNTK] - BangHH![SLXTK] - BangHH![SLHTK]
    BangHH![GTHTK] = BangHH![SLHTK] * BangHH![BQTK]
    BangHH![GTTCK] = BangHH![GTTDK] + BangHH![GTNTK] - BangHH![GTXTK] - BangHH![GTHTK]
    SLT = BangHH![SLTCK]
    GTT = BangHH![GTTCK]
    End If
    End If
    STT = BangHH![TT]
    MAHANG = BangHH![TENHANG]
    BangHH.Update
BangHH.MoveNext
Loop
BangHH.Close

    stDocName = "RNXTONHANGCHITIET"
    DoCmd.OpenReport stDocName, acPreview


Biloi:
    
End Sub

Giải pháp của bạn là cập nhật table nhập xuất bằng code mình thấy rất hay cám ơn bạn.
Mình nẩy ra một ý là cần phải viết một
   function tính đơn giá bình quân tại thời điểm (hang_id as string, ngay as date)
   Sau đó kết hợp với cái loop update của bạn là ok., rất hay

Mã:
Public Sub CapNhat_nhap_xuat()
   Dim rs As DAO.Recordset
   Dim st As String
   Set rs = CurrentDb.OpenRecordset("nhap_xuat", dbOpenDynaset)
   Do While Not rs.EOF
      rs.Edit
      If (rs!loai = "N") Then
           'do nothing
      Else
           rs!don_gia = thekho.don_gia_bq_ngay(rs!hang_id, rs!ngay)
      End If
      rs!tien = rs!solg * rs!don_gia
      rs.Update
      rs.MoveNext
   Loop
   Set rs = Nothing
End Sub


Tôi không phải là dân kế toán, nhưng lại đang gặp vấn đề này và thấy bài toán có vẻ hay nên định viết một cái đễ xài.
làm bằng cái excel thấy có vẻ vớ vẫn quá.

Theo bạn thì CSDL của tôi đưa ra là có hợp lý không?
Chữ ký của thucgia Hix, Access quả nhiên lợi hại !!!! http://vibigaba.esy.es/
ღღღღღTài sản của thucgia (View All Items) ღღღღღ
Reply
Những người đã cảm ơn tranthanhan1962
#5
Mã:
Public Sub CapNhat_nhap_xuat()
  Dim rs As DAO.Recordset
  Dim st As String
  Set rs = CurrentDb.OpenRecordset("nhap_xuat", dbOpenDynaset)
  Do While Not rs.EOF
     rs.Edit
     If (rs!loai = "N") Then
          'tại dây bạn không thể do nothing mà phải xử lý đơn giá bình quân mới nếu có nhập. Nhưng nếu chỉ có thekho.don_gia_bq_ngay thì bạn sẽ không đủ tham số để tính đơn giá bình quân mới. (thekho.don_gia_bq_ngay mới sẽ thay đổi khi có hàng hóa nhập mới)
     Else
          rs!don_gia = thekho.don_gia_bq_ngay(rs!hang_id, rs!ngay)
     End If
     rs!tien = rs!solg * rs!don_gia
     rs.Update
     rs.MoveNext
  Loop
  Set rs = Nothing
End Sub
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , maidinhdan
#6
(13-09-15, 11:41 PM)tranthanhan1962 Đã viết:
Mã:
Public Sub CapNhat_nhap_xuat()
  Dim rs As DAO.Recordset
  Dim st As String
  Set rs = CurrentDb.OpenRecordset("nhap_xuat", dbOpenDynaset)
  Do While Not rs.EOF
     rs.Edit
     If (rs!loai = "N") Then
          'tại dây bạn không thể do nothing mà phải xử lý đơn giá bình quân mới nếu có nhập. Nhưng nếu chỉ có thekho.don_gia_bq_ngay thì bạn sẽ không đủ tham số để tính đơn giá bình quân mới. (thekho.don_gia_bq_ngay mới sẽ thay đổi khi có hàng hóa nhập mới)
     Else
          rs!don_gia = thekho.don_gia_bq_ngay(rs!hang_id, rs!ngay)
     End If
     rs!tien = rs!solg * rs!don_gia
     rs.Update
     rs.MoveNext
  Loop
  Set rs = Nothing
End Sub

À, tại mình qui định là khi input phiếu nhập thì cho phép gõ đơn giá, còn khi ra phiếu xuất thì máy sẽ tự cấp đơn giá
vì vậy nếu dòng có loại="N" sẽ không bị sửa đơn giá

còn cái hàm   don_gia_bq_ngay(rs!hang_id, rs!ngay)
có nhiệm vụ xác định đơn giá bình quân trước ngày hiện tại đang xét trong vòng loop

hix bài toán này hay!!!!
Chữ ký của thucgia Hix, Access quả nhiên lợi hại !!!! http://vibigaba.esy.es/
ღღღღღTài sản của thucgia (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#7
Cho dù bạn nhập đơn giá nhập và số lượng nhập bằng input box hay lấy từ đâu, thì cũng phải có công thức tính lại đơn giá bình quân mới [Đơn giá BQGQ mới = (Giá trị hàng tồn ? + giá trị hàng mới nhập) / (Số lượng hàng tồn ? + số lượng hàng mới nhập)]. Thiếu GT hàng tồn và SL hàng tồn bạn sẽ không xử lý được đơn giá BQGQ mới.
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan , thucgia
#8
(14-09-15, 12:58 PM)tranthanhan1962 Đã viết: Cho dù bạn nhập đơn giá nhập và số lượng nhập bằng input box hay lấy từ đâu, thì cũng phải có công thức tính lại đơn giá bình quân mới [Đơn giá BQGQ mới = (Giá trị hàng tồn ? + giá trị hàng mới nhập) / (Số lượng hàng tồn ? + số lượng hàng mới nhập)]. Thiếu GT hàng tồn và SL hàng tồn bạn sẽ không xử lý được đơn giá BQGQ mới.

Để tranh luận về vấn đề này tôi tóm tắc lại nhé:
Đề bài:
Viết chương trình quản lý kho có các chức năng sau
1. Cho phép nhập hàng (add phiếu)
    -Để đơn giản cho lý luận, phiếu nhập chỉ yêu cầu nhập 1 mặt hàng
    -Đơn giá được nhập bởi người dùng
    -Ngày phiếu nhập phải lớn hơn ngày max ( tôi định nghĩa bên dưới)
2. Cho phép xuất hàng (add phiếu)
   - Chỉ cần xuất 1 mặt hàng
   - Đơn giá được tính từ chương trình theo bình quân gia quyền
   - Ngày phiếu xuất phải lớn hơn ngày max ( tôi định nghĩa bên dưới)
3. Cho phép sửa chửa bất kỳ phiếu nhập, xuất
  - Để đơn giản Không cần xét vấn đề âm kho (Khi sửa sẽ có thể bị âm kho!!!!)

B.Phân tích:

B.1.Định nghĩa từ ngữ và phương thức
- gọi ngay_max : là ngày lớn nhất trong quá trình nhập xuất
- gọi ngay_min : là ngày nhỏ nhất trong quá trinh nhập xuất

Theo tôi có 2 phương thức quan trọng cần được soát xét
- function don_gia_bq(hang_id)
          Đây là func xác định đơn giá bình quân của một mặt hàng để tính toán trong phiếu xuất
          Thực sự đây là DGBQ trước ngày max của một mặt hàng
- function don_gia_bq_truoc_ngay(hang_id,ngay)
        Để sử dụng khi ta edit một phiếu nhập hoặc xuất
        Là DGBQ của một mặt hàng trước một ngày xác đinh

B.2. Thực hiện chức năng

1. Chức năng 1: Chỉ cần kiểm tra ngày lớn hơn ngay max nếu ok sẽ thêm dòng vào bảng nhập xuất --OK?
2. Chức năng 2: Dùng function don_gia_bq(hang_id) để tính đơn giá + kiểm tra ngày xuất nếu ok -> thêm dòng xuất vào bảng nx
3. Chức năng 3:
     Khi người dùng chỉnh sửa một dòng của bảng nhập xuất ta sẽ bắt sự kiện after update và chạy cái sub đã đề cập trên

Mã:
Public Sub CapNhat_nhap_xuat()
 Dim rs As DAO.Recordset
 Dim st As String
 Set rs = CurrentDb.OpenRecordset("nhap_xuat", dbOpenDynaset)
 Do While Not rs.EOF
    rs.Edit
    If (rs!loai = "N") Then
         'tại dây bạn không thể do nothing mà phải xử lý đơn giá bình quân mới nếu có nhập. Nhưng nếu chỉ có thekho.don_gia_bq_ngay thì bạn sẽ không đủ tham số để tính đơn giá bình quân mới. (thekho.don_gia_bq_ngay mới sẽ thay đổi khi có hàng hóa nhập mới)
         'with me this is must do nothing!!!!
    Else
         rs!don_gia = thekho.don_gia_bq_truoc_ngay(rs!hang_id, rs!ngay)
    End If
    rs!tien = rs!solg * rs!don_gia
    rs.Update
    rs.MoveNext
 Loop
 Set rs = Nothing
End Sub
         
Mình suy nghĩ thế, có gì cứ tiếp tranh luận nhé..
Chữ ký của thucgia Hix, Access quả nhiên lợi hại !!!! http://vibigaba.esy.es/
ღღღღღTài sản của thucgia (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname
#9
Hì hì! Chiều nay trời mưa tầm tã. Nhưng có hẹn với mấy anh em cục thuế đi nhậu. Phải đi thôi. Đồng thời hẹn anh em ngày mai chuyển mail bảng excel hàng tồn cho anh em kiểm tra (trùng hợp quá nhỉ). Về mở máy thấy bạn phán một câu: Mình suy nghĩ thế, có gì cứ tiếp tranh luận nhé… Sorry. Mình không cần phải tranh luận với bạn đâu. Phương pháp hạch toán hàng tồn kho là do Tổng cục thuế quy định. Khi kinh doanh bạn phải đăng ký với đơn vị báo cáo thuế (cục hay chi cục tùy theo ngành nghề) Phương pháp tính giá trị hàng tồn kho. Có mấy cách hạch toán như sau:
1/ Phương pháp tính theo giá đích danh.
2/ Phương pháp bình quân gia quyền.
3/ Phương pháp nhập trước xuất trước (FIFO).
4/ Phương pháp nhập sau xuất trước (LIFO).
Vậy thôi. Chương trình của bạn chạy như thế nào không biết. Khi cơ quan thuế kiểm tra. Bạn in report cho bộ phận kiểm tra. Nhưng bổng nhiên bộ phận kiểm tra báo với bạn: Chuyển cho tôi thành file excel báo cáo tồn kho của anh. Bạn phải biến report của bạn thành file excel (chỉ cần số liệu không có công thức cũng được). Nhưng nếu report của bạn có số liệu không đúng với phương pháp hạch toán bạn đã đăng ký thì bạn phải xuất toán, bạn phải nộp phạt.
Vì vậy. Công thức hàng tồn kho tính giá vốn (giá vốn là giá xuất kho, căn cứ vào giá xuất kho cơ quan thuế sẽ xác định lãi gộp, và bạn sẽ nộp thuế % hoặc theo tỷ lệ ngàng nghề = % nào đó trên lãi ròng [lãi ròng = lãi gộp – chi phí]) nếu theo đơn giá bình quân gia quyền sẽ = (giá trị hàng tồn + cộng giá trị hàng nhập) / (số lượng hàng tồn + số lượng hàng nhập). Nếu bạn không chứng minh được số liệu của bạn đúng công thức này là bạn sẽ bị phạt (căn cứ theo cơ quan thế tính). Vì vậy, ngoài chuyện bạn tính đúng hay sai. Bảng kế toán hàng tồn của bạn phải có đầy đủ các cột theo quy định.
Đơn giá bình quân trong kỳ – Giá trị tồn đầu – số lượng tồn đầu –  Giá trị nhập – số lượng nhập – Số lượng xuất – Giá trị xuất – Số lượng tồn cuối – Giá trị tồn cuối.
Những cái bạn cảm thấy tưởng như hợp lý trong các bài bạn đã post lên đều không thể ra được một report như thế.
Thực sự mình không dám nói bạn làm sai (thực ra là thiếu) nhưng rõ ràng kiểu tính của bạn không đủ để thực hiện một báo cáo bình quân gia quyền hàng tồn kho. Bạn không thể tranh luận với cơ quan thuế. Bạn chỉ có một quyền khẳng định với cơ quan thuế là “tôi làm đúng công thức”, Nếu bạn không khẳng định được điều đó là bạn sai và bạn sẽ bị phạt theo luật thuế. Vì vậy, Điều quan trọng là từ cách tính của bạn có tạo được một report như thế không. Với cách tính của bạn chắc chắn là không!
Sorry! Nếu có gì làm bạn mất lòng.
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan , thucgia , Noname
#10
(14-09-15, 11:06 PM)tranthanhan1962 Đã viết: Hì hì! Chiều nay trời mưa tầm tã. Nhưng có hẹn với mấy anh em cục thuế đi nhậu. Phải đi thôi. Đồng thời hẹn anh em ngày mai chuyển mail bảng excel hàng tồn cho anh em kiểm tra (trùng hợp quá nhỉ). Về mở máy thấy bạn phán một câu: Mình suy nghĩ thế, có gì cứ tiếp tranh luận nhé… Sorry. Mình không cần phải tranh luận với bạn đâu. Phương pháp hạch toán hàng tồn kho là do Tổng cục thuế quy định. Khi kinh doanh bạn phải đăng ký với đơn vị báo cáo thuế (cục hay chi cục tùy theo ngành nghề) Phương pháp tính giá trị hàng tồn kho. Có mấy cách hạch toán như sau:
1/ Phương pháp tính theo giá đích danh.
2/ Phương pháp bình quân gia quyền.
3/ Phương pháp nhập trước xuất trước (FIFO).
4/ Phương pháp nhập sau xuất trước (LIFO).
Vậy thôi. Chương trình của bạn chạy như thế nào không biết. Khi cơ quan thuế kiểm tra. Bạn in report cho bộ phận kiểm tra. Nhưng bổng nhiên bộ phận kiểm tra báo với bạn: Chuyển cho tôi thành file excel báo cáo tồn kho của anh. Bạn phải biến report của bạn thành file excel (chỉ cần số liệu không có công thức cũng được). Nhưng nếu report của bạn có số liệu không đúng với phương pháp hạch toán bạn đã đăng ký thì bạn phải xuất toán, bạn phải nộp phạt.
Vì vậy. Công thức hàng tồn kho tính giá vốn (giá vốn là giá xuất kho, căn cứ vào giá xuất kho cơ quan thuế sẽ xác định lãi gộp, và bạn sẽ nộp thuế % hoặc theo tỷ lệ ngàng nghề = % nào đó trên lãi ròng [lãi ròng = lãi gộp – chi phí]) nếu theo đơn giá bình quân gia quyền sẽ = (giá trị hàng tồn + cộng giá trị hàng nhập) / (số lượng hàng tồn + số lượng hàng nhập). Nếu bạn không chứng minh được số liệu của bạn đúng công thức này là bạn sẽ bị phạt (căn cứ theo cơ quan thế tính). Vì vậy, ngoài chuyện bạn tính đúng hay sai. Bảng kế toán hàng tồn của bạn phải có đầy đủ các cột theo quy định.
Đơn giá bình quân trong kỳ – Giá trị tồn đầu – số lượng tồn đầu –  Giá trị nhập – số lượng nhập – Số lượng xuất – Giá trị xuất – Số lượng tồn cuối – Giá trị tồn cuối.
Những cái bạn cảm thấy tưởng như hợp lý trong các bài bạn đã post lên đều không thể ra được một report như thế.
Thực sự mình không dám nói bạn làm sai (thực ra là thiếu) nhưng rõ ràng kiểu tính của bạn không đủ để thực hiện một báo cáo bình quân gia quyền hàng tồn kho. Bạn không thể tranh luận với cơ quan thuế. Bạn chỉ có một quyền khẳng định với cơ quan thuế là “tôi làm đúng công thức”, Nếu bạn không khẳng định được điều đó là bạn sai và bạn sẽ bị phạt theo luật thuế. Vì vậy, Điều quan trọng là từ cách tính của bạn có tạo được một report như thế không. Với cách tính của bạn chắc chắn là không!
Sorry! Nếu có gì làm bạn mất lòng.

hix, đây chỉ là thuật giải trong khuôn khổ đề bài của mình 014 để mình làm cái demo anh kiểm tra giúp nhé.? anh có xài cái access 2010 không vậy?
Kế toán quả là một môn khoa học.!!!! mình chỉ muốn dùng nó để điều hành và quyết định.
Chữ ký của thucgia Hix, Access quả nhiên lợi hại !!!! http://vibigaba.esy.es/
ღღღღღTài sản của thucgia (View All Items) ღღღღღ
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Help] Nhờ AE chỉ giúp phần import ODBC database với ạ Mr H 1 82 01-12-16, 05:19 PM
Bài mới nhất: maidinhdan
Big Grin Giúp đổ đầy các dòng dưới nếu cùng số hóa đơn ledangvan 3 320 26-03-16, 01:01 PM
Bài mới nhất: ongke0711
Rainbow [Hỏi] Tạo quan hệ với các bản 9xconduongtoidi 2 297 25-03-16, 10:28 AM
Bài mới nhất: 9xconduongtoidi
  Mong mọi người giúp tạo CSDL Quản lý thiết bị huymcsa 10 660 14-01-16, 04:22 PM
Bài mới nhất: ongke0711
Wink Tạo dữ liệu quản lý nhân sự theo các loại bằng cấp chứng chỉ xentran2010 18 3,384 29-08-15, 08:14 AM
Bài mới nhất: tranthanhan1962

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ