Mẫu dữ liệu lập kế hoạch sản xuất
Mẫu dữ liệu lập kế hoạch sản xuất
- Các thuộc tính nên thu thập
- Các hoạt động quan trọng cần theo dõi
- Hướng dẫn trích xuất dữ liệu thực tế
Thuộc tính lập kế hoạch sản xuất
| Tên | Mô tả | ||
|---|---|---|---|
| Lệnh sản xuất ProductionOrder | Mã định danh duy nhất của lệnh sản xuất, được dùng làm mã trường hợp chính cho quy trình lập kế hoạch và thực hiện sản xuất. | ||
| Mô tả Số lệnh sản xuất là mã chữ và số duy nhất được gán cho mỗi lệnh sản xuất trong SAP ECC PP. Đây là đối tượng trung tâm liên kết mọi hoạt động liên quan, từ tạo lệnh và lập kế hoạch đến thực hiện và quyết toán cuối cùng. Trong process mining, thuộc tính này giúp nhóm tất cả sự kiện thuộc cùng một đợt sản xuất. Nhờ đó, bạn có thể phân tích toàn bộ vòng đời của lệnh, theo dõi tiến độ, đo thời gian chu kỳ và phát hiện sai lệch so với quy trình chuẩn. Phân tích theo số lệnh sản xuất cho thấy rõ từng yêu cầu sản xuất được thực hiện như thế nào. Vì sao điều này quan trọng Đây là mã định danh cốt lõi liên kết mọi sự kiện liên quan trong quy trình, giúp tái dựng và phân tích toàn bộ hành trình sản xuất từ đầu đến cuối. Lấy dữ liệu ở đâu Thuộc tính này nằm trong bảng SAP AUFK, trường AUFNR. Ví dụ 1000345100034610003471000348 | |||
| Tên hoạt động ActivityName | Tên sự kiện nghiệp vụ hoặc sự kiện hệ thống xảy ra tại một thời điểm cụ thể trong quá trình thực hiện lệnh sản xuất. | ||
| Mô tả Tên hoạt động mô tả một bước cụ thể hoặc một lần đổi trạng thái trong quy trình Lập kế hoạch sản xuất. Các sự kiện này được trích xuất từ nhật ký thay đổi, cập nhật trạng thái và bản ghi giao dịch trong SAP ECC PP. Chúng thể hiện các mốc quan trọng như 'Tạo lệnh sản xuất', 'Kiểm tra tình trạng sẵn có của vật tư' hoặc 'Ghi nhận nhập kho thành phẩm'. Thuộc tính này là nền tảng của sơ đồ quy trình, giúp chuyên viên phân tích trực quan hóa trình tự sự kiện, tìm các biến thể quy trình và phát hiện điểm nghẽn hoặc vòng lặp làm lại. Tên hoạt động rõ ràng, đủ chi tiết là yếu tố quan trọng để xây dựng mô hình quy trình chính xác, phản ánh đúng thực tế 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 trên sơ đồ quy trình, giúp bạn trực quan hóa, phân tích và hiểu quy trình làm việc trong sản xuất. Lấy dữ liệu ở đâu Được tổng hợp từ nhiều nguồn, gồm các lần đổi trạng thái trong bảng JEST/JSTO, nhật ký giao dịch và tài liệu thay đổi trong CDHDR/CDPOS. Ví dụ Phát hành lệnh sản xuấtGhi nhận xuất vật tưGhi nhận xác nhận cuối cùngHoàn tất kỹ thuật lệnh | |||
| Thời điểm sự kiện EventTime | Dấu thời gian chính xác cho biết hoạt động xảy ra khi nào. | ||
| Mô tả Thời điểm sự kiện ghi lại ngày giờ một hoạt động cụ thể được thực hiện hoặc một trạng thái được ghi vào hệ thống. Dấu thời gian này là cơ sở cho mọi phân tích quy trình theo thời gian, bao gồm tính thời gian chu kỳ, thời gian chờ và tổng thời lượng quy trình. Dấu thời gian chính xác giúp sắp xếp sự kiện đúng thứ tự và phân tích hiệu suất. Chúng cho phép chuyên viên phân tích đo khoảng thời gian giữa các hoạt động, phát hiện chậm trễ và đánh giá kết quả so với lịch hoặc thỏa thuận mức dịch vụ. Trong quy trình lập kế hoạch sản xuất, dữ liệu này giúp bạn biết mỗi giai đoạn lập kế hoạch và thực hiện kéo dài bao lâu. Vì sao điều này quan trọng Thuộc tính này cho biết trình tự thời gian của các sự kiện, cần thiết để tính thời lượng, phân tích hiệu suất và phát hiện điểm nghẽn. Lấy dữ liệu ở đâu Được tổng hợp từ nhiều trường ngày giờ gắn với giao dịch và lần đổi trạng thái, chẳng hạn BUDAT (Ngày hạch toán) trong chứng từ vật tư hoặc dấu thời gian thay đổi từ CDHDR. Ví dụ 2023-04-15T10:05:30Z2023-04-15T14:22:00Z2023-04-18T08:59:11Z2023-04-20T16:45:00Z | |||
| Hệ thống nguồn SourceSystem | Xác định hệ thống cụ thể nơi dữ liệu được trích xuất. | ||
| Mô tả Thuộc tính này cho biết hệ thống nguồn của bản ghi, chẳng hạn tên hoặc mã của một phiên bản SAP ECC cụ thể. Với doanh nghiệp sử dụng nhiều hệ thống ERP hoặc kết hợp nền tảng cũ và mới, trường này rất quan trọng để theo dõi nguồn gốc và hiểu ngữ cảnh dữ liệu. Khi phân tích, bạn có thể lọc quy trình theo hệ thống nguồn. Điều này hữu ích khi so sánh hiệu suất quy trình giữa các hệ thống hoặc tách riêng dữ liệu trong các dự án hợp nhất dữ liệu từ nhiều hệ thống. Vì sao điều này quan trọng Thuộc tính này cung cấp ngữ cảnh quan trọng về nguồn gốc dữ liệu, nhất là khi doanh nghiệp có nhiều phiên bản SAP hoặc hệ thống tích hợp. Lấy dữ liệu ở đâu Thường được thêm trong quá trình trích xuất dữ liệu, dựa trên mã hệ thống SAP (SY-SYSID). Ví dụ ECC_PROD_100S4H_FIN_200ECC_DE | |||
| Lần cập nhật dữ liệu gần nhất LastDataUpdate | Dấu thời gian cho biết dữ liệu của sự kiện này được làm mới hoặc trích xuất lần cuối khi nào. | ||
| Mô tả Thuộc tính này ghi lại ngày giờ dữ liệu được lấy từ hệ thống nguồn vào công cụ process mining. Đây không phải sự kiện nghiệp vụ mà là dấu thời gian kỹ thuật phục vụ quản lý dữ liệu. Thuộc tính này chủ yếu giúp xác nhận dữ liệu còn mới và giúp quản trị viên, chuyên viên phân tích biết dữ liệu đang xem được cập nhật gần đây đến mức nào. Đây là thông tin cần thiết để xác nhận phân tích quy trình dựa trên dữ liệu mới nhất, nhất là khi theo dõi hoạt động đang diễn ra. Vì sao điều này quan trọng Thuộc tính này xác nhận dữ liệu còn mới, giúp đảm bảo phân tích dựa trên thông tin cập nhật nhất hiện có. Lấy dữ liệu ở đâu Giá trị này thường được công cụ hoặc tập lệnh trích xuất, chuyển đổi và tải dữ liệu (ETL) tạo và ghi dấu trong quá trình nạp dữ liệu. Ví dụ 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Mã sản phẩm ProductCode | Mã định danh duy nhất của vật tư hoặc sản phẩm được sản xuất. | ||
| Mô tả Mã sản phẩm, còn gọi là mã vật tư, xác định mặt hàng mà lệnh sản xuất cần tạo ra. Đây là thành phần dữ liệu chủ cốt lõi, liên kết lập kế hoạch sản xuất với quản lý tồn kho, bán hàng và tính giá thành. Trong process mining, lọc hoặc phân nhóm theo mã sản phẩm rất quan trọng để hiểu quy trình sản xuất của từng sản phẩm. Bạn có thể trả lời các câu hỏi như: 'Sản phẩm nào có thời gian chu kỳ dài nhất?' hoặc 'Sản phẩm nào thường gặp vấn đề chất lượng hay chậm trễ vật tư?'. Phân tích này hỗ trợ quản lý danh mục sản phẩm và tìm cơ hội chuẩn hóa hoặc tối ưu quy trình cho từng loại vật tư. Vì sao điều này quan trọng Thuộc tính này cho phép phân tích quy trình theo từng sản phẩm, giúp phát hiện vật tư nào gắn với tình trạng kém hiệu quả, chậm trễ hoặc chi phí cao. Lấy dữ liệu ở đâu Thuộc tính này nằm trong bảng SAP AFPO, trường MATNR. Ví dụ FG-123RM-45AHALB-7890CHEM-22 | |||
| Ngày bắt đầu thực tế ActualStartDate | Dấu thời gian của hoạt động sản xuất đầu tiên được ghi nhận, đánh dấu thời điểm bắt đầu thực hiện trên thực tế. | ||
| Mô tả Ngày bắt đầu thực tế là dấu thời gian của sự kiện đầu tiên đánh dấu lúc công việc sản xuất thực sự bắt đầu. Giá trị này thường được xác định từ sự kiện xác nhận sản xuất đầu tiên hoặc lần xuất nguyên liệu đầu tiên cho lệnh. Thuộc tính được suy ra này rất quan trọng để phân tích mức độ bám sát lịch. Nó cung cấp thời điểm bắt đầu thực tế để so sánh với 'Ngày bắt đầu theo kế hoạch', từ đó tính chính xác mức chênh lệch thời gian bắt đầu. Hiểu rõ khoảng cách giữa ngày bắt đầu theo kế hoạch và thực tế giúp xác định chậm trễ trước sản xuất do chuẩn bị vật tư, thiết lập máy móc hoặc thiếu tài nguyên. Vì sao điều này quan trọng Thuộc tính này cho biết thời điểm thực sự bắt đầu sản xuất, giúp tính chính xác thời gian chậm trễ lúc bắt đầu và tổng thời gian sản xuất. Lấy dữ liệu ở đâu Được suy ra từ nhật ký sự kiện bằng cách tìm dấu thời gian sớm nhất của các hoạt động thực hiện cụ thể, như 'Ghi nhận xác nhận đầu tiên' hoặc 'Ghi nhận xuất vật tư', cho từng lệnh sản xuất. Ví dụ 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| Ngày kết thúc thực tế ActualEndDate | Dấu thời gian của hoạt động sản xuất cuối cùng, đánh dấu thời điểm lệnh thực sự hoàn tất. | ||
| Mô tả Ngày kết thúc thực tế là dấu thời gian của sự kiện đánh dấu lúc hoàn tất mọi hoạt động sản xuất cho một lệnh. Giá trị này thường được xác định từ dấu thời gian của 'Ghi nhận xác nhận cuối cùng' hoặc sự kiện 'Ghi nhận nhập kho thành phẩm' cuối cùng. Thuộc tính này cần thiết để đo tổng thời gian chu kỳ sản xuất và phân tích mức độ bám sát lịch. So sánh 'Ngày kết thúc thực tế' với 'Ngày kết thúc theo kế hoạch' cho biết lệnh có hoàn tất đúng hạn hay không. Tính khoảng thời gian từ 'Ngày bắt đầu thực tế' đến 'Ngày kết thúc thực tế' sẽ cho biết thời gian xử lý sản xuất thực tế. Vì sao điều này quan trọng Thuộc tính này đánh dấu thời điểm sản xuất hoàn tất, giúp đo chính xác hiệu suất giao hàng đúng hạn và tổng thời gian thực hiện. Lấy dữ liệu ở đâu Được suy ra từ nhật ký sự kiện bằng cách tìm dấu thời gian muộn nhất của các hoạt động hoàn tất quan trọng, chẳng hạn như 'Đã ghi nhận xác nhận cuối cùng' hoặc 'Đã hạch toán nhập kho'. Ví dụ 2023-05-14T16:00:00Z2023-06-29T11:30:00Z2023-07-05T17:00:00Z | |||
| Nhà máy sản xuất ProductionPlant | Cơ sở hoặc địa điểm thực hiện lệnh sản xuất. | ||
| Mô tả Nhà máy sản xuất là đơn vị tổ chức quan trọng trong SAP, đại diện cho một cơ sở sản xuất. Thuộc tính này được gán cho từng lệnh sản xuất và xác định nơi các hoạt động sản xuất diễn ra trên thực tế. Phân tích quy trình theo nhà máy sản xuất giúp so sánh hiệu suất giữa các địa điểm. Qua đó, bạn có thể xác định nhà máy nào hoạt động hiệu quả hơn, nơi nào thường chậm trễ hoặc thiếu vật tư và đâu là nơi có cách làm tốt để chia sẻ. Đây là chiều phân tích cơ bản để tìm nguyên nhân gốc rễ trên các bảng điều khiển về sản lượng và mức sử dụng tài nguyên. Vì sao điều này quan trọng Thuộc tính này giúp so sánh hiệu suất giữa các địa điểm sản xuất, qua đó phát hiện vấn đề riêng của từng cơ sở hoặc tìm cách làm hiệu quả để chia sẻ. Lấy dữ liệu ở đâu Thuộc tính này được lưu trong bảng SAP AUFK, trường WERKS. Ví dụ 100017102000DE01 | |||
| Số lượng đã nhập kho DeliveredQuantity | Số lượng sản phẩm thực tế đã sản xuất và nhập kho. | ||
| Mô tả Số lượng đã nhập kho, còn gọi là số lượng nhập kho thành phẩm, là tổng lượng thành phẩm được xác nhận đã sản xuất cho một lệnh cụ thể. Giá trị này được cập nhật khi phát sinh sự kiện 'Ghi nhận nhập kho thành phẩm'. Thuộc tính này đối chiếu với 'Số lượng kế hoạch' và cần thiết để tính KPI 'Chênh lệch giữa sản lượng kế hoạch và thực tế'. Đây là thước đo chính xác về sản lượng, giúp chuyên viên phân tích phát hiện chênh lệch do phế phẩm, hao hụt sản lượng hoặc vấn đề sản xuất khác. So sánh số lượng nhập kho giữa các nhà máy, sản phẩm hoặc giai đoạn giúp xác định nơi hoạt động kém hiệu quả. Vì sao điều này quan trọng Thuộc tính này đo sản lượng thực tế, giúp bạn so sánh trực tiếp với mục tiêu kế hoạch để đánh giá hiệu suất. Lấy dữ liệu ở đâu Thuộc tính này nằm trong bảng SAP AFPO, trường WEMNG (Số lượng nhập kho). Ví dụ 984950751255 | |||
| Số lượng kế hoạch PlannedQuantity | Tổng số lượng sản phẩm dự kiến sản xuất theo lệnh. | ||
| Mô tả Số lượng kế hoạch là sản lượng mục tiêu của lệnh sản xuất, được xác định trong giai đoạn lập kế hoạch. Đây là mức chuẩn để so sánh với sản lượng thực tế. Thuộc tính này là cơ sở cho các KPI về hiệu suất sản xuất và mức độ bám sát lịch, chẳng hạn 'Chênh lệch giữa sản lượng kế hoạch và thực tế'. Thuộc tính giúp đánh giá độ chính xác của kế hoạch sản xuất và phát hiện vấn đề mang tính hệ thống dẫn đến sản xuất thừa hoặc thiếu. Phân tích giá trị này giúp bạn hiểu mức độ thực hiện sản xuất bám sát kế hoạch ban đầu. Vì sao điều này quan trọng Thuộc tính này là mức chuẩn để đo chênh lệch sản lượng và đánh giá độ chính xác của kế hoạch. Lấy dữ liệu ở đâu Giá trị này có trong bảng SAP AFKO, trường GAMNG (Tổng số lượng lệnh). Ví dụ 1005000751250 | |||
| Chênh lệch số lượng QuantityVariance | Chênh lệch giữa số lượng sản xuất dự kiến và số lượng thực tế đã giao. | ||
| Mô tả Chênh lệch số lượng là chỉ số được tính toán để đo mức sai lệch giữa sản lượng thực tế và kế hoạch ban đầu. Chỉ số này được tính bằng 'Số lượng đã giao' trừ 'Số lượng dự kiến'. Chênh lệch dương cho biết sản xuất vượt kế hoạch, còn chênh lệch âm cho biết sản xuất thiếu kế hoạch hoặc hao hụt sản lượng. Thuộc tính này rất cần thiết cho dashboard 'Sản lượng sản xuất dự kiến và thực tế' cùng KPI tương ứng. Phân tích chênh lệch giúp xác định vấn đề về sản lượng đạt được, tỷ lệ phế phẩm hoặc lỗi nhập dữ liệu. Đây là thước đo trực tiếp về mức độ tin cậy của quy trình sản xuất trong việc đáp ứng mục tiêu sản lượng. Vì sao điều này quan trọng Thuộc tính này đo mức độ chính xác của sản lượng so với kế hoạch, đồng thời làm rõ các vấn đề tiềm ẩn về sản lượng đạt được, phế phẩm hoặc kiểm soát quy trình. Lấy dữ liệu ở đâu Trường được tính toán: 'DeliveredQuantity' - 'PlannedQuantity'. Ví dụ -2-5005 | |||
| Mức độ ưu tiên sản xuất ProductionPriority | Phân loại mức độ khẩn cấp hoặc ưu tiên của lệnh sản xuất. | ||
| Mô tả Mức độ ưu tiên sản xuất cho biết tầm quan trọng tương đối của một lệnh sản xuất. Nhờ đó, nhân viên lập lịch sản xuất và nhân viên tại xưởng có thể ưu tiên công việc, đảm bảo các lệnh quan trọng được xử lý nhanh hơn. Phân tích thuộc tính này giúp đánh giá hiệu quả của hệ thống ưu tiên. Bằng cách so sánh thời gian chu kỳ của các lệnh ưu tiên cao và thấp, doanh nghiệp có thể xác định liệu các lệnh khẩn cấp có thực sự được xử lý nhanh hơn hay không. Nếu không, nguyên nhân có thể nằm ở việc trao đổi thông tin, phân bổ tài nguyên hoặc cách thực hiện quy trình. Vì sao điều này quan trọng Thuộc tính này giúp đánh giá hệ thống quản lý ưu tiên có hiệu quả không, bằng cách kiểm tra xem các lệnh khẩn cấp có hoàn tất nhanh hơn lệnh thông thường hay không. Lấy dữ liệu ở đâu Trường này thường không có sẵn trong phần đầu lệnh sản xuất tiêu chuẩn. Đây có thể là trường tùy chỉnh, được suy ra từ mức độ ưu tiên của đơn hàng bán hoặc thuộc một hệ thống phân loại. Hãy tham khảo tài liệu SAP ECC PP hoặc cấu hình hệ thống. Ví dụ CaoTrung bìnhThấpKhẩn cấp | |||
| Ngày bắt đầu theo kế hoạch PlannedStartDate | Ngày dự kiến bắt đầu sản xuất theo lệnh. | ||
| Mô tả Ngày bắt đầu theo kế hoạch là thông số lịch trình quan trọng, được xác định trong giai đoạn lập kế hoạch và xếp lịch sản xuất. Đây là ngày mục tiêu để bắt đầu các hoạt động sản xuất cho một lệnh. Thuộc tính này rất quan trọng để đo mức độ bám sát lịch. Bằng cách so sánh 'Ngày bắt đầu theo kế hoạch' với thời điểm sản xuất thực tế bắt đầu, chẳng hạn dấu thời gian của hoạt động 'Ghi nhận xác nhận đầu tiên', doanh nghiệp có thể phát hiện chậm trễ. Tìm hiểu nguyên nhân của những chậm trễ này là một ứng dụng chính của process mining trong lĩnh vực này. Vì sao điều này quan trọng Thuộc tính này là mức chuẩn để đo mức độ bám sát lịch và phát hiện chậm trễ khi bắt đầu thực hiện sản xuất. Lấy dữ liệu ở đâu Đây là ngày bắt đầu cơ bản, nằm trong bảng SAP AFKO, trường GSTRP. Ví dụ 2023-05-102023-06-222023-07-01 | |||
| Ngày kết thúc theo kế hoạch PlannedEndDate | Ngày dự kiến hoàn tất sản xuất theo lệnh. | ||
| Mô tả Ngày kết thúc theo kế hoạch là ngày mục tiêu hoàn tất lệnh sản xuất, được xác định trong quá trình xếp lịch. Ngày này cho biết khung thời gian dự kiến để hoàn tất mọi hoạt động sản xuất, bao gồm xác nhận cuối cùng và nhập kho thành phẩm. Ngày này cần thiết để tính KPI 'Tỷ lệ bám sát lịch sản xuất'. So sánh 'Ngày kết thúc theo kế hoạch' với thời điểm hoàn tất thực tế, chẳng hạn dấu thời gian của hoạt động 'Ghi nhận nhập kho thành phẩm' hoặc 'Ghi nhận xác nhận cuối cùng', cho biết lệnh có hoàn tất đúng hạn hay không. Phân tích này giúp đánh giá độ tin cậy của lịch sản xuất và tìm nguyên nhân gốc rễ khiến giao hàng trễ. Vì sao điều này quan trọng Đây là mốc chuẩn để xác định lệnh sản xuất có hoàn tất đúng hạn hay không, ảnh hưởng trực tiếp đến sự hài lòng của khách hàng và độ tin cậy của kế hoạch. Lấy dữ liệu ở đâu Đây là ngày kết thúc cơ bản, nằm trong bảng SAP AFKO, trường GLTRP. Ví dụ 2023-05-152023-06-282023-07-05 | |||
| Người dùng phụ trách ResponsibleUser | ID người dùng của người tạo hoặc thay đổi lệnh sản xuất lần gần nhất. | ||
| Mô tả Người dùng phụ trách là tài khoản SAP gắn với các sự kiện quan trọng trong vòng đời lệnh sản xuất, chẳng hạn như tạo hoặc phát hành lệnh. Thông tin này giúp xác định trách nhiệm và truy vết các thao tác trong hệ thống. Trong process mining, thuộc tính này được dùng để phân tích khác biệt trong quy trình dựa trên cách người dùng thao tác. Thuộc tính này giúp xác định người dùng có thể cần được đào tạo thêm hoặc đang làm theo quy trình không chuẩn. Đồng thời, thuộc tính hỗ trợ phân tích tài nguyên bằng cách cho thấy công việc được phân chia giữa những người dùng như thế nào. Vì sao điều này quan trọng Thuộc tính này liên kết các hoạt động trong quy trình với từng người, giúp phân tích hiệu suất theo người dùng và làm rõ trách nhiệm. Lấy dữ liệu ở đâu Người tạo lệnh được ghi trong AUFK-ERNAM. Người thay đổi lệnh lần gần nhất được ghi trong AUFK-AENAM. Nhật ký thay đổi (CDHDR-USERNAME) lưu lịch sử người dùng thực hiện từng thay đổi cụ thể. Ví dụ JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
| Nhóm lập kế hoạch PlannerGroup | Nhóm nhân viên phụ trách MRP hoặc lập kế hoạch sản xuất cho lệnh. | ||
| Mô tả Nhóm lập kế hoạch là một bộ phận tổ chức gồm những người phụ trách lập kế hoạch và quản lý một nhóm vật tư hoặc lệnh sản xuất cụ thể. Phân công lệnh cho các nhóm này giúp chia đều khối lượng công việc và xác định rõ trách nhiệm. Trong process mining, thuộc tính này cho phép phân tích hiệu suất theo nhóm lập kế hoạch phụ trách. Bạn có thể trả lời những câu hỏi như: 'Nhóm lập kế hoạch nào thường gặp sai lệch lịch trình nhất?' hoặc 'Thời gian chu kỳ của các lệnh do những nhóm khác nhau quản lý có chênh lệch không?'. Qua đó, bạn có thể cân bằng khối lượng công việc và xác định nhu cầu đào tạo. Vì sao điều này quan trọng Thuộc tính này cho phép phân tích hiệu suất theo nhóm phụ trách, giúp xác định sự khác biệt về hiệu quả lập kế hoạch và khối lượng công việc. Lấy dữ liệu ở đâu Đây là nhân viên phụ trách MRP, nằm trong bảng SAP AFKO, trường DISPO. Ví dụ 001002P01P02 | |||
| Tình trạng sẵn có của vật tư MaterialAvailabilityStatus | Cho biết tất cả linh kiện cần thiết cho lệnh sản xuất đã sẵn sàng hay chưa. | ||
| Mô tả Trạng thái sẵn có của vật tư là chỉ báo quan trọng về mức độ sẵn sàng sản xuất. Hệ thống xác định trạng thái này bằng cách kiểm tra xem tất cả vật tư cấu thành cần cho lệnh đã có đủ hay chưa. Trạng thái 'Có sẵn' nghĩa là có thể tiếp tục sản xuất mà không bị chậm trễ do thiếu vật tư, còn 'Thiếu' cho biết đang có vấn đề. Thuộc tính này rất cần thiết cho dashboard 'Phân tích tác động của tình trạng thiếu vật tư'. Bằng cách phân tích thời gian các lệnh phải chờ do thiếu vật tư, doanh nghiệp có thể định lượng ảnh hưởng của vấn đề chuỗi cung ứng đến lịch sản xuất. Việc này giúp xác định nhà cung cấp không ổn định hoặc linh kiện thường xuyên gây chậm trễ. Vì sao điều này quan trọng Thuộc tính này làm rõ các chậm trễ do thiếu vật tư, một nguyên nhân phổ biến và đáng kể khiến lịch sản xuất bị sai lệch. Lấy dữ liệu ở đâu Thông tin này không nằm trong một trường lưu trữ riêng lẻ. Đây là kết quả của bước kiểm tra tình trạng sẵn có (kiểm tra ATP). Bạn thường có thể xem kết quả trong giao dịch CO02 hoặc qua bước kiểm tra tình trạng sẵn có hàng loạt COHV. Trạng thái này (ví dụ: MACM, vật tư đã được cam kết) có thể được ghi lại. Hãy tham khảo tài liệu SAP ECC PP. Ví dụ Có sẵnThiếuCó sẵn một phầnChưa kiểm tra | |||
| Trạng thái lệnh sản xuất ProductionOrderStatus | Trạng thái xử lý hiện tại của lệnh sản xuất, chẳng hạn như Đã tạo, Đã phát hành hoặc Đã hoàn tất về mặt kỹ thuật. | ||
| Mô tả Trạng thái lệnh sản xuất cho biết giai đoạn hiện tại của lệnh trong vòng đời. SAP dùng các mã trạng thái để quản lý tiến độ của lệnh, chẳng hạn CRTD (Đã tạo), REL (Đã phát hành), CNF (Đã xác nhận), DLV (Đã giao) và TECO (Đã hoàn tất về mặt kỹ thuật). Phân tích thời gian lệnh nằm ở từng trạng thái là phần cốt lõi của process mining trong sản xuất. Việc này giúp xác định lệnh phải chờ bao lâu mới được phát hành sau khi tạo, hoặc nằm ở trạng thái giao hàng một phần trong bao lâu. Theo dõi các lần đổi trạng thái dưới dạng hoạt động giúp bạn có cái nhìn tổng quan về luồng quy trình. Vì sao điều này quan trọng Thông tin này cho biết tiến độ của lệnh tại một thời điểm và giúp tìm ra các điểm nghẽn khiến lệnh bị đình trệ trong thời gian dài. Lấy dữ liệu ở đâu Thông tin trạng thái được lưu trong các bảng JEST và JSTO, liên kết với số đối tượng của lệnh (AUFK-OBJNR). Nội dung trạng thái nằm trong TJ02T. Thông thường, có thể đọc trạng thái bằng các function module như STATUS_TEXT_EDIT. Ví dụ CRTD (Đã tạo)REL (Đã phát hành)DLV (Đã giao)TECO (Đã hoàn tất về mặt kỹ thuật) | |||
| Trạng thái tuân thủ lịch sản xuất ScheduleAdherenceStatus | Cờ cho biết lệnh sản xuất có hoàn tất trước hoặc đúng ngày kết thúc dự kiến hay không. | ||
| Mô tả Trạng thái tuân thủ lịch sản xuất là thuộc tính dạng đúng/sai hoặc phân loại được tính toán, giúp bạn nhanh chóng nắm được hiệu suất đúng hạn. Trạng thái này được xác định bằng cách so sánh 'Ngày kết thúc thực tế' với 'Ngày kết thúc dự kiến'. Nếu ngày kết thúc thực tế trùng hoặc sớm hơn ngày dự kiến, trạng thái là 'Đúng hạn'; nếu không, trạng thái là 'Trễ hạn'. Thuộc tính này giúp đơn giản hóa việc phân tích và trực quan hóa trên dashboard. Bạn có thể dễ dàng lọc và tổng hợp dữ liệu để tính KPI 'Tỷ lệ tuân thủ lịch sản xuất', đồng thời xác định nguyên nhân chính khiến lệnh trễ hạn, chẳng hạn như một số sản phẩm, nhà máy hoặc tình trạng thiếu vật tư. Vì sao điều này quan trọng Thuộc tính này giúp phân tích hiệu suất bằng cách phân loại lệnh thành 'Đúng hạn' hoặc 'Trễ hạn', nhờ đó dễ đo lường và báo cáo độ tin cậy của lịch sản xuất. Lấy dữ liệu ở đâu Trường được tính toán: IF('ActualEndDate' <= 'PlannedEndDate', 'On-Time', 'Late'). Ví dụ Đúng hạnTrễ hạn | |||
Hoạt động lập kế hoạch sản xuất
| Hoạt động | Mô tả | ||
|---|---|---|---|
| Ghi nhận nhập kho thành phẩm | Sự kiện này ghi nhận việc nhập thành phẩm từ lệnh sản xuất vào kho. Điều đó có nghĩa hàng đã sản xuất sẵn sàng để giao hoặc tiếp tục xử lý. | ||
| Vì sao điều này quan trọng Đây là mốc hoàn tất quan trọng, ghi nhận đầu ra cuối cùng của quy trình sản xuất. Thời gian từ lúc phát hành lệnh đến khi nhập kho là tổng thời gian sản xuất. Lấy dữ liệu ở đâu Sự kiện được ghi thành chứng từ vật tư trong các bảng MKPF/MSEG, với loại dịch chuyển thường là '101' và tham chiếu đến lệnh sản xuất. Trạng thái hệ thống 'DLV' (I0012, Đã giao) cũng được đặt cho lệnh. Thu thập Ghi nhận ngày hạch toán của chứng từ vật tư có loại dịch chuyển '101' hoặc dấu thời gian khi trạng thái 'DLV' thay đổi. Loại sự kiện explicit | |||
| Ghi nhận xác nhận cuối cùng | Hoạt động này cho biết mọi công đoạn của lệnh sản xuất đã hoàn tất trên sàn sản xuất. Hệ thống đánh dấu bằng bản ghi xác nhận cuối cùng cho công đoạn cuối. | ||
| Vì sao điều này quan trọng Mốc này đánh dấu thời điểm kết thúc các hoạt động sản xuất thực tế. Khoảng thời gian từ xác nhận đầu tiên đến xác nhận cuối cùng thể hiện thời gian thực hiện sản xuất. Lấy dữ liệu ở đâu Sự kiện được ghi nhận khi hệ thống đặt trạng thái 'CNF' (I0009, Đã xác nhận). Trạng thái này thường được kích hoạt bởi bản ghi xác nhận cuối cùng trong bảng AFRU (AFRU-AUERU = 'X'). Thay đổi trạng thái được ghi trong JCDS. Thu thập Xác định thời điểm trạng thái 'CNF' được đặt hoặc tìm bản ghi xác nhận cuối cùng trong AFRU. Loại sự kiện explicit | |||
| Ghi nhận xác nhận đầu tiên | Sự kiện này đánh dấu thời điểm bắt đầu công việc sản xuất thực tế cho lệnh. Hệ thống ghi nhận khi xác nhận thời gian đầu tiên cho bất kỳ công đoạn nào trong lệnh sản xuất được nhập vào. | ||
| Vì sao điều này quan trọng Hoạt động này cung cấp thời điểm sản xuất thực sự bắt đầu, cần thiết để đo mức độ bám sát lịch và phát hiện chậm trễ giữa lúc phân bổ tài nguyên và lúc bắt đầu công việc. Lấy dữ liệu ở đâu Có thể xác định sự kiện này bằng cách tìm ngày hạch toán sớm nhất (AFRU-BUDAT) trong các xác nhận của lệnh ở bảng AFRU. Bản ghi đầu tiên đánh dấu thời điểm bắt đầu sản xuất thực tế. Thu thập Xác định bản ghi xác nhận đầu tiên của lệnh dựa trên ngày hạch toán trong bảng AFRU. Loại sự kiện inferred | |||
| Hoàn tất kỹ thuật lệnh | Đây là bước đóng lệnh về mặt hành chính và logistics. Bước này ngăn các lần dịch chuyển vật tư hoặc xác nhận tiếp theo, đồng thời cho phép quyết toán tài chính. | ||
| Vì sao điều này quan trọng Đây là điểm kết thúc chính thức của vòng đời lệnh xét về logistics. Phân tích sự kiện này giúp bạn hiểu tổng thời gian quy trình, bao gồm cả các công việc hành chính sau sản xuất. Lấy dữ liệu ở đâu Sự kiện được ghi nhận rõ khi trạng thái hệ thống 'TECO' (I0045, Hoàn tất kỹ thuật) được gán cho lệnh. Thay đổi này được ghi kèm dấu thời gian trong bảng JCDS. Thu thập Xác định thời điểm trạng thái 'TECO' có hiệu lực với lệnh trong JCDS. Loại sự kiện explicit | |||
| Phát hành lệnh sản xuất | Hoạt động này đánh dấu việc chính thức phê duyệt và phát hành lệnh sản xuất để thực hiện. Sau khi phát hành, việc giữ chỗ vật tư có hiệu lực và có thể bắt đầu các hoạt động sản xuất như xuất vật tư và xác nhận. | ||
| Vì sao điều này quan trọng Đây là mốc quan trọng, đánh dấu thời điểm chuyển từ lập kế hoạch sang thực hiện. Thời gian từ lúc tạo đến lúc phát hành là chỉ số quan trọng để đánh giá hiệu quả lập kế hoạch. Lấy dữ liệu ở đâu Sự kiện được ghi nhận rõ khi trạng thái hệ thống 'REL' (I0002) được gán cho lệnh sản xuất. Thay đổi này được ghi kèm dấu thời gian trong bảng JCDS, liên kết với số đối tượng của lệnh (AUFK-OBJNR). Thu thập Xác định thời điểm trạng thái 'REL' có hiệu lực với lệnh. Loại sự kiện explicit | |||
| Tạo lệnh sản xuất | Sự kiện này ghi nhận thời điểm tạo lệnh sản xuất mới, thường bắt đầu từ một lần chạy kế hoạch hoặc thao tác nhập thủ công. Hệ thống ghi nhận rõ sự kiện khi bản ghi lệnh mới được lưu và nhận trạng thái 'CRTD' (Created). | ||
| Vì sao điều này quan trọng Đây là điểm bắt đầu của mỗi trường hợp lệnh sản xuất. Phân tích khoảng thời gian từ sự kiện này đến lúc phát hành giúp phát hiện chậm trễ trong khâu lập kế hoạch trước sản xuất và chuẩn bị hành chính. Lấy dữ liệu ở đâu Sự kiện này được ghi nhận từ ngày tạo (AUFK-ERDAT) và giờ tạo (AUFK-ERZET) của lệnh sản xuất. Trạng thái hệ thống 'CRTD' (I0001) được gán và ghi trong các bảng JEST và JCDS, liên kết với số đối tượng của lệnh (AUFK-OBJNR). Thu thập Theo dõi thời điểm tạo lệnh và lúc gán trạng thái 'CRTD'. Loại sự kiện explicit | |||
| Đặt trạng thái hủy lệnh | Sự kiện này cho biết lệnh sản xuất đã bị hủy trước khi hoàn tất. Thông thường, hệ thống đặt một trạng thái cụ thể hoặc cờ xóa để ngăn mọi xử lý tiếp theo. | ||
| Vì sao điều này quan trọng Đây là kết quả không mong muốn cần được theo dõi. Phân tích các lệnh bị hủy có thể giúp phát hiện vấn đề trong dự báo nhu cầu, độ chính xác của kế hoạch hoặc quản lý dữ liệu chủ. Lấy dữ liệu ở đâu Có thể xác định sự kiện này khi trạng thái 'DLFL' (I0076, Cờ xóa) được gán hoặc khi một trạng thái 'Canceled' cụ thể được cấu hình. Thay đổi được ghi kèm dấu thời gian trong bảng JCDS. Thu thập Xác định thời điểm cờ xóa ('DLFL') hoặc trạng thái hủy được đặt cho lệnh. Loại sự kiện inferred | |||
| Ghi nhận xác nhận giữa chừng | Sự kiện này ghi nhận tiến độ của lệnh sản xuất thông qua xác nhận một phần công đoạn. Cách làm này thường dùng với lệnh kéo dài, khi cần theo dõi tiến độ trước lúc hoàn tất. | ||
| Vì sao điều này quan trọng Phân tích các xác nhận giữa chừng giúp theo dõi tiến độ của chu kỳ sản xuất dài và phát hiện điểm nghẽn ngay trong quá trình sản xuất, thay vì chỉ ở đầu hoặc cuối quy trình. Lấy dữ liệu ở đâu Sự kiện được ghi nhận từ các bản ghi xác nhận trong bảng AFRU không được đánh dấu là xác nhận cuối cùng. Mỗi bản ghi có ngày (AFRU-BUDAT) và giờ hạch toán. Thu thập Trích xuất tất cả bản ghi xác nhận trong AFRU không được đánh dấu là xác nhận cuối cùng của một công đoạn. Loại sự kiện explicit | |||
| Ghi nhận xuất vật tư | Hoạt động này ghi nhận việc lấy vật tư thành phần khỏi kho để dùng cho lệnh sản xuất. Đây là xác nhận rằng nguyên liệu thô hoặc bán thành phẩm cần thiết đã được chuẩn bị cho sản xuất. | ||
| Vì sao điều này quan trọng Sự kiện này đánh dấu thời điểm bắt đầu tiêu hao vật tư. Chậm trễ giữa lúc phát hành lệnh và xuất vật tư có thể cho thấy vấn đề trong logistics kho, khâu chuẩn bị vật tư hoặc độ chính xác của dữ liệu tồn kho. Lấy dữ liệu ở đâu Sự kiện được ghi thành chứng từ vật tư trong các bảng MKPF (phần đầu) và MSEG (mục), kèm loại dịch chuyển, thường là '261', và số lệnh sản xuất tham chiếu (MSEG-AUFNR). Thu thập Ghi nhận ngày hạch toán (MKPF-BUDAT) của chứng từ vật tư có loại dịch chuyển '261' liên kết với lệnh. Loại sự kiện explicit | |||
| Kiểm tra tình trạng sẵn có của vật tư | Sự kiện này ghi nhận việc kiểm tra xem đã có đủ các thành phần cần thiết cho lệnh sản xuất hay chưa. Hệ thống có thể tự động kiểm tra khi tạo hoặc phát hành lệnh, hoặc người dùng có thể chủ động thực hiện. | ||
| Vì sao điều này quan trọng Hoạt động này rất quan trọng để tìm hiểu chậm trễ do thiếu vật tư. Việc kiểm tra lặp lại nhiều lần hoặc phải chờ lâu mới có vật tư có thể cho thấy vấn đề trong chuỗi cung ứng hoặc quản lý tồn kho. Lấy dữ liệu ở đâu Hệ thống đặt trạng thái như 'MACM' (đã cam kết vật tư) hoặc 'MSPT' (thiếu vật tư). Có thể xác định thời điểm thực hiện qua dấu thời gian của lần đổi trạng thái trong các bảng JEST/JCDS. Kết quả hiển thị trong phần đầu lệnh. Thu thập Xác định thời điểm từ dấu thời gian của các lần đổi trạng thái liên quan đến tình trạng sẵn có của vật tư, chẳng hạn 'MACM' hoặc 'MSPT'. Loại sự kiện inferred | |||
| Thay đổi dữ liệu lệnh | Sự kiện này ghi nhận các thay đổi quan trọng đối với lệnh sản xuất sau khi tạo, chẳng hạn như sửa số lượng, ngày tháng hoặc BOM. Hệ thống lưu lại các thay đổi này để phục vụ kiểm tra. | ||
| Vì sao điều này quan trọng Theo dõi các thay đổi này giúp phát hiện quy trình thiếu ổn định và việc lập lại kế hoạch thường xuyên. Tần suất thay đổi cao có thể cho thấy kế hoạch ban đầu chưa tốt, nhu cầu biến động hoặc dữ liệu không chính xác. Lấy dữ liệu ở đâu Các thay đổi đối với trường quan trọng trong những bảng như AFKO (phần đầu lệnh) và AFPO (mục lệnh) được ghi trong bảng tài liệu thay đổi CDHDR (phần đầu) và CDPOS (mục). Bạn có thể trích xuất từng thay đổi liên quan thành một hoạt động. Thu thập Trích xuất các mục trong nhật ký thay đổi từ bảng CDHDR và CDPOS cho lớp đối tượng lệnh sản xuất. Loại sự kiện explicit | |||
| Thực hiện quyết toán lệnh | Sự kiện này ghi nhận việc quyết toán tài chính cho lệnh sản xuất, trong đó chi phí đã tập hợp được phân bổ cho các đối tượng chi phí phù hợp. Đây là bước cuối cùng trong vòng đời lệnh xét về kiểm soát chi phí. | ||
| Vì sao điều này quan trọng Dù là hoạt động tài chính, việc quyết toán chậm có thể cho thấy vấn đề trong báo cáo chi phí hoặc độ chính xác của dữ liệu lệnh. Đây là mốc đóng sổ tài chính thực sự của quy trình sản xuất. Lấy dữ liệu ở đâu Có thể xác định sự kiện này khi số dư lệnh bằng không, hoặc khi trạng thái hệ thống 'SETC' (I0076, Đã tạo quy tắc quyết toán) được theo sau bởi nhật ký chạy quyết toán. Kết quả quyết toán thực tế được ghi trong các bảng kiểm soát chi phí như COSP và COSS. Thu thập Xác định sự kiện từ chứng từ quyết toán liên kết với lệnh trong các bảng CO hoặc từ lúc trạng thái 'SETC' được kích hoạt. Loại sự kiện inferred | |||
Hướng dẫn trích xuất dữ liệu
Các bước
- Tạo InfoSet trong SAP Query: Dùng mã giao dịch
SQ02. Tạo InfoSet mới, chẳng hạnZPP_EVENTLOG. Chọn nguồn dữ liệu 'Nối bảng bằng bảng cơ sở'. ChọnAUFK(dữ liệu chính của lệnh) làm bảng cơ sở ban đầu. - Nối các bảng cần thiết: Thêm các bảng sau vào phần nối của InfoSet. Hệ thống có thể đề xuất cách nối, nhưng hãy kiểm tra để đảm bảo chính xác:
AUFKvớiAFKO(dữ liệu phần đầu lệnh PP):AUFK-AUFNR = AFKO-AUFNRAUFKvớiJEST(trạng thái của từng đối tượng):AUFK-OBJNR = JEST-OBJNRJESTvớiJCDS(tài liệu thay đổi trạng thái hệ thống/người dùng):JEST-OBJNR = JCDS-OBJNRANDJEST-STAT = JCDS-STAT. Lưu ý: Cách nối này dùng để đọc lịch sử thay đổi trạng thái.AUFKvớiAFRU(xác nhận hoàn tất lệnh):AUFK-AUFNR = AFRU-AUFNRAUFKvớiMSEG(phân đoạn chứng từ: vật tư):AUFK-AUFNR = MSEG-AUFNRMSEGvớiMKPF(phần đầu: chứng từ vật tư):MSEG-MBLNR = MKPF-MBLNRANDMSEG-MJAHR = MKPF-MJAHR
- Xác định nhóm trường: Kéo các trường cần thiết từ bảng nguồn vào nhóm trường. Đảm bảo có đủ các trường cần cho truy vấn cuối cùng, chẳng hạn
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATE,MKPF-BUDAT. - Thêm trường tùy chỉnh và mã: Trong InfoSet, mở thẻ 'Extras'. Bạn cần xác định các trường tùy chỉnh
ActivityName,EventTime,SourceSystemvàLastDataUpdate, rồi viết mã ABAP để điền dữ liệu theo logic trong phần truy vấn. Logic này sẽ duyệt qua các lần đổi trạng thái, xác nhận và chứng từ vật tư để tạo một bản ghi riêng cho mỗi sự kiện nghiệp vụ. Đây là bước phức tạp nhất vì bạn cần chuyển dữ liệu dạng bảng thành nhật ký sự kiện trong các phần mã của InfoSet. - Tạo và lưu InfoSet: Sau khi hoàn tất các phần nối, trường và mã tùy chỉnh, hãy lưu và tạo InfoSet.
- Tạo SAP Query: Dùng mã giao dịch
SQ01. Tạo truy vấn mới, chẳng hạnZPP_EVENTS, dựa trên InfoSet vừa tạo. - Thiết kế bố cục truy vấn: Trong trình thiết kế truy vấn, xác định các trường trên màn hình chọn dữ liệu. Nên chọn Lệnh sản xuất
AUFNR, Nhà máyWERKS, Loại lệnhAUARTvà khoảng ngày tạo lệnhAUFK-ERDAT. - Xác định danh sách đầu ra: Chọn các trường sẽ hiển thị trong báo cáo. Danh sách này phải khớp chính xác với các cột cần có trong nhật ký sự kiện, bao gồm cả trường tùy chỉnh như
ActivityNamevàEventTime. - Chạy truy vấn: Chạy truy vấn với tiêu chí chọn phù hợp, chẳng hạn các lệnh sản xuất trong 3 đến 6 tháng gần nhất.
- Xuất dữ liệu: Khi truy vấn hiển thị kết quả, hãy xuất danh sách. Định dạng phổ biến và đáng tin cậy nhất là 'Spreadsheet' hoặc 'Local File' với định dạng phân tách bằng tab hoặc CSV.
- Định dạng cho ProcessMind: Mở tệp đã xuất bằng chương trình bảng tính. Kiểm tra tiêu đề cột có khớp với các thuộc tính cần thiết (
ProductionOrder,ActivityName,EventTime, v.v.) hay không. Đảm bảo định dạng ngày giờ củaEventTimenhất quán và đúng chuẩn yêu cầu, chẳng hạn YYYY-MM-DD HH:MI:SS. Lưu tệp dưới dạng CSV để tải lên.
Cấu hình
- Các phép nối InfoSet: Phương pháp này dựa trên InfoSet phức tạp, nối các bảng phần đầu, trạng thái, xác nhận và luân chuyển vật tư. Các phép nối chính gồm
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUvàAUFK->MSEG->MKPF. Nối sai hoặc kém hiệu quả có thể khiến hệ thống chạy chậm hoặc dữ liệu không chính xác. - Tiêu chí chọn dữ liệu: Cần xác định phạm vi chọn phù hợp để tránh ảnh hưởng đến hiệu suất hệ thống. Các trường chọn chính trên màn hình khởi động truy vấn nên gồm:
- Nhà máy sản xuất (
AUFK-WERKS) - Loại lệnh sản xuất (
AUFK-AUART) - Ngày tạo lệnh (
AUFK-ERDAT): Nên trích xuất dữ liệu trong khoảng 3-6 tháng gần nhất để giữ kích thước tập dữ liệu ở mức phù hợp.
- Nhà máy sản xuất (
- Trạng thái hệ thống: Logic xác định các sự kiện như 'Đã tạo', 'Đã phát hành', 'Đã hoàn tất về mặt kỹ thuật' và 'Đã hủy' phụ thuộc vào các mã trạng thái hệ thống cụ thể (ví dụ: I0001, I0002, I0045, I0047). Các mã này thường được dùng thống nhất trong SAP, nhưng bạn vẫn nên kiểm tra lại.
- Loại luân chuyển: Các sự kiện như 'Xuất kho' và 'Nhập kho' được xác định bằng loại luân chuyển cụ thể (
MSEG-BWART), thường lần lượt là '261' và '101'. Hãy xác nhận các giá trị này phù hợp với cấu hình của tổ chức bạn. - Quyền truy cập: Người chạy truy vấn cần có quyền dùng các giao dịch
SQ01,SQ02vàSQ03, đồng thời có quyền xem tất cả bảng liên quan (AUFK, AFKO, JEST, JCDS, AFRU, MSEG, MKPF).
Truy vấn mẫu abap
/*
The following ABAP-style SQL script represents the complete logic required to build the event log.
This logic must be implemented within the code sections of the SQ02 InfoSet, as a direct SQL query of this nature is not run.
Each SELECT block corresponds to a specific business activity.
*/
-- 1. Production Order Created
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Created' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0001' AND JCDS.INACT = ''
UNION ALL
-- 2. Material Availability Checked (using 'Material shortage' status as an indicator)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Material Availability Checked' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0033' AND JCDS.INACT = '' -- I0033 is MSPT (Material Shortage)
UNION ALL
-- 3. Production Order Released
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Released' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0002' AND JCDS.INACT = ''
UNION ALL
-- 4. Order Data Changed (using last change date as a proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Data Changed' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime, -- Time is not available in AUFK
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.AEDAT IS NOT NULL AND AUFK.AEDAT > AUFK.ERDAT
UNION ALL
-- 5. Goods Issue Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Issue Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
CONF.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
CONF.EventTime,
CONF.ProductionPlant,
CONF.ProductCode,
CONF.PlannedQuantity,
CONF.DeliveredQuantity,
CONF.ActualStartDate,
CONF.ActualEndDate,
CONF.SourceSystem,
CONF.LastDataUpdate
FROM (
SELECT
AUFK.AUFNR AS ProductionOrder,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
ROW_NUMBER() OVER(PARTITION BY AUFK.AUFNR ORDER BY AFRU.BUDAT, AFRU.ERFZEIT) as rn
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
) AS CONF
WHERE CONF.rn = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'T' -- T = Partial Confirmation
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'E' -- E = Final Confirmation
UNION ALL
-- 9. Goods Receipt Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Technically Completed' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0045' AND JCDS.INACT = ''
UNION ALL
-- 11. Order Settlement Ran (using 'Closed' status as proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Settlement Ran' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0046' AND JCDS.INACT = '' -- I0046 is CLSD (Closed)
UNION ALL
-- 12. Order Cancellation Set
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0047' AND JCDS.INACT = '' -- I0047 is CNF (Confirmed), use I0076 for Canceled. Recorrecting. Use Deletion Flag instead.
-- Corrected Logic for Cancellation:
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.LOEKZ = 'X'; Các bước
- Thiết lập quyền truy cập cơ sở dữ liệu: Xin thông tin đăng nhập chỉ có quyền đọc cho cơ sở dữ liệu SAP ECC bên dưới. Bạn cần địa chỉ máy chủ, cổng, tên cơ sở dữ liệu, tên người dùng và mật khẩu. Cần phối hợp với nhóm SAP Basis và quản trị cơ sở dữ liệu để cấp quyền này.
- Xác định lược đồ SAP: Tìm đúng lược đồ cơ sở dữ liệu lưu các bảng SAP. Tên thường là
SAPSR3hoặc một tên tương tự tùy hệ thống. Thay phần giữ chỗ[Your SAP Schema]trong truy vấn bằng tên này. - Chuẩn bị truy vấn SQL: Sao chép toàn bộ truy vấn SQL trong phần
query. Truy vấn này được thiết kế để trích xuất tất cả hoạt động đã nêu thành một nhật ký sự kiện duy nhất. - Cấu hình tham số truy vấn: Trước khi chạy, hãy sửa các phần giữ chỗ trong truy vấn. Đặt
[Start Date]và[End Date]để xác định khoảng thời gian trích xuất. Bạn cũng nên lọc theo nhà máy sản xuất (WERKS) hoặc loại lệnh (AUART) để giới hạn lượng dữ liệu. - Kết nối và thực thi: Dùng ứng dụng SQL tiêu chuẩn như DBeaver, SAP HANA Studio hoặc tập lệnh tùy chỉnh (Python, Java) để kết nối với cơ sở dữ liệu SAP bằng thông tin đăng nhập ở bước 1.
- Chạy truy vấn: Dán truy vấn SQL đã cấu hình vào ứng dụng và thực thi. Tùy vào khoảng ngày và quy mô hệ thống, quá trình này có thể mất vài phút.
- Kiểm tra sơ bộ kết quả: Khi truy vấn chạy xong, hãy xem nhanh vài trăm dòng đầu để đảm bảo các cột như
ProductionOrder,ActivityNamevàEventTimecó dữ liệu chính xác và hợp lý. - Xuất sang CSV: Xuất toàn bộ kết quả từ ứng dụng SQL sang tệp CSV. Đảm bảo tệp dùng mã hóa UTF-8 để tránh lỗi ký tự.
- Hoàn thiện CSV để tải lên: Mở tệp CSV và kiểm tra tiêu đề cột có khớp với các thuộc tính cần thiết (
ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate, v.v.) hay không. Đảm bảo cộtEventTimecó định dạng nhất quán, chẳng hạnYYYY-MM-DD HH:MI:SS. - Tải lên ProcessMind: Tệp CSV đã chuẩn bị sẵn sàng để tải lên ProcessMind và phân tích.
Cấu hình
- Lược đồ cơ sở dữ liệu: Bạn cần chỉ định lược đồ SAP lưu các bảng lập kế hoạch sản xuất. Thay phần giữ chỗ
[Your SAP Schema]trong truy vấn bằng tên chính xác của môi trường, chẳng hạnSAPSR3. - Khoảng ngày: Lọc theo khoảng ngày cụ thể là yếu tố quan trọng để đảm bảo hiệu suất. Truy vấn lọc theo ngày tạo lệnh (
AUFK.ERDAT). Nên bắt đầu với khoảng thời gian gần đây từ 3 đến 6 tháng để giữ lượng dữ liệu ở mức phù hợp. - Loại lệnh sản xuất: Để tập trung phân tích, hãy lọc truy vấn theo trường loại lệnh sản xuất (
AUFK.AUART). Nhờ đó, bạn có thể chọn hoặc loại trừ các loại lệnh cụ thể như lệnh sản xuất tiêu chuẩn, lệnh quy trình hoặc lệnh làm lại. - Nhà máy sản xuất: Bạn nên lọc theo một hoặc nhiều nhà máy sản xuất (
AFKO.WERKS). Trích xuất dữ liệu của tất cả nhà máy cùng lúc có thể tiêu tốn nhiều tài nguyên. - Quyền truy cập cơ sở dữ liệu: Phương pháp này yêu cầu người dùng cơ sở dữ liệu có ít nhất quyền đọc các bảng sau:
AUFK,AFKO,JCDS,JEST,AFRU,MSEG,MKPF. Không phải người dùng SAP nào cũng có quyền truy cập trực tiếp vào cơ sở dữ liệu. Bạn cần được cấp quyền đặc biệt.
Truy vấn mẫu sql
WITH Orders AS (
SELECT
aufk.AUFNR AS ProductionOrder,
afko.WERKS AS ProductionPlant,
afko.PLNBEZ AS ProductCode,
afko.GAMNG AS PlannedQuantity,
afko.GMEIN AS PlannedUnit,
afko.GEMNG AS DeliveredQuantity,
CASE
WHEN afko.GSTRI = '00000000' THEN NULL
ELSE TO_TIMESTAMP(afko.GSTRI || afko.GSUZI, 'YYYYMMDDHH24MISS')
END AS ActualStartDate,
CASE
WHEN afko.GETRI = '00000000' THEN NULL
ELSE TO_TIMESTAMP(afko.GETRI || afko.GEUZI, 'YYYYMMDDHH24MISS')
END AS ActualEndDate,
aufk.OBJNR,
aufk.ERDAT AS CreationDate,
aufk.ERFAS AS CreationTime
FROM
"[Your SAP Schema]".AUFK aufk
JOIN
"[Your SAP Schema]".AFKO afko ON aufk.AUFNR = afko.AUFNR
WHERE
aufk.AUTYP = '10' -- Filter for Production Orders
AND aufk.ERDAT BETWEEN '[Start Date]' AND '[End Date]'
-- AND afko.WERKS IN ('[Your Plant]', '[Another Plant]') -- Optional: Filter by Plant
-- AND aufk.AUART IN ('[Your Order Type]') -- Optional: Filter by Order Type
),
Confirmations AS (
SELECT
o.ProductionOrder,
a.RUECK AS ConfirmationNumber,
a.RMZHL AS ConfirmationCounter,
TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') AS EventTime,
a.AUERU AS IsFinalConfirmation,
ROW_NUMBER() OVER(PARTITION BY o.ProductionOrder ORDER BY TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') ASC) as rn_asc,
ROW_NUMBER() OVER(PARTITION BY o.ProductionOrder ORDER BY TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') DESC) as rn_desc
FROM
Orders o
JOIN
"[Your SAP Schema]".AFRU a ON o.ProductionOrder = a.AUFNR
)
-- 1. Production Order Created
SELECT
o.ProductionOrder,
'Production Order Created' AS ActivityName,
TO_TIMESTAMP(o.CreationDate || o.CreationTime, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
UNION ALL
-- 2. Material Availability Checked (using 'Material Committed' status as proxy)
SELECT
o.ProductionOrder,
'Material Availability Checked' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0006' AND jcds.INACT != 'X'
UNION ALL
-- 3. Production Order Released
SELECT
o.ProductionOrder,
'Production Order Released' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0002' AND jcds.INACT != 'X'
UNION ALL
-- 4. Order Data Changed
SELECT
o.ProductionOrder,
'Order Data Changed' AS ActivityName,
TO_TIMESTAMP(aufk.AEDAT || aufk.AEZEIT, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".AUFK aufk ON o.ProductionOrder = aufk.AUFNR
WHERE aufk.AEDAT > o.CreationDate
UNION ALL
-- 5. Goods Issue Posted
SELECT
o.ProductionOrder,
'Goods Issue Posted' AS ActivityName,
TO_TIMESTAMP(mkpf.CPUDT || mkpf.CPUTM, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".MSEG mseg ON o.ProductionOrder = mseg.AUFNR
JOIN "[Your SAP Schema]".MKPF mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
WHERE mseg.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
c.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.rn_asc = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
c.ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.rn_asc > 1 AND c.IsFinalConfirmation IS NULL
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
c.ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.IsFinalConfirmation = 'X'
UNION ALL
-- 9. Goods Receipt Posted
SELECT
o.ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
TO_TIMESTAMP(mkpf.CPUDT || mkpf.CPUTM, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".MSEG mseg ON o.ProductionOrder = mseg.AUFNR
JOIN "[Your SAP Schema]".MKPF mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
WHERE mseg.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
o.ProductionOrder,
'Order Technically Completed' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0045' AND jcds.INACT != 'X'
UNION ALL
-- 11. Order Settlement Ran
SELECT
o.ProductionOrder,
'Order Settlement Ran' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0046' AND jcds.INACT != 'X'
UNION ALL
-- 12. Order Cancellation Set
SELECT
o.ProductionOrder,
'Order Cancellation Set' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTime, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0076' AND jcds.INACT != 'X'; Các bước
- Xác nhận dữ liệu SAP ECC PP, xử lý lệnh sản xuất, xác nhận sản xuất, quản lý tồn kho và controlling đã sẵn sàng. Kiểm tra người dùng trích xuất có quyền đọc các bảng ứng dụng cần thiết và chạy báo cáo ABAP tùy chỉnh.
- Trong ABAP Workbench, chẳng hạn qua giao dịch SE38 hoặc SE80, hãy tạo một báo cáo thực thi riêng, ví dụ [Your custom report name]. Dùng màn hình chọn có các tham số ngày bắt buộc như [Start date] và [End date], cùng bộ lọc tùy chọn cho [Company Code], [Production Plant], [Order Type], [Material] và [Production Order].
- Đọc dữ liệu tiêu đề lệnh sản xuất và dữ liệu chủ từ AUFK cùng các bảng lệnh sản xuất được cấu hình trong hệ thống SAP ECC của bạn. Dùng JCDS và cấu hình trạng thái tương ứng để xác định các lần đổi trạng thái có ghi nhận rõ ràng, gồm CRTD, đã phát hành, hoàn tất kỹ thuật và các trạng thái liên quan đến hủy. Không coi mã trạng thái là một sự kiện nếu lịch sử trạng thái không có thay đổi kèm dấu thời gian.
- Đọc kết quả kiểm tra khả dụng vật tư từ dữ liệu kiểm tra khả dụng của lệnh sản xuất được cấu hình trong hệ thống. Nếu kết quả không được lưu trong bảng có thể liên kết đáng tin cậy với lệnh và dấu thời gian, hãy triển khai SAP enhancement, application log hoặc nguồn kiểm toán đã được đội ngũ SAP phê duyệt. Không suy ra đã kiểm tra chỉ từ việc tạo hoặc phát hành lệnh.
- Đọc lịch sử thay đổi lệnh từ các đối tượng chứng từ thay đổi lệnh sản xuất đã cấu hình và các bảng chứng từ thay đổi liên quan. Chỉ trích xuất những thay đổi quan trọng, chẳng hạn số lượng kế hoạch, ngày tháng, BOM, routing hoặc các trường khác được chủ sở hữu quy trình phê duyệt. Dùng dấu thời gian của chứng từ thay đổi làm EventTime.
- Đọc các bút toán xuất và nhập hàng từ dữ liệu chứng từ vật tư tồn kho được cấu hình trong hệ thống. Liên kết bút toán với lệnh sản xuất bằng tham chiếu lệnh có trong dữ liệu chứng từ vật tư. Phân loại xuất linh kiện là Goods Issue Posted và nhập thành phẩm là Goods Receipt Posted. Dùng ngày và giờ hạch toán nếu có.
- Đọc dữ liệu xác nhận từ nguồn xác nhận sản xuất được cấu hình trong hệ thống. Sắp xếp xác nhận theo lệnh sản xuất và dấu thời gian xác nhận. Ghi nhận First Confirmation Recorded cho lần xác nhận đầu tiên, Intermediate Confirmation Recorded cho các lần xác nhận trung gian đủ điều kiện, và Final Confirmation Recorded cho lần xác nhận được đánh dấu rõ là cuối cùng hoặc được xác định là hoàn tất theo logic xác nhận đã cấu hình. Không suy ra lần cuối chỉ vì đó là dòng cuối cùng trong kết quả của một truy vấn tùy ý.
- Đọc dữ liệu thực hiện quyết toán từ nguồn quyết toán controlling được cấu hình trong hệ thống. Chỉ ghi nhận Order Settlement Ran khi bản ghi thực hiện quyết toán, chứng từ quyết toán hoặc lịch sử trạng thái quyết toán được phê duyệt có dấu thời gian rõ ràng liên kết với lệnh sản xuất.
- Tạo một dòng sự kiện nội bộ cho mỗi hoạt động được trích xuất. Điền ProductionOrder, ActivityName, EventTime, SourceSystem, LastDataUpdate, ProductionPlant, ProductCode, PlannedQuantity, DeliveredQuantity, ActualStartDate và ActualEndDate. Chuyển đổi dấu thời gian theo cách nhất quán và giữ nguyên múi giờ của hệ thống nguồn. Đặt ActualStartDate theo dấu thời gian xác nhận đầu tiên và ActualEndDate theo dấu thời gian xác nhận cuối cùng, nếu có các sự kiện này.
- Sắp xếp các dòng sự kiện theo ProductionOrder và EventTime, đồng thời dùng tiêu chí phụ xác định rõ thứ tự khi dấu thời gian trùng nhau. Chỉ xóa các bản ghi nguồn trùng khớp hoàn toàn, không xóa các sự kiện lặp lại hợp lệ. Xác nhận lược đồ đầu ra có đủ cả 12 tên hoạt động bắt buộc và mỗi dòng được xuất đều có mã trường hợp, tên hoạt động và dấu thời gian sự kiện.
- Ghi kết quả vào tệp trên application server bằng giao diện tệp ABAP được phê duyệt và đường dẫn tệp logic đã cấu hình. Dùng dấu phân cách và mã hóa văn bản thống nhất với cấu hình nạp dữ liệu của ProcessMind, thêm dòng tiêu đề, đặt dấu ngoặc kép quanh giá trị có chứa dấu phân cách và định dạng dấu thời gian nhất quán, ưu tiên YYYY-MM-DDThh:mm:ss.
- Tải tệp xuống theo quy trình truyền tệp SAP đã phê duyệt, tự kiểm tra tệp rồi tải lên ProcessMind dưới dạng event log. Chọn ProductionOrder 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. Xác nhận ProcessMind đọc nguyên trạng các dòng dữ liệu và không được kỳ vọng tự suy ra những hoạt động còn thiếu.
Cấu hình
- Khoảng ngày: Với lần phân tích đầu tiên, hãy trích xuất dữ liệu trong khoảng thời gian cuốn chiếu từ ba đến sáu tháng. Chỉ mở rộng khoảng thời gian sau khi đánh giá hiệu năng và khối lượng dữ liệu. Bao gồm khoảng thời gian nhìn lại để lấy các lệnh được tạo trước ngày bắt đầu đã chọn nhưng vẫn hoạt động trong kỳ phân tích.
- Bộ lọc lựa chọn: Hỗ trợ các bộ lọc [Company Code], [Production Plant], [Order Type], [Material], [Production Order], trạng thái lệnh và ngày tạo hoặc ngày thay đổi. Cấu hình chính xác các trường theo cách triển khai SAP ECC, vì trường lệnh sản xuất có thể khác nhau tùy phiên bản và tùy chỉnh.
- Phạm vi sự kiện: Trích xuất đủ 12 hoạt động bắt buộc thành các dòng sự kiện riêng: Production Order Created, Material Availability Checked, Production Order Released, Order Data Changed, Goods Issue Posted, First Confirmation Recorded, Intermediate Confirmation Recorded, Final Confirmation Recorded, Goods Receipt Posted, Order Technically Completed, Order Settlement Ran và Order Cancellation Set.
- Quy tắc dấu thời gian: Ưu tiên ngày và giờ của sự kiện trong hệ thống nguồn. Nếu chỉ có ngày, hãy ghi rõ độ chính xác bị giảm và dùng một giờ đã cấu hình thống nhất, thay vì tạo ra giờ chính xác không có trong dữ liệu. Chuyển đổi mọi dấu thời gian sang múi giờ mà ProcessMind yêu cầu.
- Xử lý trạng thái: Dùng lịch sử trạng thái có dấu thời gian cho các sự kiện trạng thái. Cấu hình ánh xạ từ giá trị trạng thái nội bộ sang hoạt động nghiệp vụ dựa trên cấu hình trạng thái hệ thống và được chủ sở hữu quy trình phê duyệt.
- Kiểm tra khả dụng: Cấu hình nguồn được phê duyệt để ghi nhận việc thực hiện kiểm tra khả dụng. Không tạo dòng Material Availability Checked từ việc tạo lệnh, phát hành lệnh, đặt trước vật tư hoặc xuất hàng thành công, trừ khi nguồn được nghiệp vụ phê duyệt ghi nhận rõ lần kiểm tra đó.
- Xử lý xác nhận: Cấu hình quy tắc phân biệt xác nhận đầu tiên, trung gian và cuối cùng. Chỉ coi một lần xác nhận là cuối cùng khi nguồn đánh dấu rõ như vậy hoặc logic xác nhận SAP đã cấu hình xác định đó là lần hoàn tất.
- Số lượng: Nếu có thể, giữ nguyên đơn vị đo trong dữ liệu nguồn. Nếu gộp số lượng, hãy ghi rõ cách gộp theo lệnh, vật tư, lần dịch chuyển, lần xác nhận hay sự kiện. DeliveredQuantity phải thể hiện lượng thành phẩm đã nhập kho theo bút toán, không chỉ là sản lượng đã xác nhận, trừ khi chủ sở hữu quy trình phê duyệt cách hiểu đó.
- LastDataUpdate: Điền dấu thời gian chạy trích xuất hoặc dấu thời gian làm mới dữ liệu nguồn vào trường này. Áp dụng cùng một quy ước đã ghi lại cho mọi dòng trong một lần chạy.
- Hiệu năng: Giới hạn khoảng dữ liệu được chọn, chỉ lấy các trường cần thiết, xử lý theo từng gói, lọc dữ liệu ở phía cơ sở dữ liệu, tránh đọc cơ sở dữ liệu lồng nhau trong các vòng lặp lớn và chỉ tạo hoặc dùng chỉ mục đã được phê duyệt thông qua quy trình quản trị cơ sở dữ liệu SAP. Ghi dữ liệu đầu ra theo từng phần nếu cần hạn chế bộ nhớ sử dụng.
- Tệp đầu ra: Cấu hình thư mục application server, tên tệp logic, dấu phân cách, mã hóa, định dạng số thập phân, định dạng dấu thời gian và cách xử lý dòng tiêu đề theo đặc tả tải lên ProcessMind. Không để lộ thông tin đăng nhập trong báo cáo hoặc tệp đầu ra.
- Điều kiện tiên quyết: Xác nhận SAP ECC PP, quản lý tồn kho, xác nhận sản xuất, quản lý trạng thái lệnh sản xuất và dữ liệu quyết toán controlling đã được kích hoạt khi cần. Phải cấp quyền cần thiết, phê duyệt quản trị phát triển tùy chỉnh, phê duyệt transport, quyền truy cập tệp trên application server và quyền nạp dữ liệu vào ProcessMind trước khi chạy.
- Cấu hình theo hệ thống: Cần xác nhận tên bảng, trường, mã trạng thái, đối tượng chứng từ thay đổi, nguồn xác nhận, nguồn kiểm tra khả dụng và nguồn quyết toán trong hệ thống SAP ECC đích. Dùng [Configure based on your system] nếu cách triển khai không có nguồn tiêu chuẩn đáng tin cậy.
Truy vấn mẫu abap
REPORT [Your custom report name].
* This executable ABAP report is a complete extraction framework for the twelve required activities.
* Replace only the marked system-specific source sections, selection parameters, and file configuration.
* Confirm every table and field against the target SAP ECC system before activation.
PARAMETERS p_from TYPE sydatum OBLIGATORY.
PARAMETERS p_to TYPE sydatum OBLIGATORY.
PARAMETERS p_file TYPE string OBLIGATORY DEFAULT '[Application server file path]'.
PARAMETERS p_src TYPE string OBLIGATORY DEFAULT '[SAP ECC system identifier]'.
SELECT-OPTIONS s_werks FOR [Production plant field].
SELECT-OPTIONS s_aufnr FOR [Production order field].
SELECT-OPTIONS s_auart FOR [Production order type field].
SELECT-OPTIONS s_bukrs FOR [Company code field].
TYPES: BEGIN OF ty_event,
productionorder TYPE string,
activityname TYPE string,
eventtime TYPE string,
sourcesystem TYPE string,
lastdataupdate TYPE string,
productionplant TYPE string,
productcode TYPE string,
plannedquantity TYPE string,
deliveredquantity TYPE string,
actualstartdate TYPE string,
actualenddate TYPE string,
END OF ty_event.
DATA gt_events TYPE STANDARD TABLE OF ty_event WITH EMPTY KEY.
DATA gs_event TYPE ty_event.
DATA gv_update_timestamp TYPE string.
DATA gv_line TYPE string.
GET TIME STAMP FIELD DATA(gv_update_ts).
gv_update_timestamp = |{ gv_update_ts TIMESTAMP = ISO }|.
* Production Order Created
SELECT [Production order field], [Production plant field], [Product field], [Planned quantity field], [Creation date field], [Creation time field]
FROM [Production order header table]
INTO TABLE @DATA(lt_created)
WHERE [Creation date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks
AND [Production order type field] IN @s_auart
AND [Company code field] IN @s_bukrs.
LOOP AT lt_created ASSIGNING FIELD-SYMBOL(<created>).
CLEAR gs_event.
gs_event-productionorder = |{ <created>-[Production order field] }|.
gs_event-activityname = 'Production Order Created'.
gs_event-eventtime = |{ <created>-[Creation date field] } { <created>-[Creation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <created>-[Production plant field] }|.
gs_event-productcode = |{ <created>-[Product field] }|.
gs_event-plannedquantity = |{ <created>-[Planned quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Material Availability Checked
SELECT [Production order field], [Production plant field], [Product field], [Availability check date field], [Availability check time field]
FROM [Availability check source table]
INTO TABLE @DATA(lt_availability)
WHERE [Availability check date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_availability ASSIGNING FIELD-SYMBOL(<availability>).
CLEAR gs_event.
gs_event-productionorder = |{ <availability>-[Production order field] }|.
gs_event-activityname = 'Material Availability Checked'.
gs_event-eventtime = |{ <availability>-[Availability check date field] } { <availability>-[Availability check time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <availability>-[Production plant field] }|.
gs_event-productcode = |{ <availability>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Production Order Released
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field], [Planned quantity field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_released)
WHERE [Status field] = '[Released status code]'
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_released ASSIGNING FIELD-SYMBOL(<released>).
CLEAR gs_event.
gs_event-productionorder = |{ <released>-[Production order field] }|.
gs_event-activityname = 'Production Order Released'.
gs_event-eventtime = |{ <released>-[Status change date field] } { <released>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <released>-[Production plant field] }|.
gs_event-productcode = |{ <released>-[Product field] }|.
gs_event-plannedquantity = |{ <released>-[Planned quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Data Changed
SELECT [Production order field], [Change date field], [Change time field], [Production plant field], [Product field], [Changed field name]
FROM [Production order change document source table]
INTO TABLE @DATA(lt_changed)
WHERE [Change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Changed field name] IN ('[Planned quantity field]', '[Basic start date field]', '[Basic finish date field]', '[BOM field]', '[Routing field]').
LOOP AT lt_changed ASSIGNING FIELD-SYMBOL(<changed>).
CLEAR gs_event.
gs_event-productionorder = |{ <changed>-[Production order field] }|.
gs_event-activityname = 'Order Data Changed'.
gs_event-eventtime = |{ <changed>-[Change date field] } { <changed>-[Change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <changed>-[Production plant field] }|.
gs_event-productcode = |{ <changed>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Goods Issue Posted
SELECT [Production order field], [Posting date field], [Posting time field], [Production plant field], [Product field], [Quantity field]
FROM [Material document item source table]
INTO TABLE @DATA(lt_gi)
WHERE [Movement type field] IN ('[Goods issue movement type 1]', '[Goods issue movement type 2]')
AND [Posting date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_gi ASSIGNING FIELD-SYMBOL(<gi>).
CLEAR gs_event.
gs_event-productionorder = |{ <gi>-[Production order field] }|.
gs_event-activityname = 'Goods Issue Posted'.
gs_event-eventtime = |{ <gi>-[Posting date field] } { <gi>-[Posting time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <gi>-[Production plant field] }|.
gs_event-productcode = |{ <gi>-[Product field] }|.
gs_event-deliveredquantity = |{ <gi>-[Quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* First Confirmation Recorded
SELECT [Production order field], [Confirmation date field], [Confirmation time field], [Production plant field], [Product field], [Confirmed quantity field]
FROM [Production confirmation source table]
INTO TABLE @DATA(lt_confirmations)
WHERE [Confirmation date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
SORT lt_confirmations BY [Production order field] [Confirmation date field] [Confirmation time field].
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<confirmation>) GROUP BY <confirmation>-[Production order field] ASSIGNING FIELD-SYMBOL(<confirmation_group>).
LOOP AT GROUP <confirmation_group> ASSIGNING FIELD-SYMBOL(<first_confirmation>).
CLEAR gs_event.
gs_event-productionorder = |{ <first_confirmation>-[Production order field] }|.
gs_event-activityname = 'First Confirmation Recorded'.
gs_event-eventtime = |{ <first_confirmation>-[Confirmation date field] } { <first_confirmation>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <first_confirmation>-[Production plant field] }|.
gs_event-productcode = |{ <first_confirmation>-[Product field] }|.
gs_event-actualstartdate = gs_event-eventtime.
APPEND gs_event TO gt_events.
EXIT.
ENDLOOP.
ENDLOOP.
* Intermediate Confirmation Recorded
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<intermediate>) GROUP BY <intermediate>-[Production order field] ASSIGNING FIELD-SYMBOL(<intermediate_group>).
DATA(lv_intermediate_index) = 0.
DATA(lv_intermediate_count) = GROUP SIZE.
LOOP AT GROUP <intermediate_group> ASSIGNING FIELD-SYMBOL(<intermediate_row>).
lv_intermediate_index = lv_intermediate_index + 1.
IF lv_intermediate_index < lv_intermediate_count AND <intermediate_row>-[Final confirmation indicator field] <> '[Final confirmation value]'.
CLEAR gs_event.
gs_event-productionorder = |{ <intermediate_row>-[Production order field] }|.
gs_event-activityname = 'Intermediate Confirmation Recorded'.
gs_event-eventtime = |{ <intermediate_row>-[Confirmation date field] } { <intermediate_row>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <intermediate_row>-[Production plant field] }|.
gs_event-productcode = |{ <intermediate_row>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDIF.
ENDLOOP.
ENDLOOP.
* Final Confirmation Recorded
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<final>) WHERE [Final confirmation indicator field] = '[Final confirmation value]'.
CLEAR gs_event.
gs_event-productionorder = |{ <final>-[Production order field] }|.
gs_event-activityname = 'Final Confirmation Recorded'.
gs_event-eventtime = |{ <final>-[Confirmation date field] } { <final>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <final>-[Production plant field] }|.
gs_event-productcode = |{ <final>-[Product field] }|.
gs_event-actualenddate = gs_event-eventtime.
APPEND gs_event TO gt_events.
ENDLOOP.
* Goods Receipt Posted
SELECT [Production order field], [Posting date field], [Posting time field], [Production plant field], [Product field], [Quantity field]
FROM [Material document item source table]
INTO TABLE @DATA(lt_gr)
WHERE [Movement type field] IN ('[Goods receipt movement type 1]', '[Goods receipt movement type 2]')
AND [Posting date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_gr ASSIGNING FIELD-SYMBOL(<gr>).
CLEAR gs_event.
gs_event-productionorder = |{ <gr>-[Production order field] }|.
gs_event-activityname = 'Goods Receipt Posted'.
gs_event-eventtime = |{ <gr>-[Posting date field] } { <gr>-[Posting time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <gr>-[Production plant field] }|.
gs_event-productcode = |{ <gr>-[Product field] }|.
gs_event-deliveredquantity = |{ <gr>-[Quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Technically Completed
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_teco)
WHERE [Status field] = '[Technically completed status code]'
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_teco ASSIGNING FIELD-SYMBOL(<teco>).
CLEAR gs_event.
gs_event-productionorder = |{ <teco>-[Production order field] }|.
gs_event-activityname = 'Order Technically Completed'.
gs_event-eventtime = |{ <teco>-[Status change date field] } { <teco>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <teco>-[Production plant field] }|.
gs_event-productcode = |{ <teco>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Settlement Ran
SELECT [Production order field], [Settlement date field], [Settlement time field], [Production plant field], [Product field]
FROM [Order settlement source table]
INTO TABLE @DATA(lt_settlement)
WHERE [Settlement date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_settlement ASSIGNING FIELD-SYMBOL(<settlement>).
CLEAR gs_event.
gs_event-productionorder = |{ <settlement>-[Production order field] }|.
gs_event-activityname = 'Order Settlement Ran'.
gs_event-eventtime = |{ <settlement>-[Settlement date field] } { <settlement>-[Settlement time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <settlement>-[Production plant field] }|.
gs_event-productcode = |{ <settlement>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Cancellation Set
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_cancelled)
WHERE [Status field] IN ('[Cancellation status code]', '[Deletion status code]')
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_cancelled ASSIGNING FIELD-SYMBOL(<cancelled>).
CLEAR gs_event.
gs_event-productionorder = |{ <cancelled>-[Production order field] }|.
gs_event-activityname = 'Order Cancellation Set'.
gs_event-eventtime = |{ <cancelled>-[Status change date field] } { <cancelled>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <cancelled>-[Production plant field] }|.
gs_event-productcode = |{ <cancelled>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
SORT gt_events BY productionorder eventtime activityname.
DELETE ADJACENT DUPLICATES FROM gt_events COMPARING productionorder activityname eventtime productionplant productcode.
OPEN DATASET p_file FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'The application server output file could not be opened' TYPE 'E'.
ENDIF.
TRANSFER 'ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProductionPlant,ProductCode,PlannedQuantity,DeliveredQuantity,ActualStartDate,ActualEndDate' TO p_file.
LOOP AT gt_events INTO gs_event.
gv_line = |{ gs_event-productionorder },{ gs_event-activityname },{ gs_event-eventtime },{ gs_event-sourcesystem },{ gs_event-lastdataupdate },{ gs_event-productionplant },{ gs_event-productcode },{ gs_event-plannedquantity },{ gs_event-deliveredquantity },{ gs_event-actualstartdate },{ gs_event-actualenddate }|.
TRANSFER gv_line TO p_file.
ENDLOOP.
CLOSE DATASET p_file.
MESSAGE |Event log written to { p_file }| TYPE 'S'. Bạn đã sẵn sàng bắt đầu chưa?
Dùng mẫu này để chuẩn bị dữ liệu và bắt đầu cải thiện quy trình lập kế hoạch sản xuất. Khám phá thông tin hữu ích và tinh gọn hoạt động vận hành ngay hôm nay.
Tối ưu hóa kế hoạch sản xuất để nâng cao hiệu quả ngay hôm nay
Phát hiện điểm kém hiệu quả, giảm 30% thời gian chu kỳ và đạt mục tiêu.
Không cần thẻ tín dụng. Bắt đầu tối ưu hóa ngay hôm nay.