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,269
Được thích
3,013
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:
Em tải bản mới và cũ của anh chạy nó lấy thiếu 1 cái hóa đơn kiểm tra trên trang thuế thì có hóa đơn bị thiếu đó. Tải file từ trang thuế thì cũng có hóa đơn bị thiếu đó luôn anh @ongke0711.
Em chạy bản v4 3 lần, 2 lần đầu không có hóa đơn đó, đến lần 3 thì mới có. Là do lỗi mạng hay sao vậy anh?
 
Upvote 0
Em chạy bản v4 3 lần, 2 lần đầu không có hóa đơn đó, đến lần 3 thì mới có. Là do lỗi mạng hay sao vậy anh?
Chủ yếu là do lỗi kết nối với web khi gửi request số hóa đơn đó và web không trả về thông tin, code tự nhảy qua tải hóa đơn khác.
Đối với code hiện tại của tôi chỉ có thể tăng độ trễ kết nối để tránh gửi request liên tục thôi. Bạn kiếm hàm Sleep và tăng lên, đổi lại sẽ chậm đi rất nhiều.
 
Upvote 0
Chủ yếu là do lỗi kết nối với web khi gửi request số hóa đơn đó và web không trả về thông tin, code tự nhảy qua tải hóa đơn khác.
Đối với code hiện tại của tôi chỉ có thể tăng độ trễ kết nối để tránh gửi request liên tục thôi. Bạn kiếm hàm Sleep và tăng lên, đổi lại sẽ chậm đi rất nhiều.
Dạ, code tầm đó thì em chịu anh ơi. Em chưa đủ trình. Cám ơn anh đã phản hồi em!
 
Upvote 0
Nó đổi token luôn hay sao ấy, tra cứu tay vẫn được, nhưng chạy tra cứu bằng file thì không ra kết quả
Tôi thấy vẫn tải bình thường tại tệp này nha bạn

 
Upvote 0
E không hiểu sao, mấy bản cập nhật về sau, toàn bị lỗi như này
1731899470804.png
 
Upvote 0
E không hiểu sao, mấy bản cập nhật về sau, toàn bị lỗi như này
View attachment 305662
Lỗi này có thể do Office nó chặn cái Web browser control. Cách xử lý nhanh nhất là bạn cứ thêm dấu nháy đơn ( ' ) trước dòng lệnh có "wbCatcha" để vô hiệu hóa nó (dùng lệnh Find để tìm). Đã có code giải mã captcha tự động rồi nên khỏi hiển thị cũng được.


Screen Shot 2024-11-18 at 12.16.21.png
 
Upvote 0
Em đang bị lỗi này, và không ghi dữ liệu vào sheet chi tiết đượcView attachment 305656
Bạn thay cái hàm MsgboxUni trong module [MsgBoxTV] bằng code dưới đây: chạy thử xem.

JavaScript:
Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr
    Public Declare PtrSafe Function MessageBoxW Lib "user32" _
                                    (ByVal hwnd As LongPtr, _
                                    ByVal lpText As LongPtr, _
                                    ByVal lpCaption As LongPtr, _
                                    ByVal wType As Long) As Long
#Else
    Private Declare Function GetActiveWindow Lib "user32" () As Long
    Public Declare Function MessageBoxW Lib "user32" _
                            (ByVal hwnd As Long, _
                            ByVal lpText As Long, _
                            ByVal lpCaption As Long, _
                            ByVal wType As Long) As Long
#End If

Public Function MsgBoxUni(ByVal sMsgUni As String, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, Optional ByVal sTitleUni As String = vbNullString) As VbMsgBoxResult
    MsgBoxUni = MessageBoxW(GetActiveWindow, StrPtr(sMsgUni), StrPtr(sTitleUni), Buttons)
End Function
 
Upvote 0
vậy không có cách nào sửa được hả anh, tại vì để 2 cột thuế suất như vậy dễ nhầm lẫn, mà khai báo thuế gtgt bán ra thì nó phân biệt rõ KKKNT, KCT hay 0%
này có gì đâu, làm cái lệnh if KKKNT, KCT là 0% thì xong thôi ko có gì hết
 
Upvote 0
Upvote 0
Chỗ link tra cứu hóa đơn gốc, nếu 1 mã số thuế tổ chức giải pháp, mà có 2 link tra cứu thì làm sao ạ, em thử thêm vào mà nó toàn bắt link đầu tiên
Bài đã được tự động gộp:

Chỉ có một cách là dùng API để cho menu tự động cuộn khi rê chuột lên xuống

View attachment 305805
hóng <3
 
Upvote 0
Web KT

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

Back
Top Bottom