SAP B1报错:Form - Not found [66000-9] 问题排查咨询
错误原因分析与解决办法
核心问题:GetForm方法的使用误区
你遇到的Form - Not found [66000-9]错误,本质是SAPbouiCOM.Forms.GetForm方法找不到你指定的表单实例,原因主要有以下几点:
1. GetForm的作用理解错误
GetForm 仅能获取已经在SAP B1客户端中打开的表单实例,不是用来创建新表单,也不是获取表单类型的模板。如果当前没有打开类型为142、实例编号为1的表单,直接调用这个方法就会报错。
2. 实例编号参数错误
第二个参数1是表单的实例编号——同一个类型的表单打开多个时,实例编号会自动递增(比如第一个打开的采购订单实例是1,第二个是2)。你指定的1对应的表单可能已经关闭,或者从未被打开过。
3. 表单类型编号可能不匹配
虽然你认为142是采购订单的类型编号,但不同SAP B1版本、自定义场景下,表单类型可能有差异。可以通过打开采购订单后,在调试中输出Support.oApplication.Forms.ActiveForm.Type的值来确认正确的类型编号。
解决办法
场景1:需要打开新的采购订单表单
如果你的需求是创建新采购订单并添加按钮,应该使用Forms.Add方法创建表单,而不是GetForm:
case "2305": { // 创建新的采购订单表单 SAPbouiCOM.Form oForm = Support.oApplication.Forms.Add("142", 1); oForm.Visible = true; FrmPedidoCompra frmPedidoCompra = new FrmPedidoCompra(oForm); frmPedidoCompra.CreateButtonNovaDataEntrega(); break; }
场景2:需要操作已打开的采购订单表单
如果要针对已打开的采购订单添加按钮,建议遍历表单集合查找目标类型的表单,避免硬编码实例编号:
case "2305": { SAPbouiCOM.Form oForm = null; // 遍历所有打开的表单,查找采购订单类型 foreach (SAPbouiCOM.Form form in Support.oApplication.Forms) { if (form.Type == "142") { oForm = form; break; } } if (oForm != null) { FrmPedidoCompra frmPedidoCompra = new FrmPedidoCompra(oForm); frmPedidoCompra.CreateButtonNovaDataEntrega(); } else { // 提示用户先打开采购订单表单 Support.oApplication.MessageBox("请先打开采购订单表单!"); } break; }
内容的提问来源于stack exchange,提问作者Raphael Leite Batalha de Lima
相关产品推荐
相关产品推荐

