Проблема с обновлением количества партии производственного заказа SAP b1C#

Место общения программистов C#
Ответить
Anonymous
 Проблема с обновлением количества партии производственного заказа SAP b1

Сообщение Anonymous »

У нас есть разработка пользовательских надстроек, заменяющих окно распределения партий SAP b1 нашей разработкой надстроек окна распределения пользовательских партий (control+Tab).
Когда я пытаюсь обновить партию в производственном заказе с помощью службы Windows с кодом DI-API, предыдущее добавленное количество партий становится минусовым, а новая запись автоматически добавляется в отчет о транзакциях с номером партии SAP b1.
Изображение

Мне не разрешено использовать Issue для производства, поскольку клиент ожидает, что мы будем добавлять и обновлять партии из производственного заказа.
Посоветуйте мне, что необходимо исправить.
private bool postProductionToSAP(DataTable refTable/*excelTable*/, string docNumber, string docEntry/*, string filename*/, DBCon objDBCon, ref string errDescription, ref string _PORefDocNum)
{
bool errorDetect = false;
try
{
Library.WriteErrorLogProduction("Production " + docNumber + " Post Start");

clsCompany objclsCompany = new clsCompany();
_company = new SAPbobsCOM.Company();
if (_company.Connected) _company.Disconnect();

_company = objclsCompany.ConnectDI(SystemSetting.server, SystemSetting.sapdatabase, SystemSetting.LicenseServer, SystemSetting.username, SystemSetting.password);
//int sapUserId = _company.UserSignature;

if (_company.Connected)
{
try
{
Library.WriteErrorLogProduction("Company Connected");

DataTable dtDetail = new DataTable();
DataTable dtProductionData = new DataTable();

// Pull component lines from WOR1 (your original query)
string _sqlStmtD = "SELECT * FROM " + SystemSetting.database + ".WOR1 WHERE \"DocEntry\" = '" + docEntry + "'";
objDBCon.Execute(_sqlStmtD, ref dtDetail);

SAPbobsCOM.ProductionOrders objInv =
(SAPbobsCOM.ProductionOrders)_company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oProductionOrders);

if (!objInv.GetByKey(Convert.ToInt32(docEntry)))
{
errDescription = "Production Order not found";
return true;
}

for (int c = 0; c < dtDetail.Rows.Count; c++)
{
try
{
string _tmpItemCode = (dtDetail.Rows[c]["ItemCode"].ToString() ?? "").Trim();
string _tmpWhsCode = (dtDetail.Rows[c]["wareHouse"].ToString() ?? "").Trim();

if (string.IsNullOrWhiteSpace(_tmpItemCode) || string.IsNullOrWhiteSpace(_tmpWhsCode))
continue;

// Check if item is batch-managed
SAPbobsCOM.Items oItemN =
(SAPbobsCOM.Items)_company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oItems);

if (!oItemN.GetByKey(_tmpItemCode))
continue;

if (oItemN.ManageBatchNumbers != SAPbobsCOM.BoYesNoEnum.tYES)
continue;

// Get selected batches for THIS doc + item + whs
StringBuilder _sqlStmt = new StringBuilder();
_sqlStmt.Append("SELECT * FROM " + SystemSetting.database + ".ADDON_TBL_BATCH_SELECTION_DETAIL ");
_sqlStmt.Append("WHERE \"DOCNO\" = '" + docNumber + "' ");
_sqlStmt.Append("AND \"ISALLOCATED\" = 1 ");
_sqlStmt.Append("AND \"SAPPOSTSTATUS\" = 0 ");
_sqlStmt.Append("AND \"ITEMNO\" = '" + _tmpItemCode + "' ");
_sqlStmt.Append("AND \"WHSCODE\" = '" + _tmpWhsCode + "' ");

dtProductionData.Clear();
objDBCon.Execute(_sqlStmt.ToString(), ref dtProductionData);

if (dtProductionData.Rows.Count == 0)
continue;

// Find correct SAP line
int sapLine = FindSapLineIndex(_tmpItemCode, _tmpWhsCode, objInv);
if (sapLine < 0)
{
Library.WriteErrorLogProduction("Production {docNumber}: No matching SAP line for Item={_tmpItemCode}, Whs={_tmpWhsCode}");
continue;
}

objInv.Lines.SetCurrentLine(sapLine);

// Build a set of existing batches already allocated on this SAP line
var existing = new HashSet(StringComparer.OrdinalIgnoreCase);
for (int b = 0; b < objInv.Lines.BatchNumbers.Count; b++)
{
objInv.Lines.BatchNumbers.SetCurrentLine(b);
string existBatch = (objInv.Lines.BatchNumbers.BatchNumber ?? "").Trim();
if (!string.IsNullOrEmpty(existBatch))
existing.Add(existBatch);
}

// Add missing batches
for (int j = 0; j < dtProductionData.Rows.Count; j++)
{
string batchNo = (dtProductionData.Rows[j]["NEWBATCH"].ToString() ?? "").Trim();
string qtyStr = (dtProductionData.Rows[j]["SELECTEDQTY"].ToString() ?? "0").Trim();

if (string.IsNullOrWhiteSpace(batchNo))
continue;

double qty = 0;
if (!double.TryParse(qtyStr, out qty) || qty

Подробнее здесь: https://stackoverflow.com/questions/798 ... date-issue
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»