Mẫu dữ liệu quản lý tồn kho
Mẫu dữ liệu quản lý tồn kho
- Các thuộc tính nên thu thập
- Các hoạt động chính cần theo dõi để khám phá quy trình
- Hướng dẫn trích xuất dữ liệu cho SAP S/4HANA
Thuộc tính quản lý tồn kho
| Tên | Mô tả | ||
|---|---|---|---|
| Lô hàng tồn kho InventoryBatchLot | Mã định danh duy nhất cho một lượng sản phẩm cụ thể, dùng làm mã trường hợp để theo dõi vòng đời của lượng hàng đó. | ||
| Mô tả Mã lô hàng tồn kho là mã trường hợp chính, dùng để nhóm tất cả hoạt động liên quan đến một lượng sản phẩm cụ thể. Nhờ đó, bạn có thể xem toàn bộ hành trình của lượng hàng theo trình tự thời gian, từ lúc nhập kho, qua các lần di chuyển nội bộ và thay đổi trạng thái, đến khi xuất bán, đưa vào sản xuất hoặc thanh lý. Trong phân tích quy trình, thuộc tính này đóng vai trò nền tảng. Thuộc tính giúp bạn theo dõi luồng đầu cuối của từng lô, đo chính xác thời gian chu kỳ, phát hiện các biến thể quy trình và hiểu cách xử lý từng lô. Phân tích ở cấp độ lô rất quan trọng trong những ngành cần truy xuất nguồn gốc, kiểm soát chất lượng và quản lý hạn sử dụng, chẳng hạn dược phẩm, thực phẩm và đồ uống, hóa chất. Vì sao điều này quan trọng Đây là mã định danh cốt lõi, kết nối mọi sự kiện hàng tồn kho liên quan thành một trường hợp duy nhất để có thể phân tích quy trình đầu cuối. Lấy dữ liệu ở đâu Thông thường đây là mã lô, nằm trong các bảng SAP như MCHA (dữ liệu chính lô hàng) hoặc MCH1 (các lô hàng), tại trường CHARG. Ví dụ B001-A452023L202405-XYZ789456123BATCH-05-24 | |||
| Thời điểm sự kiện EventTime | Ngày và giờ chính xác khi hoạt động hàng tồn kho được ghi nhận trong hệ thống. | ||
| Mô tả Thời điểm sự kiện là dấu thời gian ghi lại chính xác lúc một hoạt động xảy ra. Dữ liệu này rất cần thiết để sắp xếp sự kiện theo trình tự thời gian và dựng lại luồng quy trình của từng lô hàng tồn kho. Đây là cơ sở cho mọi phân tích process mining dựa trên thời gian. Độ chính xác của thời điểm sự kiện rất quan trọng khi tính các chỉ số hiệu suất chính như thời gian chu kỳ, thời gian xử lý và thời lượng. Dữ liệu này giúp phân tích hiệu suất quy trình theo từng giai đoạn, xác định thời điểm phát sinh điểm nghẽn và hiểu rõ nguyên nhân chậm trễ, chẳng hạn thời gian một lô hàng nằm trong kho kiểm tra chất lượng trước khi được giải phóng. Vì sao điều này quan trọng Dấu thời gian này sắp xếp sự kiện theo trình tự thời gian và là cơ sở để tính thời lượng cũng như hiệu suất. Lấy dữ liệu ở đâu Thông thường, đây là sự kết hợp giữa ngày ghi sổ (MKPF-BUDAT) và giờ nhập liệu (MKPF-CPUTM) từ bảng tiêu đề chứng từ vật tư MKPF. Ví dụ 2023-10-26T09:00:00Z2023-11-15T14:35:10Z2024-01-05T23:15:00Z | |||
| Hoạt động ActivityName | Tên sự kiện nghiệp vụ xảy ra tại một thời điểm cụ thể trong quy trình quản lý hàng tồn kho. | ||
| Mô tả Thuộc tính Hoạt động mô tả một bước hoặc sự kiện trong vòng đời tồn kho của một lô hàng. Các sự kiện này thể hiện những thao tác nghiệp vụ quan trọng như nhận hàng, di chuyển hàng, kiểm tra chất lượng hoặc xuất vật tư. Mỗi hoạt động ghi lại một việc đã xảy ra với lô hàng tại một thời điểm cụ thể. Phân tích hoạt động là nền tảng của process mining. Việc này giúp trực quan hóa luồng quy trình, xác định các luồng thường gặp và hiếm gặp, phát hiện điểm nghẽn do hoạt động bị chậm trễ và phân tích các vòng lặp làm lại. Khi hiểu trình tự và tần suất của những hoạt động như 'Đã loại bỏ hàng tồn kho' hoặc 'Kiểm tra chất lượng', doanh nghiệp có thể xác định những điểm cần cải tiến quy trình và nâng cao hiệu quả vận hành. Vì sao điều này quan trọng Thuộc tính này xác định các bước trong quy trình, giúp trực quan hóa và phân tích vòng đời hàng tồn kho. Lấy dữ liệu ở đâu Đây là thuộc tính được suy ra, thường ánh xạ từ loại luân chuyển SAP (MSEG-BWART) hoặc mã giao dịch (MKPF-TCODE2) sang tên dễ hiểu với người dùng. Ví dụ Đã ghi nhận nhận hàngĐã ghi nhận chuyển hàng vào vị trí lưu trữĐã ghi nhận xuất hàng cho giao hàngĐã loại bỏ hàng tồn kho | |||
| Loại luân chuyển MovementType | Mã gồm ba chữ số trong SAP, quy định cách ghi nhận luân chuyển hàng hóa. | ||
| Mô tả Loại luân chuyển là mã kiểm soát quan trọng trong SAP Inventory Management, xác định đặc điểm của một lần luân chuyển vật tư. Mã này quy định tài khoản nào được cập nhật, bố cục màn hình giao dịch ra sao và trường số lượng hoặc giá trị nào được cập nhật. Ví dụ, '101' dùng để nhận hàng, '311' dùng để ghi nhận chuyển kho và '551' dùng để loại bỏ hàng. Thuộc tính này thường được dùng để suy ra tên 'Hoạt động' dễ hiểu với người dùng. Phân tích quy trình theo loại luân chuyển giúp bạn hiểu chi tiết về mặt kỹ thuật cách hàng tồn kho di chuyển. Đây là bước cần thiết để xác thực sơ đồ quy trình và xác định những loại giao dịch cụ thể có thể gây ra điểm nghẽn hoặc sai lệch. Vì sao điều này quan trọng Thuộc tính này phân loại chính xác từng sự kiện hàng tồn kho về mặt kỹ thuật, rất quan trọng để xác định hoạt động và phân tích chi tiết. Lấy dữ liệu ở đâu Có trong bảng chi tiết chứng từ vật tư MSEG, tại trường BWART (Loại luân chuyển). Ví dụ 101311261551601 | |||
| Mã lý do luân chuyển MovementReasonCode | Mã cho biết lý do thực hiện hoạt động luân chuyển tồn kho. | ||
| Mô tả Mã lý do luân chuyển cho biết vì sao hoạt động luân chuyển hàng hóa được thực hiện. Mã này thường dùng để giải thích các hoạt động ngoài kế hoạch như điều chỉnh tồn kho, hàng trả lại hoặc loại bỏ hàng. Thuộc tính này rất hữu ích khi tìm nguyên nhân gốc rễ. Với dashboard “Nguyên nhân điều chỉnh tồn kho thủ công”, phân tích theo mã lý do có thể cho thấy vì sao phát sinh chênh lệch, chẳng hạn do hư hỏng, mất cắp hoặc nhập sai dữ liệu. Nhờ đó, doanh nghiệp có thể xử lý vấn đề gốc thay vì chỉ khắc phục biểu hiện. Vì sao điều này quan trọng Giải thích lý do đằng sau các hoạt động tồn kho ngoài kế hoạch, giúp tìm đúng nguyên nhân gốc rễ. Lấy dữ liệu ở đâu Có trong bảng chi tiết chứng từ vật tư MSEG, trường GRUND (Reason for Movement). Ví dụ 00010005102 | |||
| Mã vật tư MaterialNumber | Mã định danh duy nhất của sản phẩm hoặc vật tư đang được quản lý. | ||
| Mô tả Mã vật tư, thường được gọi là SKU (mã hàng hóa), là mã duy nhất được gán cho một sản phẩm cụ thể. Đây là thành phần dữ liệu chính cơ bản trong quản lý hàng tồn kho, dùng để theo dõi số lượng, giá trị và luân chuyển hàng hóa. Trong process mining, phân tích theo mã vật tư giúp bạn xem quy trình hàng tồn kho theo từng sản phẩm. Bạn có thể tìm hiểu sản phẩm nào mất nhiều thời gian kiểm tra chất lượng nhất, sản phẩm nào thường bị loại bỏ nhất hoặc sản phẩm nào có số lần chuyển nội bộ nhiều nhất. Cách phân nhóm này rất quan trọng để xác định vấn đề riêng của từng sản phẩm và tối ưu chiến lược tồn kho cho từng loại hàng. Vì sao điều này quan trọng Thuộc tính này cho phép phân tích theo từng sản phẩm, qua đó phát hiện các mẫu và vấn đề riêng của từng mặt hàng. Lấy dữ liệu ở đâu Có trong bảng chi tiết chứng từ vật tư MSEG, tại trường MATNR. Dữ liệu chính nằm trong bảng MARA. Ví dụ RM-1001FG-2050-B100-400-A | |||
| Nhà máy Plant | Đơn vị tổ chức đại diện cho cơ sở lưu trữ hàng tồn kho, chẳng hạn nhà máy hoặc trung tâm phân phối. | ||
| Mô tả Plant là đơn vị tổ chức trung tâm trong SAP, có thể đại diện cho cơ sở sản xuất, kho trung tâm hoặc trụ sở công ty. Toàn bộ hàng tồn kho được lưu trữ về mặt vật lý hoặc logic tại một Plant. Phân tích theo Plant là bước cơ bản để so sánh hiệu quả quy trình giữa các địa điểm. Cách này giúp bạn trả lời những câu hỏi như: “Plant nào có thời gian nhập kho lâu nhất?” hoặc “Tỷ lệ chênh lệch tồn kho ở Plant A có cao hơn Plant B không?”. Việc phân nhóm theo địa lý hoặc tổ chức giúp xác định vấn đề riêng tại từng địa điểm và chia sẻ cách làm hiệu quả trong toàn doanh nghiệp. Vì sao điều này quan trọng Giúp so sánh quy trình và hiệu quả quản lý tồn kho giữa các địa điểm của công ty. Lấy dữ liệu ở đâu Có trong bảng chi tiết chứng từ vật tư MSEG, trường WERKS (Plant). Ví dụ 10001710DE01US01 | |||
| Số lượng Quantity | Số lượng vật tư tham gia vào hoạt động luân chuyển tồn kho. | ||
| Mô tả Thuộc tính này ghi nhận lượng vật tư được di chuyển, nhận, xuất hoặc điều chỉnh trong một hoạt động. Số lượng được tính theo đơn vị đo cơ bản của vật tư. Phân tích số lượng giúp bạn hiểu quy mô và tác động của các quy trình tồn kho. Bạn có thể tạo dashboard để theo dõi khối lượng hàng hóa được xử lý, chẳng hạn “Sản lượng xuất hàng theo SKU”. Số liệu này cũng dùng để tính KPI như “Tỷ lệ hàng tồn kho bị loại bỏ”, bổ sung góc nhìn định lượng cho phân tích quy trình thay vì chỉ đếm sự kiện. Vì sao điều này quan trọng Định lượng vật tư trong từng hoạt động, giúp phân tích sản lượng xử lý, lượng hàng loại bỏ và tác động của các lần điều chỉnh. Lấy dữ liệu ở đâu Có trong bảng chi tiết chứng từ vật tư MSEG, trường MENGE (Quantity). Ví dụ 10012.55000-10 | |||
| Tên người dùng UserName | Mã người dùng SAP của người thực hiện giao dịch. | ||
| Mô tả Thuộc tính này ghi lại mã người dùng SAP của nhân viên đã ghi sổ chứng từ hoặc thực hiện hoạt động. Nhờ đó, bạn có thể truy xuất người chịu trách nhiệm cho từng thao tác trong quy trình quản lý hàng tồn kho. Phân tích theo người dùng rất quan trọng để hiểu hiệu suất, việc tuân thủ và nhu cầu đào tạo. Chẳng hạn, bảng điều khiển 'Nguyên nhân điều chỉnh tồn kho thủ công' dùng thuộc tính này để xác định ai thực hiện nhiều lần điều chỉnh nhất. Thông tin này có thể giúp phát hiện người dùng cần được đào tạo thêm, hoạt động không được phép hoặc nhân viên có thành tích tốt. Vì sao điều này quan trọng Thuộc tính này giúp xác định trách nhiệm và phát hiện hành vi riêng của từng người dùng, nhu cầu đào tạo hoặc vấn đề về tuân thủ. Lấy dữ liệu ở đâu Có trong bảng tiêu đề chứng từ vật tư MKPF, tại trường USNAM (Tên người dùng). Ví dụ JSMITHMBROWNVẬN HÀNH_KHO | |||
| Vị trí lưu kho StorageLocation | Một vị trí cụ thể trong Plant, nơi hàng tồn kho được lưu trữ. | ||
| Mô tả Vị trí lưu kho là đơn vị tổ chức giúp phân biệt lượng hàng tồn kho trong một Plant. Ví dụ, một Plant có thể có các vị trí riêng cho nguyên vật liệu, thành phẩm và hàng chờ kiểm tra chất lượng. Thuộc tính này cho biết vị trí chi tiết hơn Plant. Bạn có thể dùng thuộc tính này để phân tích luồng di chuyển giữa các khu vực lưu kho, chẳng hạn thời gian chuyển hàng từ khu vực nhận hàng đến kho chính. Phân tích mức sử dụng kho và tần suất di chuyển theo từng vị trí giúp tối ưu cách bố trí kho và hoạt động logistics nội bộ. Vì sao điều này quan trọng Cho biết chi tiết vị trí hàng tồn kho trong Plant, giúp phân tích luồng di chuyển nội bộ và hiệu quả lưu trữ. Lấy dữ liệu ở đâu Có trong bảng chi tiết chứng từ vật tư MSEG, trường LGORT (Storage Location). Ví dụ 0001RM01FG01QI01 | |||
| Đơn vị đo UnitOfMeasure | Đơn vị dùng để đo số lượng vật tư, chẳng hạn chiếc hoặc kilôgam. | ||
| Mô tả Đơn vị đo cho biết đơn vị áp dụng cho thuộc tính “Số lượng”. Các đơn vị phổ biến gồm chiếc (PC), kilôgam (KG), lít (L) và thùng (BOX). Thông tin này giúp diễn giải chính xác trường số lượng. Dù thường chỉ đóng vai trò mô tả, thuộc tính này rất quan trọng để đảm bảo chất lượng dữ liệu và hỗ trợ phân tích khi cần quy đổi các đơn vị khác nhau về cùng một chuẩn. Ví dụ, để tính chính xác tổng giá trị hàng tồn kho bị loại bỏ, bạn cần xác định và có thể phải quy đổi số lượng đang dùng các đơn vị khác nhau. Vì sao điều này quan trọng Bổ sung thông tin cần thiết cho thuộc tính “Số lượng”, giúp diễn giải chính xác khối lượng vật tư. Lấy dữ liệu ở đâu Có trong bảng chi tiết chứng từ vật tư MSEG, trường MEINS (Base Unit of Measure). Ví dụ ChiếcKilôgamCáiMét | |||
| Hệ thống nguồn SourceSystem | Xác định hệ thống nguồn nơi dữ liệu được trích xuất. | ||
| Mô tả Thuộc tính này cho biết hệ thống lưu trữ dữ liệu gốc về quản lý hàng tồn kho. Trong trường hợp này, đó là một phiên bản SAP S/4HANA cụ thể. Thông tin này rất quan trọng khi dữ liệu được lấy từ nhiều hệ thống ERP, hệ thống quản lý kho hoặc nền tảng cũ. Trong phân tích chỉ dùng một hệ thống, thuộc tính này có thể không thay đổi. Tuy nhiên, thuộc tính trở nên thiết yếu khi kết hợp dữ liệu từ nhiều nguồn để có góc nhìn đầy đủ về quy trình. Thuộc tính hỗ trợ quản trị dữ liệu, xử lý sự cố trích xuất và làm rõ nguồn gốc dữ liệu. Vì sao điều này quan trọng Thuộc tính này cho biết dữ liệu bắt nguồn từ đâu, rất cần thiết cho quản trị dữ liệu và phân tích nhiều hệ thống. Lấy dữ liệu ở đâu Thông thường, đây là giá trị được đặt cố định trong quá trình chuyển đổi dữ liệu để xác định phiên bản SAP S/4HANA cụ thể. Ví dụ S4H_PROD_100SAP_S4_FINANCES4HANA_GLOBAL | |||
| 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 bản ghi này được làm mới từ hệ thống nguồn. | ||
| 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 từ hệ thống nguồn. Đây là siêu dữ liệu quan trọng cho biết thông tin đang phân tích có mới hay không. Nhờ đó, người dùng biết dữ liệu gần như theo thời gian thực hay chỉ là ảnh chụp của một giai đoạn trước. Để đưa ra kết luận phù hợp và chính xác, bạn cần biết dữ liệu được cập nhật đến thời điểm nào. Trường này giúp chuyên viên phân tích và người dùng nghiệp vụ xác nhận độ mới của dữ liệu, đồng thời thường được hiển thị trên bảng điều khiển để cung cấp bối cảnh cho các thông tin phân tích. Vì sao điều này quan trọng Thuộc tính này cho người dùng biết dữ liệu mới đến đâu, giúp bảo đảm phân tích dựa trên thông tin cập nhật. Lấy dữ liệu ở đâu Dấu thời gian này được tạo và thêm vào trong quá trình trích xuất, chuyển đổi và tải dữ liệu (ETL). Ví dụ 2024-05-21T08:00:00Z2024-05-20T08:00:00Z | |||
| Loại tồn kho StockType | Cho biết trạng thái hàng tồn kho, chẳng hạn được phép sử dụng, đang kiểm tra chất lượng hoặc bị khóa. | ||
| Mô tả Loại tồn kho phân nhóm hàng theo khả năng sử dụng. Các loại chính gồm hàng được phép sử dụng (có thể dùng ngay), hàng chờ kiểm tra chất lượng và hàng bị khóa (không thể sử dụng). Hoạt động luân chuyển hàng hóa thường làm thay đổi loại tồn kho. Theo dõi thay đổi loại tồn kho là việc cần thiết để hiểu quy trình đảm bảo hàng sẵn sàng sử dụng. Thuộc tính này hỗ trợ trực tiếp cho các hoạt động như “Chuyển hàng sang kiểm tra chất lượng” và “Đổi trạng thái hàng sang bị khóa”. Phân tích thời gian hàng nằm ở từng loại, đặc biệt là thời gian chờ kiểm tra chất lượng, giúp phát hiện chậm trễ ảnh hưởng đến khả năng cung ứng hàng cho bán hàng hoặc sản xuất. Vì sao điều này quan trọng Theo dõi trạng thái sử dụng của hàng tồn kho, giúp phân tích thời gian chờ kiểm tra chất lượng và khả năng sẵn có của hàng. Lấy dữ liệu ở đâu Có trong bảng chi tiết chứng từ vật tư MSEG, trường INSMK (Stock Type). Ví dụ Được phép sử dụngChờ kiểm tra chất lượngHàng bị khóa | |||
| Ngày hết hạn ExpirationDate | Ngày lô vật tư hết hạn và không còn sử dụng được. | ||
| Mô tả Ngày hết hạn sử dụng (SLED) là dữ liệu chủ quan trọng đối với hàng dễ hỏng hoặc có thời hạn sử dụng. Ngày này được quản lý theo lô và xác định thời điểm sản phẩm không còn được bán hoặc sử dụng. Thuộc tính này cần thiết cho dashboard “Phân tích hàng tồn kho lỗi thời và hết hạn”. Phân tích hoạt động theo ngày hết hạn giúp doanh nghiệp xác định các lô có nguy cơ hết hạn và chủ động xử lý. Thuộc tính này cũng giúp đánh giá hiệu quả của chính sách luân chuyển hàng như hết hạn trước, xuất trước (FEFO), đồng thời tính toán tổn thất do loại bỏ hàng đã hết hạn. Vì sao điều này quan trọng Hỗ trợ phân tích hàng tồn kho lỗi thời và hết hạn, giúp giảm lãng phí và tổn thất tài chính. Lấy dữ liệu ở đâu Có trong bảng dữ liệu chủ lô MCH1 hoặc MCHA, trường VFDAT (Shelf Life Expiration Date). Ví dụ 2024-12-312025-06-302024-09-01 | |||
| Ô chứa hàng StorageBin | Đơn vị lưu trữ nhỏ nhất trong kho, xác định vị trí vật lý của vật tư. | ||
| Mô tả Ô chứa hàng là một vị trí cụ thể trong kho, chẳng hạn một ngăn trên kệ. Mức chi tiết này thường được dùng khi triển khai SAP Warehouse Management (WM) hoặc Extended Warehouse Management (EWM). Thuộc tính này rất quan trọng với dashboard “Mức sử dụng không gian kho”. Bạn có thể phân tích mức độ sử dụng diện tích kho, xác định khu vực dễ ùn tắc và phát hiện các tuyến nhập kho hoặc lấy hàng chưa hiệu quả. Phân tích luồng di chuyển giữa các ô chứa hàng giúp tối ưu cách bố trí kho và giảm thời gian di chuyển của nhân viên vận hành. Vì sao điều này quan trọng Cung cấp dữ liệu vị trí chi tiết nhất, giúp phân tích mức sử dụng không gian kho và hiệu quả vận hành. Lấy dữ liệu ở đâu Nếu dùng WM, thông tin này có thể nằm trong các bảng lệnh chuyển như LTAK/LTAP. Với chứng từ tồn kho, thông tin có thể nằm trong MSEG-LGPBE. Hãy tham khảo tài liệu SAP S/4HANA. Ví dụ A-01-01-AB-05-10-CRCV-AREA-01 | |||
| Số chứng từ vật tư MaterialDocumentNumber | Mã số duy nhất của chứng từ vật tư ghi nhận hoạt động luân chuyển hàng hóa. | ||
| Mô tả Khi ghi nhận hoạt động luân chuyển hàng hóa trong SAP, hệ thống tạo chứng từ vật tư để xác nhận giao dịch. Thuộc tính này là mã định danh duy nhất của chứng từ. Một chứng từ vật tư có thể gồm nhiều mục hoặc hoạt động. Trong process mining, Số chứng từ vật tư là mã giao dịch quan trọng, dùng để nhóm các sự kiện được ghi nhận cùng nhau. Thuộc tính này cũng cần thiết cho việc kiểm toán và truy ngược từ phân tích quy trình về hệ thống nguồn để kiểm tra từng giao dịch. Vì sao điều này quan trọng Dùng làm mã giao dịch để kiểm toán và nhóm các hoạt động được thực hiện cùng nhau. Lấy dữ liệu ở đâu Có trong các bảng MKPF (phần đầu) và MSEG (chi tiết), trường MBLNR (Number of Material Document). Ví dụ 490000123450000056784900002345 | |||
| Thời gian hoàn tất đơn hàng OrderFulfillmentCycleTime | Tổng thời gian từ lúc bắt đầu lấy hàng đến khi ghi nhận xuất hàng để giao. | ||
| Mô tả Đây là chỉ số được tính từ hoạt động “Bắt đầu lấy hàng” đến “Ghi nhận xuất hàng để giao”. Chỉ số cho biết tổng thời gian kho cần để chuẩn bị và gửi đơn hàng cho khách sau khi quy trình bắt đầu. Thuộc tính này đo trực tiếp KPI “Thời gian hoàn tất đơn hàng”. Phân tích thời lượng giúp doanh nghiệp hiểu khả năng đáp ứng nhu cầu khách hàng. Bạn có thể phân tích theo sản phẩm, kho hoặc khách hàng để xác định khâu lấy hàng, đóng gói và giao hàng đang bị chậm ở đâu, từ đó cải thiện sự hài lòng của khách hàng và hiệu quả logistics. Vì sao điều này quan trọng Đo tốc độ và hiệu quả xử lý hàng xuất tại kho, yếu tố quan trọng ảnh hưởng đến sự hài lòng của khách hàng. Lấy dữ liệu ở đâu Đây là thuộc tính được tính bằng chênh lệch thời gian giữa sự kiện “Bắt đầu lấy hàng” và “Ghi nhận xuất hàng để giao” của từng lô. Ví dụ 7200144003600 | |||
Hoạt động quản lý tồn kho
| Hoạt động | Mô tả | ||
|---|---|---|---|
| Đã ghi nhận chuyển hàng vào vị trí lưu trữ | Cho biết lô hàng được di chuyển thực tế từ khu vực nhận hàng hoặc khu vực tập kết đến vị trí lưu trữ cuối cùng. SAP ghi nhận việc này bằng chứng từ vật tư chuyển kho. | ||
| Vì sao điều này quan trọng Hoàn tất quy trình nhận hàng. Thời gian thực hiện hoạt động này, còn gọi là thời gian đưa hàng vào vị trí lưu trữ, là KPI quan trọng để đánh giá hiệu quả kho. Lấy dữ liệu ở đâu Được ghi trong bảng MATDOC dưới dạng chuyển kho, thường là giữa các vị trí lưu trữ, chẳng hạn loại luân chuyển 311. Loại luân chuyển cụ thể có thể khác nhau tùy theo cấu trúc kho. Thu thập Xác định qua chứng từ chuyển kho trong MATDOC, ghi nhận việc chuyển hàng từ vị trí lưu trữ tạm hoặc khu vực nhận hàng sang vị trí lưu trữ cuối cùng. Loại sự kiện explicit | |||
| Đã ghi nhận điều chỉnh hàng tồn kho | Ghi nhận thay đổi về số lượng tồn kho sau khi kiểm kê thực tế hoặc phát hiện chênh lệch khác. Sự kiện này điều chỉnh rõ số lượng tồn kho trên sổ sách để khớp với số lượng thực tế. | ||
| Vì sao điều này quan trọng Những lần điều chỉnh này rất quan trọng để duy trì độ chính xác của tồn kho. Nếu điều chỉnh thường xuyên, có thể đang tồn tại vấn đề trong khâu xử lý hàng, an ninh hoặc nhập liệu. Lấy dữ liệu ở đâu Được ghi trong bảng MATDOC. Xác định bằng loại luân chuyển kiểm kê thực tế (BWART), chẳng hạn 701 (tăng tồn kho) hoặc 702 (giảm tồn kho). Thu thập Lấy từ chứng từ vật tư trong MATDOC có loại luân chuyển điều chỉnh kiểm kê thực tế, chẳng hạn 701 hoặc 702. Loại sự kiện explicit | |||
| Đã ghi nhận nhận hàng | Đánh dấu thời điểm lô hàng tồn kho được nhập vào kho, thường là từ nhà cung cấp hoặc từ khâu sản xuất. SAP S/4HANA ghi nhận rõ sự kiện này khi tạo chứng từ vật tư lúc nhận hàng. | ||
| Vì sao điều này quan trọng Đây là sự kiện bắt đầu chính trong vòng đời hàng tồn kho. Phân tích thời gian từ hoạt động này đến các hoạt động khác, chẳng hạn đưa hàng vào vị trí lưu trữ, rất quan trọng để đo lường hiệu quả khu vực nhận hàng. Lấy dữ liệu ở đâu Được ghi trong bảng MATDOC. Xác định bằng loại luân chuyển (BWART) cụ thể, chẳng hạn 101 cho nhận hàng theo đơn mua hàng hoặc 103 cho nhận hàng vào kho bị khóa. Thu thập Lấy từ chứng từ vật tư trong MATDOC có loại luân chuyển nhận hàng tương ứng. Loại sự kiện explicit | |||
| Đã ghi nhận xuất hàng cho giao hàng | Ghi nhận bước cuối của quy trình xuất hàng, khi quyền sở hữu lô hàng được chuyển cho khách hàng hoặc đơn vị vận chuyển. Đây là giao dịch cụ thể làm giảm lượng hàng tồn kho và ghi nhận vào kế toán. | ||
| Vì sao điều này quan trọng Đây là sự kiện hoàn tất quan trọng trong quy trình xử lý đơn hàng. Sự kiện này cần thiết để đo lường tỷ lệ giao hàng đúng hạn và tính tổng thời gian xử lý đơn hàng. Lấy dữ liệu ở đâu Được ghi trong bảng MATDOC. Xác định bằng loại luân chuyển (BWART) dùng để xuất hàng cho đơn giao hàng bán, thường là 601. Thu thập Lấy từ chứng từ vật tư trong MATDOC có loại luân chuyển 601. Loại sự kiện explicit | |||
| Đã ghi nhận xuất hàng cho sản xuất | Cho biết lô hàng tồn kho được sử dụng cho lệnh sản xuất hoặc lệnh quy trình. Giao dịch này làm giảm lượng hàng tồn kho và phân bổ chi phí vật tư cho lệnh sản xuất. | ||
| Vì sao điều này quan trọng Đây là sự kiện sử dụng vật tư chính, đánh dấu kết thúc vòng đời tồn kho của các linh kiện. Sự kiện này rất quan trọng để phân tích khả năng cung ứng vật tư cho sản xuất và cách sử dụng vật tư. Lấy dữ liệu ở đâu Được ghi trong bảng MATDOC. Xác định bằng loại luân chuyển (BWART) dùng để xuất hàng cho lệnh, chẳng hạn 261. Thu thập Lấy từ chứng từ vật tư trong MATDOC có loại luân chuyển 261. Loại sự kiện explicit | |||
| Đã giải phóng hàng khỏi kho kiểm tra chất lượng | Cho biết lô hàng đã qua kiểm tra chất lượng và hiện có thể sử dụng hoặc đưa vào vị trí lưu trữ. Sự kiện này được ghi nhận rõ dưới dạng chuyển kho từ kho kiểm tra chất lượng sang loại tồn kho khác, chẳng hạn tồn kho được phép sử dụng không hạn chế. | ||
| Vì sao điều này quan trọng Cột mốc này đánh dấu quy trình kiểm tra chất lượng đã hoàn tất và hàng tồn kho đã sẵn sàng để sử dụng. Chậm trễ ở bước này có thể gây ảnh hưởng đáng kể đến các khâu tiếp theo trong sản xuất hoặc xử lý đơn hàng. Lấy dữ liệu ở đâu Được ghi trong bảng MATDOC dưới dạng chuyển kho. Thường xác định bằng loại luân chuyển (BWART) 321, chuyển hàng từ 'Kiểm tra chất lượng' sang 'Được phép sử dụng không hạn chế'. Thu thập Lấy từ chứng từ vật tư trong MATDOC có loại luân chuyển 321. Loại sự kiện explicit | |||
| Đã loại bỏ hàng tồn kho | Đánh dấu việc loại bỏ lô hàng tồn kho, xóa vĩnh viễn lô hàng khỏi hồ sơ tồn kho. Việc này thường áp dụng với hàng hết hạn, hư hỏng hoặc lỗi thời. | ||
| Vì sao điều này quan trọng Đây là sự kiện kết thúc thể hiện tổn thất tài chính. Phân tích các lần loại bỏ hàng giúp phát hiện vấn đề về hàng lưu kho lâu ngày, quy trình xử lý hoặc dự báo nhu cầu. Lấy dữ liệu ở đâu Được ghi trong bảng MATDOC. Xác định bằng loại luân chuyển (BWART) dùng để loại bỏ hàng, chẳng hạn 551 (từ kho được phép sử dụng không hạn chế), 553 (từ kho kiểm tra chất lượng) hoặc 555 (từ kho bị khóa). Thu thập Lấy từ chứng từ vật tư trong MATDOC có loại luân chuyển loại bỏ hàng, chẳng hạn 551. Loại sự kiện explicit | |||
| Đã bắt đầu lấy hàng | Đánh dấu thời điểm bắt đầu xử lý đơn hàng, khi một tác vụ kho được tạo để lấy lô hàng từ ô chứa. Sự kiện này thường được ghi nhận khi tạo lệnh chuyển kho hoặc tác vụ kho. | ||
| Vì sao điều này quan trọng Hoạt động này khởi động quy trình lấy hàng. Phân tích thời gian từ sự kiện này đến khi lấy hàng xong giúp đo lường hiệu quả của nhân viên kho và phát hiện chậm trễ. Lấy dữ liệu ở đâu Thông tin này thường không có trong MATDOC. Với các hệ thống Warehouse Management (WM/EWM), sự kiện được suy ra từ dấu thời gian tạo lệnh chuyển kho (bảng LTAK) hoặc tác vụ kho. Thu thập Suy ra từ bản ghi tạo lệnh chuyển kho (trong WM) hoặc tác vụ kho (trong EWM) được liên kết với lô vật tư. Loại sự kiện inferred | |||
| Đã chuyển hàng vào kho kiểm tra chất lượng | Cho biết lô hàng đã nhận được chuyển sang trạng thái chờ kiểm tra chất lượng và chưa thể sử dụng cho đến khi được duyệt. Đây là giao dịch được ghi nhận rõ trong SAP, làm thay đổi loại tồn kho của lô hàng. | ||
| Vì sao điều này quan trọng Hoạt động này bắt đầu quy trình kiểm tra chất lượng. Thời gian từ đây đến khi hàng được giải phóng khỏi trạng thái kiểm tra chất lượng là chỉ số quan trọng để hiểu các chậm trễ liên quan đến chất lượng. Lấy dữ liệu ở đâu Được ghi trong bảng MATDOC. Đây có thể là một lần luân chuyển nhận hàng, chẳng hạn 101, với loại tồn kho (INSMK) đặt thành 'Q' (kiểm tra chất lượng), hoặc một lần chuyển kho, chẳng hạn 322. Thu thập Xác định qua chứng từ vật tư trong MATDOC đưa hàng tồn kho vào loại tồn kho 'Kiểm tra chất lượng'. Loại sự kiện explicit | |||
| Đã chuyển trạng thái hàng tồn kho sang bị khóa | Cho biết trạng thái của lô hàng đã thay đổi, khiến hàng không thể xuất kho. Nguyên nhân thường là hư hỏng, yêu cầu tạm giữ hoặc lý do khác. SAP ghi nhận việc này dưới dạng chuyển kho. | ||
| Vì sao điều này quan trọng Cho thấy hàng tồn kho bị gián đoạn khả năng cung ứng. Nếu sự kiện khóa hàng xảy ra thường xuyên, có thể có vấn đề trong khâu xử lý, điều kiện lưu kho hoặc chất lượng nhà cung cấp. Lấy dữ liệu ở đâu Được ghi trong bảng MATDOC dưới dạng chuyển kho. Thường dùng loại luân chuyển (BWART) 344 để chuyển hàng từ 'Bị khóa' sang 'Được phép sử dụng không hạn chế', và 343 để chuyển từ 'Được phép sử dụng không hạn chế' sang 'Bị khóa'. Hoạt động này dùng loại 343. Thu thập Xác định qua chứng từ vật tư trong MATDOC có loại luân chuyển 343. Loại sự kiện explicit | |||
| Đã chuyển trạng thái hàng tồn kho sang được phép sử dụng không hạn chế | Cho biết trạng thái của lô hàng đã thay đổi, được giải phóng khỏi trạng thái bị khóa hoặc chờ kiểm tra chất lượng và hiện có thể sử dụng. Sự kiện này được ghi nhận rõ dưới dạng chuyển kho. | ||
| Vì sao điều này quan trọng Hoạt động này đánh dấu việc gỡ bỏ trạng thái tạm giữ hàng tồn kho. Bạn có thể phân tích thời gian hàng bị khóa để cải thiện quy trình xử lý. Lấy dữ liệu ở đâu Được ghi trong bảng MATDOC dưới dạng chuyển kho. Loại luân chuyển (BWART) 344 chuyển hàng từ 'Bị khóa' sang 'Được phép sử dụng không hạn chế'. Thu thập Xác định qua chứng từ vật tư trong MATDOC có loại luân chuyển 344. Loại sự kiện explicit | |||
| Đã ghi nhận chuyển hàng tồn kho nội bộ | Ghi nhận việc chuyển một lô hàng tồn kho giữa các vị trí lưu trữ hoặc ô chứa khác nhau trong cùng một nhà máy. Đây là giao dịch cụ thể tạo ra chứng từ vật tư. | ||
| Vì sao điều này quan trọng Theo dõi các lần chuyển hàng nội bộ giúp phân tích hiệu quả vận hành kho, phát hiện những lần di chuyển không cần thiết và đo thời gian bổ sung hàng giữa các vị trí. Lấy dữ liệu ở đâu Được ghi trong bảng MATDOC. Thường xác định bằng loại luân chuyển (BWART) 311, dùng để chuyển hàng giữa các vị trí lưu trữ. Thu thập Lấy từ chứng từ vật tư trong MATDOC có loại luân chuyển hàng tồn kho nội bộ, chẳng hạn 311. Loại sự kiện explicit | |||
| Đã nhận hàng khách trả lại | Ghi nhận lô hàng đã xuất trước đó được khách trả lại kho. Đây là giao dịch cụ thể làm tăng lượng hàng tồn kho. | ||
| Vì sao điều này quan trọng Theo dõi hàng trả lại rất quan trọng để hiểu các vấn đề về chất lượng sản phẩm và sự không hài lòng của khách hàng. Quy trình tiếp nhận và xử lý hàng trả lại cũng có thể gây kém hiệu quả. Lấy dữ liệu ở đâu Được ghi trong bảng MATDOC. Xác định bằng loại luân chuyển (BWART) dùng cho hàng bán bị trả lại, chẳng hạn 651 (vào kho được phép sử dụng không hạn chế) hoặc 653 (vào kho kiểm tra chất lượng). Thu thập Lấy từ chứng từ vật tư trong MATDOC có loại luân chuyển hàng bán bị trả lại, chẳng hạn 651 hoặc 653. Loại sự kiện explicit | |||
| Đã thay đổi trạng thái lô hàng | Cho biết bản ghi chính của lô hàng đã thay đổi, chẳng hạn trạng thái chuyển từ 'Được phép sử dụng không hạn chế' sang 'Bị hạn chế'. Đây không phải là luân chuyển vật tư mà là thay đổi dữ liệu chính được ghi lại trong hệ thống. | ||
| Vì sao điều này quan trọng Thay đổi trạng thái lô hàng ảnh hưởng trực tiếp đến khả năng sử dụng lô hàng trong bán hàng hoặc sản xuất. Phân tích những thay đổi này có thể giúp phát hiện vấn đề về hàng sắp hết hạn hoặc kiểm soát chất lượng mà không liên quan đến việc di chuyển hàng hóa. Lấy dữ liệu ở đâu Suy ra từ nhật ký thay đổi của các bảng dữ liệu chính về lô hàng (MCH1, MCHA). Bảng CDHDR và CDPOS theo dõi thay đổi ở trường trạng thái lô hàng (MCH1-ZUSTD). Thu thập Suy ra từ chứng từ thay đổi trong CDHDR/CDPOS đối với trường trạng thái của bản ghi chính lô hàng (MCH1-ZUSTD). Loại sự kiện inferred | |||
Hướng dẫn trích xuất dữ liệu
Các bước
- Cấp quyền truy cập hệ thống: Đảm bảo bạn có tài khoản với quyền cần thiết để truy vấn các CDS view (Core Data Services) trong hệ thống SAP S/4HANA. Thông thường, quản trị viên hệ thống sẽ cấp quyền này.
- Chọn công cụ SQL: Chọn công cụ SQL có thể kết nối với cơ sở dữ liệu SAP HANA. Các lựa chọn phổ biến gồm SAP HANA Studio, SAP HANA Database Explorer hoặc công cụ bên thứ ba như DBeaver.
- Thiết lập kết nối cơ sở dữ liệu: Tạo kết nối cơ sở dữ liệu mới bằng công cụ SQL. Bạn cần tên máy chủ cơ sở dữ liệu HANA, số cổng (thường là 3<instance_number>15) và thông tin đăng nhập cơ sở dữ liệu.
- Chuẩn bị truy vấn SQL: Sao chép toàn bộ truy vấn SQL trong phần 'query' của tài liệu này vào trình soạn thảo của công cụ SQL.
- Đặt tham số truy vấn: Tìm các giá trị giữ chỗ trong truy vấn. Thay
I_MaterialDocumentItem.PostingDate BETWEEN 'YYYYMMDD' AND 'YYYYMMDD'bằng khoảng ngày bạn muốn, chẳng hạnBETWEEN '20230101' AND '20230630'. Đồng thời, cập nhật các bộ lọc theo công ty hoặc Plant nhưMaterialDocumentItem.Plant IN ('Plant1', 'Plant2')để phù hợp với cơ cấu tổ chức. - Chạy truy vấn: Chạy truy vấn SQL đã chỉnh sửa trên cơ sở dữ liệu S/4HANA. Thời gian chạy tùy thuộc vào khoảng ngày và lượng dữ liệu tồn kho trong hệ thống.
- Kiểm tra dữ liệu: Khi truy vấn hoàn tất, xem kết quả trong công cụ SQL để đảm bảo dữ liệu đầy đủ và chính xác. Kiểm tra các hoạt động khác nhau và các thuộc tính chính đã có dữ liệu.
- Xuất nhật ký sự kiện: Xuất toàn bộ kết quả từ công cụ SQL sang tệp CSV. Chọn mã hóa UTF-8 để tránh lỗi ký tự.
- Chuẩn bị tải dữ liệu lên: Đặt tên cột trong tệp CSV khớp chính xác với bí danh trong truy vấn, chẳng hạn
InventoryBatchLot,ActivityName,EventTime. Sau đó, bạn có thể tải tệp lên công cụ process mining.
Cấu hình
- Quyền truy cập: Tài khoản chạy truy vấn cần có quyền
SELECTtrên các CDS view sau:I_MaterialDocumentItem,I_BatchChangeDocumentvàI_WarehouseTask. Tài khoản cũng cần quyền truy cập lược đồ cơ sở dữ liệu chứa các view này. - Lọc khoảng ngày: Cần lọc theo khoảng ngày trên các trường
PostingDate,ChangeDocumentCreationDatehoặcWarehouseTaskCreationDate. Khoảng thời gian thường dùng để phân tích là từ 3 đến 12 tháng. Truy vấn dữ liệu của nhiều năm có thể làm giảm đáng kể hiệu suất. - Lọc theo tổ chức: Để tăng hiệu suất và tập trung phân tích, hãy thêm mệnh đề
WHEREđể lọc theoPlanthoặcCompanyCode. Cách này giảm lượng dữ liệu và giới hạn trích xuất vào các phần liên quan của doanh nghiệp. - Khối lượng dữ liệu: Hệ thống quản lý tồn kho thường tạo ra lượng dữ liệu lớn. Khoảng ngày rộng có thể trả về hàng triệu dòng, ảnh hưởng đến hệ thống nguồn khi trích xuất và hiệu suất của công cụ bạn dùng.
- Extended Warehouse Management (EWM): Hoạt động “Bắt đầu lấy hàng” lấy dữ liệu từ CDS view
I_WarehouseTask. View này chỉ có dữ liệu nếu bạn dùng SAP Extended Warehouse Management. Nếu doanh nghiệp dùng mô-đun Warehouse Management (WM) cũ hơn hoặc chỉ dùng Inventory Management (IM), hoạt động này sẽ không được trích xuất.
Truy vấn mẫu sql
SELECT
mat_doc.Batch AS "InventoryBatchLot",
CASE
WHEN mat_doc.MovementType = '101' AND mat_doc.InventoryStockType = '2' THEN 'Stock Posted to Quality Inspection'
WHEN mat_doc.MovementType = '101' THEN 'Goods Receipt Posted'
WHEN mat_doc.MovementType = '321' THEN 'Quality Inspection Stock Released'
WHEN mat_doc.MovementType = '311' THEN 'Internal Stock Transfer Posted'
WHEN mat_doc.MovementType = '344' THEN 'Stock Status Changed to Blocked'
WHEN mat_doc.MovementType IN ('343', '322') THEN 'Stock Status Changed to Unrestricted'
WHEN mat_doc.MovementType IN ('701', '702') THEN 'Inventory Adjustment Posted'
WHEN mat_doc.MovementType = '601' THEN 'Goods Issue for Delivery Posted'
WHEN mat_doc.MovementType = '261' THEN 'Goods Issue for Production Posted'
WHEN mat_doc.MovementType IN ('651', '653') THEN 'Sales Return Received'
WHEN mat_doc.MovementType = '551' THEN 'Stock Scrapped'
WHEN mat_doc.MovementType = '313' THEN 'Put-Away Transfer Posted' -- Example for two-step transfers
ELSE 'Unknown Material Movement'
END AS "ActivityName",
TO_TIMESTAMP(mat_doc.PostingDate || LPAD(mat_doc.CreationTime, 6, '0'), 'YYYYMMDDHH24MISS') AS "EventTime",
mat_doc.Material AS "MaterialNumber",
mat_doc.CreatedByUser AS "UserName",
mat_doc.MovementType AS "MovementType",
mat_doc.Plant AS "Plant",
mat_doc.StorageLocation AS "StorageLocation",
mat_doc.QuantityInEntryUnit AS "Quantity",
mat_doc.ReasonForMovement AS "MovementReasonCode"
FROM
I_MaterialDocumentItem AS mat_doc
WHERE
mat_doc.Batch IS NOT NULL AND mat_doc.Batch <> ''
AND mat_doc.PostingDate BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
-- AND mat_doc.Plant IN ('Plant1', 'Plant2') -- Placeholder: Add filters for relevant plants
UNION ALL
SELECT
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 3) AS "InventoryBatchLot",
'Batch Status Changed' AS "ActivityName",
change_doc.ChangeDocumentCreationDateTime AS "EventTime",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 1) AS "MaterialNumber",
change_doc.ChangedByUser AS "UserName",
NULL AS "MovementType",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 2) AS "Plant",
NULL AS "StorageLocation",
NULL AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_BatchChangeDocument AS change_doc
WHERE
change_doc.ChangeDocumentTable = 'MCHA' AND change_doc.ChangeDocumentTableFieldName = 'ZUSTD'
AND TO_VARCHAR(change_doc.ChangeDocumentCreationDate) BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
UNION ALL
SELECT
wh_task.Batch AS "InventoryBatchLot",
'Picking Initiated' AS "ActivityName",
wh_task.WarehouseTaskCreationDateTime AS "EventTime",
wh_task.Product AS "MaterialNumber",
wh_task.CreatedByUser AS "UserName",
NULL AS "MovementType",
wh_task.Plant AS "Plant",
wh_task.SourceStorageLocation AS "StorageLocation",
wh_task.TargetQuantity AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_WarehouseTask AS wh_task
WHERE
wh_task.Batch IS NOT NULL AND wh_task.Batch <> ''
AND wh_task.WarehouseProcessType IN ('P210', 'P220') -- Placeholder: Adjust process types based on your picking configuration
AND TO_VARCHAR(wh_task.WarehouseTaskCreationDate) BETWEEN '20230101' AND '20231231'; -- Placeholder: Set your date range Các bước
- Xác nhận việc truy cập SAP HANA SQL trực tiếp đã được phê duyệt và tài khoản trích xuất có quyền đọc MATDOC cùng các bảng dữ liệu chủ lô mà hệ thống yêu cầu. Xác nhận chủ sở hữu lược đồ vật lý và thay [Your SAP HANA schema] bằng tên lược đồ đã được phê duyệt.
- Xác nhận các trường có trong bảng MATDOC và bảng lô của phiên bản SAP S/4HANA đích. Truy vấn dưới đây dùng các trường MATDOC và MCHA thường có, nhưng trường và tên trường có thể khác nhau tùy phiên bản, cách triển khai và phạm vi đã kích hoạt. Trước khi chạy, hãy thay mọi trường được đánh dấu [Configure based on your system].
- Xác định khoảng thời gian trích xuất bằng cách thay [Start timestamp] và [End timestamp] bằng dấu thời gian ISO. Lần đầu, hãy trích xuất dữ liệu trong 3 đến 6 tháng, sau đó mở rộng khoảng thời gian khi đã kiểm tra khối lượng và hiệu suất.
- Chạy truy vấn bằng công cụ SQL đã được phê duyệt, SAP HANA Database Explorer hoặc công cụ cơ sở dữ liệu tương đương có quyền truy cập. Giới hạn kết quả theo mã công ty, Plant, loại chứng từ hoặc loại luân chuyển cần thiết bằng cách thay các giá trị giữ chỗ tương ứng trong bộ lọc.
- Kiểm tra ánh xạ loại luân chuyển trong CTE hoạt động. Ý nghĩa của loại luân chuyển phụ thuộc vào cấu hình hệ thống và nghiệp vụ. Thay danh sách loại luân chuyển ví dụ bằng các loại đã cấu hình trong hệ thống đích cho nhận hàng, kiểm tra chất lượng, giải phóng hàng, nhập kho, chuyển nội bộ, hàng bị khóa, hàng được phép sử dụng, điều chỉnh tồn kho, lấy hàng, xuất giao hàng, xuất cho sản xuất, hàng bán bị trả lại và loại bỏ hàng.
- Xác nhận mỗi dòng kết quả có InventoryBatchLot, ActivityName và EventTime. Kiểm tra mã lô có đủ ổn định để dùng làm mã trường hợp trong ProcessMind hay không. Nếu cần phân biệt các giá trị lô trùng nhau giữa các đơn vị tổ chức theo vật tư, Plant hoặc vị trí lưu kho, hãy dùng mã trường hợp kết hợp đã cấu hình thay vì chỉ dùng giá trị lô.
- Kiểm tra thứ tự sự kiện, dòng trùng lặp, chứng từ đảo, chứng từ bị hủy và cách xử lý múi giờ. MATDOC ghi nhận các lần hạch toán chứng từ, vì vậy chứng từ đảo và chứng từ hủy có thể xuất hiện thành sự kiện riêng nếu không được loại trừ hoặc ánh xạ rõ ràng.
- Xuất kết quả truy vấn thành tệp phẳng, mỗi dòng tương ứng với một sự kiện, gồm các cột InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity và MovementReasonCode. Giữ dấu thời gian theo định dạng ISO 8601 nhất quán và giữ nguyên các số 0 ở đầu giá trị vật tư, lô, Plant và vị trí lưu kho.
- Tải nhật ký sự kiện lên ProcessMind và ánh xạ InventoryBatchLot làm mã trường hợp, ActivityName làm hoạt động và EventTime làm dấu thời gian sự kiện. Không dựa vào ProcessMind để tự suy ra hoạt động, gộp bản ghi hoặc tạo sự kiện còn thiếu.
Cấu hình
- Phương thức trích xuất: Truy vấn SQL trực tiếp dữ liệu tồn kho và lô hàng trong SAP HANA. Truy vấn đọc MATDOC và kết hợp dữ liệu chủ lô từ MCHA. Chỉ thêm MCH1 hoặc bảng lô khác sau khi xác nhận các trường liên quan và cấp quản lý lô trong hệ thống đích.
- Khoảng ngày: Bắt đầu với 3 đến 6 tháng. Dùng EventTime dựa trên ngày và giờ hạch toán chứng từ vật tư có trong MATDOC. Khi tải dữ liệu tăng dần, hãy dùng khoảng thời gian chồng lấn có kiểm soát để lấy cả các lần hạch toán muộn, sau đó loại bỏ bản ghi trùng theo mã chứng từ và mục đã cấu hình.
- Bộ lọc bắt buộc: Cấu hình mã công ty, Plant, loại chứng từ vật tư, loại luân chuyển, điều kiện có mã lô và ngày hạch toán theo phạm vi quy trình. Cần xác nhận trường mã công ty và loại chứng từ phù hợp với phiên bản đã cài đặt trước khi thêm vào truy vấn.
- Ánh xạ hoạt động: Ý nghĩa của loại luân chuyển phụ thuộc vào cấu hình. Hãy duy trì bảng ánh xạ đã được phê duyệt hoặc thay danh sách loại luân chuyển trong truy vấn bằng các giá trị doanh nghiệp đang dùng. Không xem các danh sách ví dụ là quy ước chung cho mọi hệ thống SAP.
- Phạm vi lô: Truy vấn loại bỏ các dòng không có giá trị lô vì mã trường hợp là InventoryBatchLot. Nếu cần suy ra mã lô từ nguồn khác, hãy cấu hình rõ nguồn đó trước khi trích xuất.
- Mức chi tiết sự kiện: Mỗi mục MATDOC đáp ứng điều kiện được xuất thành một dòng sự kiện. Truy vấn không suy ra hoạt động lấy hàng, quyết định kiểm tra chất lượng, thay đổi trạng thái lô hoặc hoạt động khác từ các bản ghi về sau.
- Thay đổi dữ liệu chủ lô: Chỉ MATDOC không thể hiện đầy đủ và đáng tin cậy các thay đổi trạng thái lô. Hãy cấu hình nguồn chứng từ thay đổi hoặc lịch sử lô cho hoạt động Batch Status Changed. Nhánh giữ chỗ trong truy vấn cần được kết nối với nguồn đã xác minh trước khi chạy.
- Lấy hàng: Hoạt động bắt đầu lấy hàng thường nằm trong dữ liệu vận hành kho, không phải dữ liệu hạch toán MATDOC. Hãy cấu hình nguồn lệnh kho hoặc lệnh chuyển đã xác minh và thay nhánh giữ chỗ trước khi chạy.
- Hiệu suất: Lọc theo dấu thời gian hoặc ngày hạch toán, Plant, mã công ty và các loại luân chuyển liên quan. Chỉ chọn các cột cần thiết, tránh quét toàn bộ dữ liệu lịch sử và chạy truy vấn trong khung thời gian tải hệ thống đã được phê duyệt. Với lượng dữ liệu MATDOC lớn, nên trích xuất theo phân vùng hoặc theo từng đợt tăng dần.
- Quyền truy cập và điều kiện tiên quyết: Cần có kết nối cơ sở dữ liệu được phê duyệt, quyền truy cập lược đồ và quyền đọc dữ liệu tồn kho SAP S/4HANA, cùng quyền truy cập vào mọi nguồn lịch sử thay đổi hoặc dữ liệu vận hành kho dùng cho hai hoạt động không lấy từ MATDOC. Xác nhận việc truy cập trực tiếp cơ sở dữ liệu phù hợp với mô hình vận hành và chính sách hỗ trợ SAP của doanh nghiệp.
- Múi giờ: Xác nhận múi giờ của cơ sở dữ liệu và ứng dụng. Chuyển đổi EventTime nhất quán trước khi tải lên ProcessMind.
- Bảo vệ dữ liệu: Tuân thủ các biện pháp kiểm soát của doanh nghiệp đối với mã người dùng, dữ liệu vật tư, dữ liệu liên quan đến khách hàng và thông tin đăng nhập cơ sở dữ liệu. Không đưa thông tin đăng nhập vào nội dung truy vấn.
Truy vấn mẫu sql
WITH
params AS (
SELECT
TO_TIMESTAMP('[Start timestamp]') AS start_ts,
TO_TIMESTAMP('[End timestamp]') AS end_ts
FROM DUMMY
),
movement_map AS (
SELECT '101' AS movement_type, 'Goods Receipt Posted' AS activity_name FROM DUMMY
UNION ALL SELECT '105', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '107', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '109', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '321', 'Stock Posted to Quality Inspection' FROM DUMMY
UNION ALL SELECT '322', 'Quality Inspection Stock Released' FROM DUMMY
UNION ALL SELECT '343', 'Stock Status Changed to Unrestricted' FROM DUMMY
UNION ALL SELECT '344', 'Stock Status Changed to Blocked' FROM DUMMY
UNION ALL SELECT '311', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '309', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '301', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '311', 'Put-Away Transfer Posted' FROM DUMMY
UNION ALL SELECT '309', 'Put-Away Transfer Posted' FROM DUMMY
UNION ALL SELECT '701', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '702', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '703', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '704', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '705', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '706', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '601', 'Goods Issue for Delivery Posted' FROM DUMMY
UNION ALL SELECT '602', 'Goods Issue for Delivery Posted' FROM DUMMY
UNION ALL SELECT '261', 'Goods Issue for Production Posted' FROM DUMMY
UNION ALL SELECT '262', 'Goods Issue for Production Posted' FROM DUMMY
UNION ALL SELECT '651', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '653', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '654', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '551', 'Stock Scrapped' FROM DUMMY
UNION ALL SELECT '552', 'Stock Scrapped' FROM DUMMY
),
matdoc_events AS (
SELECT
m.MATNR AS MaterialNumber,
m.CHARG AS InventoryBatchLot,
COALESCE(m.BUDAT_MKPF, m.BUDAT) AS EventTime,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(m.BWART AS NVARCHAR(3)) AS MovementType,
m.WERKS AS Plant,
m.LGORT AS StorageLocation,
m.MENGE AS Quantity,
m.GRUND AS MovementReasonCode,
mm.activity_name AS ActivityName,
m.MBLNR AS MaterialDocumentNumber,
m.MJAHR AS MaterialDocumentYear,
m.ZEILE AS MaterialDocumentItem
FROM [Your SAP HANA schema].MATDOC m
INNER JOIN movement_map mm
ON CAST(m.BWART AS NVARCHAR(3)) = mm.movement_type
CROSS JOIN params p
WHERE m.CHARG IS NOT NULL
AND TRIM(m.CHARG) <> ''
AND COALESCE(m.BUDAT_MKPF, m.BUDAT) >= p.start_ts
AND COALESCE(m.BUDAT_MKPF, m.BUDAT) < p.end_ts
AND m.WERKS IN ([Configure based on your system])
),
batch_enriched_events AS (
SELECT
e.InventoryBatchLot,
e.ActivityName,
e.EventTime,
e.MaterialNumber,
e.UserName,
e.MovementType,
e.Plant,
e.StorageLocation,
e.Quantity,
e.MovementReasonCode,
e.MaterialDocumentNumber,
e.MaterialDocumentYear,
e.MaterialDocumentItem,
c.CUOBJ_BM AS BatchObjectNumber
FROM matdoc_events e
LEFT JOIN [Your SAP HANA schema].MCHA c
ON c.MATNR = e.MaterialNumber
AND c.CHARG = e.InventoryBatchLot
AND c.WERKS = e.Plant
),
verified_batch_status_events AS (
SELECT
CAST(NULL AS NVARCHAR(40)) AS InventoryBatchLot,
'Batch Status Changed' AS ActivityName,
CAST(NULL AS TIMESTAMP) AS EventTime,
CAST(NULL AS NVARCHAR(40)) AS MaterialNumber,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(NULL AS NVARCHAR(3)) AS MovementType,
CAST(NULL AS NVARCHAR(4)) AS Plant,
CAST(NULL AS NVARCHAR(4)) AS StorageLocation,
CAST(NULL AS DECIMAL(31,3)) AS Quantity,
CAST(NULL AS NVARCHAR(3)) AS MovementReasonCode,
CAST(NULL AS NVARCHAR(20)) AS MaterialDocumentNumber,
CAST(NULL AS NVARCHAR(4)) AS MaterialDocumentYear,
CAST(NULL AS NVARCHAR(6)) AS MaterialDocumentItem,
CAST(NULL AS NVARCHAR(40)) AS BatchObjectNumber
FROM DUMMY
WHERE 1 = 0
),
verified_picking_events AS (
SELECT
CAST(NULL AS NVARCHAR(40)) AS InventoryBatchLot,
'Picking Initiated' AS ActivityName,
CAST(NULL AS TIMESTAMP) AS EventTime,
CAST(NULL AS NVARCHAR(40)) AS MaterialNumber,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(NULL AS NVARCHAR(3)) AS MovementType,
CAST(NULL AS NVARCHAR(4)) AS Plant,
CAST(NULL AS NVARCHAR(4)) AS StorageLocation,
CAST(NULL AS DECIMAL(31,3)) AS Quantity,
CAST(NULL AS NVARCHAR(3)) AS MovementReasonCode,
CAST(NULL AS NVARCHAR(20)) AS MaterialDocumentNumber,
CAST(NULL AS NVARCHAR(4)) AS MaterialDocumentYear,
CAST(NULL AS NVARCHAR(6)) AS MaterialDocumentItem,
CAST(NULL AS NVARCHAR(40)) AS BatchObjectNumber
FROM DUMMY
WHERE 1 = 0
),
all_events AS (
SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM batch_enriched_events
UNION ALL SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM verified_batch_status_events
UNION ALL SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM verified_picking_events
)
SELECT
InventoryBatchLot,
ActivityName,
EventTime,
MaterialNumber,
UserName,
MovementType,
Plant,
StorageLocation,
Quantity,
MovementReasonCode
FROM all_events
WHERE InventoryBatchLot IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY InventoryBatchLot, EventTime, MaterialDocumentYear, MaterialDocumentNumber, MaterialDocumentItem, ActivityName; Các bước
- Mở ABAP Editor: Đăng nhập vào hệ thống SAP S/4HANA. Mở ABAP Editor bằng mã giao dịch
SE38. - Tạo chương trình mới: Nhập tên chương trình vào trường 'Program', chẳng hạn
Z_PM_INVENTORY_EXTRACT, rồi nhấp vào nút 'Create'. Đặt tiêu đề mô tả, chọn 'Executable Program' trong trường 'Type' và lưu chương trình vào một package. - Khai báo tham số chương trình: Trong trình chỉnh sửa chương trình, tạo màn hình chọn làm giao diện trích xuất. Người dùng có thể nhập các tham số như khoảng ngày và Plant để chọn dữ liệu cần trích xuất.
- Thêm logic trích xuất: Sao chép toàn bộ mã ABAP trong phần 'Query' rồi dán vào ABAP Editor. Mã này chọn dữ liệu cho cả 14 hoạt động tồn kho cần thiết từ nhiều bảng SAP.
- Tìm hiểu logic chính: Chương trình chọn dữ liệu cho từng hoạt động tồn kho từ các bảng nguồn. Ví dụ, chương trình lấy dữ liệu biến động vật tư từ
MKPFvàMSEG, hoặc dữ liệu thay đổi dữ liệu chủ từCDHDRvàCDPOS. Sau đó, chương trình kết hợp các kết quả bằngUNION ALLvào một bảng nội bộ đại diện cho nhật ký sự kiện. - Thiết lập tệp đầu ra: Phần cuối của mã ghi dữ liệu đã tổng hợp từ bảng nội bộ vào tệp. Mã dùng câu lệnh
OPEN DATASETđể tạo tệp trên máy chủ ứng dụng SAP. Bạn cần chỉ định đường dẫn hợp lệ mà người dùng hệ thống SAP có quyền ghi. - Chạy chương trình: Lưu và kích hoạt chương trình ABAP (Ctrl+F3). Nhấn F8 để chạy. Trên màn hình chọn, nhập khoảng ngày mong muốn và các bộ lọc liên quan, chẳng hạn Plant hoặc Company Code.
- Chạy dưới dạng tác vụ nền: Với lượng dữ liệu lớn, bạn cần chạy chương trình dưới dạng tác vụ nền để tránh phiên làm việc hết thời gian chờ. Từ màn hình chạy chương trình (F8), chọn
Program -> Execute in Backgroundtrong menu. Lên lịch chạy vào giờ thấp điểm. - Lấy tệp đầu ra: Khi tác vụ hoàn tất, tìm tệp đầu ra trên máy chủ ứng dụng SAP. Dùng mã giao dịch
AL11để duyệt thư mục máy chủ và tìm tệp. Dùng giao dịchCG3Yđể tải tệp từ máy chủ ứng dụng về máy tính. - Chuẩn bị tải lên: Mở tệp đã tải bằng trình soạn thảo văn bản hoặc phần mềm bảng tính. Đảm bảo tệp có định dạng CSV, có hàng tiêu đề, dùng dấu phẩy làm dấu phân cách và dấu ngoặc kép làm ký tự bao văn bản. Kiểm tra tên cột có khớp yêu cầu trước khi tải lên công cụ process mining.
Cấu hình
- Khoảng ngày hạch toán: Đây là tham số quan trọng nhất. Nên trích xuất dữ liệu theo từng đợt vừa phải, chẳng hạn mỗi đợt từ 3 đến 6 tháng, để hệ thống chạy ổn định và không hết thời gian chờ.
- Bộ lọc Plant: Bạn nên lọc theo một hoặc nhiều Plant cụ thể (
WERKS). Trích xuất dữ liệu cho tất cả Plant cùng lúc có thể tiêu tốn rất nhiều tài nguyên. - Bộ lọc Company Code: Bạn có thể thêm bộ lọc Company Code (
BUKRS) để thu hẹp phạm vi dữ liệu, nhất là khi tổ chức dùng nhiều company code trong cùng một hệ thống. - Đường dẫn tệp trên máy chủ ứng dụng: Chương trình ABAP cần một đường dẫn thư mục hợp lệ đã được xác định trước trên máy chủ ứng dụng SAP. Đảm bảo người dùng hệ thống SAP (
SY-UNAME) có quyền ở cấp hệ điều hành để ghi tệp vào thư mục này. - Quyền truy cập: Người chạy quy trình trích xuất cần có quyền dùng giao dịch
SE38(để tạo và chạy chương trình), quyền xem các bảngMKPF,MSEG,MCH1,CDHDR,CDPOS,LTAKvàLTAP, cùng quyền lên lịch tác vụ nền (SM36/SM37).
Truy vấn mẫu abap
REPORT Z_PM_INVENTORY_EXTRACT.
" ====================================================================
" SELECTION SCREEN
" ====================================================================
SELECT-OPTIONS: s_budat FOR sy-datum OBLIGATORY.
SELECT-OPTIONS: s_werks FOR mseg-werks.
PARAMETERS: p_fpath TYPE string DEFAULT '/usr/sap/trans/tmp/inventory_log.csv' OBLIGATORY.
" ====================================================================
" DATA STRUCTURES
" ====================================================================
TYPES: BEGIN OF ty_event_log,
InventoryBatchLot TYPE charg,
ActivityName TYPE string,
EventTime TYPE string,
MaterialNumber TYPE matnr,
UserName TYPE xubname,
MovementType TYPE bwart,
Plant TYPE werks_d,
StorageLocation TYPE lgort_d,
Quantity TYPE menge_d,
MovementReasonCode TYPE grund,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log.
" ====================================================================
" DATA SELECTION
" ====================================================================
START-OF-SELECTION.
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Receipt Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('101', '103', '105', '501', '521', '561')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~shkzg
WHEN 'H' THEN 'Stock Posted to Quality Inspection'
WHEN 'S' THEN 'Quality Inspection Stock Released'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '321' " For QI to Unrestricted
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Put-Away Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '311' AND mseg~shkzg = 'H' " Assume put-away is the credit side
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Internal Stock Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('301', '311', '313', '315')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~bwart
WHEN '343' THEN 'Stock Status Changed to Blocked'
WHEN '344' THEN 'Stock Status Changed to Unrestricted'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('343', '344')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Inventory Adjustment Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('701', '702', '711', '712')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Delivery Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '601'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Production Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '261'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Sales Return Received' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('651', '653')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Stock Scrapped' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '551'
UNION ALL
SELECT
ltap~charg AS InventoryBatchLot,
'Picking Initiated' AS ActivityName,
CONCAT( ltak~bdatu, ltak~bzeit ) AS EventTime,
ltap~matnr AS MaterialNumber,
ltak~bname AS UserName,
ltak~bwart AS MovementType,
ltap~werks AS Plant,
ltap~lgort AS StorageLocation,
ltap~nista AS Quantity,
'' AS MovementReasonCode
FROM ltap
JOIN ltak ON ltak~tanum = ltap~tanum
WHERE ltak~bdatu IN s_budat
AND ltap~werks IN s_werks
AND ltap~charg IS NOT NULL AND ltap~charg <> ''
UNION ALL
SELECT
SUBSTRING( cdhdr~objectid, 5, 18 ) AS InventoryBatchLot, " Object ID for BATCH is MATNR+WERKS+CHARG
'Batch Status Changed' AS ActivityName,
CONCAT( cdhdr~udate, cdhdr~utime ) AS EventTime,
SUBSTRING( cdhdr~objectid, 1, 4 ) AS MaterialNumber,
cdhdr~username AS UserName,
'' AS MovementType,
'' AS Plant,
'' AS StorageLocation,
0 AS Quantity,
'' AS MovementReasonCode
FROM cdhdr
JOIN cdpos ON cdpos~objectclas = cdhdr~objectclas
AND cdpos~objectid = cdhdr~objectid
AND cdpos~changenr = cdhdr~changenr
WHERE cdhdr~udate IN s_budat
AND cdhdr~objectclas = 'BATCH'
AND cdpos~tabname = 'MCH1'
AND cdpos~fname = 'ZUSTD'
INTO TABLE @lt_event_log.
" ====================================================================
" WRITE OUTPUT FILE
" ====================================================================
DATA: lv_string TYPE string.
DATA: lo_conv TYPE REF TO cl_abap_conv_out_ce.
lo_conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
OPEN DATASET p_fpath FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
RETURN.
ENDIF.
" Write Header
lv_string = 'InventoryBatchLot,ActivityName,EventTime,MaterialNumber,UserName,MovementType,Plant,StorageLocation,Quantity,MovementReasonCode'.
TRANSFER lv_string TO p_fpath.
" Write Data
LOOP AT lt_event_log ASSIGNING FIELD-SYMBOL(<fs_log>).
CONCATENATE
<fs_log>-InventoryBatchLot
<fs_log>-ActivityName
<fs_log>-EventTime
<fs_log>-MaterialNumber
<fs_log>-UserName
<fs_log>-MovementType
<fs_log>-Plant
<fs_log>-StorageLocation
<fs_log>-Quantity
<fs_log>-MovementReasonCode
INTO lv_string
SEPARATED BY ','.
TRANSFER lv_string TO p_fpath.
ENDLOOP.
CLOSE DATASET p_fpath.
WRITE: 'Extraction complete. File written to:', p_fpath. Bạn đã sẵn sàng bắt đầu chưa?
Dùng mẫu này để chuẩn bị dữ liệu và tìm hiểu rõ hơn về hoạt động quản lý tồn kho. Bắt đầu tối ưu hiệu quả và giảm chi phí ngay hôm nay.
Tối ưu quản lý tồn kho trong SAP S/4HANA
Xác định điểm chưa hiệu quả, giảm 30% thời gian chu kỳ và tiết kiệm chi phí.
Không cần thẻ tín dụng • Thiết lập chỉ trong vài phút