Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        /// <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(); }
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
        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);
            }
        }