Tạo Mã khách hàng (duy nhất) theo điều kiện! (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

AnhThu-1976

Thành viên tích cực
Tham gia
17/10/14
Bài viết
1,065
Được thích
175
Các anh chị giúp em code tạo mã khách hàng như sau:

Sheet DS(2) là trước khi chạy code, Sheet DS là sau khi chạy code (sẽ cho kết quả như cột A)
1/ Tạo mã khách hàng cho cột A, bắt đầu từ cell A3 trở xuống

2/ Mã khách hàng là duy nhất (không trùng)

3/ Cấu trúc mã khách hàng, VD: B0104115527-003
a/ độ dài: 15 ký tự
b/ Ký tự đầu tiên là chữ B, tiếp theo là 10 ký tự số, tiếp theo là dấu gạch ngang -, và 3 ký tự cuối cùng là ký tự số

4/ Nếu cột B (tên khách hàng) không có thì không tạo Mã KH

5/ Nếu đã có sẵn Mã khách hàng thì không tạo nữa (như cell A4, A7 của Sheet DS(2))

6/ Mã khách hàng được tạo dựa vào cột C (MST) như sau:
a/ Nếu cột C (MST) đã có MST với độ dài là 14 ký tự, thì ta lấy chữ B và ghép với MST đó để cho ra Mã khách hàng (VD: ở cell A10, A11 ở sheet DS)
b/ Nếu cột C (MST) đã có MST với độ dài là 10 ký tự, thì ta lấy chữ B và ghép với MST đó và ghép thêm 4 ký tự "-000" để cho ra Mã khách hàng (VD: ở cell A8, A9, ...ở sheet DS)
c/ Nếu cột C (MST) không có MST (trống), thì ta lấy chữ B và ghép với với 10 chữ số (theo thứ tự tăng dần 0000000001, 0000000002, 0000000003, ...) và ghép thêm 4 ký tự "-000" để cho ra Mã khách hàng (VD: ở cell A3, A5,A6,A13 ở sheet DS)

Mong anh chị giúp em code này! Em cảm ơn!
 

File đính kèm

Lần chỉnh sửa cuối:
Không biết bài trên của em có làm được = VBA không ạ, hay do em diễn đạt khó hiểu!
Hoặc anh chị có phương án nào khác để tạo mã KH không ạ !
 
Upvote 0
Không biết bài trên của em có làm được = VBA không ạ, hay do em diễn đạt khó hiểu!
Hoặc anh chị có phương án nào khác để tạo mã KH không ạ !
Dùng VBA đây:
Mã:
Public Sub TaoMa()
    Dim Vung, I, K
        Vung = Sheets("DS (2)").Range(Sheets("DS (2)").[B3], Sheets("DS (2)").[B50000].End(xlUp)).Offset(, -1).Resize(, 3)
            For I = 1 To UBound(Vung)
                If Vung(I, 1) = Vung(I, 3) Then
                    K = K + 1
                    Vung(I, 1) = "B" & Right("0000000000" & K, 10) & "-000"
                 ElseIf Vung(I, 1) = "" Then
                    Vung(I, 1) = "B" & IIf(Len(Vung(I, 3)) = 10, Vung(I, 3) & "-000", Vung(I, 3))
                 End If
            Next I
    Sheets("DS").[H3].Resize(UBound(Vung), UBound(Vung, 2)) = Vung
End Sub
Bài này dùng công thức cũng dễ "ect", cần gì phải VBA
Thân
 
Upvote 0
Mình đã fát hiện ra 1 chổ chưa chuẩn của code bạn Cò Già:
PHP:
          Nếu [A4] đã có mã 'B0000000011-000'
Thí lý ra tại [A3] fải tiếp là 'B0000000012-000'

Bạn xem theo file của mình, chậm rùa bò; nhưng tham khảo thử xem
 

File đính kèm

Upvote 0
Mình đã fát hiện ra 1 chổ chưa chuẩn của code bạn Cò Già:
PHP:
          Nếu [A4] đã có mã 'B0000000011-000'
Thí lý ra tại [A3] fải tiếp là 'B0000000012-000'

Bạn xem theo file của mình, chậm rùa bò; nhưng tham khảo thử xem
Hihi, buồn quá thì viết thôi (trong code còn thiếu điều kiện không có tên khách hàng), chứ bài này còn có vấn đề chưa rõ, như:
5/ Nếu đã có sẵn Mã khách hàng thì không tạo nữa (như cell A4, A7 của Sheet DS(2))
Không biết Mã có sẵn này có nằm trong hệ thống Mã tạo mới không??? Thí dụ B0000000015-000 chẳng hạn, nếu không thì code đạt yêu cầu, nếu có thì xử lý sao??? v..v....
Híc, mấy cái "Mã Miếc" này thì.....trúng nghề Bác Sa rồi. Híc
 
Upvote 0
Mình đã fát hiện ra 1 chổ chưa chuẩn của code bạn Cò Già:
PHP:
          Nếu [A4] đã có mã 'B0000000011-000'
Thí lý ra tại [A3] fải tiếp là 'B0000000012-000'

Bạn xem theo file của mình, chậm rùa bò; nhưng tham khảo thử xem
Nếu [A4] đã có mã 'B0000000011-000'
Tiếp theo sao không phải là B0000000011-001 mà là B0000000012-000 ?
"Chủ xị" nêu yêu cầu chưa rõ lắm.
 
Upvote 0
Nếu [A4] đã có mã 'B0000000011-000'
Tiếp theo sao không phải là B0000000011-001 mà là B0000000012-000 ?
"Chủ xị" nêu yêu cầu chưa rõ lắm.
Để hiểu chuyện MST (mã số thuế) tiếp theo này cần tu nghiệp 1 khóa 3 ngày tại châu Nam cực!
Ba con số cuối chuỗi sẽ tăng dần, nếu là những doanh nghiệp thành viên của doanh nghiệp có MST 10 số chủ quản.

Trong 10 số đầu thì, hai số đầu chỉ vùng mã tỉnh;
(Trong tình hình nhập tách địa fương liên miên thì 2 tiếp đầu của MST này chỉ là tham khảo thôi.)

Nếu tác giả muốn rút gọn thì có thể rút gọn 8 số trong 10 số trước của MST & với 3 kí số sau thì có thể rút xuống còn 2 kí số hay kí tự, giả dụ như
0A:= 11; 0Z:=37
 
Upvote 0
Mình đã fát hiện ra 1 chổ chưa chuẩn của code bạn Cò Già:
PHP:
          Nếu [A4] đã có mã 'B0000000011-000'
Thí lý ra tại [A3] fải tiếp là 'B0000000012-000'
Em chưa hiểu vì [A4] thực tế của em là B1000000000-000
concogia đã viết:
Hihi, buồn quá thì viết thôi (trong code còn thiếu điều kiện không có tên khách hàng), chứ bài này còn có vấn đề chưa rõ, như:

5/ Nếu đã có sẵn Mã khách hàng thì không tạo nữa (như cell A4, A7 của Sheet DS(2))


Không biết Mã có sẵn này có nằm trong hệ thống Mã tạo mới không???
Thực tế, những Mã có sẵn SẼ KHÔNG nằm trong hệ thống Mã tạo mới
VD:
B1000000000-000, Vì số thứ tự nằm ở số 100.000.000 nên các mã khách hàng được tạo mới sẽ khó đạt được đến số này
Nói thêm vì sao Tên khách hàng là Công ty thì bắt buộc có Mã Số thuế mà em lại tạo sẵn mã khách hàng,
Giả sử, Sếp em nói, anh vừa tạm ứng tiền cho Cty ABC nhưng lại không cho biết mã số thuế (có hỏi chưa chắc biết!) -> như vậy em tạm thời tạo mã khách hàng cho cty ABC đó, nếu để tạo mã tự động theo thứ tự thì sẽ rất nguy hiểm vì khi em nhập MST của Cty đó vào thì khi chạy code lại thì nó vô tình làm thay đổi hàng loạt các Mã khách hàng được tạo theo thứ tự
HYen17 đã viết:
Để hiểu chuyện MST (mã số thuế) tiếp theo này cần tu nghiệp 1 khóa 3 ngày tại châu Nam cực!
Ba con số cuối chuỗi sẽ tăng dần, nếu là những doanh nghiệp thành viên của doanh nghiệp có MST 10 số chủ quản.

Trong 10 số đầu thì, hai số đầu chỉ vùng mã tỉnh;
(Trong tình hình nhập tách địa fương liên miên thì 2 tiếp đầu của MST này chỉ là tham khảo thôi.)

Nếu tác giả muốn rút gọn thì có thể rút gọn 8 số trong 10 số trước của MST & với 3 kí số sau thì có thể rút xuống còn 2 kí số hay kí tự, giả dụ như
0A:= 11; 0Z:=37
Em biết MST được tạo ra theo 1 quy luật, đại khái là số nguyên tố gì đó
Nhưng không biết bỏ 2 ký tự đầu thì khi tạo mã khách hàng thì có thể bị trùng không ?
Còn 3 ký tự sau nếu chỉ lấy 2 ký tự, lỡ cty nào có số chi nhánh hay cửa hàng trên 100 thì sao ? (thực tế chưa thấy)
* Trường hợp code muốn rút gọn thì có thể rút gọn 8 số trong 10 số trước của MST thì fải viết như thế nào ạ ?
Em cảm ơn các Thầy/Cô, Anh/Chị đã giúp đỡ!

 
Upvote 0
(1) Em biết MST được tạo ra theo 1 quy luật, đại khái là số nguyên tố gì đó
(3) Nhưng không biết bỏ 2 ký tự đầu thì khi tạo mã khách hàng thì có thể bị trùng không ?
(2) Còn 3 ký tự sau nếu chỉ lấy 2 ký tự, lỡ cty nào có số chi nhánh hay cửa hàng trên 100 thì sao ? (thực tế chưa thấy)
(4)* Trường hợp code muốn rút gọn thì có thể rút gọn 8 số trong 10 số trước của MST thì fải viết như thế nào ạ ?
Em cảm ơn các Thầy/Cô, Anh/Chị đã giúp đỡ!

(1) Với doanh nghiệp đăng kí kinh doanh, theo mình biết, thì Sở thuế cấp tỉnh sẽ cấp cho đơn vị đó 1 mã số thuế gồm 10 kí số;
Khi doanh nghiệp đó có các cơ sở trực thuộc thì thêm theo thứ tự tăng dần của dẫy 3 kí số sau kí số thứ 10 (của bản thân)
Trong 10 kí số đó thì 2 kí số đầu qui định khu vực mà tỉnh đó đang hiện hữu;
Ví dụ thôi nha: 08: Tf HCM; 03: Nam định,. . . .

(2) Như vậy số chi nhánh fụ/trực thuộc có thể là 999 chứ sao lại chỉ 100;
Để khỏi sợ trùng thì ngoài kí tự 'B' mà bạn hình như rất iêu thích ta còn đến 25 kí tự khác nữa mà!

Như năm 2015 & cho những CS chưa có mã số thuế ta ấn định là 'C', & năm sau ta tăng lên 'D',. . . .

(4) Trường hợp muốn rút gọn thì chỉ có cách thay kí số bằng các kí tự (Lúc đó thay vì chỉ 10 kí số ta có đến 36 kí tự là chí ít (Nói chí ít vì ta còn có thể xài các kí tự @, $, . . . ))

(4.1) Ta không cần theo mã số thuế 1 cách bắt buộc; ta có thể gán theo ngày tháng fát sinh
Ví dụ ta chỉ cần 6 kí tự (cả kí số) để biểu diễn mã của người đó, như
E9A001 :
E:= Chỉ năm 2015 (F: 2016)
9:= là tháng 9; tháng 10 sẽ là A
A := là ngày 11 của tháng
001 là người đầu tiên vô liên hệ với CQ bạn & được nhập vô danh sách quản lí của bạn!
(Lúc này mã số thuế khách hàng này nọ sẽ có trường/cột để nhập & theo dõi riêng)
& bạn muốn theo fương án cuối này mình sẽ giúp trơn tru cả trong khởi tạo lẫn vận hành;
Chúc mừng năm mới!







 
Upvote 0
Cách làm việc của CSDL LH:
KHi mã số tương đối khá rắc rối thì người ta tách rời rõ rệt 2 công việc. Công việc tạo mã khách hàng, và công việc gán mã khách hàng. Không nên để cho 1 phần mềm tạo mã số tự động từ A đến Z.

Cách thực hiện:
- Tạo một bảng mã số đúng tiêu chuẩn 10 ký tự, 11 ký tự, 2 ký tự đầu là cái gì đó, cứ việc thẳng tiến mà làm. Tạo cỡ gấp 2 lần con số khách hàng dự định --> n mã
- Tạo một khoá thứ tự 1-n. Như vậy ta có một bảng tra mã số và số thứ tự.
- Mỗi khi tạo khách hàng mới thì dùng khoá số thứ tự.
- Để biết mã KH thực sự thì dùng bảng và hàm tham chiếu.
Hai bước đầu là một sub. Hai bước sau là một sub khác. Chúng chạy riêng biệt nhau.
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom