将行添加到销售报价中会导致行状态无效

2020-09-23 16:03发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在将SAP 9.2与UI和DI API和C#一起使用。 我需要在插件中将行添加到"销售报价"中,而不是使用DI API,而是使用UI(在需要向其中添加行时,并不总是保存SalesQ。)。

我所做的是,冻结表单并手动添加行,如下所示:

 public void AddRows(Form oForm,WtestResults wr)
 {
     尝试
     {
         oForm.Freeze(true);

         NumberFormatInfo nfi =新的NumberFormatInfo();
         nfi.NumberDecimalSeparator ="。";
         nfi.NumberDecimalDigits = 4;

         矩阵oMatrix =(Matrix)oForm.Items.Item(SalesQuotationItemIdentifierDefinition.Grid.ItemID).Specific;

         int rowCounter = 1;
         int rowIndex = oMatrix.RowCount-1;
         foreach(wr.rows中的var wrr)
         {
             oMatrix.AddRow(1,rowIndex ++);
            //oMatrix.ClearRowData(rowIndex);  <-不得删除内容

             SBOApp.StatusBar.SetText($"添加行{rowCounter ++}/{wr.Rows.Count}",BoMessageTime.bmt_Medium,BoStatusBarMessageType.smt_Success);
            
             SBOTools.SetValueComboBoxForMatrixCell(oMatrix," 257",rowIndex,0);//常规

           //SBOTools.SetValueComboBoxForMatrixCell(oMatrix," 40",rowIndex," Open");  <---表格不可编辑!

             SBOTools.SetValueEditTextForMatrixCell(oMatrix," 1",rowIndex,wrr.ItemNumber);
             SBOTools.SetValueEditTextForMatrixCell(oMatrix," 11",rowIndex,wrr.Quantity.ToString(nfi));
             SBOTools.SetValueEditTextForMatrixCell(oMatrix," 14",rowIndex,"" + Math.Round(wrr.UnitPrice,0));
             SBOTools.SetValueEditTextForMatrixCell(oMatrix," 15",rowIndex,"" + wrr.Disc);

             SBOTools.SetValueEditTextForMatrixCell(oMatrix," 212",rowIndex,"" + wrr.MENeve);
         }
    
     }
     最后
     {
         oForm.Freeze(false);
     }

     SBOApp.StatusBar.SetText($"添加成功的行。",BoMessageTime.bmt_Medium,BoStatusBarMessageType.smt_Success);
 }

//-----

 公共静态无效SetValueEditTextForMatrixCell(Matrix oMatrix,字符串ColUID,int rowIndex,字符串newVal)
 {
     列oColumn = oMatrix.Columns.Item(ColUID);
     单元格oCell = oColumn.Cells.Item(rowIndex);
     EditText oEdit =(EditText)oCell.Specific;
     oEdit.Value = newVal;
     oEdit.Item.Click();
 } 

我试图事先清理行,但是很快意识到它将删除重要的值,例如行状态,我也无法手动更改。

如果我不清除该行,则大多数情况下它将起作用,但有时它仍会插入一个具有NULL状态的新行(SAP也允许将其保存到数据库,因此我检查了QUT1表)。 我不知道为什么有时会添加一个状态无效的行的原因,但是我真的很想解决这个问题。

如何将行状态更改为始终正确?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在将SAP 9.2与UI和DI API和C#一起使用。 我需要在插件中将行添加到"销售报价"中,而不是使用DI API,而是使用UI(在需要向其中添加行时,并不总是保存SalesQ。)。

我所做的是,冻结表单并手动添加行,如下所示:

 public void AddRows(Form oForm,WtestResults wr)
 {
     尝试
     {
         oForm.Freeze(true);

         NumberFormatInfo nfi =新的NumberFormatInfo();
         nfi.NumberDecimalSeparator ="。";
         nfi.NumberDecimalDigits = 4;

         矩阵oMatrix =(Matrix)oForm.Items.Item(SalesQuotationItemIdentifierDefinition.Grid.ItemID).Specific;

         int rowCounter = 1;
         int rowIndex = oMatrix.RowCount-1;
         foreach(wr.rows中的var wrr)
         {
             oMatrix.AddRow(1,rowIndex ++);
            //oMatrix.ClearRowData(rowIndex);  <-不得删除内容

             SBOApp.StatusBar.SetText($"添加行{rowCounter ++}/{wr.Rows.Count}",BoMessageTime.bmt_Medium,BoStatusBarMessageType.smt_Success);
            
             SBOTools.SetValueComboBoxForMatrixCell(oMatrix," 257",rowIndex,0);//常规

           //SBOTools.SetValueComboBoxForMatrixCell(oMatrix," 40",rowIndex," Open");  <---表格不可编辑!

             SBOTools.SetValueEditTextForMatrixCell(oMatrix," 1",rowIndex,wrr.ItemNumber);
             SBOTools.SetValueEditTextForMatrixCell(oMatrix," 11",rowIndex,wrr.Quantity.ToString(nfi));
             SBOTools.SetValueEditTextForMatrixCell(oMatrix," 14",rowIndex,"" + Math.Round(wrr.UnitPrice,0));
             SBOTools.SetValueEditTextForMatrixCell(oMatrix," 15",rowIndex,"" + wrr.Disc);

             SBOTools.SetValueEditTextForMatrixCell(oMatrix," 212",rowIndex,"" + wrr.MENeve);
         }
    
     }
     最后
     {
         oForm.Freeze(false);
     }

     SBOApp.StatusBar.SetText($"添加成功的行。",BoMessageTime.bmt_Medium,BoStatusBarMessageType.smt_Success);
 }

//-----

 公共静态无效SetValueEditTextForMatrixCell(Matrix oMatrix,字符串ColUID,int rowIndex,字符串newVal)
 {
     列oColumn = oMatrix.Columns.Item(ColUID);
     单元格oCell = oColumn.Cells.Item(rowIndex);
     EditText oEdit =(EditText)oCell.Specific;
     oEdit.Value = newVal;
     oEdit.Item.Click();
 } 

我试图事先清理行,但是很快意识到它将删除重要的值,例如行状态,我也无法手动更改。

如果我不清除该行,则大多数情况下它将起作用,但有时它仍会插入一个具有NULL状态的新行(SAP也允许将其保存到数据库,因此我检查了QUT1表)。 我不知道为什么有时会添加一个状态无效的行的原因,但是我真的很想解决这个问题。

如何将行状态更改为始终正确?

付费偷看设置
发送
2条回答
SAP小菜
1楼 · 2020-09-23 16:38.采纳回答

您可能想尝试不手动添加行,而是先填充ItemCode单元格,然后填充其他列,SAP会自动触发并添加新行,然后始终始终在最后一行中添加项目。/p>

nice_wp
2楼-- · 2020-09-23 16:34

谢谢。 时间会证明问题是否仍然存在,但似乎也不需要显式的AddRow调用就可以解决问题。

一周热门 更多>