Nhúng công thức người dùng vào tính toán trong Access!

Offline Hà Nội 2014 tại Đồ Sơn-Hải Phòng
Chương trình từ thiện năm 2014 tại xã Tân Mỹ, huyện Trà Ôn, tỉnh Vĩnh Long




kết quả từ 1 tới 5 trên 5
13,922 lượt xem
  1. Thành viên cấp cao Hình đại diện của paulsteigel
    Tham gia ngày
    Nov 2005
    Địa chỉ
    Hoà Bình
    Tuổi
    38
    Bài gửi
    103
    Post Thanks / Like
    paulsteigel vẫn chưa có mặt trong diễn đàn

    Nhúng công thức người dùng vào tính toán trong Access!

    Xin được gửi lại một bài viết nhỏ về chủ đề nhúng công thức người dùng vào Access!

    Bài viết này chỉ là một cách tiếp cận trong kho kiến thức đồ sộ trên Internet. Rất hy vọng sẽ giúp ích được các bạn quan tâm trong chừng mực nào đó, tác giả không mong muốn bài viết bị hiểu sai lệch ngoài thiện ý mà chủ đề đã đặt ra - Chia sẻ là một cách để chúng ta hiểu thêm mà!!!
    Chắc hắn rất nhiều bạn trong số những người làm về công tác kế toán tiền lương đã hơn một lần tự hỏi về việc làm thế nào để nhúng các công thức do người dùng tự định nghĩa vào xử lý số liệu.
    Yêu cầu nghe có vẻ trừu tượng, song trên thực tế, điều này thường rất hữu ích, đặc biệt với những người hay phải làm công tác kế toán tiền lương. Có một người bạn đã đặt vấn đề này đối với tôi, anh ấy cũng mất kha khá thời gian để mày mò song kết quả không được như ý.

    Quả thật với những người làm việc nhiều với lập trình thì vấn đề không quá khó, nhưng với các bạn mới bắt đầu hoặc không muốn đào sâu về việc này, vấn đề trở nên tương đối khó giải quyết. Để có thể cung cấp cho các bạn quan tâm một cách tiếp cận đơn giản, tôi xin phép được bắt đầu bài viết dựa trên những yêu cầu đầu vào như sau:
    + Quản lý hồ sơ lương nhân viên dựa trên các thông tin: Mã nhân viên, các loại hình phụ cấp, bảo hiểm … dưới dạng số liệu liên quan đến nhân viên đó cùng với hệ số biến động dựa trên sự thay đổi các yếu tố đầu vào.
    + Lập chu trình tính lương dựa trên sự kết hợp các dạng đầu vào từ mã biến động và các công thức này có thể thay đổi được tùy theo thời gian.
    Tôi xin phép được giải quyết bài toán này dựa vào phần mềm MS Access.
    Có thể các bạn sẽ hỏi tại sao lại là Access? Câu trả lời đơn giản là vì:

    • Access cho phép thiết kế cơ sở dữ liệu và các dạng biểu mẫu báo cáo, mẫu nhập liệu khá nhanh gọn.
    • Access quen thuộc với nhiều người dùng
    • Access cho phép sử dụng hàm người dùng trong các câu lệnh Query
    • Access có công cụ thiết kế Query rất tiện dụng.
    Chúng ta sẽ thiết kế giải pháp ra sao?
    • Chúng ta cần có nơi lưu trữ thông tin nhân viên
    • Cần có nơi lưu trữ thông tin liên quan đến công thức tính toán
    • Cần giải pháp để chuyển các công thức người dùng định nghĩa thành biểu thức tính toán để máy tính có thể sử dụng được
    • Thiết kế cơ cấu sinh và trả về kết quả.
    Tôi xin phép không giải thích quá nhiều về việc tại sao lại chọn giải pháp như vậy song có thể nói một cách ngắn gọn là:
    • Chúng ta có các yếu tố thay đổi tương đối (hồ sơ nhân viên, các mã biến động và các hệ số tính toán chẳng hạn bảo hiểm xã hội – a , phụ cấp độc hại - b, phụ cấp nghề nghiệp - c và ưu tiên vùng -d) và các yếu tố cố định tương đối đó là phép toán.
    • Máy tính không tự hiểu được các phép toán và ta cần phải biên dịch và điều chỉnh các phép toán đó sang thứ ngôn ngữ mà chúng có thể hiểu được.
    Trước tiên chúng ta có 2 bảng tbl_Congthuc để lưu trữ công thức ứng với mã biến động.
    Tiếp theo, ta cần xây dựng bảng lưu lại hồ sơ nhân viên và các tham số bổ sung phục vụ cho công tác tính toán.
    Xem hình bên về ví dụ 2 bảng.
    Tiếp theo chúng ta cần xây dựng cơ chế biên dịch biểu thức thành dạng máy tính có thể hiểu được.
    Giả sử ta có tình huống công thức:
    • Mức lương = bảo hiểm xã hội – a + phụ cấp độc hại – b + phụ cấp nghề nghiệp - c + ưu tiên vùng –d x 20% được tính toán trong trường hợp mã điều chỉnh là 1.
    Công thức tương đương là
    Mức lương = a + b + c + d * 20%
    • Mức lương = bảo hiểm xã hội – a + phụ cấp độc hại x 15% khi mã điều chỉnh là 2.
    Vậy dữ liệu nhập trong bảng tbl_Congthuc sẽ có dạng như hình bên.
    Trong bảng dữ liệu ta chỉ cần lưu lại mã biến động ứng với mỗi hồ sơ nhân viên.
    Việc tiếp theo là xây dựng hàm biên dịch các công thức người dùng dưới dạng chuỗi thành dạng biểu thức tính toán được.
    Để làm điều này ta cần sử dụng đến một hàm đặc biệt của VB đó là Eval. Hãy xét ví dụ sau:
    Đầu vào là 1+2+3+4, với Excel thì đơn giản ta chỉ cần viết =1+2+3+4 trong ô và sẽ có kết quả là 10. Với VB điều này khác hoàn toàn do dữ liệu biểu thức nói trên chỉ là dạng ký tự và máy tính sẽ hiểu là chuỗi 1+2+3+4. Muốn trả về kết quả tính toán ta dùng hàm Eval như sau:
    Ketqua=eval(1+2+3+4)
    Và ketqua sẽ là 10.

    Vậy việc còn lại của ta là gì?

    • Thay thế các giá trị tính toán vào biểu thức
    • Gọi hàm Eval và trả về kết quả.
    Trong thực tế, để có thể dễ dàng sử dụng các cách kết hợp khác nhau của công thức với những hàm người dùng khác, chúng ta cần một bước đệm.
    1. Biên dịch các công thức, hàm thành dạng tính toán được.
    2. Thay thế các toán tử trong công thức bằng các giá trị dữ liệu thật
    3. Tính toán kết quả hàm người dùng trước
    4. Chuyển biểu thức sang hàm Eval, tính toán và trả về kết quả.
    Ở đây tôi dùng một hàm trung gian có tên là ProcessFomula với mã chi tiết như sau:
    Function ProcessFomula(InForm As String, a As Long, b As Long, c As Long, d As Long) As Long
    'Thay thế các đoạn chuỗi trong công thức bằng giá trị thật
    InForm = Replace(InForm, "a", a)
    InForm = Replace(InForm, "b", b)
    InForm = Replace(InForm, "c", c)
    InForm = Replace(InForm, "d", d)
    'Gọi hàm Eval và tính toán rồi trả về kết quả cuối cùng
    ProcessFomula = Eval(InForm)
    End Function

    Function Test1(a As Long, b As Long) As String
    Test1 = (a + b) / 3
    End Function
    Như vậy hàm ProcessFomula đã giúp chúng ta giải quyết tất cả các bước 1-4 nói trên.
    Việc còn lại là đưa những công đoạn này vào câu lệnh truy vấn Query hoặc form tùy theo yêu cầu người dùng.
    Ngoài ra, ta còn có thể viết thêm các hàm tính toán khác và có thể chèn luôn vào công thức. (Trong ví dụ của tôi là hàm Test1)

    Dạng câu lệnh truy vấn sẽ là
    SELECT tbl_Sample.ID, tbl_Congthuc.CONGTHUC, ProcessFomula([Congthuc], tbl_Sample.HSLCU, tbl_Sample.HSLMOI, tbl_Sample.PCCU, tbl_Sample.PCMOI) AS Ketqua, tbl_Sample.HSLCU, tbl_Sample.HSLMOI, tbl_Sample.PCCU, tbl_Sample.PCMOI FROM tbl_Sample INNER JOIN tbl_Congthuc ON tbl_Sample.MABIENDONG = tbl_Congthuc.MABIENDONG;
    Và bây giờ bạn đã có thể làm thêm những gì mình cần.
    Để có thêm thông tin, xin xem trong file đính kèm hoặc email cho tôi tại địa chỉ ngocdd@sfdp.net
    Cảm ơn sự chú ý của các bạn.
    File đính kèm xin tải về tại địa chỉ sau:
    http://www.sfdp.net/tai-lieu-khac/nh...ess/Sample.rar

    Xem thêm các bài viết mới nhất trong cùng chuyên mục này:

    thay đổi nội dung bởi: paulsteigel, ngày 03-07-2012 lúc 12:47 Lý do: Sửa lại liên kết đến tập tin
    =========================================
    Lá bay xa về cuối chân trời...
    =========================================

  2. Khu vực quảng cáo
    Tham gia ngày
    Always
    Địa chỉ
    Advertising world
    Tuổi
    2010
    Bài gửi
    Many

     

  3. VNUNI Makes a difference Hình đại diện của hai2hai
    Tham gia ngày
    Apr 2004
    Địa chỉ
    Hà nội
    Tuổi
    40
    Bài gửi
    2,124
    Post Thanks / Like

    My Social Networking

    Add hai2hai on Facebook Add hai2hai on Google+
    Add hai2hai on Linkedin
    hai2hai vẫn chưa có mặt trong diễn đàn
    Google: Expressions + Evaluation + Visual Basic + Source Code

    Trên Internet có cả đồ xịn, tương đương với Evaluate của Excel luôn

    Nhưng cái khó của tính lương ko phải là vấn đề đó.

    Ví dụ: KH này thì có a, b, c, d, nhưng KH khác thì cần e, f, g, h (mỗi cái đó là 1 form nhập hoặc một trường định nghĩa tham số)

    Thứ 2 là, cách lấy yếu tố a, b, c, d của mỗi đơn vị khách hàng là khác nhau. Ví dụ: giả sử a là Hệ số lương. Nhưng trong quá trình nâng lương, ngày nâng lương là ngày giữa chừng trong tháng

    Ví dụ: ngày 13/08/2008 chẳng hạn --> đã là PM thì ko có gì là cố định cả, phải care tất cả trường hợp), vậy khi tính lương tháng 8 đó thì ko phải lấy HSL như mọi khi nữa đúng ko?

    Đó chỉ là 1 ví dụ thôi, chuyện thay đổi gia hạn hợp đồng, thuyên chuyển, thay đổi phụ cấp các loại, v.v... đều là dạng diễn biến (historical data) và dựa trên ngày hiệu lực (effective date) nên khi tính toán phải chú ý trường hợp đó.

    Bên cạnh đó, các yếu tố thu nhập khác cũng thường xuyên thay đổi theo bất cứ thời gian nào. Khi xem hoặc tính lại bảng lương tháng cũ thì phải sử dụng các yếu tố cũ (tức a, b, c,... cũ) chứ ko phải các yếu tố ở thời điểm mới thay đổi.

    v.v...
    thay đổi nội dung bởi: hai2hai, ngày 05-08-2008 lúc 23:52

  4. Thành viên cấp trung Hình đại diện của nguyenbalai
    Tham gia ngày
    Apr 2007
    Địa chỉ
    Kon Tum
    Bài gửi
    6
    Post Thanks / Like
    nguyenbalai vẫn chưa có mặt trong diễn đàn
    Link die rồi!

  5. Thành viên Hình đại diện của tuliemhanoi
    Tham gia ngày
    Apr 2009
    Địa chỉ
    HN
    Bài gửi
    3
    Post Thanks / Like
    tuliemhanoi vẫn chưa có mặt trong diễn đàn
    05-06-2012, 10:23 #4
    Chủ đề hay nhưng không thấy ai đóng góp, em cũng đang muốn hiểu thêm

  6. Thành viên cấp cao Hình đại diện của paulsteigel
    Tham gia ngày
    Nov 2005
    Địa chỉ
    Hoà Bình
    Tuổi
    38
    Bài gửi
    103
    Post Thanks / Like
    paulsteigel vẫn chưa có mặt trong diễn đàn
    03-07-2012, 12:47 #5
    Nếu bạn muốn tìm hiểu thêm điều gì, xin hãy đăng bài viết, chắc chắn mọi người sẽ trả lời bạn ngay!
    =========================================
    Lá bay xa về cuối chân trời...
    =========================================


Thread Information

Users Browsing this Thread

Hiện tại có 1 người đang truy cập đề tài này gồm: (0 thành viên và 1 khách)

Visitors found this page by searching for:

http:www.webketoan.vnforumthreads50357-Nhung-cong-thuc-nguoi-dung-vao-tinh-toan-trong-Access-

cách tính toán trong access

tính toán trong access 2003

Cong thuc ham dem trong acesses 10

cng thức tnh trung bnh trong access

cach dung lenh like trong access

tao mau hoi cong thuc tinh tien trong access

cách tính tổng điểm trong access

vi du ve bieu thuc trong ACESS

phep tinh trung binh cong trong access

hàm tính trung bình cộng trong access report

cách tinh tien trong query trong access 2007

cach viet cong thuc vao bang query access

cach cong thuc trong eccess 2007

cac cong thuc trong truy van cua access

huong dan tinh toan trong access

cach nhap cong thuc tinh trong queries cua microsoft access 2003

cách tính tuổi trong access ben from

hàm tính người sinh trong tháng của access

công thức tính tổng điểm trong Query

các phép tính trong access

ham tinh tong trong access

viet cau lenh trong access

các hàm trong access

cong thuc tinh gia trung binh trong access