Tải hóa đơn điện tử (https://hoadondientu.gdt.gov.vn/) Excel Vba

Liên hệ QC

ongke0711

Thành viên gắn bó
Tham gia
7/9/06
Bài viết
2,260
Được thích
3,000
Giới tính
Nam
Chào các bạn,
Tôi ngồi mò mẫm mấy ngày mới tìm được cách tải hóa đơn điện tử từ trang https://hoadondientu.gdt.gov.vn/. Cách này có thể không chuyên nghiệp nhưng cũng giải quyết được vấn đề tải hóa đơn hàng loạt từ trang trên và ghi xuống Excel theo định dạng dễ tổng hợp dữ liệu sau này.
- Tốc độ không nhanh như các ứng dụng python siêu nhanh.
- Chưa tìm được các link tải file .xml hoặc .html
- Chưa trải nghiệm qua các định dạng hóa đơn điện tử của các nhà cung cấp giải pháp khác nhau nên sẽ không đảm bảo chạy đúng 100%.
- Chưa biết cách tích hợp code vượt Captcha của (Python, C#..) vào VBA nên phải nhập Captcha thủ công.
Nói chung cái tool cũng giải quyết được việc tải hóa đơn hàng loạt :D .
Tôi sẽ upload file demo không khóa (có khóa cũng như không) sau vì code còn lộn xộn lắm. Các bạn xem qua và đóng góp cách xử lý tốt hơn, gọn hơn nhé.



*** 12/10/2024: Cập nhật sửa một đống lỗi.
*** 15/10/2024: Cập nhật sửa lỗi Null và nhập ngày tháng.
*** 16/10/2024: Thêm tính năng lưu User/Pass.
*** 20/10/2024: Sửa lỗi hiển thị ngày tháng, sửa và thêm một số code phụ trợ.
*** 28/10/2024: Sửa lấy hóa đơn từ máy tính tiền.
*** 07/11/2024: Sửa code trích xuất dữ liệu, thêm cột so sánh.
*** 13/11/2024: Dùng code của bạn Hesanbi để tự động nhập Captcha. Thêm code lấy link tra cứu của VNPT và BKAV.
 

File đính kèm

Lần chỉnh sửa cuối:
1730963019959.png
Của e tải về dùng nó báo lỗi như này ad ơi. k hiện mã capcha để nhập luôn. có gì nhờ ad xem hộ e với. xin cám ơn
 
Upvote 0
:) năm 2006 tôi chỉ lọt chọt vô diễn đàn để hỏi mấy linh tinh làm báo cáo thôi. Sau đó 2015 mới quay lại tập tành tự học VBA.
ui thế thì cao thủ rồi ạ,
Công nhận VBA nhiều ứng dụng hay thật, em là dân tài chính kế toán thực sự thấy được ứng dụng quá tuyệt vời
Đang cố gắng để được Pro như bác
 
Upvote 0
ui thế thì cao thủ rồi ạ,
Công nhận VBA nhiều ứng dụng hay thật, em là dân tài chính kế toán thực sự thấy được ứng dụng quá tuyệt vời
Đang cố gắng để được Pro như bác
Bạn này mời nên chưa để ý, trên diễn đàn chủ yếu là những người nghiệp dư mới phải đi mày mò, chứ những người chuyên nghiệp thì đâu phải lụi hụi bao lâu như vậy.
 
Upvote 0
Bạn này mời nên chưa để ý, trên diễn đàn chủ yếu là những người nghiệp dư mới phải đi mày mò, chứ những người chuyên nghiệp thì đâu phải lụi hụi bao lâu như vậy.
Có chỗ nào đào tạo VBA để có thể viết VBA chuyên nghiệp không bác :D
Trên Youtube với các Khóa học Online toàn kiến thức nhập môn
 
Upvote 0
hỗ nào đào tạo VBA để có thể viết VBA chuyên nghiệp không bác :D
Trên Youtube với các Khóa học Online toàn kiến thức nhập

Mình không biết tiêu chí như thế nào thì được gọi là VBA chuyên nghiệp, nhưng nếu bạn không chê thì có thể bắt đầu từ các bài viết của anh befaint tại đây.
Cảm ơn bác.
Một số bác học VB6 để biên dịch code VBA thì có cần thiết không bác?
Hiện tại em tìm Hiểu VB6 đã dừng hỗ trợ từ lâu rồi
 
Upvote 0
Cảm ơn bác.
Một số bác học VB6 để biên dịch code VBA thì có cần thiết không bác?
Hiện tại em tìm Hiểu VB6 đã dừng hỗ trợ từ lâu rồi
Cái này còn phụ thuộc nhu cầu của bạn đến mức nào, nhiều người cũng nói làm tài chính kế toán như bạn nhưng lên đây chỉ nhờ lập vài công thức, có một số bạn thì nhờ viết vài code tổng hợp, tách dữ liệu .... Nếu chỉ như vậy thì với họ chắc là đủ dùng, còn với bạn đã đủ hay chưa thì mình chịu.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi có thêm cột so sánh trong sheet Chi tiết, bạn tải file mới xem có đúng chưa.
Cho em hỏi cái này chỉ là cảnh báo thôi phải không ạ? Em có chạy thử và có kiểm tra thì thấy số tiền thuế có Tổng hợp và Chi tiết bằng nhau sao vẫn có cảnh báo này.

1730972938051.png

Với vẫn còn bị lỗi định dạng ngày:
1730973137505.png
 
Upvote 0
Cho em hỏi cái này chỉ là cảnh báo thôi phải không ạ? Em có chạy thử và có kiểm tra thì thấy số tiền thuế có Tổng hợp và Chi tiết bằng nhau sao vẫn có cảnh báo này.
View attachment 305382

Là cành báo để đối chiếu: tổng thuế của từng dòng hàng hóa cộng lại so với cột tổng thuế trên hđ. Có khi nó chênh lệch do số thập phân.

Screenshot at Nov 07 17-43-49.png

Có những trường hợp cột tiền thuế ("tthue") chi tiết =null (không có) là những hóa đơn "không mã". Và có những kiểu hóa đơn "không mã" nhưng vẫn có cột "tthue".



Screen Shot 2024-11-07 at 17.49.45.png
 
Upvote 0
@huhumalu
Dùng các API GDIPlus vẽ các SVG Path trực tiếp lên Userform là được không cần đến WebBrowser ActiveX rất rờm rà. Google bạn sẽ tìm thấy thư viện clsGPIPlus, nhưng thư viện này là thư viện chung nên khá tốn kém. Trong đó có phương thức vẽ SVG.
[/CODE]
Anh chạy thử cái file này thì bị lỗi phần hiển thị hình các ký tự captcha. Em xem lại cách khắc phục như thế nào nhé.

Screen Shot 2024-11-08 at 13.03.33.png
 
Upvote 0
Trong Sub ghiExcel_ChiTiet bạn tính cột tiền thuế [cột 27 sheet ChiTietHD_mua] dựa vào TTruong = "Tiền thuế". Nhưng tôi gặp trường hợp hóa đơn sau bị lỗi. Do file xml này họ lại dùng TTruong = "TongTien_Thue". Hình như không có quy ước thống nhất tên trường nên Không biết còn có tên gọi nào nữa không để đưa luôn vào code:
Mã:
...
Select Case subItms2("ttruong")
   Case "Ti" & ChrW(7873) & "n thu" & ChrW(7871), "TongTien_Thue"
      ws.Cells(row_ct, 27).Value = subItms2("dlieu")
      tongthueCT = tongthueCT + Val(subItms2("dlieu"))
...
 

File đính kèm

  • TTruong_TienThue.JPG
    TTruong_TienThue.JPG
    68.2 KB · Đọc: 14
Upvote 0
Upvote 0
Trong Sub ghiExcel_ChiTiet bạn tính cột tiền thuế [cột 27 sheet ChiTietHD_mua] dựa vào TTruong = "Tiền thuế". Nhưng tôi gặp trường hợp hóa đơn sau bị lỗi. Do file xml này họ lại dùng TTruong = "TongTien_Thue". Hình như không có quy ước thống nhất tên trường nên Không biết còn có tên gọi nào nữa không để đưa luôn vào code:
Mã:
...
Select Case subItms2("ttruong")
   Case "Ti" & ChrW(7873) & "n thu" & ChrW(7871), "TongTien_Thue"
      ws.Cells(row_ct, 27).Value = subItms2("dlieu")
      tongthueCT = tongthueCT + Val(subItms2("dlieu"))
...

Tôi thấy các nhà cung cấp giải pháp khác nhau có thể sẽ gắn thông tin vào các thẻ khác nhau: thttltsuat[], ttin[], ttkhac[], ... và cả tên trường. Cái tên trường trong file XML cũng có thể khác so với tên trường trong file Json. Do đó chỉ khi gặp các hóa đơn khác nhau mới bổ sung thêm được. Cái tên trường "TongTien_Thue" có thể là "tgtthue" trong json, trong json tôi chưa thấy họ dùng dấu gạch dưới "_".
Theo như hình của bạn thì bạn thử thêm đoạn code riêng cho cái thẻ ttin[] xem sao.

ví dụ:

Screen Shot 2024-11-09 at 08.22.03.png

Tôi trích xuất dữ liệu từ file json do tôi thấy có nhiều hóa đơn có file json nhưng không có file XML (không có hồ sơ gốc) trên hệ thống nên nếu tổng hợp sẽ thiếu. Nếu bên kế toán chỉ cần lấy dữ liệu có file XML thôi thì dễ hơn nhiều, chỉ cần tải hàng loạt file XML rồi dùng cái tool của bạn @hoamattroicoi là nhanh gọn lẹ rồi.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi thấy các nhà cung cấp giải pháp khác nhau có thể sẽ gắn thông tin vào các thẻ khác nhau: thttltsuat[], ttin[], ttkhac[], ... và cả tên trường. Cái tên trường trong file XML cũng có thể khác so với tên trường trong file Json. Do đó chỉ khi gặp các hóa đơn khác nhau mới bổ sung thêm được. Cái tên trường "TongTien_Thue" có thể là "tgtthue" trong json, trong json tôi chưa thấy họ dùng dấu gạch dưới "_".
Theo như hình của bạn thì bạn thử thêm đoạn code riêng cho cái thẻ ttin[] xem sao.

ví dụ:

View attachment 305423

Tôi trích xuất dữ liệu từ file json do tôi thấy có nhiều hóa đơn có file json nhưng không có file XML (không có hồ sơ gốc) trên hệ thống nên nếu tổng hợp sẽ thiếu. Nếu bên kế toán chỉ cần lấy dữ liệu có file XML thôi thì dễ hơn nhiều, chỉ cần tải hàng loạt file XML rồi dùng cái tool của bạn @hoamattroicoi là nhanh gọn lẹ rồi.
Em thấy thực tế các PM có phí hiện nay luôn, quy trình: họ tải danh sách hóa đơn => tải XML => Xuất chi tiết.
- Đối trường hợp hóa đơn Không Mã (Ký hiệu: 1K24...) thì không phải Nhà cung cấp hóa đơn nào họ cũng tải lên liền đâu ah (bảng tổng hợp danh sách lên), nên không tải được hóa đơn là hết sức bình thường ah
 
Upvote 0
Trong Sub ghiExcel_ChiTiet bạn tính cột tiền thuế [cột 27 sheet ChiTietHD_mua] dựa vào TTruong = "Tiền thuế". Nhưng tôi gặp trường hợp hóa đơn sau bị lỗi. Do file xml này họ lại dùng TTruong = "TongTien_Thue". Hình như không có quy ước thống nhất tên trường nên Không biết còn có tên gọi nào nữa không để đưa luôn vào code:
Mã:
...
Select Case subItms2("ttruong")
   Case "Ti" & ChrW(7873) & "n thu" & ChrW(7871), "TongTien_Thue"
      ws.Cells(row_ct, 27).Value = subItms2("dlieu")
      tongthueCT = tongthueCT + Val(subItms2("dlieu"))
...

Tôi mới tìm ra thêm một trường tên như bên dưới, bạn bổ sung thêm vào dòng code của bạn.

Mã:
"Tiền thuế dòng (Tiền thuế GTGT)"

"Ti" & ChrW(7873) & "n thu" & ChrW(7871) & " d" & ChrW(242) & "ng (Ti" & ChrW(7873) & "n thu" & ChrW(7871) & " GTGT)"
 
Upvote 0
Có nhiều loại hóa đơn, mỗi hóa đơn lại có các khóa thẻ xml khác nhau, họ định nghĩa là thẻ tên trường, thì có dữ liệu tương ứng nằm trong các khóa thông tin khác. Hddt mua vào và bán ra có các trường khác nhau. Ở trên em có để cái bảng thẻ xml, trong đó có nhiều trường đã phân biệt trường chung và riêng.
Có hóa đơn sai sót và thay đổi cũng có các thẻ do TT và NĐ cqt định nghĩa.
 
Upvote 0
Web KT

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

Back
Top Bottom