Tạo số hóa đơn tự động

Liên hệ QC

vudao

Thành viên mới
Tham gia
23/11/09
Bài viết
36
Được thích
3
Mến chào anh, chị, và các bạn!
Em tạo các mã Hóa Đơn nhảy số tự động. Mã Hóa Đơn của em có dạng HD202201-00001 (năm 2022 tháng 01)
giả sử trong tháng 01 HD202201-00250 là hóa đơn cuối.
Phần này em đã làm được
Nếu sang tháng 02 của năm 2022 thì số hóa đơn đầu tiên của tháng 02 sẽ là HD202202-00001
Em chưa nghĩ ra cách để làm
Nhờ anh chị và các bạn giúp em với
Xin cám ơn
 

File đính kèm

  • testhd.xlsx
    30.3 KB · Đọc: 20
Đưa cái code "đã làm được" ấy lên đây.
Nếu thuận tiện tôi sẽ chỉ cho cách chỉnh. Nêu không thuận tiện thì có thể phải viết lại code khác.
 
Upvote 0
Bạn ghi ra bằng chữ trình tự tạo ra số tự động đi, nó không khó để bạn tư duy ra.
Code thì bạn làm xong rồi đưa code lên cho các anh trên này góp ý thêm.
Ví dụ:
+ Số hóa đơn tạo ra ghép nối từ "HD" & Năm của ("ngày hôm nay" hoặc ngày trên hóa đơn nhận được) & Tháng của ("ngày hôm nay" hoặc ngày trên hóa đơn nhận được) đã format về 2 chữ số & "-" & Số được format dạng 5 chữ số
+ Nếu Tháng của ("ngày hôm nay" hoặc ngày trên hóa đơn nhận được) tăng lên, hoặc khác so với Tháng của SỐ HÓA ĐƠN trước đó thì SỐ HÓA ĐƠN mới sẽ được đưa về 1, nếu không thì lấy số trước đó +1 đơn vị.
Bài đã được tự động gộp:

cám ơn anh, em quên không add file vào đó ạ.
éc, code là cái mã á hả :D
tưởng là code bạn đã lập trình VBA.
 
Upvote 0
Bạn ghi ra bằng chữ trình tự tạo ra số tự động đi, nó không khó để bạn tư duy ra.
Code thì bạn làm xong rồi đưa code lên cho các anh trên này góp ý thêm.
Ví dụ:
+ Số hóa đơn tạo ra ghép nối từ "HD" & Năm của ("ngày hôm nay" hoặc ngày trên hóa đơn nhận được) & Tháng của ("ngày hôm nay" hoặc ngày trên hóa đơn nhận được) đã format về 2 chữ số & "-" & Số được format dạng 5 chữ số
+ Nếu Tháng của ("ngày hôm nay" hoặc ngày trên hóa đơn nhận được) tăng lên, hoặc khác so với Tháng của SỐ HÓA ĐƠN trước đó thì SỐ HÓA ĐƠN mới sẽ được đưa về 1, nếu không thì lấy số trước đó +1 đơn vị.
Bài đã được tự động gộp:


éc, code là cái mã á hả :D
tưởng là code bạn đã lập trình VBA.
dạ!! em làm công thức thôi chứ chưa đủ kiến thức để tự viết VBA. Mong anh chỉ giáo thêm vài đường :D
 
Upvote 0

File đính kèm

  • testhd.xlsx
    31 KB · Đọc: 24
Upvote 0
Chủ bài đăng tham khảo cách mình làm nè:
PHP:
Option Explicit
Const Alf As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim Rws As Long, Max_ As Long
 Dim Rng As Range, sRng As Range
 Dim MyAdd As String, MaHD As String, Tmp As String
 
 On Error GoTo LoiCT
 Rws = 2 + [F1].CurrentRegion.Rows.Count
 If Not Intersect(Target, [F1].Resize(Rws)) Is Nothing Then
    If Target.Row = 2 Then
        MaHD = Mid(Alf, Year(Date) - 2010, 1) & Right("0" & CStr(Month(Target.Value)), 2) & "0000"
        [B2].Value = MaHD
    ElseIf Target.Row > 2 Then
        Set Rng = [B1].Resize(Rws)
        Tmp = Mid(Alf, Year(Target.Value) - 2010, 1) & Right("0" & CStr(Month(Target.Value)), 2)
        Set sRng = Rng.Find(Tmp, , xlFormulas, xlPart)
        If sRng Is Nothing Then         'Chua Có Hóa Don Trong Tháng    '
            [B2].Value = Tmp & "0000"
        Else
            MyAdd = sRng.Address
            Do
                If CLng(Right(sRng.Value, 4)) > Max_ Then Max_ = CLng(Right(sRng.Value, 4))
                Set sRng = Rng.FindNext(sRng)
            Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
            Cells(Target.Row, "B").Value = Tmp & Right("000" & CStr(1 + Max_), 4)
        End If
    End If
 End If
Err_:           Exit Sub
LoiCT:      If Err = 13 Then
    Resume Err_
    Else
        MsgBox Error
    End If
End Sub


$$$$$@ $$$$@
 

File đính kèm

  • Mã NV.rar
    30.7 KB · Đọc: 34
Upvote 0
Chủ bài đăng tham khảo cách mình làm nè:
PHP:
Option Explicit
Const Alf As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim Rws As Long, Max_ As Long
 Dim Rng As Range, sRng As Range
 Dim MyAdd As String, MaHD As String, Tmp As String
 
 On Error GoTo LoiCT
 Rws = 2 + [F1].CurrentRegion.Rows.Count
 If Not Intersect(Target, [F1].Resize(Rws)) Is Nothing Then
    If Target.Row = 2 Then
        MaHD = Mid(Alf, Year(Date) - 2010, 1) & Right("0" & CStr(Month(Target.Value)), 2) & "0000"
        [B2].Value = MaHD
    ElseIf Target.Row > 2 Then
        Set Rng = [B1].Resize(Rws)
        Tmp = Mid(Alf, Year(Target.Value) - 2010, 1) & Right("0" & CStr(Month(Target.Value)), 2)
        Set sRng = Rng.Find(Tmp, , xlFormulas, xlPart)
        If sRng Is Nothing Then         'Chua Có Hóa Don Trong Tháng    '
            [B2].Value = Tmp & "0000"
        Else
            MyAdd = sRng.Address
            Do
                If CLng(Right(sRng.Value, 4)) > Max_ Then Max_ = CLng(Right(sRng.Value, 4))
                Set sRng = Rng.FindNext(sRng)
            Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
            Cells(Target.Row, "B").Value = Tmp & Right("000" & CStr(1 + Max_), 4)
        End If
    End If
 End If
Err_:           Exit Sub
LoiCT:      If Err = 13 Then
    Resume Err_
    Else
        MsgBox Error
    End If
End Sub


$$$$$@ $$$$@
cám ơn Thầy!
File của Thầy hay ạ. Code của Thầy em không áp dụng được.
xin lỗi Thầy vì em yếu mảng VBA
Bài đã được tự động gộp:

1. Phải có ngày HD trong cột F

2. Thử công thức tạo mã này:

="HD"&TEXT(F2,"yyyymm\-")&TEXT(COUNTIFS($F$2:F2,">"&F2-DAY(F2),$F$2:F2,"<="&EOMONTH(F2,0)),"00000")


.
Chào anh!! công thức này, ra kết quả như em mong muốn.
Trong file của em gửi tại vị trí "J2" em muốn nó hiển thị số Hóa Đơn tiếp theo
Vì em muốn mình phải biết được số hóa đơn tiếp theo là gì
Ví dụ: trong tháng 01 hiện tại đã có hóa đơn HD202201-00250 thì trong ô J2 = HD202201-00251
Nhưng khi tháng của Ngày Hóa Đơn sang tháng 02 thì tại vị trí J2 đó sẽ là HD202202-00001
đại loại là như vậy.
xin cám ơn
 
Lần chỉnh sửa cuối:
Upvote 0
Trong file của em gửi tại vị trí "J2" em muốn nó hiển thị số Hóa Đơn tiếp theo

Vậy thì mình cần cho người ta biết khi nào thì "tiếp theo", khi nào thì "kết thúc", khi nào thì "sang tháng mới".

Chứ với file bạn gửi, toàn bộ nội dung bạn đã trình bày có biết khi nào đâu.
 
Upvote 0
File . . . . hay ạ. Code. . . . . em không áp dụng được.
xin lỗi Thầy vì em yếu mảng VBA
Vì bạn đăng bài trong mục lập trình mà, không phải tại mình nha!
Xài code í đâu cần biết lập trình kia chứ;

Chúc mọi người vui!
 
Upvote 0
Gửi các anh chị
Em thêm form nhập dữ liệu.
khi chọn ngày thì mục Số hóa đơn sẽ tự động điền vào ô "số hóa đơn" trên form và mình ghi dữ liệu xuống dưới sheet đó.
công thức của em làm chỉ hiển thị được số tiếp theo, nếu sang tháng khác thì chưa hoạt động được.
em cám ơn ạ
 

File đính kèm

  • testhd.xlsm
    37.9 KB · Đọc: 15
Upvote 0
Gửi các anh chị
Em thêm form nhập dữ liệu.
khi chọn ngày thì mục Số hóa đơn sẽ tự động điền vào ô "số hóa đơn" trên form và mình ghi dữ liệu xuống dưới sheet đó.
công thức của em làm chỉ hiển thị được số tiếp theo, nếu sang tháng khác thì chưa hoạt động được.
em cám ơn ạ

Sao bạn không đăng bài này luôn ở bài #1? Tốn 12 bài công cốc.

Giải thuật:

Sau khi nhập ngày, tìm ngày đó trong cột ngày, nếu chưa có thì tạo hóa đơn đầu tiên của tháng đó, nếu có rồi thì tăng số hóa đơn lên.
 
Upvote 0
. . . Em thêm form nhập dữ liệu.
khi chọn ngày thì mục Số hóa đơn sẽ tự động điền vào ô "số hóa đơn" trên form và mình ghi dữ liệu xuống dưới sheet đó. . . . . . .
Xài Form mà không xài macro thì thật là vi dịu đó bạn & xin chúc mừng!

Tạm biệt nha!
 

File đính kèm

  • Mã NV.rar
    36.2 KB · Đọc: 11
Lần chỉnh sửa cuối:
Upvote 0
Ví dụ: trong tháng 01 hiện tại đã có hóa đơn HD202201-00250 thì trong ô J2 = HD202201-00251
Nhưng khi tháng của Ngày Hóa Đơn sang tháng 02 thì tại vị trí J2 đó sẽ là HD202202-00001
Thử công thức này tính Hóa đơn tiếp theo:

="HD"&TEXT(TODAY(),"yyyymm\-")&TEXT(COUNTIFS($F$2:$F$30000,">"&TODAY()-DAY(TODAY()),
$F$2:$F$2:$F$30000,"<="&EOMONTH(TODAY(),0))+1,"00000")

.
 
Upvote 0
. . . . . . Em tạo các mã Hóa Đơn nhảy số tự động. Mã Hóa Đơn của em có dạng HD202201-00001 (năm 2022 tháng 01)
giả sử trong tháng 01 HD202201-00250 là hóa đơn cuối. (Phần này em đã làm được)
Nếu sang tháng 02 của năm 2022 thì số hóa đơn đầu tiên của tháng 02 sẽ là HD202202-00001
Em chưa nghĩ ra cách. . . .
Trong mã hóa đơn (HD)- như vậy là quá dài 1 cách không cần thiết:
1./ HD bao giờ cũng được gắn & chả mang nghĩa lí gì cả, mà chỉ tăng chi phí điện nước!
2./ Bạn ví dụ 1 tháng giêng có chì ~ ngàn HD, như vậy bạn chỉ cần 4 ký số là đũ biểu diễn số HD phát sinh trong 1 tháng; Ở đây bạn lại xài tới 5 ký số là lại tổn hao thêm nước & điện lần nữa;
3./ Ta có thể giảm thêm độ dài của mã HD này xuống nữa, nếu phân biệt HD theo ngày, ví dụ:
A19000 là HD đầu tiên của ngày 9 tháng 1 năm 2021, ngày kế tiếp HD này sẽ A1A000 là HD đầu tiên
. . . . .
Chúc các bạn vui & tiếp tục trao đổi nếu cần & có thời gian rỗi!
 
Upvote 0
Em tạo các mã Hóa Đơn nhảy số tự động. Mã Hóa Đơn của em có dạng HD202201-00001 (năm 2022 tháng 01)
Tôi không làm kế toán nên cũng không rành, muốn hỏi là bây giờ xài hoá đơn điện tử rồi và vẫn phải tự tạo mã hoá đơn à? Không phải do ứng dụng tạo HĐ tự tạo mã 7 ký tự số?
 
Upvote 0
Tôi không làm kế toán nên cũng không rành, muốn hỏi là bây giờ xài hoá đơn điện tử rồi và vẫn phải tự tạo mã hoá đơn à? Không phải do ứng dụng tạo HĐ tự tạo mã 7 ký tự số?
Dạ. Chắc chủ topic muốn quản lý nội bộ thôi ạ.
Còn với hóa đơn điện tử mới bây giờ thì ứng dụng vẫn tự tạo mã ạ, nhưng số ký tự hóa đơn thì không quy định bắt buộc là bao nhiêu số chỉ giới hạn tối đa 8 số nên số hóa đơn có thể là 1 hoặc 01 hay 0001 hoặc thích có thể là 00000001 - tùy nhu cầu mỗi DN.
Trên ký hiệu hóa đơn có quy định về năm tạo hóa đơn ví dụ năm 2021 sẽ là 1C21TAA.
 
Upvote 0
Web KT
Back
Top Bottom