Exemple #1
0
        /// <summary>
        /// Insere um Lancamento Manual para Cancelamento do Lancamento informado por parametro.
        /// </summary>
        /// <param name="transId"></param>
        /// <param name="memo"></param>
        /// <returns></returns>
        public JournalEntries reverseJE(int transId, string memo = null)
        {
            JournalEntries retJE = null;

            try
            {
                //busca o existente
                JournalEntries existsJe = (JournalEntries)connection.Company.GetBusinessObject(BoObjectTypes.oJournalEntries);
                existsJe.GetByKey(transId);

                retJE      = copyJE(existsJe, false);
                retJE.Memo = "Lanc. Cont. (Reverso) - " + transId;

                reverseJELines(existsJe, retJE);

                retJE = insertJE(retJE);
                if (retJE == null)
                {
                    logger.log("Erro ao adicionar Lancamento Contabil Reverso para Lancamento (" + transId + "): " +
                               "Lancamento não adicionado.", Logger.LogType.ERROR);
                }
                else
                {
                    logger.log("Lancamento Contabil Manual " +
                               "(" + retJE.JdtNum + ") para reverter Lancamento (" + transId + ") adicionado com sucesso.", Logger.LogType.INFO);
                }
            }
            catch (Exception e)
            {
                retJE = null;
                logger.log("Erro ao adicionar Lancamento Contabil Reverso para Lancamento (" + transId + "): " +
                           e.Message, Logger.LogType.ERROR, e);
            }
            return(retJE);
        }
Exemple #2
0
        public void Save(Model.JournalModel journalModel)
        {
            JournalEntries journal = (JournalEntries)Controller.ConnectionController.Instance.Company.GetBusinessObject(BoObjectTypes.oJournalEntries);

            try
            {
                if (journal.GetByKey(journalModel.TransId))
                {
                    SetFields(journal, journalModel);

                    journal.Update();

                    Controller.ConnectionController.Instance.VerifyBussinesObjectSuccess();
                }
                else
                {
                    SetFields(journal, journalModel);

                    journal.Add();

                    Controller.ConnectionController.Instance.VerifyBussinesObjectSuccess();
                }
            }
            finally
            {
                Marshal.ReleaseComObject(journal);
                GC.Collect();
            }
        }
Exemple #3
0
        public int Update()
        {
            JournalEntries journalEntry = (JournalEntries)DiManager.Company.GetBusinessObject(BoObjectTypes.oJournalEntries);

            journalEntry.GetByKey(TransId);
            journalEntry.Lines.SetCurrentLine(LineId);
            journalEntry.Lines.UserFields.Fields.Item("U_CorrectContraAcc").Value       = CorrectContraAccount;
            journalEntry.Lines.UserFields.Fields.Item("U_CorrectContraShortName").Value = CorrectContraShortName ?? "";
            journalEntry.Lines.UserFields.Fields.Item("U_ContraAccountLineId").Value    = ContraAccountLineId.ToString();
            return(journalEntry.Update());
        }
Exemple #4
0
 private void ChooseJournal_AfterTryGetRecord(object sender, ChooseFromListEventArgs e)
 {
     try
     {
         var journal = new JournalEntries(Program.GetCurrentCompanyDb());
         if (journal.GetByKey(e.Record[JournalEntries.FieldsName.TransId].To <int>()))
         {
             journal.FillLines();
         }
     }
     catch (Exception ex)
     {
         ShowMessageError(ex);
     }
 }
Exemple #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="je"></param>
        /// <returns></returns>
        public JournalEntries insertJE(JournalEntries je)
        {
            int    r      = 0;
            string msgSAP = "";
            int    jdtNum = 0;

            try
            {
                r      = je.Add();
                msgSAP = connection.Company.GetLastErrorDescription();
                string st = connection.Company.GetNewObjectKey();
                if (st.Equals("") || st.Length > 11)
                {
                    jdtNum = 0;
                    logger.log("Chave de Lancamento Manual nao retornada: " + st, Logger.LogType.WARNING, null, false);
                }
                else
                {
                    jdtNum = Convert.ToInt32(connection.Company.GetNewObjectKey());
                }
                //caso tenha inserido com sucesso carrega novamente
                //para ajustar o objeto
                if (r == 0)
                {
                    je.GetByKey(jdtNum);
                    logger.log("Lancamento Contabil manual inserido com sucesso " +
                               "(" + jdtNum + "). " + msgSAP, Logger.LogType.INFO);
                }
                else
                {
                    je = null;
                    logger.log("Erro ao inserir Lancamento Contabil Manual: " +
                               "\nRetorno SAP: " + r + " - " + msgSAP, Logger.LogType.ERROR, null, false);
                }
            }
            catch (Exception e)
            {
                je = null;
                logger.log("Erro ao inserir Lancamento Contabil Manual: " +
                           e.Message + " Retorno SAP: " + msgSAP, Logger.LogType.ERROR, e);
            }

            return(je);
        }
Exemple #6
0
        public void Storno(int transId, DateTime stornoDate)
        {
            JournalEntries journal = (JournalEntries)Controller.ConnectionController.Instance.Company.GetBusinessObject(BoObjectTypes.oJournalEntries);

            try
            {
                if (journal.GetByKey(transId))
                {
                    journal.Cancel();

                    Controller.ConnectionController.Instance.VerifyBussinesObjectSuccess();
                }
            }
            finally
            {
                Marshal.ReleaseComObject(journal);
                GC.Collect();
            }
        }
Exemple #7
0
        public Model.JournalModel Get(int transId)
        {
            Model.JournalModel journalModel = new Model.JournalModel();

            JournalEntries journal = (JournalEntries)Controller.ConnectionController.Instance.Company.GetBusinessObject(BoObjectTypes.oJournalEntries);

            try
            {
                if (journal.GetByKey(transId))
                {
                    journalModel.TransId = transId;

                    journalModel.Ref1    = journal.Reference;
                    journalModel.Ref2    = journal.Reference2;
                    journalModel.Memo    = journal.Memo;
                    journalModel.RefDate = journal.ReferenceDate;
                    journalModel.TaxDate = journal.TaxDate;
                    journalModel.DueDate = journal.DueDate;

                    for (int line = 0; line < journal.Lines.Count; line++)
                    {
                        journal.Lines.SetCurrentLine(line);

                        Model.JournalLineModel journalLineModel = new Model.JournalLineModel();
                        journalLineModel.BplId     = journal.Lines.BPLID;
                        journalLineModel.Account   = journal.Lines.AccountCode;
                        journalLineModel.ShortName = journal.Lines.ShortName;
                        journalLineModel.Debit     = journal.Lines.Debit;
                        journalLineModel.Credit    = journal.Lines.Credit;

                        journalModel.JournalLineList.Add(journalLineModel);
                    }
                }
            }
            finally
            {
                Marshal.ReleaseComObject(journal);
                GC.Collect();
            }

            return(journalModel);
        }
Exemple #8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="jdtNum"></param>
        /// <returns></returns>
        public JournalEntries reverseEntries(int jdtNum)
        {
            JournalEntries retJE = null;

            try
            {
                JournalEntries existsJe = (JournalEntries)connection.Company.GetBusinessObject(BoObjectTypes.oJournalEntries);
                existsJe.GetByKey(jdtNum);

                retJE = copyJE(existsJe, false);

                //verifica se existe alguma linha configurada para gerar estorno
                int count = 0;
                JournalEntries_Lines lines = existsJe.Lines;
                while (count < lines.Count)
                {
                    lines.SetCurrentLine(count++);
                    string opt = lines.UserFields.Fields.Item("U_RevShp").Value;

                    if (opt.Equals("Sim"))
                    {
                    }

                    addDebitJEL(retJE, lines.ContraAccount
                                , lines.AccountCode, lines.ShortName
                                , lines.Credit, lines.LineMemo + " - (Reverso)", lines.DueDate);

                    lines.SetCurrentLine(count++);
                    addCreditJEL(retJE, lines.ContraAccount
                                 , lines.AccountCode, lines.ShortName
                                 , lines.Debit, lines.LineMemo + " - (Reverso)", lines.DueDate);
                }
            }
            catch (Exception e)
            {
                retJE = null;
            }
            return(retJE);
        }
Exemple #9
0
        public int Update(oJournal obj)
        {
            JournalEntries jrnls = (JournalEntries)SboComObject.GetBusinessObject(BoObjectTypes.oJournalEntries);

            try
            {
                SboComObject.StartTransaction();

                int retCode = 0;

                jrnls.GetByKey(obj.JdtNumber);

                jrnls.DueDate            = obj.DocDueDate;
                jrnls.TaxDate            = obj.TaxDate;
                jrnls.ReferenceDate      = obj.DocDate;
                jrnls.Memo               = obj.JournalMemo;
                jrnls.ProjectCode        = obj.Project;
                jrnls.Series             = obj.Series;
                jrnls.ExposedTransNumber = jrnls.ExposedTransNumber;

                if (obj.JournalLines.Count > 0)
                {
                    foreach (oJournalLine jrnlLine in obj.JournalLines)
                    {
                        jrnls.Lines.ExposedTransNumber = obj.TransId;
                        jrnls.Lines.DueDate            = obj.DocDueDate;
                        jrnls.Lines.TaxDate            = obj.TaxDate;
                        jrnls.Lines.ReferenceDate1     = obj.DocDate;
                        jrnls.Lines.ShortName          = jrnlLine.GLCode;
                        jrnls.Lines.BPLID  = jrnlLine.Segment;
                        jrnls.Lines.Debit  = jrnlLine.Debit;
                        jrnls.Lines.Credit = jrnlLine.Credit;
                        jrnls.Lines.Add();
                    }
                }

                retCode = jrnls.Update();
                if (retCode != 0)
                {
                    int    errCode    = 0;
                    string errMessage = "";
                    SboComObject.GetLastError(out errCode, out errMessage);
                    GlobalInstance.Instance.SBOErrorCode    = errCode;
                    GlobalInstance.Instance.SBOErrorMessage = errMessage;

                    SboComObject.EndTransaction(BoWfTransOpt.wf_RollBack);
                }
                else
                {
                    SboComObject.EndTransaction(BoWfTransOpt.wf_Commit);
                }

                return(retCode);
            }
            catch (Exception ex)
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(jrnls);
                throw new Exception(GlobalInstance.Instance.SBOErrorMessage == null ? ex.Message : GlobalInstance.Instance.SBOErrorMessage);
            }
            finally
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(jrnls);
            }
        }
Exemple #10
0
        /// <summary>
        /// Insere um Lancamento Contabil de Remessa.
        /// </summary>
        /// <param name="doc"></param>
        /// <returns></returns>
        public int insertShipmentJE(Documents doc)
        {
            int ret = 0;

            try
            {
                logger.pushOperation("insertShipmentJE");

                JournalEntryOp jop = new JournalEntryOp();

                //busca o existente
                JournalEntries existsJe = (JournalEntries)connection.Company.GetBusinessObject(BoObjectTypes.oJournalEntries);
                existsJe.GetByKey(doc.TransNum);

                JournalEntries remJE = copyJE(existsJe, false);
                remJE.Memo = "Lanc. Cont. Remessa - " + doc.DocEntry;
                remJE.UserFields.Fields.Item("U_DocRef").Value = doc.DocEntry;

                double          val   = 0;
                string          memo  = "";
                bool            flag  = false;
                LedgerAccount[] accts = new LedgerAccount[doc.Lines.Count];

                Recordset rs = dbFacade.Query(
                    "SELECT OSTA.Code, OSTA.SalesTax, OSTA.ARExpAct, SUM(DLN4.TaxSum)[value], DLN1.OcrCode " +
                    "FROM OSTA INNER JOIN DLN4 ON OSTA.Code = DLN4.StaCode AND OSTA.Type = DLN4.staType " +
                    "INNER JOIN DLN1 ON DLN1.DocEntry = DLN4.DocEntry AND DLN1.LineNum = DLN4.LineNum " +
                    "WHERE ExpnsCode = -1 AND DLN1.Usage IN (SELECT ID FROM OUSG WHERE U_Shipment = 1) AND DLN4.DocEntry = " + doc.DocEntry +
                    "GROUP BY OSTA.Code, OSTA.SalesTax, OSTA.ARExpAct, DLN1.OcrCode "
                    );

                while (!rs.EoF)
                {
                    LedgerAccount ledger;
                    ledger.creditAccount = rs.Fields.Item("SalesTax").Value;
                    ledger.debitAccount  = rs.Fields.Item("ARExpAct").Value;
                    ledger.provisionName = rs.Fields.Item("Code").Value;
                    ledger.value         = rs.Fields.Item("value").Value;
                    ledger.profitCode    = rs.Fields.Item("OcrCode").Value;
                    //lanca credito e debito de acordo com o imposto
                    addJournalEntryLines(remJE, ledger, ledger.value, remJE.DueDate, ledger.provisionName + " - Remessa", ledger.profitCode, ledger.profitCode);

                    rs.MoveNext();
                }

                System.Runtime.InteropServices.Marshal.ReleaseComObject(rs);
                rs = null;
                System.GC.Collect();


                //caso o documento seja de entrega, estorna custos:
                //O valor deve ser igual ao do número 1.
                if (doc.DocObjectCode == BoObjectTypes.oDeliveryNotes)
                {
                    logger.log("Documento de Entrega, caso a utilizacao esteja configurada, o Custo sera estornado.", Logger.LogType.INFO, null, false);

                    //para cada linha do doc...
                    for (int i = 0; i < doc.Lines.Count; i++)
                    {
                        doc.Lines.SetCurrentLine(i);
                        Document_Lines docLine = doc.Lines;
                        if (jop.validateShmtNFUsage(Convert.ToInt32(docLine.Usage)) == 0)
                        {
                            double vl = dbFacade.Query("select StockValue from DLN1 " +
                                                       "where DocEntry = " + docLine.DocEntry + " and LineNum = " + docLine.LineNum).Fields.Item("StockValue").Value;

                            //busca a conta de custo da utilizacao
                            NotaFiscalUsage usage = connection.Company.GetBusinessObject(BoObjectTypes.oNotaFiscalUsage);
                            usage.GetByKey(Convert.ToInt32(docLine.Usage));
                            accts[i].debitAccount = usage.UserFields.Fields.Item("U_CstAcctCode").Value;
                            accts[i].value        = vl;
                            accts[i].profitCode   = docLine.CostingCode;
                            val += vl;
                            flag = true;
                        }
                        else
                        {
                            flag = false;
                        }
                    }

                    if (flag)
                    {
                        //busca as contas do lancamento existente
                        //LedgerAccount accts;
                        int count = 0, pos = 0;
                        JournalEntries_Lines lines = existsJe.Lines;
                        while (count < lines.Count)
                        {
                            lines.SetCurrentLine(count);
                            if (lines.AccountCode.StartsWith("42"))
                            {
                                accts[pos].creditAccount   = lines.AccountCode;
                                accts[pos++].provisionName = lines.LineMemo;
                            }
                            count++;
                        }
                        //ajusta as contas das linhas
                        if (pos < accts.Length)
                        {
                            pos = 0;
                            string act = accts[0].creditAccount;
                            memo = accts[0].provisionName;
                            for (int i = 0; i < accts.Length; i++)
                            {
                                accts[i].creditAccount = act;
                            }
                        }

                        //1) Uma linha a Crédito, com a finalidade de estornar o lançamento a Débito na conta de custo
                        //originado pelo documento “Entrega”, com valor correspondente à multiplicação das quantidades pelo custo unitário
                        //dos itens em que houver a marcação “Y” para o campo “TaxOnly” na utilização.

                        //lanca os custos para cada linha do doc
                        //2) Uma linha a Débito, na conta de custo parametrizada na tabela de Utilizações, através do campo “U_CstAcctCode”,
                        //para as linhas do documento “Entrega” em que a utilização possuir a marcação “Y” para o campo “TaxOnly”.
                        foreach (LedgerAccount lact in accts)
                        {
                            addCreditJEL(remJE, lact.creditAccount, lact.debitAccount, lact.creditAccount
                                         , lact.value, memo + " - (Reverso)", lines.DueDate, lact.profitCode);

                            addDebitJEL(remJE, lact.debitAccount, lact.creditAccount, lact.debitAccount
                                        , lact.value, "Lanc. Custos - " + lact.debitAccount, lines.DueDate, lact.profitCode);
                        }
                    }
                    else
                    {
                        logger.log("Configuracao da Utilizacao nao permite estorno de Custos.", Logger.LogType.INFO);
                    }
                }

                //insere o lanc.
                remJE = insertJE(remJE);
                if (remJE == null)
                {
                    ret = -1;
                    logger.log("Erro ao adicionar Lancamento Contabil para Reverter Custo e Contabilizar impostos: " +
                               "Lancamento não adicionado.", Logger.LogType.ERROR);
                }
                else
                {
                    logger.log("Adicionado Lancamento Contabil para Reverter Custo e Contabilizar impostos (" + remJE.JdtNum + ")."
                               , Logger.LogType.INFO);

                    doc.UserFields.Fields.Item("U_ShmtJE").Value = "" + remJE.JdtNum;
                    ret = doc.Update();
                    logger.log("Chave de Lancamento de Remessa ajustada no Documento(" + doc.DocEntry + "). Retorno:" + ret, Logger.LogType.INFO);
                }
            }
            catch (Exception e)
            {
                ret = -1;
                logger.log("Erro ao Reverter Custos para o Lancamento " + doc.TransNum, Logger.LogType.ERROR, e, true);
            }

            logger.releaseOperation();

            return(ret);
        }
Exemple #11
0
        ///// <summary>
        ///// Cancela um Lancamento Contabil de Remessa
        ///// </summary>
        ///// <param name="document">Documento que esta sendo cancelado</param>
        ///// <returns></returns>
        //public int reverseShipmentJE(Documents document)
        //{
        //    int ret = 0;
        //    try
        //    {
        //        int transId=0;
        //        if(!string.IsNullOrEmpty(document.UserFields.Fields.Item("U_ShmtJE").Value))
        //        {
        //            transId =  Convert.ToInt32(document.UserFields.Fields.Item("U_ShmtJE").Value);
        //        }

        //        //valida o numero passado
        //        if (transId <= 0)
        //        {
        //            logger.log("Nao havia Lancamento de Remessa para ser Cancelado (" + transId + "). "+
        //            "Chave para Lancamento invalida: " +transId, Logger.LogType.WARNING, null, false);
        //            return ret;
        //        }

        //        //realiza o cancelamento e verifica se pode ajustar o doc
        //        if (insertShipmentReverseJE(document) == 0)
        //        {
        //            //remove o lancamento de remessa do doc
        //            document.UserFields.Fields.Item("U_ShmtJE").Value = "";
        //            ret = document.Update();
        //            if (ret == 0)
        //            {
        //                logger.log("Lancamento para Cancelamento de " +
        //                    "Lancamentos de Remessa adicionado. Documento Ajustado.", Logger.LogType.INFO);
        //            }
        //            else
        //            {
        //                logger.log("Erro ao atualizar Documento para Cancelamento de Lancamentos de Remessa." +
        //                    "Documento nao Ajustado." +
        //                "Retorno SAP: " + ret + " - " + connection.Company.GetLastErrorDescription(), Logger.LogType.ERROR);
        //            }
        //        }
        //        else
        //        {
        //            ret = -1;
        //            logger.log("Lancamento de Cancelamento de Remessa não adicionado.", Logger.LogType.WARNING);
        //        }

        //    }
        //    catch (Exception e)
        //    {
        //        ret = -1;
        //        logger.log("Erro ao Cancelar Lancamento de Remessa: " + e.Message, Logger.LogType.ERROR, e);
        //    }
        //    return ret;
        //}


        /// <summary>
        /// Insere um Lancamento Contabil Manual para estorno do Lancamento de Remessa anteriormente adicionado
        /// </summary>
        /// <param name="doc"></param>
        /// <returns></returns>
        public int insertShipmentReverseJE(Documents doc)
        {
            int ret = 0;

            try
            {
                JournalEntryOp jop = new JournalEntryOp();

                //busca o existente
                JournalEntries existsJe = (JournalEntries)connection.Company.GetBusinessObject(BoObjectTypes.oJournalEntries);
                existsJe.GetByKey(doc.TransNum);

                JournalEntries remJE = copyJE(existsJe, false);
                remJE.Memo = "Lanc. Cont. de Estorno de Remessa - " + doc.DocEntry;
                remJE.UserFields.Fields.Item("U_DocRef").Value = doc.DocEntry;

                double          val   = 0;
                string          memo  = "";
                bool            flag  = false;
                LedgerAccount[] accts = new LedgerAccount[doc.Lines.Count];

                Recordset rs = dbFacade.Query(
                    "SELECT OSTA.Code, OSTA.SalesTax, OSTA.ARExpAct, SUM(RDN4.TaxSum)[value], RDN1.OcrCode " +
                    "FROM OSTA INNER JOIN RDN4 ON OSTA.Code = RDN4.StaCode AND OSTA.Type = RDN4.staType " +
                    "INNER JOIN RDN1 ON RDN1.DocEntry = RDN4.DocEntry AND RDN1.LineNum = RDN4.LineNum " +
                    "WHERE ExpnsCode = -1 AND RDN1.Usage IN (SELECT ID FROM OUSG WHERE U_Shipment = 1) AND RDN4.DocEntry = " + doc.DocEntry +
                    "GROUP BY OSTA.Code, OSTA.SalesTax, OSTA.ARExpAct, RDN1.OcrCode "
                    );

                while (!rs.EoF)
                {
                    LedgerAccount ledger;
                    ledger.creditAccount = rs.Fields.Item("ARExpAct").Value;
                    ledger.debitAccount  = rs.Fields.Item("SalesTax").Value;
                    ledger.provisionName = rs.Fields.Item("Code").Value;
                    ledger.value         = rs.Fields.Item("value").Value;
                    ledger.profitCode    = rs.Fields.Item("OcrCode").Value;
                    //lanca credito e debito de acordo com o imposto
                    addJournalEntryLines(remJE, ledger, ledger.value, remJE.DueDate, ledger.provisionName + " - Estorno de Remessa", ledger.profitCode, ledger.profitCode);

                    rs.MoveNext();
                }

                System.Runtime.InteropServices.Marshal.ReleaseComObject(rs);
                rs = null;
                System.GC.Collect();


                //caso o documento seja de devolucao, estorna lancamento de impostos e custos
                //O valor deve ser igual ao do número 1.
                if (doc.DocObjectCode == BoObjectTypes.oReturns)
                {
                    logger.log("Documento para Devolução de Entrega, caso a utilizacao esteja configurada, o Custo sera estornado."
                               , Logger.LogType.INFO, null, false);

                    //para cada linha do doc...
                    for (int i = 0; i < doc.Lines.Count; i++)
                    {
                        doc.Lines.SetCurrentLine(i);
                        Document_Lines docLine = doc.Lines;

                        //if (docLine.BaseEntry == 0 && docLine.BaseLine == 0)
                        //{
                        //    string msg = "Linha " + docLine.LineNum + " não possui referência base.";
                        //    logger.log(msg, Logger.LogType.INFO);
                        //    int rm = connection.App.MessageBox(msg + "\nDeseja adicionar o Documento?", 1, "Sim", "Não");
                        //    if (rm != 1)
                        //    {
                        //        logger.log("", Logger.LogType.INFO);
                        //    }
                        //}


                        if (jop.validateShmtNFUsage(Convert.ToInt32(docLine.Usage)) == 0)
                        {
                            double vl = dbFacade.Query("select StockValue from RDN1 " +
                                                       "where DocEntry = " + docLine.DocEntry + " and LineNum = " + docLine.LineNum).Fields.Item("StockValue").Value;

                            //busca a conta de custo da utilizacao
                            NotaFiscalUsage usage = connection.Company.GetBusinessObject(BoObjectTypes.oNotaFiscalUsage);
                            usage.GetByKey(Convert.ToInt32(docLine.Usage));
                            accts[i].debitAccount = usage.UserFields.Fields.Item("U_CstAcctCode").Value;
                            accts[i].value        = vl;
                            accts[i].profitCode   = docLine.CostingCode;
                            val += vl;
                            flag = true;
                        }
                        else
                        {
                            flag = false;
                        }
                    }

                    if (flag)
                    {
                        //busca as contas do lancamento existente
                        //LedgerAccount accts;
                        int count = 0, pos = 0;
                        JournalEntries_Lines lines = existsJe.Lines;
                        while (count < lines.Count)
                        {
                            lines.SetCurrentLine(count);
                            if (lines.AccountCode.StartsWith("42"))
                            {
                                accts[pos].creditAccount   = lines.AccountCode;
                                accts[pos++].provisionName = lines.LineMemo;
                            }
                            count++;
                        }
                        //ajusta as contas das linhas
                        if (pos < accts.Length)
                        {
                            pos = 0;
                            string act = accts[0].creditAccount;
                            memo = accts[0].provisionName;
                            for (int i = 0; i < accts.Length; i++)
                            {
                                accts[i].creditAccount = act;
                            }
                        }

                        foreach (LedgerAccount lact in accts)
                        {
                            addDebitJEL(remJE, lact.creditAccount, lact.debitAccount, lact.creditAccount
                                        , lact.value, memo + " - (Reverso)", lines.DueDate, lact.profitCode);

                            addCreditJEL(remJE, lact.debitAccount, lact.creditAccount, lact.debitAccount
                                         , lact.value, "Lanc. Custos - " + lact.debitAccount, lines.DueDate, lact.profitCode);
                        }
                    }
                    else
                    {
                        logger.log("Configuracao da Utilizacao nao permite estorno de Custos.", Logger.LogType.INFO);
                    }
                }

                //insere o lanc.
                remJE = insertJE(remJE);
                if (remJE == null)
                {
                    ret = -1;
                    logger.log("Erro ao adicionar Lancamento Contabil de Estorno de Remessa: " +
                               "Lancamento não adicionado.", Logger.LogType.ERROR);
                }
                else
                {
                    logger.log("Adicionado Lancamento Contabil de Estorno de Remessa (" + remJE.JdtNum + ")."
                               , Logger.LogType.INFO);

                    doc.UserFields.Fields.Item("U_ShmtJE").Value = "" + remJE.JdtNum;
                    ret = doc.Update();
                    logger.log("Chave para Lancamento de Estorno de Remessa ajustada no Documento(" + doc.DocEntry + "). Retorno:" + ret, Logger.LogType.INFO);
                }
            }
            catch (Exception e)
            {
                ret = -1;
                logger.log("Erro ao Reverter Custos para o Lancamento de Estorno de Remessa " + doc.TransNum, Logger.LogType.ERROR, e, true);
            }
            return(ret);
        }