Mẫu dữ liệu cho quy trình trả hàng và hoàn tiền
Mẫu dữ liệu cho quy trình trả hàng và hoàn tiền
- Các thuộc tính nên thu thập
- Các hoạt động chính cần theo dõi
- Hướng dẫn trích xuất dữ liệu
Thuộc tính của quy trình trả hàng và hoàn tiền
| Tên | Mô tả | ||
|---|---|---|---|
| Mã trường hợp trả hàng ReturnCaseId | Mã định danh duy nhất cho yêu cầu trả hàng của khách, liên kết mọi hoạt động và chứng từ liên quan. | ||
| Mô tả Mã trường hợp trả hàng là khóa chính dùng để theo dõi toàn bộ vòng đời của quy trình trả hàng, từ lúc bắt đầu đến khi kết thúc. Mỗi mã ứng với một lần trả hàng cụ thể của khách và bao gồm mọi sự kiện liên quan như tạo đơn hàng, giao hàng, kiểm tra và xử lý credit memo. Trong phân tích quy trình, thuộc tính này là nền tảng để dựng sơ đồ quy trình. Hệ thống dùng mã này để nhóm các sự kiện riêng lẻ thành hành trình xử lý xuyên suốt, từ đó phân tích các biến thể quy trình, thời gian xử lý và điểm nghẽn của từng trường hợp trả hàng. Vì sao điều này quan trọng Đây là mã định danh thiết yếu, kết nối mọi bước trong một lần trả hàng để bạn phân tích luồng và hiệu suất của toàn bộ quy trình. Lấy dữ liệu ở đâu Thông thường đây là số đơn hàng trả lại trong phân hệ Bán hàng và phân phối (SD). Số này nằm trong trường VBELN của bảng VBAK (Sales Document Header Data), với loại chứng từ (VBAK-VBTYP) là 'H' đối với hàng trả lại. Ví dụ 600001236000045660000789 | |||
| Tên hoạt động ActivityName | Tên của một sự kiện hoặc bước nghiệp vụ cụ thể trong quy trình trả hàng. | ||
| Mô tả Thuộc tính này mô tả một hành động riêng lẻ hoặc một lần thay đổi trạng thái trong vòng đời trả hàng, chẳng hạn như 'Tạo đơn hàng trả lại', 'Hạch toán nhận hàng' hoặc 'Tạo credit memo'. Các hoạt động này tạo nên sơ đồ quy trình. Phân tích trình tự và tần suất hoạt động giúp xác định các luồng quy trình phổ biến nhất, những sai lệch và các vòng lặp làm lại. Đây là cơ sở để hiểu những gì diễn ra trong một trường hợp và theo thứ tự nào, đồng thời là nền tảng cho mọi phân tích process mining. Vì sao điều này quan trọng Hoạt động xác định các bước trong quy trình. Phân tích trình tự, thời lượng và tần suất của chúng là trọng tâm của process mining, giúp cho thấy công việc thực sự diễn ra như thế nào. Lấy dữ liệu ở đâu Được xác định từ các thay đổi trạng thái trong những bảng như VBUK/VBUP, sự kiện tạo chứng từ (ví dụ trong VBAK, LIKP, VBRK) hoặc nhật ký thay đổi trong các bảng CDHDR/CDPOS. Ví dụ Đã tạo đơn hàng trả lạiĐã ghi nhận nhập hàngĐã tạo chứng từ ghi cóHoàn tất mặt hàng trong đơn hàng trả lại | |||
| Thời điểm sự kiện EventTime | Ngày và giờ chính xác khi hoạt động diễn ra. | ||
| Mô tả Dấu thời gian này ghi lại chính xác thời điểm một sự kiện nghiệp vụ xảy ra. Mỗi hoạt động trong quy trình đều có dấu thời gian, giúp xác định trình tự sự kiện trong một trường hợp. Thời điểm sự kiện rất quan trọng đối với mọi phân tích theo thời gian, từ tính thời gian giữa các hoạt động, tìm điểm nghẽn do phải chờ đến đo tổng thời lượng xử lý một trường hợp. Dữ liệu này hỗ trợ phân tích hiệu suất và kiểm tra tuân thủ các thỏa thuận mức dịch vụ (SLA). Vì sao điều này quan trọng Dấu thời gian này cần thiết để tính thời lượng, phân tích hiệu suất quy trình, tìm điểm nghẽn và hiểu tiến trình của từng trường hợp trả hàng. Lấy dữ liệu ở đâu Dữ liệu lấy từ nhiều trường ngày và giờ trong các bảng SAP. Với sự kiện tạo, thường dùng các trường ERDAT và ERZET (ví dụ trong VBAK). Với sự kiện thay đổi, dùng UDATE và UTIME trong bảng CDHDR. Ví dụ 2023-04-15T10:22:05Z2023-04-16T14:01:30Z2023-04-18T09:15:00Z | |||
| Hệ thống nguồn SourceSystem | Hệ thống dùng để trích xuất dữ liệu. | ||
| Mô tả Thuộc tính này xác định nguồn gốc dữ liệu, rất cần thiết trong môi trường có nhiều hệ thống. Thuộc tính cung cấp ngữ cảnh và giúp đảm bảo khả năng truy xuất nguồn gốc cũng như tính toàn vẹn của dữ liệu. Khi phân tích, bạn có thể dùng thuộc tính này để phân đoạn hoặc lọc dữ liệu khi kết hợp quy trình từ nhiều hệ thống nguồn. Thuộc tính cũng xác nhận sự kiện đến từ đúng ứng dụng dự kiến, trong trường hợp này là SAP ECC. Vì sao điều này quan trọng Xác định nguồn gốc dữ liệu, yếu tố quan trọng đối với quản trị dữ liệu và phân tích trên nhiều hệ thống doanh nghiệp. Lấy dữ liệu ở đâu Đây là giá trị tĩnh được xác định trong quá trình trích xuất dữ liệu để nhận diện phiên bản SAP ECC cụ thể (ví dụ: 'ECC_PROD_100'). Ví dụ SAP_ECC_PRODSAPECC_FINANCE_200 | |||
| Lần cập nhật dữ liệu gần nhất LastDataUpdate | Dấu thời gian cho biết lần gần nhất dữ liệu của quy trình này được làm mới. | ||
| Mô tả Thuộc tính này ghi lại ngày giờ của lần trích xuất hoặc cập nhật dữ liệu gần nhất, giúp bạn biết dữ liệu đang phân tích mới đến mức nào. Điều này giúp đánh giá mức độ cập nhật của thông tin phân tích. Người dùng có thể xem dữ liệu hiện hành đến đâu, từ đó hiểu mức độ phù hợp của các phát hiện, nhất là khi theo dõi hoạt động đang diễn ra. Vì sao điều này quan trọng Cho biết dữ liệu mới đến mức nào, giúp người dùng biết phân tích quy trình đang dựa trên dữ liệu hiện hành ra sao và khi nào có thể chờ đợt cập nhật tiếp theo. Lấy dữ liệu ở đâu Đây là thuộc tính siêu dữ liệu được điền bằng dấu thời gian khi tác vụ trích xuất dữ liệu chạy. Ví dụ 2023-05-20T02:00:00Z2023-05-21T02:00:00Z | |||
| Kênh trả hàng ReturnChannel | Kênh khách dùng để bắt đầu trả hàng, chẳng hạn như trực tuyến, tại cửa hàng hoặc qua tổng đài. | ||
| Mô tả Thuộc tính này cho biết nguồn hoặc cách tiếp nhận yêu cầu trả hàng. Nhờ đó, bạn có thể phân biệt yêu cầu gửi qua cổng thông tin web, tại cửa hàng hoặc qua nhân viên dịch vụ khách hàng. Phân đoạn quy trình theo kênh trả hàng rất quan trọng để hiểu khác biệt trong vận hành và phân bổ tài nguyên. Ví dụ, hàng trả tại cửa hàng có thể được kiểm tra nhanh hơn nhưng cần các bước lập chứng từ khác với hàng trả trực tuyến. Đây là chiều phân tích chính trong dashboard 'Xu hướng sản lượng xử lý hàng trả lại'. Vì sao điều này quan trọng Phân biệt cách khách bắt đầu trả hàng, yếu tố thường ảnh hưởng đến luồng quy trình, nhu cầu tài nguyên và thời gian xử lý của từng kênh. Lấy dữ liệu ở đâu Trường này thường không có sẵn trong SAP ECC. Bạn có thể cần lấy dữ liệu từ trường tùy chỉnh (ví dụ trong VBAK) hoặc suy ra từ dữ liệu khác như Tổ chức bán hàng (VKORG) hay Kênh phân phối (VTWEG). Hãy tham khảo tài liệu SAP ECC để biết cách triển khai cụ thể. Ví dụ Cổng thông tin trực tuyếnTại cửa hàngTổng đài | |||
| Lý do trả hàng ReturnReason | Mã lý do khách hàng cung cấp khi trả mặt hàng. | ||
| Mô tả Thuộc tính này cho biết lý do trả sản phẩm, dựa trên các mã lý do được định nghĩa sẵn trong SAP. Ví dụ: 'Hư hỏng trong quá trình vận chuyển', 'Giao nhầm sản phẩm' hoặc 'Không vừa'. Đây là chiều phân tích quan trọng để tìm nguyên nhân gốc rễ. Khi lọc sơ đồ quy trình hoặc KPI theo lý do trả hàng, chuyên viên phân tích có thể xác định liệu một số lý do có liên quan đến thời gian xử lý lâu hơn, tỷ lệ không đạt kiểm tra cao hơn hay sai lệch quy trình cụ thể hay không. Từ đó, doanh nghiệp có thể cải tiến chất lượng sản phẩm, hậu cần hoặc quy trình bán hàng. Vì sao điều này quan trọng Cho biết lý do phát sinh hàng trả lại, giúp tìm nguyên nhân gốc rễ và giảm tỷ lệ trả hàng bằng cách xử lý vấn đề về chất lượng sản phẩm, giao hàng hoặc mô tả sản phẩm. Lấy dữ liệu ở đâu Nằm trong bảng mặt hàng chứng từ bán hàng VBAP, trường ABGRU (lý do từ chối chứng từ bán hàng). Ví dụ 001 - Sản phẩm bị hư hỏng002 - Giao nhầm sản phẩm005 - Hàng đến quá muộn | |||
| Mã vật tư MaterialNumber | Mã định danh duy nhất của sản phẩm được trả lại. | ||
| Mô tả Mã vật tư, hay SKU, xác định chính xác mặt hàng được trả lại. Nhờ đó, bạn có thể phân tích chi tiết ở cấp sản phẩm. Phân tích hàng trả lại theo mã vật tư giúp doanh nghiệp tìm ra sản phẩm có tỷ lệ trả cao, có thể do vấn đề chất lượng, mô tả chưa chính xác hoặc lỗi sản xuất. Thuộc tính này rất cần thiết cho các dashboard như 'Ảnh hưởng của hàng trả lại đến tồn kho' và giúp hiểu cách từng sản phẩm đi qua quy trình trả hàng. Vì sao điều này quan trọng Xác định sản phẩm nào đang bị trả lại, qua đó làm rõ các vấn đề tiềm ẩn về kiểm soát chất lượng hoặc mô tả sản phẩm chưa chính xác. Lấy dữ liệu ở đâu Nằm trong bảng mặt hàng chứng từ bán hàng VBAP, trường MATNR. Ví dụ RM-1025FG-2050-BACC-5591 | |||
| Người xử lý ProcessingAgent | Mã người dùng của nhân viên thực hiện hoạt động. | ||
| Mô tả Thuộc tính này ghi nhận tên người dùng của người thực hiện một bước cụ thể trong quy trình, chẳng hạn như tạo đơn hàng trả lại hoặc hạch toán nhận hàng. Trường này thường có tên 'Changed By' hoặc 'Created By'. Phân tích theo người xử lý giúp quản lý hiệu suất và phân bổ tài nguyên. Qua đó, bạn có thể nhận diện người làm tốt, người cần được đào tạo thêm và cách phân chia khối lượng công việc trong nhóm. Thuộc tính này được dùng trong các dashboard như 'Hiệu suất xử lý hàng trả lại của nhân viên' để so sánh thời gian xử lý và sản lượng. Vì sao điều này quan trọng Theo dõi sự tham gia của người dùng, giúp phân tích hiệu suất nhóm, phân bổ khối lượng công việc và xác định nhu cầu đào tạo hoặc cách làm hiệu quả. Lấy dữ liệu ở đâu Thường nằm trong các trường như ERNAM (người tạo) hoặc AENAM (người thay đổi) ở các bảng phần đầu như VBAK, LIKP, VBRK. Với sự kiện thay đổi, trường này là USERNAME trong CDHDR. Ví dụ CBURNSDSCRANTONJHALPERT | |||
| Số tiền hoàn lại được yêu cầu RequestedRefundAmount | Số tiền dự kiến hoàn lại, thường dựa trên giá trị thuần của (các) mặt hàng được trả. | ||
| Mô tả Thuộc tính này thể hiện số tiền ban đầu của hàng trả lại, được ghi nhận trong đơn hàng trả lại. Đây là mốc tham chiếu cho phân tích và đối soát tài chính. Bạn có thể so sánh số tiền này với 'Số tiền hoàn lại thực tế' để theo dõi chênh lệch. Đây là chỉ số chính trong dashboard 'Theo dõi chênh lệch số tiền hoàn lại'. Phân tích giá trị này giúp theo dõi ảnh hưởng tài chính của hàng trả lại và phát hiện vấn đề tiềm ẩn trong định giá hoặc tính toán khoản credit. Vì sao điều này quan trọng Xác định giá trị tài chính ban đầu của hàng trả lại, cần thiết để theo dõi chênh lệch tài chính và hiểu tổng giá trị hàng được trả. Lấy dữ liệu ở đâu Giá trị này thường là giá trị thuần ở cấp mặt hàng trong đơn hàng trả lại. Nằm trong bảng VBAP, trường NETWR. Ví dụ 150.0049.991250.75 | |||
| Số tiền hoàn lại thực tế ActualRefundAmount | Số tiền cuối cùng được ghi có cho khách hàng theo chứng từ tài chính. | ||
| Mô tả Thuộc tính này là số tiền hoàn lại cuối cùng đã được xác nhận, xử lý và hạch toán trong hệ thống kế toán. Số tiền có thể khác với số tiền yêu cầu do phí nhập kho lại, điều chỉnh theo tình trạng mặt hàng hoặc áp dụng chính sách khác. Đây là thuộc tính quan trọng trong dashboard 'Theo dõi chênh lệch số tiền hoàn lại'. So sánh số tiền thực tế với số tiền yêu cầu giúp phát hiện vấn đề mang tính hệ thống trong khâu tính toán và phê duyệt hoàn tiền, đồng thời đảm bảo tính chính xác về tài chính. Vì sao điều này quan trọng Thể hiện kết quả tài chính cuối cùng của lần trả hàng. So sánh với số tiền yêu cầu giúp kiểm tra độ chính xác và phát hiện thất thoát tài chính. Lấy dữ liệu ở đâu Lấy từ chứng từ tài chính liên quan đến credit memo. Thông tin thường nằm trong bảng BSEG (Accounting Document Segment), trường WRBTR (số tiền theo loại tiền của chứng từ), tại dòng hạch toán tài khoản G/L liên quan. Ví dụ 150.0045.001200.75 | |||
| Chênh lệch số tiền hoàn lại RefundAmountDiscrepancy | Khoản chênh lệch được tính giữa số tiền hoàn lại thực tế và số tiền yêu cầu. | ||
| Mô tả Chỉ số được tính toán này cho biết chênh lệch tiền giữa số tiền ban đầu được yêu cầu trong đơn hàng trả lại và số tiền cuối cùng được phát hành trong credit memo. Giá trị dương có thể cho thấy chỉ hoàn một phần. Giá trị âm là bất thường nhưng có thể là dấu hiệu thanh toán thừa. Đây là chỉ số chính trong dashboard 'Theo dõi chênh lệch số tiền hoàn lại'. Chỉ số giúp nhanh chóng phát hiện và phân tích các trường hợp có sai lệch tài chính do đánh giá tình trạng mặt hàng, phí nhập kho lại hoặc lỗi xử lý. Theo dõi chỉ số này giúp kiểm soát tài chính và đảm bảo thực hiện đúng chính sách. Vì sao điều này quan trọng Đo trực tiếp sai lệch tài chính trong quy trình hoàn tiền, giúp phát hiện trường hợp không tuân thủ chính sách, lỗi xử lý hoặc thất thoát tài chính. Lấy dữ liệu ở đâu Trường được tính: ActualRefundAmount - RequestedRefundAmount. Ví dụ 0.00-4.99-50.00 | |||
| Chứng từ bán hàng gốc OriginalSalesDocument | Số đơn hàng bán ban đầu làm căn cứ cho lần trả hàng. | ||
| Mô tả Thuộc tính này liên kết trực tiếp với giao dịch mua ban đầu của khách hàng. Đây là chứng từ tham chiếu nối lần trả hàng với thông tin giao dịch gốc. Liên kết này rất hữu ích cho phân tích chuyên sâu. Chuyên viên phân tích có thể tìm hiểu lý do khách trả hàng từ một số đơn hàng nhất định, kiểm tra giá và điều khoản ban đầu, cũng như xem toàn bộ vòng đời từ đặt hàng đến trả hàng. Thuộc tính này còn giúp trả lời câu hỏi liệu sản phẩm bán qua chiến dịch hoặc kênh cụ thể có tỷ lệ trả hàng cao hơn hay không. Vì sao điều này quan trọng Liên kết hàng trả lại với giao dịch bán ban đầu, giúp xem toàn bộ hành trình giao dịch của khách hàng và tìm nguyên nhân gốc rễ sâu hơn. Lấy dữ liệu ở đâu Thông tin tham chiếu này được lưu ở cấp mặt hàng trong đơn hàng trả lại. Có thể tìm thấy trong bảng VBAP, trường VGBEL (số chứng từ tham chiếu). Ví dụ 100034561000987110012345 | |||
| Mã công ty CompanyCode | Pháp nhân hoặc công ty chịu trách nhiệm cho giao dịch. | ||
| Mô tả Mã công ty đại diện cho một đơn vị kế toán độc lập trong SAP. Mọi giao dịch tài chính, bao gồm trả hàng và hoàn tiền, đều được hạch toán vào một mã công ty cụ thể. Thuộc tính này cần thiết cho báo cáo tài chính và phân đoạn quy trình tại các tổ chức đa quốc gia hoặc có nhiều pháp nhân. Phân tích theo mã công ty giúp so sánh hiệu suất quy trình trả hàng giữa các pháp nhân trong tập đoàn. Vì sao điều này quan trọng Cho phép lọc và so sánh quy trình trả hàng giữa các pháp nhân trong tổ chức, rất cần thiết cho phân tích tài chính. Lấy dữ liệu ở đâu Nằm trong bảng phần đầu chứng từ bán hàng VBAK, trường BUKRS_VF (mã công ty dùng cho thanh toán). Ví dụ 10002000US01 | |||
| Mã khách hàng CustomerId | Mã định danh duy nhất của khách hàng gửi yêu cầu trả hàng. | ||
| Mô tả Thuộc tính này xác định khách hàng cụ thể (trong SAP gọi là 'Sold-to Party') trả sản phẩm và liên kết giao dịch trả hàng với dữ liệu chính của khách hàng. Phân tích theo mã khách hàng giúp nhận diện khách thường xuyên trả hàng, dấu hiệu có thể cho thấy họ chưa hài lòng hoặc có khả năng lợi dụng chính sách trả hàng. Kết hợp với dữ liệu phân khúc khách hàng, thuộc tính này cũng giúp tìm hiểu liệu các nhóm khách hàng khác nhau có hành vi trả hàng hoặc trải nghiệm quy trình khác nhau hay không. Vì sao điều này quan trọng Liên kết hàng trả lại với từng khách hàng, giúp phân tích hành vi, nhận diện khách thường xuyên trả hàng và đánh giá ảnh hưởng đến mối quan hệ với khách hàng. Lấy dữ liệu ở đâu Nằm trong bảng phần đầu chứng từ bán hàng VBAK, trường KUNNR (Sold-to party). Ví dụ CUST-100432CUST-203991CUST-831102 | |||
| Ngày mục tiêu hoàn tiền theo SLA RefundSLATargetDate | Ngày dự kiến hoàn tất xử lý hoàn tiền theo thỏa thuận mức dịch vụ. | ||
| Mô tả Thuộc tính này xác định hạn hoàn tất quy trình hoàn tiền cho một trường hợp trả hàng. Hạn thường được tính theo quy tắc nghiệp vụ, chẳng hạn '5 ngày làm việc kể từ khi nhận hàng'. Đây là mốc để so sánh với hiệu suất thực tế. Thuộc tính này là thành phần chính của dashboard 'Tuân thủ SLA xử lý hoàn tiền', giúp doanh nghiệp theo dõi việc thực hiện cam kết với khách hàng và phát hiện các trường hợp có nguy cơ trễ SLA. Vì sao điều này quan trọng Đặt mục tiêu hiệu suất xử lý hoàn tiền, giúp doanh nghiệp đo lường và báo cáo mức độ tuân thủ SLA, đồng thời ưu tiên xử lý các trường hợp quá hạn. Lấy dữ liệu ở đâu Trường này thường không có sẵn trong SAP và cần được tính theo quy tắc nghiệp vụ. Có thể lấy một ngày mốc (ví dụ ngày nhận hàng từ MKPF) rồi cộng thêm khoảng thời gian đã cấu hình. Hãy tham khảo tài liệu SAP ECC hoặc yêu cầu nghiệp vụ. Ví dụ 2023-04-25T23:59:59Z2023-04-28T23:59:59Z2023-05-02T23:59:59Z | |||
| Nhà máy Plant | Địa điểm hoặc cơ sở thực tế tiếp nhận và xử lý mặt hàng được trả lại. | ||
| Mô tả Trong SAP, nhà máy là một địa điểm thực tế như kho hoặc trung tâm phân phối, nơi hàng hóa được xử lý. Với hàng trả lại, đây thường là nơi tiếp nhận và kiểm tra mặt hàng. Phân tích quy trình theo nhà máy giúp phát hiện khác biệt về hiệu suất giữa các cơ sở. Bạn có thể xác định kho nào kiểm tra mặt hàng hiệu quả hơn hoặc xử lý được nhiều hàng hơn, hỗ trợ dashboard 'Sản lượng và hiệu quả kiểm tra mặt hàng'. Vì sao điều này quan trọng Xác định địa điểm xử lý hàng trả lại, giúp so sánh hiệu suất giữa các kho hoặc trung tâm phân phối. Lấy dữ liệu ở đâu Nằm ở cấp mặt hàng trong đơn hàng trả lại, bảng VBAP, trường WERKS. Ví dụ PL01WH02DC05 | |||
| Số credit memo CreditMemoNumber | Mã định danh duy nhất của chứng từ credit memo được phát hành để hoàn tiền. | ||
| Mô tả Credit memo là chứng từ thanh toán chính thức trong SAP, xác nhận khoản tiền sẽ hoàn lại cho khách hàng. Số này định danh duy nhất chứng từ tài chính đó. Thuộc tính này cần thiết cho đối soát tài chính và theo dõi quy trình từ khâu trả hàng đến quyết toán tài chính. Đây là cột mốc quan trọng trong quy trình, đồng thời giúp tìm các chứng từ kế toán liên quan đến những thuộc tính như 'Số tiền hoàn lại thực tế'. Vì sao điều này quan trọng Liên kết trực tiếp đến chứng từ tài chính phê duyệt khoản hoàn tiền cho khách hàng, cần thiết cho kiểm toán và đối soát tài chính. Lấy dữ liệu ở đâu Credit memo là một chứng từ thanh toán. Số chứng từ nằm trong bảng VBRK (Billing Document: Header Data), trường VBELN. Có thể tìm liên kết thông qua luồng chứng từ của đơn hàng trả lại. Ví dụ 900011229000334490005566 | |||
| Trạng thái đơn hàng trả lại ReturnOrderStatus | Trạng thái xử lý tổng thể của trường hợp trả hàng. | ||
| Mô tả Thuộc tính này cho biết trạng thái hiện tại của trường hợp trả hàng, chẳng hạn như 'Đang mở', 'Đang xử lý' hoặc 'Đã hoàn tất'. Trạng thái được xác định từ các trạng thái ở cấp phần đầu hoặc mặt hàng của chứng từ bán hàng. Khi phân tích, bạn có thể dùng thuộc tính này để lọc các trường hợp đang xử lý hoặc đã hoàn tất. Thuộc tính giúp theo dõi khối lượng công việc và tiến độ chung của các trường hợp đang mở, đồng thời cho biết kết quả tổng quát của từng lần trả hàng. Vì sao điều này quan trọng Cho biết khái quát một trường hợp đang ở giai đoạn nào, giúp lọc và phân tích các yêu cầu trả hàng đang mở, đang xử lý hoặc đã đóng. Lấy dữ liệu ở đâu Được xác định từ các trường trạng thái trong bảng VBUK (trạng thái phần đầu) và VBUP (trạng thái mặt hàng). Ví dụ, VBUK-GBSTK là trạng thái xử lý tổng thể của chứng từ. Ví dụ Đang mởĐang xử lýĐã hoàn tất | |||
| Tuân thủ chính sách trả hàng ReturnPolicyAdherence | Cờ cho biết lần trả hàng có tuân thủ tất cả quy tắc và chính sách nghiệp vụ đã xác định hay không. | ||
| Mô tả Thuộc tính boolean được tính toán này cho biết trường hợp trả hàng có tuân theo chính sách chuẩn của công ty hay không. Logic có thể kiểm tra nhiều điều kiện, chẳng hạn yêu cầu trả hàng có được gửi trong thời hạn cho phép không, mã lý do có hợp lệ với sản phẩm không, hoặc trường hợp ngoại lệ đã được quản lý phê duyệt chưa. Thuộc tính này hỗ trợ dashboard 'Tuân thủ chính sách phê duyệt trả hàng'. Dashboard giúp đo trực tiếp tỷ lệ tuân thủ và xác định chính sách nào thường bị bỏ qua nhất, từ đó cải tiến quy trình hoặc tập trung đào tạo. Vì sao điều này quan trọng Đo mức độ tuân thủ quy tắc nghiệp vụ, giúp áp dụng chính sách nhất quán và xác định các trường hợp cần xem xét hoặc phê duyệt đặc biệt. Lấy dữ liệu ở đâu Đây là thuộc tính được suy ra từ một tập hợp quy tắc nghiệp vụ. Ví dụ: (Ngày bắt đầu trả hàng - Ngày mua ban đầu) <= 30 ngày AND ReturnReason IS NOT NULL. Ví dụ truefalse | |||
| Tuân thủ SLA IsSLACompliant | Cờ cho biết khoản hoàn tiền có được xử lý trong thời hạn SLA đã thỏa thuận hay không. | ||
| Mô tả Đây là thuộc tính boolean được tính bằng cách so sánh ngày thực tế của hoạt động 'Đã xử lý hoàn tiền' với 'Ngày mục tiêu hoàn tiền theo SLA'. Giá trị là true nếu hoàn tiền đúng hạn và false nếu không. Thuộc tính này giúp đơn giản hóa phân tích và báo cáo bằng cách đưa ra kết quả rõ ràng, có hoặc không, về việc thực hiện SLA của từng trường hợp. Thuộc tính được dùng để tính tỷ lệ 'Tuân thủ SLA xử lý hoàn tiền' tổng thể và lọc nhanh các trường hợp không tuân thủ để phân tích. Vì sao điều này quan trọng Cho biết rõ từng trường hợp có đạt SLA hay không, giúp đơn giản hóa việc theo dõi và báo cáo tuân thủ. Lấy dữ liệu ở đâu Đây là thuộc tính được tính toán. Logic: Thời điểm sự kiện của 'Đã xử lý hoàn tiền' <= Ngày mục tiêu hoàn tiền theo SLA. Ví dụ truefalse | |||
Các hoạt động trong quy trình trả hàng và hoàn tiền
| Hoạt động | Mô tả | ||
|---|---|---|---|
| Credit memo được hạch toán vào FI | Credit memo được chuyển sang kế toán tài chính và ghi nhận chính thức vào khoản phải thu. Bước này khởi động quy trình thanh toán tiền hoàn lại cho khách hàng. | ||
| Vì sao điều này quan trọng Hoạt động này đánh dấu thời điểm công ty ghi nhận khoản hoàn tiền về mặt tài chính. Nếu việc hạch toán chậm sau khi tạo credit memo, khách hàng cũng sẽ nhận tiền hoàn lại muộn hơn. Lấy dữ liệu ở đâu Đây là sự kiện được suy ra khi trạng thái hạch toán trong phần đầu chứng từ thanh toán (VBRK-RFBSK) được cập nhật thành 'C' (đã tạo chứng từ hạch toán). Ngày tạo chứng từ kế toán thực tế nằm trong bảng BKPF. Thu thập Xác định dấu thời gian khi VBRK-RFBSK được đặt thành 'C', hoặc dùng ngày tạo (CPUDT) trong chứng từ kế toán BKPF được liên kết. Loại sự kiện inferred | |||
| Đã đưa ra quyết định sử dụng | Sau khi kiểm tra, kỹ sư chất lượng hoặc nhân viên kiểm tra đưa ra quyết định chính thức về tình trạng của hàng trả lại. Quyết định này xác định bước xử lý tiếp theo, chẳng hạn như nhập lại kho, loại bỏ hoặc sửa chữa. | ||
| Vì sao điều này quan trọng Hoạt động này rất quan trọng để hiểu hiệu quả kiểm tra và kết quả kiểm tra. Quyết định ảnh hưởng trực tiếp đến số tiền hoàn và việc quản lý hàng tồn kho. Lấy dữ liệu ở đâu Nếu sử dụng SAP QM, đây là sự kiện được ghi nhận rõ ràng trong bảng QAVE (quyết định sử dụng trong xử lý kiểm tra). Thời điểm ra quyết định được lưu trong QAVE-VDATUM. Bảng QALS chứa liên kết đến lệnh giao hàng. Thu thập Dùng ngày quyết định sử dụng (VDATUM) từ bảng QAVE, liên kết qua lô kiểm tra (QALS-PRUEFLOS). Loại sự kiện explicit | |||
| Đã ghi nhận nhập hàng | Hoạt động này xảy ra khi hàng trả lại được tiếp nhận tại kho hoặc trung tâm xử lý. Sự kiện được ghi nhận khi chứng từ luân chuyển hàng hóa được hạch toán cho lệnh giao hàng trả lại. | ||
| Vì sao điều này quan trọng Đây là cột mốc quan trọng cho biết công ty đã tiếp nhận hàng trả lại. Đây là điểm bắt đầu của khâu kiểm tra thực tế và có ảnh hưởng đến độ chính xác của hàng tồn kho. Lấy dữ liệu ở đâu Có thể suy ra sự kiện này từ trạng thái luân chuyển hàng hóa của mặt hàng trong lệnh giao hàng trả lại tại bảng VBUP (ví dụ: WBSTA = 'C'). Dấu thời gian chính xác nằm trong đầu chứng từ vật tư (MKPF-BUDAT) của lần nhập hàng tương ứng. Thu thập Tìm ngày hạch toán (BUDAT) trong bảng MKPF của chứng từ vật tư liên kết với lệnh giao hàng trả lại. Loại sự kiện inferred | |||
| Đã tạo chứng từ ghi có | Tạo chứng từ thanh toán (credit memo) để phê duyệt khoản ghi có cho khách hàng. Đây là chứng từ tài chính chính thức xác nhận số tiền hoàn lại. | ||
| Vì sao điều này quan trọng Đây là một cột mốc tài chính quan trọng trong quy trình. Phân tích thời gian tạo credit memo giúp phát hiện chậm trễ trong khâu xử lý chứng từ tài chính sau khi nhận và kiểm tra hàng. Lấy dữ liệu ở đâu Đây là sự kiện được ghi nhận rõ ràng trong bảng VBRK (Billing Document Header). Ngày tạo nằm trong trường VBRK-ERDAT. Credit memo được liên kết với đơn hàng trả lại hoặc yêu cầu credit memo trong luồng chứng từ. Thu thập Dùng dấu thời gian tạo (ERDAT) trong bảng VBRK của chứng từ thanh toán liên quan. Loại sự kiện explicit | |||
| Đã tạo đơn hàng trả lại | Hoạt động này đánh dấu thời điểm bắt đầu quy trình trả hàng, khi khách hàng yêu cầu trả sản phẩm. Sự kiện được ghi nhận khi một chứng từ bán hàng mới thuộc loại 'Return' (ví dụ: RE) được tạo trong SAP ECC. | ||
| Vì sao điều này quan trọng Đây là sự kiện bắt đầu chính của quy trình hàng trả lại. Phân tích thời gian từ hoạt động này đến các hoạt động khác giúp đo tổng thời gian chu kỳ và xác định chậm trễ ở khâu xử lý ban đầu. Lấy dữ liệu ở đâu Đây là sự kiện được ghi nhận rõ ràng trong bảng VBAK (đầu chứng từ bán hàng). Dấu thời gian tạo được lưu trong VBAK-ERDAT và VBAK-ERZET cho số chứng từ bán hàng tương ứng (VBAK-VBELN) có loại đơn hàng VBAK-AUART = 'RE'. Thu thập Dùng dấu thời gian tạo (ERDAT, ERZET) từ bảng VBAK cho chứng từ bán hàng loại 'RE'. Loại sự kiện explicit | |||
| Hoàn tất đơn hàng trả lại | Hoạt động này đánh dấu kết thúc quy trình trả hàng xét từ góc độ bán hàng và phân phối. Hoạt động diễn ra khi tất cả mặt hàng trong đơn hàng trả lại đã được xử lý xong và đóng lại. | ||
| Vì sao điều này quan trọng Đây là sự kiện kết thúc chính của quy trình. Đo thời gian từ 'Tạo đơn hàng trả lại' đến hoạt động này sẽ cho biết thời gian xử lý toàn trình của một trường hợp trả hàng. Lấy dữ liệu ở đâu Đây là sự kiện được suy ra từ các bảng trạng thái. Sự kiện được ghi nhận khi trạng thái tổng thể của phần đầu chứng từ bán hàng (VBUK-GBSTK) được cập nhật thành 'C' (đã xử lý hoàn toàn). Thu thập Xác định dấu thời gian trong chứng từ thay đổi (CDHDR/CDPOS) khi trường trạng thái phần đầu VBUK-GBSTK chuyển thành 'C'. Loại sự kiện inferred | |||
| Đã gỡ chặn đơn hàng trả lại | Đây là bước phê duyệt yêu cầu trả hàng, cho phép yêu cầu chuyển sang giai đoạn tiếp theo. Sự kiện này thường được ghi nhận khi trạng thái chứng từ thay đổi hoặc khi gỡ chặn giao hàng hay xuất hóa đơn. | ||
| Vì sao điều này quan trọng Đây là cột mốc phê duyệt quan trọng. Đo thời gian cần thiết để đạt đến bước này giúp xác định điểm nghẽn trong quy trình cấp phép và phê duyệt hàng trả lại. Lấy dữ liệu ở đâu Đây là sự kiện được suy ra từ nhật ký thay đổi của chứng từ bán hàng. Kiểm tra các bảng CDHDR và CDPOS để tìm thay đổi ở trường chặn trong VBAK hoặc VBAP, hoặc trường trạng thái trong VBUK/VBUP. Thu thập Xác định dấu thời gian trong các bảng chứng từ thay đổi (CDHDR/CDPOS) khi trạng thái chặn liên quan được gỡ bỏ. Loại sự kiện inferred | |||
| Đã tạo lệnh giao hàng trả lại | Chứng từ giao hàng được tạo để quản lý việc tiếp nhận hàng trả lại. Sự kiện này cho biết quy trình logistics cho hàng trả lại đã bắt đầu. | ||
| Vì sao điều này quan trọng Theo dõi quá trình chuyển từ xử lý hành chính sang logistics thực tế. Chậm trễ ở bước này có thể ảnh hưởng đến kế hoạch kho và tổng thời gian xử lý hàng trả lại. Lấy dữ liệu ở đâu Đây là sự kiện được ghi nhận rõ ràng trong bảng LIKP (đầu chứng từ giao hàng). Dấu thời gian tạo nằm trong LIKP-ERDAT. Bảng LIPS (LIPS-VGBEL) chứa liên kết đến đơn hàng trả lại nguồn. Thu thập Dùng dấu thời gian tạo (ERDAT) từ bảng LIKP cho lệnh giao hàng liên kết với đơn hàng trả lại. Loại sự kiện explicit | |||
| Đã tạo yêu cầu ghi có | Yêu cầu ghi có được tạo để ghi nhận chính thức khoản cần hoàn tiền. Trong nhiều cấu hình, chính đơn hàng trả lại được dùng làm yêu cầu ghi có. | ||
| Vì sao điều này quan trọng Đây là điểm bắt đầu chính thức của phần quyết toán tài chính trong quy trình hàng trả lại. Sự kiện này kích hoạt các bước phê duyệt tài chính và tạo chứng từ tiếp theo. Lấy dữ liệu ở đâu Đây có thể là sự kiện được ghi nhận rõ ràng trong VBAK cho chứng từ bán hàng loại 'Credit Memo Request' (ví dụ: CR), hoặc có thể trùng với sự kiện 'Đã tạo đơn hàng trả lại' nếu loại đơn hàng được cấu hình để lập hóa đơn theo đơn hàng. Thu thập Dùng dấu thời gian tạo (ERDAT) từ VBAK cho chứng từ loại 'CR', hoặc dùng lại sự kiện tạo đơn hàng trả lại. Loại sự kiện explicit | |||
| Hoàn tất mặt hàng trong đơn hàng trả lại | Một mặt hàng riêng lẻ trong đơn hàng trả lại được đánh dấu là đã xử lý xong. Việc này thường diễn ra sau khi hoàn tất mọi chứng từ hậu cần và tài chính liên quan đến mặt hàng đó. | ||
| Vì sao điều này quan trọng Theo dõi từng mặt hàng giúp xác định sản phẩm hoặc lý do trả hàng nào gây chậm trễ lâu nhất. Nhờ đó, bạn có thể xem chi tiết hơn tiến độ hoàn tất quy trình. Lấy dữ liệu ở đâu Đây là sự kiện được suy ra từ các bảng trạng thái. Sự kiện được ghi nhận khi trạng thái tổng thể của mặt hàng trong chứng từ bán hàng (VBUP-GBSTK) được cập nhật thành 'C' (đã xử lý hoàn toàn). Thu thập Xác định dấu thời gian trong chứng từ thay đổi (CDHDR/CDPOS) khi trường trạng thái mặt hàng VBUP-GBSTK chuyển thành 'C'. Loại sự kiện inferred | |||
| Tất toán credit memo | Khoản credit chưa tất toán trong tài khoản phải thu được tất toán, thường thông qua khoản thanh toán gửi cho khách hàng. Sự kiện này đánh dấu việc hoàn tất cuối cùng của khoản hoàn tiền về mặt tài chính. | ||
| Vì sao điều này quan trọng Hoạt động này xác nhận khoản tiền đã được chi trả và hoàn tất phần tài chính của quy trình. Xét từ góc độ khách hàng, đây mới là điểm kết thúc thực sự của quá trình hoàn tiền. Lấy dữ liệu ở đâu Đây là sự kiện được ghi nhận rõ ràng từ phân hệ FI. Ngày tất toán chứng từ kế toán được lưu trong bảng BSEG (BSEG-AUGDT) cho dòng mục khách hàng tương ứng. Thu thập Dùng ngày tất toán (AUGDT) trong bảng BSEG hoặc BSAD của chứng từ kế toán được liên kết với credit memo. Loại sự kiện explicit | |||
| Từ chối mặt hàng trong đơn hàng trả lại | Một mặt hàng cụ thể trong đơn hàng trả lại bị từ chối, trong lần xem xét ban đầu hoặc sau khi kiểm tra. Mặt hàng này sẽ không được xử lý tiếp, chẳng hạn như hoàn tiền. | ||
| Vì sao điều này quan trọng Phân tích các trường hợp từ chối giúp phát hiện yêu cầu trả hàng không hợp lệ và cải thiện cách truyền đạt chính sách cho khách hàng. Đây là một nhánh quan trọng của quy trình nhưng không dẫn đến hoàn tiền. Lấy dữ liệu ở đâu Đây là sự kiện được suy ra. Sự kiện thường được ghi nhận khi mã 'Reason for Rejection' riêng biệt được điền cho mặt hàng trong bảng VBAP (VBAP-ABGRU). Dấu thời gian cần lấy từ nhật ký thay đổi. Thu thập Xác định dấu thời gian trong chứng từ thay đổi (CDHDR/CDPOS) khi trường VBAP-ABGRU được điền cho mặt hàng trả lại. Loại sự kiện inferred | |||
Hướng dẫn trích xuất dữ liệu
Các bước
- Tạo chương trình ABAP: Dùng mã giao dịch
SE38để tạo chương trình ABAP mới có thể chạy độc lập, chẳng hạnZ_PM_RETURN_EXTRACTION. Đặt tiêu đề mô tả rõ mục đích, rồi lưu dưới dạng đối tượng cục bộ hoặc trong gói phát triển. - Tạo màn hình chọn dữ liệu: Trong chương trình, tạo màn hình để người dùng lọc dữ liệu. Các bộ lọc chính gồm khoảng ngày tạo đơn trả hàng (
S_ERDAT), loại chứng từ bán hàng dùng cho hàng trả lại (S_AUART, ví dụ 'RE') và mã công ty (P_BUKRS). - Định nghĩa cấu trúc dữ liệu: Tạo một kiểu cấu trúc cục bộ phù hợp với định dạng event log cần dùng. Cấu trúc này cần có các trường
ReturnCaseId,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProcessingAgent,ReturnReasonvà các thuộc tính bắt buộc khác. - Viết logic chọn dữ liệu: Viết logic ABAP chính để chọn dữ liệu cho 12 hoạt động bắt buộc. Cần truy vấn các bảng SAP như VBAK, VBAP, LIKP, VBRK, BKPF, CDHDR và CDPOS. Dùng bảng luồng chứng từ (VBFA) để liên kết các chứng từ liên quan như phiếu giao hàng và chứng từ ghi có với đơn trả hàng ban đầu.
- Trích xuất sự kiện 'Return Order Created': Chọn bản ghi từ bảng
VBAKvàVBAPtheo tiêu chí trên màn hình chọn dữ liệu. Số chứng từ bán hàng (VBAK-VBELN) sẽ được dùng làmReturnCaseId. - Trích xuất thay đổi trạng thái và sự kiện chính: Với các hoạt động như 'Return Order Block Removed' hoặc 'Return Order Item Rejected', hãy truy vấn bảng chứng từ thay đổi (
CDHDR,CDPOS) hoặc trường trạng thái trong các bảng nhưVBAP(ABGRU). Với các hoạt động tiếp theo về hậu cần và tài chính, hãy chọn dữ liệu từ các bảng nhưLIKP,MKPF,VBRKvàBKPF, đồng thời dùngVBFAđể bảo đảm chúng liên kết với nhóm đơn trả hàng ban đầu. - Điền dữ liệu vào bảng event log: Với mỗi hoạt động được truy xuất, tạo một bản ghi mới trong bảng nội bộ có cấu trúc event log đã định nghĩa. Ánh xạ dữ liệu từ các bảng SAP nguồn vào trường tương ứng. Ví dụ, ánh xạ
VBAK-ERNAMsangProcessingAgent, vàVBAK-ERDATcùngVBAK-ERZETsangEventTime. - Gộp dữ liệu hoạt động: Đảm bảo câu lệnh SELECT của từng hoạt động nối kết quả vào cùng một bảng nội bộ chính. Bảng này tạo thành tệp phẳng cuối cùng, trong đó mỗi hàng là một sự kiện.
- Xử lý dấu thời gian và thông tin hệ thống: Dùng các trường hệ thống
SY-DATUMvàSY-UZEITđể điền dấu thời gianLastDataUpdatecho từng hàng. DùngSY-SYSIDđể điềnSourceSystem. - Thêm chức năng xuất dữ liệu: Thêm chức năng hiển thị kết quả trong lưới ALV (SAP List Viewer) để phân tích trực tuyến, dùng các function module như
REUSE_ALV_GRID_DISPLAY. Cho phép tải bảng nội bộ cuối cùng về máy tính dưới dạng CSV hoặc tệp văn bản phẳng. - Chạy và xuất dữ liệu: Chạy chương trình qua
SE38. Nhập tiêu chí chọn dữ liệu mong muốn rồi thực thi. Khi dữ liệu đã hiển thị hoặc được xử lý, dùng chức năng xuất của chương trình để lưu event log. Lưu tệp ở định dạng tương thích với ProcessMind, thường là CSV có hàng tiêu đề.
Cấu hình
- Khoảng ngày: Trên màn hình chọn dữ liệu, nhập khoảng ngày tạo đơn trả hàng. Khi phân tích lần đầu, nên chọn dữ liệu trong 3 đến 6 tháng để cân bằng giữa khối lượng dữ liệu và mức độ hữu ích của kết quả.
- Loại chứng từ trả hàng: Lọc theo loại chứng từ bán hàng dùng cho hàng trả lại trong hệ thống của bạn, chẳng hạn 'RE' cho hàng trả lại hoặc 'CR' cho yêu cầu chứng từ ghi có. Đây là bộ lọc quan trọng để lấy đúng quy trình. Nhập các giá trị này trong tùy chọn chọn dữ liệu
S_AUART. - Mã công ty: Chỉ định mã công ty liên quan (
P_BUKRS) để giới hạn dữ liệu cho một pháp nhân cụ thể. Điều này cần thiết khi hệ thống có nhiều công ty. - Điều kiện cần có: Người chạy chương trình cần có quyền thực thi giao dịch
SE38và quyền truy cập các bảng SD, MM, FI liên quan, chẳng hạn VBAK, LIKP, VBRK, BKPF, CDHDR. Người phát triển cần có vai trò lập trình viên ABAP. - Hiệu suất: Với tập dữ liệu lớn kéo dài nhiều năm, chương trình có thể chạy lâu. Bạn nên chạy chương trình dưới dạng tác vụ nền (
SM36) và ghi kết quả vào hệ thống tệp của máy chủ ứng dụng thay vì hiển thị trực tuyến.
Truy vấn mẫu abap
REPORT Z_PM_RETURN_EXTRACTION.
" =======================================================================
" DATA DECLARATIONS
" =======================================================================
TYPES: BEGIN OF ty_event_log,
returncaseid TYPE vbeln_va,
activityname TYPE string,
eventtime TYPE timestamp,
sourcesystem TYPE sysysid,
lastdataupdate TYPE timestamp,
processingagent TYPE ernam,
returnreason TYPE augru,
materialnumber TYPE matnr,
returnchannel TYPE string, " Placeholder, needs custom logic
requestedrefundamount TYPE netwr,
actualrefundamount TYPE netwr,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log.
DATA: lv_timestamp TYPE timestamp,
lv_last_update TYPE timestamp.
" =======================================================================
" SELECTION SCREEN
" =======================================================================
SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY,
s_auart FOR vbak-auart.
PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY.
" =======================================================================
" MAIN LOGIC
" =======================================================================
START-OF-SELECTION.
" Set static values for the extraction run
GET TIME STAMP FIELD lv_last_update.
" 1. Return Order Created & 6. Credit Memo Request Created
" Note: In many SAP standard processes, the Return Order itself acts as the Credit Memo Request.
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, h~augru, i~matnr, i~netwr
INTO TABLE @DATA(lt_return_orders)
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN @s_erdat
AND h~auart IN @s_auart
AND h~bukrs_vf = @p_bukrs.
LOOP AT lt_return_orders INTO DATA(ls_return_order).
" Activity: Return Order Created
ls_event_log-returncaseid = ls_return_order-vbeln.
ls_event_log-activityname = 'Return Order Created'.
CONVERT DATE ls_return_order-erdat TIME ls_return_order-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_return_order-ernam.
ls_event_log-returnreason = ls_return_order-augru.
ls_event_log-materialnumber = ls_return_order-matnr.
ls_event_log-requestedrefundamount = ls_return_order-netwr.
APPEND ls_event_log TO lt_event_log.
" Activity: Credit Memo Request Created
ls_event_log-activityname = 'Credit Memo Request Created'.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
IF lt_return_orders IS NOT INITIAL.
" 2. Return Order Block Removed (Example for Delivery Block)
SELECT objectid, udate, utime, username
FROM cdhdr
INTO TABLE @DATA(lt_block_changes)
FOR ALL ENTRIES IN @lt_return_orders
WHERE objectclas = 'VERKBELEG'
AND objectid = @lt_return_orders-vbeln
AND tcode = 'VA02'.
IF sy-subrc = 0.
SELECT objectid, fname, value_new
INTO TABLE @DATA(lt_cdpos_block)
FROM cdpos
FOR ALL ENTRIES IN @lt_block_changes
WHERE objectclas = @lt_block_changes-objectclas
AND objectid = @lt_block_changes-objectid
AND changenr = @lt_block_changes-changenr
AND tabname = 'VBAK'
AND fname = 'LIFSK' " Delivery Block field
AND value_new = ''.
LOOP AT lt_cdpos_block INTO DATA(ls_cdpos_block).
READ TABLE lt_block_changes INTO DATA(ls_block_change) WITH KEY objectid = ls_cdpos_block-objectid.
IF sy-subrc = 0.
ls_event_log-returncaseid = ls_cdpos_block-objectid.
ls_event_log-activityname = 'Return Order Block Removed'.
CONVERT DATE ls_block_change-udate TIME ls_block_change-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_block_change-username.
CLEAR: ls_event_log-returnreason, ls_event_log-materialnumber, ls_event_log-requestedrefundamount, ls_event_log-actualrefundamount.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
ENDIF.
" Get subsequent documents from flow
SELECT vbelv, vbtyp_n, vbeln, rfbsk
INTO TABLE @DATA(lt_doc_flow)
FROM vbfa
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbelv = @lt_return_orders-vbeln
AND vbtyp_n IN ('J', 'R', 'M'). " J=Delivery, R=Goods Mvmt, M=Invoice
" 3. Return Delivery Created
SELECT vbeln, erdat, erzet, ernam FROM likp
INTO TABLE @DATA(lt_deliveries)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'J'.
LOOP AT lt_deliveries INTO DATA(ls_delivery).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_del) WITH KEY vbeln = ls_delivery-vbeln.
ls_event_log-returncaseid = ls_doc_flow_del-vbelv.
ls_event_log-activityname = 'Return Delivery Created'.
CONVERT DATE ls_delivery-erdat TIME ls_delivery-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_delivery-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 4. Goods Receipt Posted
SELECT mblnr, mjahr, budat, cputm, usnam FROM mkpf
INTO TABLE @DATA(lt_goods_receipt)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE xblnr = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'R'.
LOOP AT lt_goods_receipt INTO DATA(ls_goods_receipt).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_gr) WITH KEY vbeln = ls_goods_receipt-mblnr.
ls_event_log-returncaseid = ls_doc_flow_gr-vbelv.
ls_event_log-activityname = 'Goods Receipt Posted'.
CONVERT DATE ls_goods_receipt-budat TIME ls_goods_receipt-cputm INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_goods_receipt-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 5. Usage Decision Made (Requires QM Module implementation)
SELECT q~prueflos, q~vdatu, q~vzeit, q~vname
FROM qals AS q
INNER JOIN qave AS v ON q~prueflos = v~prueflos
INTO TABLE @DATA(lt_usage_decisions)
FOR ALL ENTRIES IN @lt_deliveries
WHERE q~kdauf = @lt_deliveries-vbeln.
LOOP AT lt_usage_decisions INTO DATA(ls_ud).
SELECT SINGLE vbelv FROM vbfa INTO @DATA(lv_vbelv_ud) WHERE vbeln = @ls_ud-prueflos.
ls_event_log-returncaseid = lv_vbelv_ud.
ls_event_log-activityname = 'Usage Decision Made'.
CONVERT DATE ls_ud-vdatu TIME ls_ud-vzeit INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_ud-vname.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 7. Credit Memo Created
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, i~netwr, i~vgbel
INTO TABLE @DATA(lt_cred_memos)
FROM vbrk AS h
INNER JOIN vbrp AS i ON h~vbeln = i~vbeln
FOR ALL ENTRIES IN @lt_doc_flow
WHERE h~vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'M'.
LOOP AT lt_cred_memos INTO DATA(ls_cred_memo).
ls_event_log-returncaseid = ls_cred_memo-vgbel.
ls_event_log-activityname = 'Credit Memo Created'.
CONVERT DATE ls_cred_memo-erdat TIME ls_cred_memo-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_cred_memo-ernam.
ls_event_log-actualrefundamount = ls_cred_memo-netwr.
APPEND ls_event_log TO lt_event_log.
" 8. Credit Memo Posted To FI
SELECT SINGLE budat, cputime, usnam FROM bkpf
INTO @DATA(ls_bkpf_post)
WHERE awkey = @ls_cred_memo-vbeln AND awtyp = 'VBRK'.
IF sy-subrc = 0.
ls_event_log-activityname = 'Credit Memo Posted To FI'.
CONVERT DATE ls_bkpf_post-budat TIME ls_bkpf_post-cputime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-processingagent = ls_bkpf_post-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 12. Credit Memo Cleared
SELECT SINGLE augdt FROM bseg
INTO @DATA(lv_augdt)
WHERE bukrs = @p_bukrs
AND belnr = @ls_cred_memo-vbeln
AND augdt IS NOT NULL.
IF sy-subrc = 0 AND lv_augdt IS NOT INITIAL.
ls_event_log-activityname = 'Credit Memo Cleared'.
CONVERT DATE lv_augdt INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
CLEAR: ls_event_log-processingagent.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 9. Return Order Item Completed
SELECT vbeln, erdat, erzet, ernam, abgru FROM vbap
INTO TABLE @DATA(lt_items_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_items_completed INTO DATA(ls_item_completed).
ls_event_log-returncaseid = ls_item_completed-vbeln.
ls_event_log-activityname = 'Return Order Item Completed'.
CONVERT DATE ls_item_completed-erdat TIME ls_item_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 10. Return Order Completed
SELECT vbeln, erdat, erzet, ernam FROM vbak
INTO TABLE @DATA(lt_orders_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_orders_completed INTO DATA(ls_order_completed).
ls_event_log-returncaseid = ls_order_completed-vbeln.
ls_event_log-activityname = 'Return Order Completed'.
CONVERT DATE ls_order_completed-erdat TIME ls_order_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_order_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 11. Return Order Item Rejected
SELECT vbeln, erdat, erzet, ernam FROM vbap
INTO TABLE @DATA(lt_items_rejected)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND abgru IS NOT NULL AND abgru <> ''.
LOOP AT lt_items_rejected INTO DATA(ls_item_rejected).
ls_event_log-returncaseid = ls_item_rejected-vbeln.
ls_event_log-activityname = 'Return Order Item Rejected'.
CONVERT DATE ls_item_rejected-erdat TIME ls_item_rejected-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_rejected-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
ENDIF.
" =======================================================================
" OUTPUT
" =======================================================================
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lo_alv)
CHANGING
t_table = lt_event_log ).
lo_alv->display( ). Các bước
- Điều kiện cần có: Đảm bảo bạn có tài khoản cơ sở dữ liệu với quyền đọc các bảng SAP ECC cần thiết. Các bảng này gồm dữ liệu từ các phân hệ Bán hàng và phân phối (SD), Quản lý vật tư (MM) và Kế toán tài chính (FI). Bạn cần công cụ SQL như DBeaver, SAP HANA Studio hoặc Oracle SQL Developer để kết nối cơ sở dữ liệu.
- Xác định thông tin hệ thống: Trước khi chạy truy vấn, hãy xác định các loại chứng từ dùng cho hàng trả lại trong tổ chức của bạn. Truy vấn có chỗ giữ chỗ
[YOUR_RETURN_ORDER_TYPES], hãy thay bằng giá trị thực tế, chẳng hạn 'RE' cho hàng trả lại tiêu chuẩn. - Chuẩn bị truy vấn: Sao chép toàn bộ truy vấn SQL trong phần 'query' vào công cụ SQL của bạn.
- Thiết lập tham số: Tìm Common Table Expression (CTE) có tên
BaseReturnOrdersở đầu truy vấn. Sửa mệnh đềWHEREđể đặt khoảng ngày mong muốn bằng cách thay[START_DATE]và[END_DATE]. Cập nhật danh sách loại đơn trả hàng và, nếu cần, lọc theo mã công ty cụ thể (BUKRS_VF). - Chạy truy vấn: Chạy truy vấn đã chỉnh sửa trên cơ sở dữ liệu SAP ECC. Thời gian chạy tùy thuộc vào khoảng ngày đã chọn và quy mô cơ sở dữ liệu.
- Kiểm tra dữ liệu thô: Khi truy vấn chạy xong, kiểm tra nhanh kết quả. Xác nhận các cột
ReturnCaseId,ActivityNamevàEventTimecó dữ liệu, đồng thời có dữ liệu cho nhiều hoạt động. - Xuất sang CSV: Xuất toàn bộ kết quả từ công cụ SQL sang tệp CSV. Dùng mã hóa UTF-8 để giữ nguyên các ký tự.
- Chuẩn bị tải lên: Mở tệp CSV và kiểm tra tiêu đề cột có khớp chính xác với các thuộc tính bắt buộc hay không, chẳng hạn
ReturnCaseId,ActivityName,EventTime,SourceSystem. Nếu công cụ SQL đã thay đổi tiêu đề khi xuất, hãy chỉnh lại. - Tải lên: Tải tệp CSV đã kiểm tra lên nền tảng ProcessMind để phân tích.
Cấu hình
- Loại chứng từ trả hàng: Cần cấu hình truy vấn với các loại chứng từ bán hàng đại diện cho đơn trả hàng trong hệ thống SAP của bạn. Thay chỗ giữ chỗ
[YOUR_RETURN_ORDER_TYPES]bằng các giá trị phù hợp. Ví dụ thường gặp là 'RE' hoặc các loại tùy chỉnh bắt đầu bằng 'Z'. - Khoảng ngày: Cần xác định khoảng ngày phù hợp để trích xuất dữ liệu. Khi phân tích lần đầu, thường nên chọn dữ liệu trong 3 đến 6 tháng. Điền khoảng ngày vào
[START_DATE]và[END_DATE]theo định dạng 'YYYYMMDD'. - Mã công ty: Nếu tổ chức có nhiều mã công ty, hãy lọc dữ liệu để tập trung vào phạm vi cần phân tích. Bạn có thể thêm bộ lọc như
VBAK.BUKRS_VF = '[YOUR_COMPANY_CODE]'vào CTE đầu tiên. - Hệ quản trị cơ sở dữ liệu: Truy vấn mẫu dùng các hàm SQL phổ biến. Tuy nhiên, bạn có thể cần chỉnh nhẹ cú pháp chuyển đổi ngày giờ như
TO_TIMESTAMPvà nối chuỗi (CONCAT) tùy theo hệ quản trị cơ sở dữ liệu, chẳng hạn Oracle, HANA hoặc DB2. - Quyền truy cập cần thiết: Tài khoản cơ sở dữ liệu cần có quyền đọc các bảng chính sau: VBAK, VBAP, VBFA, LIKP, LIPS, VBRK, VBRP, MKPF, MSEG, BKPF, BSAD, QALS, QAVE, CDHDR và CDPOS.
Truy vấn mẫu sql
WITH BaseReturnOrders AS (
SELECT
VBAK.VBELN AS ReturnOrderNumber,
VBAP.POSNR AS ReturnOrderItemNumber
FROM VBAK
JOIN VBAP ON VBAK.VBELN = VBAP.VBELN
WHERE VBAK.AUART IN ('[YOUR_RETURN_ORDER_TYPES]') -- e.g., 'RE'
AND VBAK.ERDAT BETWEEN '[START_DATE]' AND '[END_DATE]' -- e.g., '20230101' and '20231231'
)
-- 1. Return Order Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBAK.ERDAT, VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
UNION ALL
-- 2. Return Order Block Removed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Block Removed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAK'
AND CDPOS.FNAME IN ('LIFSK', 'FAKSK')
AND CDPOS.VALUE_NEW = ''
AND CDPOS.VALUE_OLD <> ''
UNION ALL
-- 3. Return Delivery Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Delivery Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(LIKP.ERDAT, LIKP.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
LIKP.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIKP ON VBFA.VBELN = LIKP.VBELN
UNION ALL
-- 4. Goods Receipt Posted
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Goods Receipt Posted' AS "ActivityName",
TO_TIMESTAMP(CONCAT(MKPF.CPUDT, MKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
MKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIPS ON VBFA.VBELN = LIPS.VBELN AND VBFA.POSNN = LIPS.POSNR
JOIN MSEG ON LIPS.VBELN = MSEG.LFBNR AND LIPS.POSNR = MSEG.LFPOS
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART IN ('651', '653', '655') -- Standard returns movement types
UNION ALL
-- 5. Usage Decision Made
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Usage Decision Made' AS "ActivityName",
TO_TIMESTAMP(CONCAT(QAVE.ADAT, QAVE.ATIM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
QAVE.AENAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN QALS ON VBFA.VBELN = QALS.VBELN AND VBFA.POSNN = QALS.POSNR -- Linking inspection lot to delivery item
JOIN QAVE ON QALS.PRUEFLOS = QAVE.PRUEFLOS
UNION ALL
-- 6. Credit Memo Request Created (assumes a separate doc, or can be the return order itself)
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Request Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CMR_VBAK.ERDAT, CMR_VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CMR_VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'K' -- 'K' is Credit Memo Request
JOIN VBAK AS CMR_VBAK ON VBFA.VBELN = CMR_VBAK.VBELN
UNION ALL
-- 7. Credit Memo Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBRK.ERDAT, VBRK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBRK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
WHERE VBRK.FKART IN ('[YOUR_CREDIT_MEMO_TYPES]') -- e.g., 'G2'
UNION ALL
-- 8. Credit Memo Posted To FI
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Posted To FI' AS "ActivityName",
TO_TIMESTAMP(CONCAT(BKPF.CPUDT, BKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
BKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BKPF ON VBRK.VBELN = BKPF.AWKEY AND BKPF.AWTYP = 'VBRK'
UNION ALL
-- 9. Return Order Item Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUP'
AND CDPOS.FNAME = 'GBSTA'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 10. Return Order Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUK'
AND CDPOS.FNAME = 'GBSTK'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 11. Return Order Item Rejected
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Rejected' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
CDPOS.VALUE_NEW AS "ReturnReason", -- Using rejection reason for this specific event
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAP'
AND CDPOS.FNAME = 'ABGRU'
AND CDPOS.VALUE_NEW <> ''
UNION ALL
-- 12. Credit Memo Cleared
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Cleared' AS "ActivityName",
TO_TIMESTAMP(BSAD.AUGDT, 'YYYYMMDD') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CLEAR_DOC.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BSAD ON VBRK.VBELN = BSAD.VBELN
JOIN BKPF AS CLEAR_DOC ON BSAD.AUGBL = CLEAR_DOC.BELNR AND BSAD.BUKRS = CLEAR_DOC.BUKRS AND BSAD.GJAHR_AUGL = CLEAR_DOC.GJAHR; Bắt đầu ngay?
Dùng mẫu này ngay hôm nay để đơn giản hóa việc thu thập dữ liệu và hiểu rõ hơn về quy trình trả hàng, hoàn tiền.
Tối ưu quy trình trả hàng và hoàn tiền ngay
Cải thiện quy trình trả hàng trên SAP ECC, giảm 30% thời gian xử lý. Bắt đầu ngay hôm nay.
Không cần thẻ tín dụng, thiết lập chỉ trong vài phút