Cycle Count 流程

本文详细介绍周期盘点的过程,包括定义组织层级的周期盘点、定义盘点类别和项目、自动调度盘点等步骤。准确的库存数量对于供应链管理和生产计划至关重要。

Overview:

   Cycle counting is the periodic counting of individual items throughout the course of the year to ensure the accuracy of inventory quantities and values. Accurate system on-hand quantities are essential for managing supply and demand, maintaining high service levels, and planning production.

   You can perform cycle counting instead of taking complete physical inventories, or you can use both techniques side-by-side to verify inventory quantities and values.


Steps:

• Define a cycle count for the organization or subinventory level.
• Define cycle count classes.
• Define cycle count items.
• Automatically schedule item counts using ABC count frequencies.
• Manually schedule counts for the following inventory control details:items, or specific revisions, lots,subinventories or specific locators
• Count Request.
• Enter counts.
• Approve, reject, or request recounts for cycle count adjustments based on approval tolerances.



1.Define a cycle count for the organization or subinventory level.(Defining and Maintaining a Cycle Count)
   A combination of parameters constitutes a cycle count header, identified by the cycle count name. You use this name to identify any activity pertaining to this cycle count.
   You can define and maintain an unlimited number of cycle counts in Oracle Inventory.For example, you can define separate cycle counts representing different sets of subinventories in your warehouse.


  1)Cycle Count Summary folder-->open a Cycle Counts-->New(B)

   


• Inactive  On:Optionally, date on which the cycle count becomes inactive. As of this date, cannot generate schedules or perform counting activities for this cycle count.
• Late Days: Enter the number of workdays that can pass after the date the count request was generated, before a scheduled count becomes a late count.
• Starting Seq:Enter the sequence number to use as the starting number in the next count request generator.

• Uncheduled Entries: Determine whether you can enter counts for items not scheduled to be counted (Unscheduled Entries).
• Display System Qty: Determine whether to display system on-hand quantities during count entry.

• Aiutomatic Recounts: Determine whether Inventory automatically assigns a status of Recount to out-of-tolerance counts and includes them in the next cycle count listing.If you turn this option on, navigate to the Maximum field and enter the maximum number of times Inventory can generate an automatic recount request. Once this number is reached the adjustment must be approved or rejected

  

• Count: Select the count option to determine whether to exclude serialized items from the cycle count (Not Allowed), create one count request for each serial number (One Per Request), or create multiple serial details in a count request (Multiple Per Request).

• Auto Schedule: If you turn automatic scheduling on, enter the following information. Frequency: Indicate whether to schedule cycle counts Daily, Weekly, or By period. Inventory uses this information, along with the count frequency of each cycle count class, when performing automatic cycle count scheduling. The value you enter here dictates the window of time within which you can enter counts against a schedule bucket.

note:(1)if item is Serial controlled,the Serial option should not set to not allowed 


          

• Required: Determine when approval is required for adjustments:Never:Inventory automatically posts adjustment transactions where entered counts differ from system balances.If out of tolerance: Inventory does not automatically post adjustment transactions for counts outside a specified approval tolerance. You must approve such adjustments before posting.Always:You must approve all cycle count adjustments, regardless of tolerance levels, before Inventory can post any of them.

If you choose to require approval for adjustments If out of tolerance, enter positive and negative tolerances.
Qty Variance: Enter the percentage variances of count quantity to on-hand quantity beyond which adjustments are held for approval.
Adjustment Value: Enter the adjustment values beyond which adjustments are held for approval.
Hit/Miss Analysis: Enter the percentage variances of count quantity to on-hand quantity beyond which Inventory considers a count entry a miss for hit/miss reporting.

Group:  Enter the ABC group name on which to base the cycle count item initialization or update.
• Option: Choose one of the following options:
   • None: Do not change to the list of cycle count items.
   • (Re)initialize: Use the ABC group you specified to load all items and their ABC assignments into the list of items to include in your cycle count. If you already had items defined for your cycle count, this action deletes existing information and reloads the items from the ABC group.       


2.Define Cycle Count Classes and Define Cycle Count Items
             

       1)Defining Cycle Count Classes: Cycle Count Summary window-->open a cycle count-->Classes(B)


  


   2)Define Cycle Count Item:Cycle Count Summary-->open a cycle count-->Item(B)

       

Note: (1)the Item input in this step should have the inventory parameter of Cycle Count enabled.

    



3.Automatically schedule item counts using ABC count frequencies.

   Oracle Inventory uses the number of items in each cycle count class, the count frequency of each class, and the workday calendar of your organization to determine how many and which items youneed to count during the scheduling frequency.
In order for Inventory to perform automatic scheduling you must:
 • Set the Cycle Count Enabled item attribute to Yes for the items you want to include in the cycle count.
 • Enable automatic scheduling when you define your cycle count.
 • Request the schedule using the Generate Automatic Schedule Requests window.
   Each time the auto scheduler runs, it schedules counts only for the schedule interval you defined for the cycle count header. So if your schedule interval is weeks, Inventory schedules all items that need to be counted on all of the workdays in the current week. If your schedule interval is days, then Inventory only schedules those items that are duefor counting on the current date

      


4.Manually schedule counts

  You can manually schedule counts in addition to, or instead of those generated with automatic scheduling. You can request counts for specific subinventories, locators, and items, and set the count for any inventory date. For example, you could enter a request to count item A wherever it can be found in subinventory X. Or you could request to count all item quantities in subinventory Y, locator B-100.Since manually scheduled counts have no impact on automatically scheduled counts, you can potentially count some items more frequently than you had initially planned

    Counting-->Cycle Counting --> Manual Requests(F)

         


5.Count Request

  After you have successfully scheduled your counts, you can submit the process to generate count requests. This process takes the output of the automatic scheduler andyour manual schedule entries, and generates a count request for each item number,revision, lot number, subinventory, and locator combination for which on-handquantities exist. These count requests are ordered first by subinventory and locator,then by item, revision, and lot. Oracle Inventory assigns a unique sequence number to each count request that can be used for reporting, querying, and rapid count entry.Because the count requests are derived from the state of on-hand balances at the time the Generate Cycle Count Requests process is run, you should wait to run it until you are ready to count.
  Note: When you schedule an item to be counted using manual scheduling, someschedule requests may have overlapping count requirements. The count request generator does not create duplicate count requests, but instead cross-references one count request back to each associated schedule request.

 1)Cycle Count Summary-->find your Cycle Count-->Tools-->Generate Cycle Count Requests

  


6.Enter counts

  Counting-->Cycle Counting --> CycleCount Entries(F)

  



7. Approve, reject, or request recounts for cycle count adjustments based on approval tolerances.

   Counting-->Cycle Counting -->Approve Counts(F)     

     

note:not all the count can beapproved in this step , it's base on theApprovestep-up in the cycle count header.



variables { // 测试配置参数 const int total_Cycles = 1500; // 总循环次数 const dword state_timeout = 32000; // 状态超时时间(ms) const dword ACTION_DELAY = 1000; // 动作间延迟(ms) const dword COOLING_TIME = 30000; // 单次电机冷却时间30s dword testStartTime; // 测试开始时间 dword cycleStartTime; // 单次循环开始时间 const dword globalTimeout = 216000000; // 全局超时 msTimer globalTimer; // 测试运行变量 int cycleCount = 0; // 当前循环计数 byte currentState; // 当前座椅状态 byte targetState; // 目标状态 int testFailed = 0; // 测试失败标志 message VIU_CDC_0x3AD viuTx; } // 状态报文处理 - 更新当前状态 on message RRSM_St2_0x557 { currentState = this.RRSM_ZeroGravityFoldSt; } // 全局超时处理 on timer globalTimer { testStepFail("","全局超时! 已完成 %d 次循环", cycleCount); testFailed = 1; cancelTimer(globalTimer); } void ResetGlobalTimer() { cancelTimer(globalTimer); setTimer(globalTimer, globalTimeout); } void WaitForState(byte expectedState) { dword waitStart; waitStart = timeNow(); targetState = expectedState; while (currentState != expectedState) { // 检查全局超时标志 if(testFailed) return; // 检查状态超时 if ((timeNow() - waitStart) > state_timeout) { testStepFail("","等待状态0x%X超时! 当前状态:0x%X", expectedState, currentState); // 错误恢复尝试 SendSeatCommand(0x00); // 发送停止指令 testWaitForTimeout(1000); // 设置失败标志并退出 testFailed = 1; return; } testWaitForTimeout(100); } write("状态转换完成: 0x%X → 0x%X", currentState, expectedState); } void SendSeatCommand(byte type) { viuTx.VIU_ZeroGravityFoldFunSet = type; output(viuTx); switch(type) { case 0x1: write("发送展开指令"); break; case 0x2: write("发送折叠指令"); break; default: write("取消请求"); } //重置全局定时器 ResetGlobalTimer(); } // 执行单次展开-折叠循环 void ExecuteSeatCycle() { cycleStartTime = timeNow(); // 展开座椅 SendSeatCommand(0x01); // UNFOLD testWaitForTimeout(ACTION_DELAY); // 等待展开中状态 WaitForState(0x02); // UNFOLDING if(testFailed) return; write("检测到展开中状态"); // 等待完全展开状态 WaitForState(0x00); // UNFOLDSTS if(testFailed) return; write("座椅完全展开"); // 折叠座椅 SendSeatCommand(0x02); // RETRACT testWaitForTimeout(ACTION_DELAY); // 等待折叠中状态 WaitForState(0x03); // RETRACTING if(testFailed) return; write("检测到折叠中状态"); // 等待完全折叠状态 WaitForState(0x01); // RETRACTSTS if(testFailed) return; } testcase ZeroGravitySeat_Durability_Test() { testStartTime = timeNow(); testFailed = 0; ResetGlobalTimer(); // 初始状态检查 write("===== 测试开始 ====="); write("初始状态: 0x%X", currentState); // 处理初始展开状态 if (currentState == 0x00) // UNFOLDSTS { write("检测到座椅已展开,正在强制折叠..."); // 完整执行折叠流程 SendSeatCommand(0x02); // RETRACT testWaitForTimeout(ACTION_DELAY); // 等待折叠中状态 WaitForState(0x03); // RETRACTING write("检测到折叠中状态"); // 等待最终折叠状态 WaitForState(0x01); // RETRACTSTS write("座椅已成功折叠至初始状态"); } // 确保初始状态为折叠状态 if (currentState != 0x01) { testStepFail("","初始状态错误! 期望: 0x01, 实际: 0x%X", currentState); } // 主测试循环 for (cycleCount = 1; cycleCount <= total_Cycles && !testFailed; cycleCount++) { write("===== 开始循环 [%d/%d] =====", cycleCount, total_Cycles); // 执行单次循环 ExecuteSeatCycle(); if(testFailed) break; write("===== 完成循环 [%d/%d] =====", cycleCount, total_Cycles); // 循环完成后重置全局定时器 ResetGlobalTimer(); if(cycleCount < total_Cycles) { write("等待电机冷却 30秒..."); testWaitForTimeout(COOLING_TIME); } // 每5次循环添加进度报告 if (cycleCount % 5 == 0) { testStepPass("进度报告: %d/%d (已运行%.1f小时),已完成 %d 次循环","", cycleCount, total_Cycles); } } cancelTimer(globalTimer); // 最终状态确认 if (testFailed) { testStepFail("哦豁,完犊子了","测试失败咯! 完成循环: %d/%d", cycleCount-1, total_Cycles); } else if (currentState == 0x01) { testStepPass("Oye","耐久测试完成! 共执行 %d 次循环", total_Cycles); } else { testStepFail("","最终状态错误! 期望: RETRACTSTS(0x01), 实际: 0x%X", currentState); } // 测试统计 write("===== TEST REPORT ====="); write("总循环次数: %d", total_Cycles); write("总测试时间: %.1f 小时", (timeNow() - testStartTime)/3600000.0); write("平均循环时间: %.1f 秒", (timeNow() - testStartTime)/(total_Cycles*1000.0)); // 清理状态 SendSeatCommand(0x00); // 发送NO_REQUEST write("===== 测试结束 ====="); } void MainTest () { ZeroGravitySeat_Durability_Test(); } 分析下整个代码
最新发布
08-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值