/// <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); }
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(); } }
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()); }
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); } }
/// <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); }
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(); } }
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); }
/// <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); }
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); } }
/// <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); }
///// <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); }