private void postAllocationJERev(int jeEntry, int lineNum, int CnEntry) { try { SAPbobsCOM.JournalEntries apJE = (SAPbobsCOM.JournalEntries)oCompany.GetBusinessObject(BoObjectTypes.oJournalEntries); apJE.GetByKey(jeEntry); if (apJE.Cancel() != 0) { int erroCode = 0; string errDescr = ""; Program.objHrmsUI.oCompany.GetLastError(out erroCode, out errDescr); oApplication.StatusBar.SetText("Failed to cancel JE : " + errDescr); } else { string outStr = Convert.ToString(Program.objHrmsUI.oCompany.GetNewObjectKey()); string updateCall = "UPDATE RPC1 set \"U_AlocJeRev\"='" + outStr + "' WHERE \"DocEntry\" = '" + CnEntry.ToString() + "' AND \"LineNum\"='" + lineNum.ToString() + "'"; int result = Program.objHrmsUI.ExecQuery(updateCall, "Update Line JE"); oApplication.Menus.Item("1304").Activate(); } } catch (Exception ex) { oApplication.MessageBox(ex.Message); } }
/// <summary> /// Funcion utilizada para mandar a SAP la información del diario contable /// </summary> /// <returns></returns> public string funEnviarDiarioSAP() { try { string mError = ""; int iError = 0; //Realizamos la conexion a SAP csAccesoDatos.proIniciarSesionSAP(); //Verificamos si el documento ya se encuentra en SAP DataTable dtDiarioSAP = funVerificarDiarioSAP(DocNombre, CabNumero); //Si el documento se encuentra en SAP actualizamos la información de este en la informacion del animal if (dtDiarioSAP.Rows.Count > 0) { //Recuperamos en las variables los valores de SAP CabDocEntrySAPDiario = int.Parse(dtDiarioSAP.Rows[0]["TransId"].ToString()); CabNumeroSAPDiario = int.Parse(dtDiarioSAP.Rows[0]["Number"].ToString()); //Actualizamos en el movimiento los datos de SAP proActDiario(CabDocEntrySAPDiario, CabNumeroSAPDiario, CabCodigo); //Actualizamos las lineas del detalle de actualizacion de costos clsGraCstAcumulado.proActualizarCstAcumulado(AnmCodigo, CabFecha, "Bla", "GRA_DETLABORATORIO", "LABORATORIO", CabCodigo); //Actualizamos las lineas del detalle de actualizacion de costos standares clsGraCstStdAcumulado.proActualizarCstStdAcumulado(AnmCodigo, CabFecha, "Bla", CabCodigo); return(mError); } else { //Variable utilizadas para las cuentas contables parametrizadas string varCodCtaContableWip = clsGenOpciones.CargarValor("G.Lab.Diario.CtaWip"); //Recuperamos el codigo de la cuenta contable para el costo inicial string varCodCtaContableCstInicial = clsGenOpciones.CargarValor("G.Lab.Diario.CtaCstInicial"); //Recuperamos el codigo de la cuenta contable WIP //Instanciamos en la variable varOJDT el objeto de SAP de diarios contables SAPbobsCOM.JournalEntries varOJDT = csConexionSap.objConexionSap.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oJournalEntries); //Cargamos informacion de la cabecera del diario contable varOJDT.Series = clsSegDocumento.funRecNumSerieSAPDiario(DocCodigo); varOJDT.ReferenceDate = CabFecha; varOJDT.DueDate = CabFecha; varOJDT.TaxDate = CabFecha; varOJDT.Memo = string.Format("Diario de laboratorio: {0}-{1} {2}", DocNombre, CabNumero, CabComenDiario); varOJDT.Reference3 = DocNombre + "-" + CabNumero; varOJDT.UserFields.Fields.Item("U_Ita_sysusuario").Value = clsVariablesGlobales.varCodUsuario; varOJDT.UserFields.Fields.Item("U_Ita_sysfecha").Value = DateTime.Now.ToString("dd/MM/yyyy HH:mm"); varOJDT.UserFields.Fields.Item("U_Ita_sysip").Value = clsVariablesGlobales.varIpMaquina; varOJDT.UserFields.Fields.Item("U_Ita_sysdocumento").Value = DocNombre; varOJDT.UserFields.Fields.Item("U_Ita_sysnumero").Value = CabNumero.ToString(); //Cargamos informacion de los detalles del diario contable decimal varCstTotal = 0; int i = 0; //Recuperamos la informacion del costo inicial varOJDT.Lines.SetCurrentLine(i); varOJDT.Lines.AccountCode = varCodCtaContableCstInicial; varOJDT.Lines.Debit = 0; varOJDT.Lines.Credit = double.Parse(CabCstInicial.ToString()); varOJDT.Lines.LineMemo = string.Format("Diario de laboratorio: {0}-{1} {2}", DocNombre, CabNumero, CabComenDiario); varOJDT.Lines.Reference1 = "DEPRECIACION"; varOJDT.Lines.Reference2 = ""; varOJDT.Lines.ReferenceDate2 = CabFecha; varOJDT.Lines.TaxDate = CabFecha; varOJDT.Lines.DueDate = CabFecha; varCstTotal += CabCstInicial; i++; //Recuperamos la informacion del costo acumulado foreach (DataRow drFilaDetalle in clsGraCstAcumulado.funRecTableCstAcumulado(AnmCodigo, CabFecha, "Bla").Rows) { varOJDT.Lines.Add(); varOJDT.Lines.SetCurrentLine(i); varOJDT.Lines.AccountCode = drFilaDetalle["CsaCtaCodigo"].ToString(); varOJDT.Lines.Debit = 0; varOJDT.Lines.Credit = double.Parse(drFilaDetalle["CsaValor"].ToString()); varOJDT.Lines.LineMemo = string.Format("Diario de laboratorio: {0}-{1} {2}", DocNombre, CabNumero, CabComenDiario); varOJDT.Lines.Reference1 = drFilaDetalle["CsaTipoSalida"].ToString(); varOJDT.Lines.Reference2 = ""; varOJDT.Lines.ReferenceDate2 = CabFecha; varOJDT.Lines.TaxDate = CabFecha; varOJDT.Lines.DueDate = CabFecha; varCstTotal += decimal.Parse(drFilaDetalle["CsaValor"].ToString()); i++; } //Recuperamos la informacion del costo standar acumulado foreach (DataRow drFilaDetalle in clsGraCstStdAcumulado.funRecTableCstStdAcumulado(AnmCodigo, CabFecha, "Bla").Rows) { varOJDT.Lines.Add(); varOJDT.Lines.SetCurrentLine(i); varOJDT.Lines.AccountCode = drFilaDetalle["CdaCtaContableSalida"].ToString(); varOJDT.Lines.Debit = 0; varOJDT.Lines.Credit = double.Parse(drFilaDetalle["CdaValor"].ToString()); varOJDT.Lines.LineMemo = string.Format("Diario de laboratorio: {0}-{1} {2}", DocNombre, CabNumero, CabComenDiario); varOJDT.Lines.Reference1 = drFilaDetalle["CdaDetComentario"].ToString(); varOJDT.Lines.Reference2 = ""; varOJDT.Lines.ReferenceDate2 = CabFecha; varOJDT.Lines.TaxDate = CabFecha; varOJDT.Lines.DueDate = CabFecha; varCstTotal += decimal.Parse(drFilaDetalle["CdaValor"].ToString()); i++; } //Informacion del haber varOJDT.Lines.Add(); varOJDT.Lines.SetCurrentLine(i); varOJDT.Lines.AccountCode = varCodCtaContableWip; varOJDT.Lines.Debit = double.Parse(varCstTotal.ToString()); varOJDT.Lines.Credit = 0; varOJDT.Lines.LineMemo = string.Format("Diario de laboratorio: {0}-{1} {2}", DocNombre, CabNumero, CabComenDiario); varOJDT.Lines.Reference1 = ""; varOJDT.Lines.Reference2 = ""; varOJDT.Lines.ReferenceDate2 = CabFecha; varOJDT.Lines.TaxDate = CabFecha; varOJDT.Lines.DueDate = CabFecha; iError = varOJDT.Add(); if (!iError.Equals(0)) { csConexionSap.objConexionSap.GetLastError(out iError, out mError); return(mError); } else { int varDocEntrySAPDiario = 0; int.TryParse(csConexionSap.objConexionSap.GetNewObjectKey().ToString(), out varDocEntrySAPDiario); varOJDT.GetByKey(varDocEntrySAPDiario); int varDocNumSAPDiario = varOJDT.Number; //Actualizamos la linea del detalle con la informacion de SAP de la salida de mercancias en la tabla de detalle de actualizacion de costos de formulacion proActDiario(varDocEntrySAPDiario, varDocNumSAPDiario, CabCodigo); //Actualizamos las lineas del detalle de actualizacion de costos clsGraCstAcumulado.proActualizarCstAcumulado(AnmCodigo, CabFecha, "Bla", "GRA_DETLABORATORIO", "LABORATORIO", CabCodigo); //Actualizamos las lineas del detalle de actualizacion de costos standares clsGraCstStdAcumulado.proActualizarCstStdAcumulado(AnmCodigo, CabFecha, "Bla", CabCodigo); return(mError); } } } catch (Exception e) { throw new Exception(e.Message); } finally { csAccesoDatos.proFinalizarSesionSAP(); } }
public static void exploteJEInformation(int JournalEntryNumber) { List <string> cmdList = new List <string>(); SAPbobsCOM.JournalEntries objJE = null; TransactionDetail objDetail = null; Dictionary <string, string> objBPDict = null; string strThirdParty = ""; try { objJE = MainObject.Instance.B1Company.GetBusinessObject(BoObjectTypes.oJournalEntries); if (objJE.GetByKey(JournalEntryNumber)) { objBPDict = T1.B1.ReletadParties.Instance.getBPThirdPartyRelation(); for (int i = 0; i < objJE.Lines.Count; i++) { objJE.Lines.SetCurrentLine(i); Tuple <string, string, string, string, string> accountLevel = getAccountSegments(objJE.Lines.AccountCode); objDetail = new TransactionDetail(); objDetail.Debit = objJE.Lines.Debit; objDetail.Credit = objJE.Lines.Credit; objDetail.DIM1 = objJE.Lines.CostingCode; objDetail.DIM2 = objJE.Lines.CostingCode2; objDetail.DIM3 = objJE.Lines.CostingCode3; objDetail.DIM4 = objJE.Lines.CostingCode4; objDetail.DIM5 = objJE.Lines.CostingCode5; objDetail.TransactionCode = objJE.TransactionCode; List <Tuple <DateType, int, int, int> > oTupleDateList = getDates(objJE.Lines.DueDate, objJE.Lines.TaxDate, objJE.Lines.ReferenceDate1); #region ThirdParty Assignment if (!String.IsNullOrEmpty(objJE.Lines.ShortName)) { if (objBPDict != null && objBPDict.ContainsKey(objJE.Lines.ShortName)) { strThirdParty = objBPDict[objJE.Lines.ShortName]; } } try { if (!String.IsNullOrEmpty(objJE.Lines.UserFields.Fields.Item("U_BYB_RELPAR").Value)) { strThirdParty = objJE.Lines.UserFields.Fields.Item("U_BYB_RELPAR").Value; } } catch (Exception er) { _Logger.Error("The UDF U_BYB_RELPAR was not found in DB"); } #endregion List <string> strResult = buildCommand(objDetail, accountLevel, oTupleDateList); cmdList.AddRange(strResult); } SAPbobsCOM.Recordset objRs = null; foreach (string strCommand in cmdList) { try { objRs = MainObject.Instance.B1Company.GetBusinessObject(BoObjectTypes.BoRecordset); objRs.DoQuery(strCommand); } catch (Exception er) { _Logger.Error("Error while executing command " + strCommand + " for JE " + JournalEntryNumber.ToString(), er); } } string strComm = Settings._BalanceTerceros.upsertObjectControl .Replace("[--LastTrans--]", JournalEntryNumber.ToString()); objRs = MainObject.Instance.B1Company.GetBusinessObject(BoObjectTypes.BoRecordset); objRs.DoQuery(strComm); objRs = null; cmdList = null; } else { _Logger.Error("Could not retrieve JE number " + JournalEntryNumber); } } catch (Exception er) { _Logger.Error("", er); cmdList = new List <string>(); } finally { if (objJE != null) { objJE = null; } } //return cmdList; }
private void postAllocationJE(int invEntry) { try { SAPbobsCOM.Documents apInv = (SAPbobsCOM.Documents)oCompany.GetBusinessObject(BoObjectTypes.oPurchaseInvoices); SAPbobsCOM.JournalEntries apJE = (SAPbobsCOM.JournalEntries)oCompany.GetBusinessObject(BoObjectTypes.oJournalEntries); SAPbobsCOM.JournalEntries AllocationJE; apInv.GetByKey(invEntry); int ApJeNum = apInv.TransNum; apJE.GetByKey(ApJeNum); System.Data.DataTable dtCandidateRows = new System.Data.DataTable(); dtCandidateRows.Columns.Add("LineNum"); dtCandidateRows.Columns.Add("AlocCode"); dtCandidateRows.Columns.Add("GLCode"); dtCandidateRows.Columns.Add("Amount"); dtCandidateRows.Columns.Add("DR"); for (int i = 0; i < apInv.Lines.Count; i++) { apInv.Lines.SetCurrentLine(i); if (apInv.Lines.UserFields.Fields.Item("U_CostCode").Value.ToString().Trim() != "" && (apInv.Lines.UserFields.Fields.Item("U_AlocJe").Value.ToString().Trim() == "0" || apInv.Lines.UserFields.Fields.Item("U_AlocJe").Value.ToString().Trim() == "")) { dtCandidateRows.Rows.Add(i, apInv.Lines.UserFields.Fields.Item("U_CostCode").Value.ToString().Trim(), apInv.Lines.AccountCode, (apInv.Lines.LineTotal), apInv.Lines.CostingCode); } } int totalCnt = dtCandidateRows.Rows.Count; int currentRow = 0; foreach (DataRow dr in dtCandidateRows.Rows) { currentRow++; oApplication.StatusBar.SetText("Processing Allocation JE (" + currentRow.ToString() + " of " + totalCnt.ToString(), BoMessageTime.bmt_Short, BoStatusBarMessageType.smt_Warning); string costCode = dr["AlocCode"].ToString(); Hashtable hp = new Hashtable(); hp.Add("~p1", costCode); string strRulCode = Program.objHrmsUI.getQryString("141_GET_001", hp); //"select t1.U_AR from [@B1_DBOQD] t0 inner join [@B1_IBOQ] t1 on t0.U_ItemCode = t1.Code where t0.Code = '~p1' "; System.Data.DataTable dtRuleCode = Program.objHrmsUI.getDataTable(strRulCode, "Getting RuleCode"); if (dtRuleCode == null || dtRuleCode.Rows.Count == 0) { oApplication.MessageBox("Cost Code not associated with Indirect BOQ to post allocaiton JE"); continue; } string allocationCode = dtRuleCode.Rows[0]["U_AR"].ToString(); string CreditGLCode = dr["GLCode"].ToString(); double CreditAmount = Convert.ToDouble(dr["Amount"]); int lineNum = Convert.ToInt32(dr["LineNum"]); string DR = dr["DR"].ToString(); hp.Clear(); hp.Add("~p1", allocationCode); string strDetails = Program.objHrmsUI.getQryString("141_GET_002", hp);// @"Select t0.U_AP as AP , t1.U_AcctCode,t1.Code, t3.[U_BU] as BaseOn ,isnull(t1.U_FACode,'') as FA from [@B1_ARD] t0 inner join [@B1_AM] t1 on t1.Code = t0.U_CMC inner join [@B1_AR] t3 on t3.[Code]=t0.[U_RuleCode] where t0.U_RuleCode='~p1'"; System.Data.DataTable dtrule = Program.objHrmsUI.getDataTable(strDetails, "Getting Rule Detail"); if (dtrule.Rows.Count > 0) { AllocationJE = (SAPbobsCOM.JournalEntries)oCompany.GetBusinessObject(BoObjectTypes.oJournalEntries); AllocationJE.Reference = allocationCode; double debitTotal = 0.00; foreach (DataRow drDetails in dtrule.Rows) { string debitAccount = drDetails["U_AcctCode"].ToString(); double AP = Convert.ToDouble(drDetails["AP"]); double debitAmount = CreditAmount * AP / 100.00000; string baseOn = Convert.ToString(drDetails["BaseOn"]); string FA = Convert.ToString(drDetails["FA"]); addChildJeLines(AllocationJE, drDetails["Code"].ToString(), debitAmount, debitAccount, baseOn, FA, costCode, AP.ToString()); } for (int k = 0; k < AllocationJE.Lines.Count; k++) { AllocationJE.Lines.SetCurrentLine(k); debitTotal += AllocationJE.Lines.Debit; } AllocationJE.Lines.AccountCode = CreditGLCode; // AllocationJE.Lines.Credit = debitTotal; AllocationJE.Lines.Credit = CreditAmount; AllocationJE.Lines.Reference1 = allocationCode; AllocationJE.Lines.CostingCode = DR; AllocationJE.Lines.Add(); double diffAmount = CreditAmount - debitTotal; if (CreditAmount != debitTotal) { string roundAcct = getRoundingAcct(); AllocationJE.Lines.AccountCode = roundAcct; AllocationJE.Lines.Debit = diffAmount; AllocationJE.Lines.Reference1 = allocationCode; // AllocationJE.Lines.CostingCode = DR; AllocationJE.Lines.Add(); } if (AllocationJE.Add() != 0) { int erroCode = 0; string errDescr = ""; Program.objHrmsUI.oCompany.GetLastError(out erroCode, out errDescr); oApplication.StatusBar.SetText("Failed to add Order : " + errDescr); } else { string outStr = Convert.ToString(Program.objHrmsUI.oCompany.GetNewObjectKey()); hp.Clear(); hp.Add("~p1", outStr); hp.Add("~p2", invEntry); hp.Add("~p3", lineNum); string updateCall = Program.objHrmsUI.getQryString("141_CRUD_001", hp);// "Update pch1 set U_AlocJE='~p1' where docentry = '~p2' and linenum='~p3'"; int result = Program.objHrmsUI.ExecQuery(updateCall, "Update Line JE"); oApplication.Menus.Item("1304").Activate(); } } } } catch (Exception ex) { oApplication.MessageBox(ex.Message); } }