У нас есть разработка специального надстройки, заменяющая окно распределения партий SAP b1 на нашу разработку надстройки для окна распределения пользовательских партий (control+Tab).
При выделении нескольких партий одному и тому же элементу при нажатии кнопки обновления формы производственного заказа SAP B1 после выделения партии после всплывающего окна с ошибкой в журнале системных сообщений.
пример — при вводе данных из входа в систему менеджера, даже если все подключенные клиенты, связанные с логином(ами) менеджера, отключены, еще ниже появляется ошибка
Данные изменились другим пользователем или другой операцией; чтобы продолжить, снова откройте окно «Пользовательские значения» (CSHS) (ODBC -2039) [Сообщение 131-183]
Посоветуйте мне, что нужно исправить.
код в форме системы производственного заказа
private void AddToSAP(SAPbouiCOM.BusinessObjectInfo pVal)
{
SAPbobsCOM.ProductionOrders prodOrder = null;
SAPbobsCOM.Company _company = null;
SAPbobsCOM.Recordset rs = null;
SAPbouiCOM.Form prodForm = null;
try
{
int ErrCode;
string ErrMsg = string.Empty;
if (pVal.FormTypeEx == "65211" && pVal.ActionSuccess == true && pVal.BeforeAction == false)
{
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{F12}");
int docEntry = int.Parse(B1txtProductionOrderNo.Value);
StringBuilder _sqlStmt1 = new StringBuilder();
_sqlStmt1 = new StringBuilder();
_sqlStmt1.Append("SELECT \"DocEntry\" FROM \"OWOR\" WHERE \"DocNum\" = '" + B1txtProductionOrderNo.Value + "'");
dt1.Clear();
dt1.ExecuteQuery(_sqlStmt1.ToString());
if (!dt1.IsEmpty)
{
docEntry = int.Parse(dt1.GetValue("DocEntry", 0).ToString());
}
_company = SAPCompany.GetDICompany();
prodForm = SAPbouiCOM.Framework.Application.SBO_Application.Forms.Item(pVal.FormUID);
string errDescription = string.Empty;
if (_company.Connected)
{
prodForm.Freeze(true);
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{ESC}");
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{ESC}");
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{ESC}");
prodForm.Freeze(false);
System.Runtime.InteropServices.Marshal.ReleaseComObject(prodForm);
prodForm = null;
GC.Collect();
GC.WaitForPendingFinalizers();
//SAPbobsCOM.ProductionOrders prodOrder = (SAPbobsCOM.ProductionOrders)_company.GetBusinessObject(BoObjectTypes.oProductionOrders);
prodOrder = (SAPbobsCOM.ProductionOrders)_company.GetBusinessObject(BoObjectTypes.oProductionOrders);
rs = (SAPbobsCOM.Recordset)_company.GetBusinessObject(BoObjectTypes.BoRecordset);
if (!prodOrder.GetByKey(docEntry))
{
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar
.SetSystemMessage("Production Order not found for DocEntry " + docEntry, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
return;
}
//for (int row = 0; row < (Matrix0.RowCount - 1); row++)
//for (int row = 0; row < Matrix0.RowCount; row++)
for (int row = 0; row < Matrix0.VisualRowCount; row++)
{
//string _tmpItemCode = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("4").Cells.Item(row + 1).Specific).Value;
string _tmpItemCode = ((EditText)this.Matrix0.Columns.Item("4").Cells.Item(row + 1).Specific).Value;
if (_tmpItemCode.Equals(string.Empty))
{
break;
}
string _tmpWhsCode = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("10").Cells.Item(row + 1).Specific).Value.ToString();
string matrixCostStr = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("U_Cost").Cells.Item(row + 1).Specific).Value ?? "1";
double lineCost = 0;
double.TryParse(matrixCostStr, out lineCost);
if (row < prodOrder.Lines.Count)
{
prodOrder.Lines.SetCurrentLine(row);
//prodOrder.Lines.Warehouse = _tmpWhsCode;
//prodOrder.Lines.Warehouse = "L2";
prodOrder.Lines.UserFields.Fields.Item("U_Cost").Value = lineCost.ToString();
}
StringBuilder _sqlStmt = new StringBuilder();
_sqlStmt = new StringBuilder();
_sqlStmt.Append("SELECT * FROM \"ADDON_TBL_BATCH_SELECTION_DETAIL\" WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' AND \"ISALLOCATED\" = 1 ");
dt0.Clear();
dt0.ExecuteQuery(_sqlStmt.ToString());
if (!dt0.IsEmpty)
{
for (int i = 0; i < dt0.Rows.Count; i++)
{
string itemCode = dt0.GetValue("ITEMNO", i).ToString();
string whsCode = dt0.GetValue("WHSCODE", i).ToString();
string batchNo = dt0.GetValue("NEWBATCH", i).ToString();
double qty = double.Parse(dt0.GetValue("SELECTEDQTY", i).ToString());
//if (prodOrder.Lines.ItemNo == itemCode && prodOrder.Lines.Warehouse == whsCode)
if (_tmpItemCode.Trim() == itemCode.Trim() && _tmpWhsCode.Trim() == whsCode.Trim())
//if (_tmpItemCode.Trim() == itemCode.Trim())
{
prodOrder.Lines.BatchNumbers.BatchNumber = batchNo;
prodOrder.Lines.BatchNumbers.Quantity = qty;
prodOrder.Lines.BatchNumbers.Add();
}
}
}
}
int result = prodOrder.Update();
if (result == 0)
{
_sqlStmt1 = new StringBuilder();
_sqlStmt1.Append("UPDATE \"ADDON_TBL_BATCH_SELECTION_DETAIL\" ");
_sqlStmt1.Append("SET \"DOCSTATUS\" = 'POST' ");
_sqlStmt1.Append("WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' ");
_sqlStmt1.Append("AND \"DOCSTATUS\" = 'DRAFT' ");
dt3.Clear();
dt3.ExecuteQuery(_sqlStmt1.ToString());
//SBO_Application.StatusBar.SetText(
// $"Batches from tblBatch linked to Production Order {docEntry}.",
// BoMessageTime.bmt_Short,
// BoStatusBarMessageType.smt_Success
//);
}
else
{
_sqlStmt1 = new StringBuilder();
_sqlStmt1.Append("UPDATE \"ADDON_TBL_BATCH_SELECTION_DETAIL\" ");
_sqlStmt1.Append("SET \"DOCSTATUS\" = 'POST' ");
_sqlStmt1.Append("WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' ");
_sqlStmt1.Append("AND \"DOCSTATUS\" = 'DRAFT' ");
dt3.Clear();
dt3.ExecuteQuery(_sqlStmt1.ToString());
_company.GetLastError(out ErrCode, out ErrMsg);
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetSystemMessage(ErrMsg.ToString(), BoMessageTime.bmt_Long, BoStatusBarMessageType.smt_Error, "", "", "", 0);
}
}
}
}
catch (Exception ex)
{
//SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetSystemMessage(ex.Message, BoMessageTime.bmt_Short, BoStatusBarMessageType.smt_Error, "", "", "", 0);
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetSystemMessage(ex.ToString() + "-" + ex.ToString(), SAPbouiCOM.BoMessageTime.bmt_Short,
SAPbouiCOM.BoStatusBarMessageType.smt_Error);
}
finally
{
if (prodOrder != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(prodOrder);
prodOrder = null;
rs = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
private void UpdateToSAP(BusinessObjectInfo pVal)
{
SAPbobsCOM.ProductionOrders prodOrder = null;
SAPbobsCOM.Company _company = null;
SAPbobsCOM.Recordset rs = null;
SAPbouiCOM.Form prodForm = null;
try
{
int ErrCode; string ErrMsg = string.Empty;
if (pVal.FormTypeEx == "65211" && pVal.ActionSuccess == true && pVal.BeforeAction == false)
{
if (pVal.FormTypeEx == "65211" && pVal.ActionSuccess == true && pVal.BeforeAction == false)
{
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{F12}");
int docEntry = int.Parse(B1txtProductionOrderNo.Value);
StringBuilder _sqlStmt1 = new StringBuilder();
_sqlStmt1 = new StringBuilder();
_sqlStmt1.Append("SELECT \"DocEntry\" FROM \"OWOR\" WHERE \"DocNum\" = '" + B1txtProductionOrderNo.Value + "'");
dt1.Clear();
dt1.ExecuteQuery(_sqlStmt1.ToString());
if (!dt1.IsEmpty)
{
docEntry = int.Parse(dt1.GetValue("DocEntry", 0).ToString());
}
prodForm = SAPbouiCOM.Framework.Application.SBO_Application.Forms.Item(pVal.FormUID);
_company = SAPCompany.GetDICompany();
string errDescription = string.Empty;
if (_company.Connected)
{
prodForm.Freeze(true);
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{ESC}");
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{ESC}");
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{ESC}");
prodForm.Freeze(false);
System.Runtime.InteropServices.Marshal.ReleaseComObject(prodForm);
prodForm = null;
GC.Collect();
GC.WaitForPendingFinalizers();
//SAPbobsCOM.ProductionOrders prodOrder = (SAPbobsCOM.ProductionOrders)_company.GetBusinessObject(BoObjectTypes.oProductionOrders);
prodOrder = (SAPbobsCOM.ProductionOrders)_company.GetBusinessObject(BoObjectTypes.oProductionOrders);
rs = (SAPbobsCOM.Recordset)_company.GetBusinessObject(BoObjectTypes.BoRecordset);
if (!prodOrder.GetByKey(docEntry))
{
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar
.SetSystemMessage("Production Order not found for DocEntry " + docEntry, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
return;
}
//for (int row = 0; row < (Matrix0.RowCount - 1); row++)
//for (int row = 0; row < Matrix0.RowCount; row++)
for (int row = 0; row < Matrix0.VisualRowCount; row++)
{
//string _tmpItemCode = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("4").Cells.Item(row + 1).Specific).Value;
string _tmpItemCode = ((EditText)this.Matrix0.Columns.Item("4").Cells.Item(row + 1).Specific).Value;
if (_tmpItemCode.Equals(string.Empty))
{
break;
}
string _tmpWhsCode = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("10").Cells.Item(row + 1).Specific).Value.ToString();
string matrixCostStr = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("U_Cost").Cells.Item(row + 1).Specific).Value ?? "1";
double lineCost = 0;
double.TryParse(matrixCostStr, out lineCost);
if (row < prodOrder.Lines.Count)
{
prodOrder.Lines.SetCurrentLine(row);
//prodOrder.Lines.Warehouse = _tmpWhsCode;
//prodOrder.Lines.Warehouse = "L2";
prodOrder.Lines.UserFields.Fields.Item("U_Cost").Value = lineCost.ToString();
}
StringBuilder _sqlDealloc = new StringBuilder();
_sqlDealloc.Append("SELECT * FROM \"ADDON_TBL_BATCH_SELECTION_DETAIL\" ");
_sqlDealloc.Append("WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' AND \"ISALLOCATED\" = 0");
dt4.Clear();
dt4.ExecuteQuery(_sqlDealloc.ToString());
if (!dt4.IsEmpty)
{
for (int i = 0; i < dt4.Rows.Count; i++)
{
string itemCode = dt4.GetValue("ITEMNO", i).ToString();
string whsCode = dt4.GetValue("WHSCODE", i).ToString();
string batchNo = dt4.GetValue("NEWBATCH", i).ToString();
double qty = double.Parse(dt4.GetValue("SELECTEDQTY", i).ToString());// 0;
if (_tmpItemCode.Trim() == itemCode.Trim() && _tmpWhsCode.Trim() == whsCode.Trim())
{
prodOrder.Lines.BatchNumbers.BatchNumber = batchNo;
//prodOrder.Lines.BatchNumbers.Quantity = 0;
prodOrder.Lines.BatchNumbers.Quantity = -qty;
prodOrder.Lines.BatchNumbers.Add();
}
}
}
StringBuilder _sqlStmt = new StringBuilder();
_sqlStmt = new StringBuilder();
//_sqlStmt.Append("SELECT * FROM \"ADDON_TBL_BATCH_SELECTION_DETAIL\" WHERE \"DOCSTATUS\" = 'DRAFT' AND \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' AND \"ISALLOCATED\" = 1 ");
_sqlStmt.Append("SELECT * FROM \"ADDON_TBL_BATCH_SELECTION_DETAIL\" WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' AND \"ISALLOCATED\" = 1 ");
dt0.Clear();
dt0.ExecuteQuery(_sqlStmt.ToString());
if (!dt0.IsEmpty)
{
for (int i = 0; i < dt0.Rows.Count; i++)
{
string itemCode = dt0.GetValue("ITEMNO", i).ToString();
string whsCode = dt0.GetValue("WHSCODE", i).ToString();
string batchNo = dt0.GetValue("NEWBATCH", i).ToString();
double qty = double.Parse(dt0.GetValue("SELECTEDQTY", i).ToString());
//if (prodOrder.Lines.ItemNo == itemCode && prodOrder.Lines.Warehouse == whsCode)
if (_tmpItemCode.Trim() == itemCode.Trim() && _tmpWhsCode.Trim() == whsCode.Trim())
//if (_tmpItemCode.Trim() == itemCode.Trim())
{
prodOrder.Lines.BatchNumbers.BatchNumber = batchNo;
prodOrder.Lines.BatchNumbers.Quantity = qty;
prodOrder.Lines.BatchNumbers.Add();
}
}
}
}
int result = prodOrder.Update();
if (result == 0)
{
_sqlStmt1 = new StringBuilder();
_sqlStmt1.Append("UPDATE \"ADDON_TBL_BATCH_SELECTION_DETAIL\" ");
_sqlStmt1.Append("SET \"DOCSTATUS\" = 'POST' ");
_sqlStmt1.Append("WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' ");
_sqlStmt1.Append("AND \"DOCSTATUS\" = 'DRAFT' ");
dt3.Clear();
dt3.ExecuteQuery(_sqlStmt1.ToString());
//SBO_Application.StatusBar.SetText(
// $"Batches from tblBatch linked to Production Order {docEntry}.",
// BoMessageTime.bmt_Short,
// BoStatusBarMessageType.smt_Success
//);
}
else
{
_sqlStmt1 = new StringBuilder();
_sqlStmt1.Append("UPDATE \"ADDON_TBL_BATCH_SELECTION_DETAIL\" ");
_sqlStmt1.Append("SET \"DOCSTATUS\" = 'POST' ");
_sqlStmt1.Append("WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' ");
_sqlStmt1.Append("AND \"DOCSTATUS\" = 'DRAFT' ");
dt3.Clear();
dt3.ExecuteQuery(_sqlStmt1.ToString());
_company.GetLastError(out ErrCode, out ErrMsg);
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetSystemMessage(ErrMsg.ToString(), BoMessageTime.bmt_Long, BoStatusBarMessageType.smt_Error, "", "", "", 0);
}
}
}
}
}
catch (Exception ex)
{
//SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetSystemMessage(ex.Message, BoMessageTime.bmt_Short, BoStatusBarMessageType.smt_Error, "", "", "", 0);
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetSystemMessage(ex.ToString() + "-" + ex.ToString(), SAPbouiCOM.BoMessageTime.bmt_Short,
SAPbouiCOM.BoStatusBarMessageType.smt_Error);
}
finally
{
if (prodOrder != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(prodOrder);
prodOrder = null;
rs = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
private bool AddInvTrans()
{
try
{
InvTransItemList = new List();
for (int row = 0; row < (Matrix0.RowCount - 1); row++)
{
string _tmpItemCode = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("4").Cells.Item(row + 1).Specific).Value.ToString();
string _tmpWhsCode = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("10").Cells.Item(row + 1).Specific).Value.ToString();
if (_tmpItemCode.Equals(string.Empty))
{
break;
}
StringBuilder _sqlStmt = new StringBuilder();
_sqlStmt = new StringBuilder();
_sqlStmt.Append("SELECT * FROM \"ADDON_TBL_BATCH_SELECTION_DETAIL\" WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' AND \"ISALLOCATED\" = 1 ");
dt5.Clear();
dt5.ExecuteQuery(_sqlStmt.ToString());
if (InvTransItemList == null)
{
InvTransItemList = new List();
}
if (!dt5.IsEmpty)
{
for (int i = 0; i < dt5.Rows.Count; i++)
{
string itemCode = dt5.GetValue("ITEMNO", i).ToString();
string whsCode = dt5.GetValue("WHSCODE", i).ToString();
string batchNo = dt5.GetValue("NEWBATCH", i).ToString();
decimal qty = decimal.Parse(dt5.GetValue("SELECTEDQTY", i).ToString());
if (_tmpItemCode.Trim() == itemCode.Trim() && _tmpWhsCode.Trim() != whsCode.Trim())
{
//prodOrder.Lines.BatchNumbers.BatchNumber = batchNo;
//prodOrder.Lines.BatchNumbers.Quantity = qty;
//prodOrder.Lines.BatchNumbers.Add();
string _productionOrder = B1txtProductionOrderNo.Value;
InvTransItemList.Add(new InventoryTransferItem
{
DocNo = _productionOrder,
Batch = batchNo,
ItemCode = itemCode,
FromWHSCode = whsCode,
ToWHSCode = _tmpWhsCode,
SelectedQty = qty,
});
}
}
}
}
}
catch (Exception exx)
{
}
if (InvTransItemList.Count == 0)
{
return true;
}
#region
int ErrCode;
string ErrMsg = string.Empty;
SAPbobsCOM.StockTransfer StockTranferDrft = null;
try
{
SAPbobsCOM.Company _company = SAPCompany.GetDICompany();
StockTranferDrft = (SAPbobsCOM.StockTransfer)_company.GetBusinessObject(BoObjectTypes.oStockTransfer);
SAPbobsCOM.Recordset rs = (SAPbobsCOM.Recordset)_company.GetBusinessObject(BoObjectTypes.BoRecordset);
StockTranferDrft.DocObjectCode = SAPbobsCOM.BoObjectTypes.oStockTransfer;
StockTranferDrft.UserFields.Fields.Item("U_PRODUCTION_ORDER_NO").Value = B1txtProductionOrderNo.Value;
foreach (InventoryTransferItem item in InvTransItemList)
{
StockTranferDrft.FromWarehouse = item.FromWHSCode;
StockTranferDrft.ToWarehouse = item.ToWHSCode;
StockTranferDrft.DocDate = DateTime.Now;
StockTranferDrft.Lines.ItemCode = item.ItemCode;
StockTranferDrft.Lines.FromWarehouseCode = item.FromWHSCode;
StockTranferDrft.Lines.WarehouseCode = item.ToWHSCode;
StockTranferDrft.Lines.Quantity = (double)item.SelectedQty;
StockTranferDrft.Lines.BatchNumbers.BatchNumber = item.Batch;
StockTranferDrft.Lines.BatchNumbers.Quantity = (double)item.SelectedQty;
StockTranferDrft.Lines.BatchNumbers.Add();
StockTranferDrft.Lines.Add();
}
int result = StockTranferDrft.Add();
if (result != 0)
{
_company.GetLastError(out ErrCode, out ErrMsg);
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetText("Stock Transfer failed: " + ErrMsg, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
SAPbouiCOM.Framework.Application.SBO_Application.MessageBox("Stock Transfer Error : " + ErrMsg.ToString(), 1, "OK");
return false;
}
else
{
string objCode = "";
int lastNo;
_company.GetNewObjectCode(out objCode);
lastNo = Convert.ToInt32(objCode);
int absEntry = Convert.ToInt32(lastNo);
StockTranferDrft.GetByKey(absEntry);
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetText("Stock Transfer created successfully ! \n DocEntry : " + absEntry, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Success);
StringBuilder _sqlStmt2 = new StringBuilder();
foreach (InventoryTransferItem item in InvTransItemList)
{
_sqlStmt2 = new StringBuilder();
_sqlStmt2.Append("UPDATE \"ADDON_TBL_BATCH_SELECTION_DETAIL\" ");
_sqlStmt2.Append("SET \"WHSCODE\" = '" + item.ToWHSCode + "' ");
_sqlStmt2.Append("WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' ");
_sqlStmt2.Append("AND \"NEWBATCH\" = '" + item.Batch + "' AND \"ITEMNO\" = '" + item.ItemCode + "' ");
_sqlStmt2.Append("AND \"WHSCODE\" = '" + item.FromWHSCode + "' ");
dt6.Clear();
dt6.ExecuteQuery(_sqlStmt2.ToString());
}
return true;
}
}
catch (Exception err)
{
ErrMsg = err.Message;
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetSystemMessage(ErrMsg.ToString(), BoMessageTime.bmt_Long, BoStatusBarMessageType.smt_Error, "", "", "", 0);
SAPbouiCOM.Framework.Application.SBO_Application.MessageBox("Stock Transfer Error : " + ErrMsg.ToString(), 1, "OK");
return false;
}
finally
{
if (StockTranferDrft != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(StockTranferDrft);
StockTranferDrft = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
}
#endregion
}
private void Form_DataAddAfter(ref SAPbouiCOM.BusinessObjectInfo pVal)
{
bool returnsucess = AddInvTrans();
if (returnsucess)
{
AddToSAP(pVal);
}
}
private void Form_DataUpdateAfter(ref BusinessObjectInfo pVal)
{
bool returnSucess = AddInvTrans();
if (returnSucess)
{
UpdateToSAP(pVal);
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... le-batches
Проблема обновления производственного заказа SAP b1 с несколькими партиями ⇐ C#
Место общения программистов C#
1769593763
Anonymous
У нас есть разработка специального надстройки, заменяющая окно распределения партий SAP b1 на нашу разработку надстройки для окна распределения пользовательских партий (control+Tab).
При выделении нескольких партий одному и тому же элементу при нажатии кнопки обновления формы производственного заказа SAP B1 после выделения партии после всплывающего окна с ошибкой в журнале системных сообщений.
пример — при вводе данных из входа в систему менеджера, даже если все подключенные клиенты, связанные с логином(ами) менеджера, отключены, еще ниже появляется ошибка
Данные изменились другим пользователем или другой операцией; чтобы продолжить, снова откройте окно «Пользовательские значения» (CSHS) (ODBC -2039) [Сообщение 131-183]
Посоветуйте мне, что нужно исправить.
код в форме системы производственного заказа
private void AddToSAP(SAPbouiCOM.BusinessObjectInfo pVal)
{
SAPbobsCOM.ProductionOrders prodOrder = null;
SAPbobsCOM.Company _company = null;
SAPbobsCOM.Recordset rs = null;
SAPbouiCOM.Form prodForm = null;
try
{
int ErrCode;
string ErrMsg = string.Empty;
if (pVal.FormTypeEx == "65211" && pVal.ActionSuccess == true && pVal.BeforeAction == false)
{
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{F12}");
int docEntry = int.Parse(B1txtProductionOrderNo.Value);
StringBuilder _sqlStmt1 = new StringBuilder();
_sqlStmt1 = new StringBuilder();
_sqlStmt1.Append("SELECT \"DocEntry\" FROM \"OWOR\" WHERE \"DocNum\" = '" + B1txtProductionOrderNo.Value + "'");
dt1.Clear();
dt1.ExecuteQuery(_sqlStmt1.ToString());
if (!dt1.IsEmpty)
{
docEntry = int.Parse(dt1.GetValue("DocEntry", 0).ToString());
}
_company = SAPCompany.GetDICompany();
prodForm = SAPbouiCOM.Framework.Application.SBO_Application.Forms.Item(pVal.FormUID);
string errDescription = string.Empty;
if (_company.Connected)
{
prodForm.Freeze(true);
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{ESC}");
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{ESC}");
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{ESC}");
prodForm.Freeze(false);
System.Runtime.InteropServices.Marshal.ReleaseComObject(prodForm);
prodForm = null;
GC.Collect();
GC.WaitForPendingFinalizers();
//SAPbobsCOM.ProductionOrders prodOrder = (SAPbobsCOM.ProductionOrders)_company.GetBusinessObject(BoObjectTypes.oProductionOrders);
prodOrder = (SAPbobsCOM.ProductionOrders)_company.GetBusinessObject(BoObjectTypes.oProductionOrders);
rs = (SAPbobsCOM.Recordset)_company.GetBusinessObject(BoObjectTypes.BoRecordset);
if (!prodOrder.GetByKey(docEntry))
{
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar
.SetSystemMessage("Production Order not found for DocEntry " + docEntry, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
return;
}
//for (int row = 0; row < (Matrix0.RowCount - 1); row++)
//for (int row = 0; row < Matrix0.RowCount; row++)
for (int row = 0; row < Matrix0.VisualRowCount; row++)
{
//string _tmpItemCode = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("4").Cells.Item(row + 1).Specific).Value;
string _tmpItemCode = ((EditText)this.Matrix0.Columns.Item("4").Cells.Item(row + 1).Specific).Value;
if (_tmpItemCode.Equals(string.Empty))
{
break;
}
string _tmpWhsCode = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("10").Cells.Item(row + 1).Specific).Value.ToString();
string matrixCostStr = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("U_Cost").Cells.Item(row + 1).Specific).Value ?? "1";
double lineCost = 0;
double.TryParse(matrixCostStr, out lineCost);
if (row < prodOrder.Lines.Count)
{
prodOrder.Lines.SetCurrentLine(row);
//prodOrder.Lines.Warehouse = _tmpWhsCode;
//prodOrder.Lines.Warehouse = "L2";
prodOrder.Lines.UserFields.Fields.Item("U_Cost").Value = lineCost.ToString();
}
StringBuilder _sqlStmt = new StringBuilder();
_sqlStmt = new StringBuilder();
_sqlStmt.Append("SELECT * FROM \"ADDON_TBL_BATCH_SELECTION_DETAIL\" WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' AND \"ISALLOCATED\" = 1 ");
dt0.Clear();
dt0.ExecuteQuery(_sqlStmt.ToString());
if (!dt0.IsEmpty)
{
for (int i = 0; i < dt0.Rows.Count; i++)
{
string itemCode = dt0.GetValue("ITEMNO", i).ToString();
string whsCode = dt0.GetValue("WHSCODE", i).ToString();
string batchNo = dt0.GetValue("NEWBATCH", i).ToString();
double qty = double.Parse(dt0.GetValue("SELECTEDQTY", i).ToString());
//if (prodOrder.Lines.ItemNo == itemCode && prodOrder.Lines.Warehouse == whsCode)
if (_tmpItemCode.Trim() == itemCode.Trim() && _tmpWhsCode.Trim() == whsCode.Trim())
//if (_tmpItemCode.Trim() == itemCode.Trim())
{
prodOrder.Lines.BatchNumbers.BatchNumber = batchNo;
prodOrder.Lines.BatchNumbers.Quantity = qty;
prodOrder.Lines.BatchNumbers.Add();
}
}
}
}
int result = prodOrder.Update();
if (result == 0)
{
_sqlStmt1 = new StringBuilder();
_sqlStmt1.Append("UPDATE \"ADDON_TBL_BATCH_SELECTION_DETAIL\" ");
_sqlStmt1.Append("SET \"DOCSTATUS\" = 'POST' ");
_sqlStmt1.Append("WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' ");
_sqlStmt1.Append("AND \"DOCSTATUS\" = 'DRAFT' ");
dt3.Clear();
dt3.ExecuteQuery(_sqlStmt1.ToString());
//SBO_Application.StatusBar.SetText(
// $"Batches from tblBatch linked to Production Order {docEntry}.",
// BoMessageTime.bmt_Short,
// BoStatusBarMessageType.smt_Success
//);
}
else
{
_sqlStmt1 = new StringBuilder();
_sqlStmt1.Append("UPDATE \"ADDON_TBL_BATCH_SELECTION_DETAIL\" ");
_sqlStmt1.Append("SET \"DOCSTATUS\" = 'POST' ");
_sqlStmt1.Append("WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' ");
_sqlStmt1.Append("AND \"DOCSTATUS\" = 'DRAFT' ");
dt3.Clear();
dt3.ExecuteQuery(_sqlStmt1.ToString());
_company.GetLastError(out ErrCode, out ErrMsg);
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetSystemMessage(ErrMsg.ToString(), BoMessageTime.bmt_Long, BoStatusBarMessageType.smt_Error, "", "", "", 0);
}
}
}
}
catch (Exception ex)
{
//SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetSystemMessage(ex.Message, BoMessageTime.bmt_Short, BoStatusBarMessageType.smt_Error, "", "", "", 0);
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetSystemMessage(ex.ToString() + "-" + ex.ToString(), SAPbouiCOM.BoMessageTime.bmt_Short,
SAPbouiCOM.BoStatusBarMessageType.smt_Error);
}
finally
{
if (prodOrder != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(prodOrder);
prodOrder = null;
rs = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
private void UpdateToSAP(BusinessObjectInfo pVal)
{
SAPbobsCOM.ProductionOrders prodOrder = null;
SAPbobsCOM.Company _company = null;
SAPbobsCOM.Recordset rs = null;
SAPbouiCOM.Form prodForm = null;
try
{
int ErrCode; string ErrMsg = string.Empty;
if (pVal.FormTypeEx == "65211" && pVal.ActionSuccess == true && pVal.BeforeAction == false)
{
if (pVal.FormTypeEx == "65211" && pVal.ActionSuccess == true && pVal.BeforeAction == false)
{
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{F12}");
int docEntry = int.Parse(B1txtProductionOrderNo.Value);
StringBuilder _sqlStmt1 = new StringBuilder();
_sqlStmt1 = new StringBuilder();
_sqlStmt1.Append("SELECT \"DocEntry\" FROM \"OWOR\" WHERE \"DocNum\" = '" + B1txtProductionOrderNo.Value + "'");
dt1.Clear();
dt1.ExecuteQuery(_sqlStmt1.ToString());
if (!dt1.IsEmpty)
{
docEntry = int.Parse(dt1.GetValue("DocEntry", 0).ToString());
}
prodForm = SAPbouiCOM.Framework.Application.SBO_Application.Forms.Item(pVal.FormUID);
_company = SAPCompany.GetDICompany();
string errDescription = string.Empty;
if (_company.Connected)
{
prodForm.Freeze(true);
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{ESC}");
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{ESC}");
SAPbouiCOM.Framework.Application.SBO_Application.SendKeys("{ESC}");
prodForm.Freeze(false);
System.Runtime.InteropServices.Marshal.ReleaseComObject(prodForm);
prodForm = null;
GC.Collect();
GC.WaitForPendingFinalizers();
//SAPbobsCOM.ProductionOrders prodOrder = (SAPbobsCOM.ProductionOrders)_company.GetBusinessObject(BoObjectTypes.oProductionOrders);
prodOrder = (SAPbobsCOM.ProductionOrders)_company.GetBusinessObject(BoObjectTypes.oProductionOrders);
rs = (SAPbobsCOM.Recordset)_company.GetBusinessObject(BoObjectTypes.BoRecordset);
if (!prodOrder.GetByKey(docEntry))
{
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar
.SetSystemMessage("Production Order not found for DocEntry " + docEntry, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
return;
}
//for (int row = 0; row < (Matrix0.RowCount - 1); row++)
//for (int row = 0; row < Matrix0.RowCount; row++)
for (int row = 0; row < Matrix0.VisualRowCount; row++)
{
//string _tmpItemCode = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("4").Cells.Item(row + 1).Specific).Value;
string _tmpItemCode = ((EditText)this.Matrix0.Columns.Item("4").Cells.Item(row + 1).Specific).Value;
if (_tmpItemCode.Equals(string.Empty))
{
break;
}
string _tmpWhsCode = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("10").Cells.Item(row + 1).Specific).Value.ToString();
string matrixCostStr = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("U_Cost").Cells.Item(row + 1).Specific).Value ?? "1";
double lineCost = 0;
double.TryParse(matrixCostStr, out lineCost);
if (row < prodOrder.Lines.Count)
{
prodOrder.Lines.SetCurrentLine(row);
//prodOrder.Lines.Warehouse = _tmpWhsCode;
//prodOrder.Lines.Warehouse = "L2";
prodOrder.Lines.UserFields.Fields.Item("U_Cost").Value = lineCost.ToString();
}
StringBuilder _sqlDealloc = new StringBuilder();
_sqlDealloc.Append("SELECT * FROM \"ADDON_TBL_BATCH_SELECTION_DETAIL\" ");
_sqlDealloc.Append("WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' AND \"ISALLOCATED\" = 0");
dt4.Clear();
dt4.ExecuteQuery(_sqlDealloc.ToString());
if (!dt4.IsEmpty)
{
for (int i = 0; i < dt4.Rows.Count; i++)
{
string itemCode = dt4.GetValue("ITEMNO", i).ToString();
string whsCode = dt4.GetValue("WHSCODE", i).ToString();
string batchNo = dt4.GetValue("NEWBATCH", i).ToString();
double qty = double.Parse(dt4.GetValue("SELECTEDQTY", i).ToString());// 0;
if (_tmpItemCode.Trim() == itemCode.Trim() && _tmpWhsCode.Trim() == whsCode.Trim())
{
prodOrder.Lines.BatchNumbers.BatchNumber = batchNo;
//prodOrder.Lines.BatchNumbers.Quantity = 0;
prodOrder.Lines.BatchNumbers.Quantity = -qty;
prodOrder.Lines.BatchNumbers.Add();
}
}
}
StringBuilder _sqlStmt = new StringBuilder();
_sqlStmt = new StringBuilder();
//_sqlStmt.Append("SELECT * FROM \"ADDON_TBL_BATCH_SELECTION_DETAIL\" WHERE \"DOCSTATUS\" = 'DRAFT' AND \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' AND \"ISALLOCATED\" = 1 ");
_sqlStmt.Append("SELECT * FROM \"ADDON_TBL_BATCH_SELECTION_DETAIL\" WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' AND \"ISALLOCATED\" = 1 ");
dt0.Clear();
dt0.ExecuteQuery(_sqlStmt.ToString());
if (!dt0.IsEmpty)
{
for (int i = 0; i < dt0.Rows.Count; i++)
{
string itemCode = dt0.GetValue("ITEMNO", i).ToString();
string whsCode = dt0.GetValue("WHSCODE", i).ToString();
string batchNo = dt0.GetValue("NEWBATCH", i).ToString();
double qty = double.Parse(dt0.GetValue("SELECTEDQTY", i).ToString());
//if (prodOrder.Lines.ItemNo == itemCode && prodOrder.Lines.Warehouse == whsCode)
if (_tmpItemCode.Trim() == itemCode.Trim() && _tmpWhsCode.Trim() == whsCode.Trim())
//if (_tmpItemCode.Trim() == itemCode.Trim())
{
prodOrder.Lines.BatchNumbers.BatchNumber = batchNo;
prodOrder.Lines.BatchNumbers.Quantity = qty;
prodOrder.Lines.BatchNumbers.Add();
}
}
}
}
int result = prodOrder.Update();
if (result == 0)
{
_sqlStmt1 = new StringBuilder();
_sqlStmt1.Append("UPDATE \"ADDON_TBL_BATCH_SELECTION_DETAIL\" ");
_sqlStmt1.Append("SET \"DOCSTATUS\" = 'POST' ");
_sqlStmt1.Append("WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' ");
_sqlStmt1.Append("AND \"DOCSTATUS\" = 'DRAFT' ");
dt3.Clear();
dt3.ExecuteQuery(_sqlStmt1.ToString());
//SBO_Application.StatusBar.SetText(
// $"Batches from tblBatch linked to Production Order {docEntry}.",
// BoMessageTime.bmt_Short,
// BoStatusBarMessageType.smt_Success
//);
}
else
{
_sqlStmt1 = new StringBuilder();
_sqlStmt1.Append("UPDATE \"ADDON_TBL_BATCH_SELECTION_DETAIL\" ");
_sqlStmt1.Append("SET \"DOCSTATUS\" = 'POST' ");
_sqlStmt1.Append("WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' ");
_sqlStmt1.Append("AND \"DOCSTATUS\" = 'DRAFT' ");
dt3.Clear();
dt3.ExecuteQuery(_sqlStmt1.ToString());
_company.GetLastError(out ErrCode, out ErrMsg);
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetSystemMessage(ErrMsg.ToString(), BoMessageTime.bmt_Long, BoStatusBarMessageType.smt_Error, "", "", "", 0);
}
}
}
}
}
catch (Exception ex)
{
//SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetSystemMessage(ex.Message, BoMessageTime.bmt_Short, BoStatusBarMessageType.smt_Error, "", "", "", 0);
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetSystemMessage(ex.ToString() + "-" + ex.ToString(), SAPbouiCOM.BoMessageTime.bmt_Short,
SAPbouiCOM.BoStatusBarMessageType.smt_Error);
}
finally
{
if (prodOrder != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(prodOrder);
prodOrder = null;
rs = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
private bool AddInvTrans()
{
try
{
InvTransItemList = new List();
for (int row = 0; row < (Matrix0.RowCount - 1); row++)
{
string _tmpItemCode = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("4").Cells.Item(row + 1).Specific).Value.ToString();
string _tmpWhsCode = ((SAPbouiCOM.EditText)Matrix0.Columns.Item("10").Cells.Item(row + 1).Specific).Value.ToString();
if (_tmpItemCode.Equals(string.Empty))
{
break;
}
StringBuilder _sqlStmt = new StringBuilder();
_sqlStmt = new StringBuilder();
_sqlStmt.Append("SELECT * FROM \"ADDON_TBL_BATCH_SELECTION_DETAIL\" WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' AND \"ISALLOCATED\" = 1 ");
dt5.Clear();
dt5.ExecuteQuery(_sqlStmt.ToString());
if (InvTransItemList == null)
{
InvTransItemList = new List();
}
if (!dt5.IsEmpty)
{
for (int i = 0; i < dt5.Rows.Count; i++)
{
string itemCode = dt5.GetValue("ITEMNO", i).ToString();
string whsCode = dt5.GetValue("WHSCODE", i).ToString();
string batchNo = dt5.GetValue("NEWBATCH", i).ToString();
decimal qty = decimal.Parse(dt5.GetValue("SELECTEDQTY", i).ToString());
if (_tmpItemCode.Trim() == itemCode.Trim() && _tmpWhsCode.Trim() != whsCode.Trim())
{
//prodOrder.Lines.BatchNumbers.BatchNumber = batchNo;
//prodOrder.Lines.BatchNumbers.Quantity = qty;
//prodOrder.Lines.BatchNumbers.Add();
string _productionOrder = B1txtProductionOrderNo.Value;
InvTransItemList.Add(new InventoryTransferItem
{
DocNo = _productionOrder,
Batch = batchNo,
ItemCode = itemCode,
FromWHSCode = whsCode,
ToWHSCode = _tmpWhsCode,
SelectedQty = qty,
});
}
}
}
}
}
catch (Exception exx)
{
}
if (InvTransItemList.Count == 0)
{
return true;
}
#region
int ErrCode;
string ErrMsg = string.Empty;
SAPbobsCOM.StockTransfer StockTranferDrft = null;
try
{
SAPbobsCOM.Company _company = SAPCompany.GetDICompany();
StockTranferDrft = (SAPbobsCOM.StockTransfer)_company.GetBusinessObject(BoObjectTypes.oStockTransfer);
SAPbobsCOM.Recordset rs = (SAPbobsCOM.Recordset)_company.GetBusinessObject(BoObjectTypes.BoRecordset);
StockTranferDrft.DocObjectCode = SAPbobsCOM.BoObjectTypes.oStockTransfer;
StockTranferDrft.UserFields.Fields.Item("U_PRODUCTION_ORDER_NO").Value = B1txtProductionOrderNo.Value;
foreach (InventoryTransferItem item in InvTransItemList)
{
StockTranferDrft.FromWarehouse = item.FromWHSCode;
StockTranferDrft.ToWarehouse = item.ToWHSCode;
StockTranferDrft.DocDate = DateTime.Now;
StockTranferDrft.Lines.ItemCode = item.ItemCode;
StockTranferDrft.Lines.FromWarehouseCode = item.FromWHSCode;
StockTranferDrft.Lines.WarehouseCode = item.ToWHSCode;
StockTranferDrft.Lines.Quantity = (double)item.SelectedQty;
StockTranferDrft.Lines.BatchNumbers.BatchNumber = item.Batch;
StockTranferDrft.Lines.BatchNumbers.Quantity = (double)item.SelectedQty;
StockTranferDrft.Lines.BatchNumbers.Add();
StockTranferDrft.Lines.Add();
}
int result = StockTranferDrft.Add();
if (result != 0)
{
_company.GetLastError(out ErrCode, out ErrMsg);
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetText("Stock Transfer failed: " + ErrMsg, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
SAPbouiCOM.Framework.Application.SBO_Application.MessageBox("Stock Transfer Error : " + ErrMsg.ToString(), 1, "OK");
return false;
}
else
{
string objCode = "";
int lastNo;
_company.GetNewObjectCode(out objCode);
lastNo = Convert.ToInt32(objCode);
int absEntry = Convert.ToInt32(lastNo);
StockTranferDrft.GetByKey(absEntry);
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetText("Stock Transfer created successfully ! \n DocEntry : " + absEntry, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Success);
StringBuilder _sqlStmt2 = new StringBuilder();
foreach (InventoryTransferItem item in InvTransItemList)
{
_sqlStmt2 = new StringBuilder();
_sqlStmt2.Append("UPDATE \"ADDON_TBL_BATCH_SELECTION_DETAIL\" ");
_sqlStmt2.Append("SET \"WHSCODE\" = '" + item.ToWHSCode + "' ");
_sqlStmt2.Append("WHERE \"DOCNO\" = '" + B1txtProductionOrderNo.Value + "' ");
_sqlStmt2.Append("AND \"NEWBATCH\" = '" + item.Batch + "' AND \"ITEMNO\" = '" + item.ItemCode + "' ");
_sqlStmt2.Append("AND \"WHSCODE\" = '" + item.FromWHSCode + "' ");
dt6.Clear();
dt6.ExecuteQuery(_sqlStmt2.ToString());
}
return true;
}
}
catch (Exception err)
{
ErrMsg = err.Message;
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetSystemMessage(ErrMsg.ToString(), BoMessageTime.bmt_Long, BoStatusBarMessageType.smt_Error, "", "", "", 0);
SAPbouiCOM.Framework.Application.SBO_Application.MessageBox("Stock Transfer Error : " + ErrMsg.ToString(), 1, "OK");
return false;
}
finally
{
if (StockTranferDrft != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(StockTranferDrft);
StockTranferDrft = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
}
#endregion
}
private void Form_DataAddAfter(ref SAPbouiCOM.BusinessObjectInfo pVal)
{
bool returnsucess = AddInvTrans();
if (returnsucess)
{
AddToSAP(pVal);
}
}
private void Form_DataUpdateAfter(ref BusinessObjectInfo pVal)
{
bool returnSucess = AddInvTrans();
if (returnSucess)
{
UpdateToSAP(pVal);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79877786/sap-b1-production-order-update-issue-with-multiple-batches[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия