Example #1
0
        private void cancellaScritture()
        {
            EP_functions EP = new EP_functions(Meta.Dispatcher);

            if (!EP.attivo)
            {
                return;
            }
            EP.GetEntryForDocument(idrelated);

            foreach (DataRow rEntry in EP.D.Tables["entry"].Rows)
            {
                rEntry.Delete();
            }

            foreach (DataRow rEntryDetail in EP.D.Tables["entrydetail"].Rows)
            {
                rEntryDetail.Delete();
            }

            MetaData MetaEntry = MetaData.GetMetaData(this, "entry");
            PostData Post      = MetaEntry.Get_PostData();

            Post.InitClass(EP.D, Meta.Conn);
            if (!Post.DO_POST())
            {
                MessageBox.Show(this, "Errore durante la cancellazione delle scritture in PD");
            }
        }
Example #2
0
        public void GeneraScritture(string elencoCedolini)
        {
            if (elencoCedolini == "")
            {
                return;
            }
            DataAccess Conn      = Meta.Conn;
            int        esercizio = Conn.GetEsercizio();

            DataTable tCedolino         = DataAccess.CreateTableByName(Meta.Conn, "payroll", "*");
            DataTable tContratto        = DataAccess.CreateTableByName(Meta.Conn, "parasubcontract", "*");
            DataTable tCedolinoRitenuta = DataAccess.CreateTableByName(Meta.Conn, "payrolltax", "*");
            DataTable tTipoRitenuta     = DataAccess.CreateTableByName(Meta.Conn, "tax", "*");
            string    filtroCedolini    = QHS.FieldInList("idpayroll", elencoCedolini);

            DataAccess.RUN_SELECT_INTO_TABLE(Meta.Conn, tTipoRitenuta, null, null, null, true);
            DataAccess.RUN_SELECT_INTO_TABLE(Meta.Conn, tCedolino, null, filtroCedolini, null, true);
            DataAccess.RUN_SELECT_INTO_TABLE(Meta.Conn, tCedolinoRitenuta, null, filtroCedolini, null, true);
            string elencoContratti = QHS.FieldInList("idcon", QueryCreator.ColumnValues(tCedolino, null, "idcon", true));

            DataAccess.RUN_SELECT_INTO_TABLE(Meta.Conn, tContratto, null, elencoContratti, null, true);
            string flagEpExp = Conn.DO_READ_VALUE("config", QHS.CmpEq("ayear", Conn.GetEsercizio()), "flagepexp").ToString().ToUpper();


            // L'anagrafica usata per la parte verso ente è quella della cfg. ritenute, eventualmente spacchettata
            //  ove ci sia la ripartizione percentuale (in questo caso sarebbe opportuno usare la liq. diretta)
            //Invece l'anagrafica per la parte "conto ente" è quella della cfg. delle partite di giro
            object idregauto = Conn.DO_READ_VALUE("config", QHS.CmpEq("ayear", Conn.GetSys("esercizio")), "idregauto");

            TaxEntryHelper TEH = new TaxEntryHelper(Conn);

            foreach (DataRow CurrCedolino in tCedolino.Rows)
            {
                DataRow CurrContratto = tContratto.Select(QHC.CmpEq("idcon", CurrCedolino["idcon"]))[0];

                object idreg = CurrContratto["idreg"];
                object idupb = CurrContratto["idupb"];

                EP_functions EP = new EP_functions(Meta.Dispatcher);
                if (!EP.attivo)
                {
                    return;
                }
                EP.GetEntryForDocument(CurrCedolino);

                object descr = "Contratto n." + CurrContratto["ncon"].ToString() + " del " +
                               CurrContratto["ycon"].ToString() + " - " +
                               "Cedolino n. " + CurrCedolino["fiscalyear"] + "/" + CurrCedolino["npayroll"];
                object doc = "Contr. " + CurrContratto["ncon"].ToString() + "/" +
                             CurrContratto["ycon"].ToString() +
                             " Cedolino " + CurrCedolino["npayroll"] + "/" + CurrCedolino["fiscalyear"];


                DataRow mainEntry = EP.SetEntry(descr, Meta.GetSys("datacontabile"),
                                                doc, Meta.GetSys("datacontabile"), EP_functions.GetIdForDocument(CurrCedolino));

                EP.ClearDetails(mainEntry);
                object idaccmot_main = CurrContratto["idaccmotive"];
                if (idaccmot_main == DBNull.Value)
                {
                    MessageBox.Show("Non è stata impostata la causale per la prestazione.");
                    return;
                }

                string idepcontext    = "PRESTAZ";
                object idacc_registry = EP.GetSupplierAccountForRegistry(
                    CurrContratto["idaccmotivedebit"], CurrContratto["idreg"]);

                if (idacc_registry == null || idacc_registry == DBNull.Value)
                {
                    MessageBox.Show("Non è stato configurato il conto di debito/credito opportuno");
                    return;
                }

                decimal totale = CfgFn.GetNoNullDecimal(CurrCedolino["feegross"]);


                string idrelated = BudgetFunction.GetIdForDocument(CurrCedolino);
                object idepexp   = Conn.DO_READ_VALUE("epexp", QHS.AppAnd(QHS.CmpEq("idrelated", idrelated), QHS.CmpEq("nphase", 2)), "idepexp");
                if ((idepexp == null || idepexp == DBNull.Value) && flagEpExp == "S" && esercizio > 2015)
                {
                    MessageBox.Show("Errore", "Non è stato trovato alcun impegno di budget per il contratto");
                    return;
                }



                decimal contributiNonConfigurati = 0;

                //Per tutti i CONTRIBUTI:
                //Se è configurato il conto di debito
                //	effettua la scrittura COSTO->debito conto ente  (idaccmotive_cost -> idaccmotive_debit)
                // altrimenti
                //  effettua la scrittura COSTO->debito verso ente   (idaccmotive_cost -> idaccmotive_pay)

                foreach (DataRow Rit in tCedolinoRitenuta.Rows)
                {
                    decimal amount = CfgFn.GetNoNullDecimal(Rit["admintax"]);
                    if (amount == 0)
                    {
                        continue;
                    }

                    string  filtroRit = QHC.CmpEq("taxcode", Rit["taxcode"]);
                    DataRow TipoRit   = tTipoRitenuta.Select(filtroRit)[0];
                    if (TipoRit == null)
                    {
                        continue;
                    }

                    //Se la causale di costo non è configurata, prende la causale principale
                    object idaccmotive_cost = idaccmot_main;
                    if (TipoRit["idaccmotive_cost"] != DBNull.Value)
                    {
                        idaccmotive_cost = TipoRit["idaccmotive_cost"];
                    }
                    if (idaccmotive_cost == idaccmot_main)
                    {
                        idaccmotive_cost = DBNull.Value;
                    }

                    object idaccmotive_touse = DBNull.Value;
                    bool   debitoCONTOerario = false;
                    if (TipoRit["idaccmotive_debit"] != DBNull.Value)
                    {
                        idaccmotive_touse = TipoRit["idaccmotive_debit"];//debito CONTO erario
                        debitoCONTOerario = true;
                    }
                    else
                    {
                        idaccmotive_touse = TipoRit["idaccmotive_pay"];//debito VERSO erario
                    }

                    if (idaccmotive_touse == DBNull.Value)
                    {
                        MessageBox.Show("Il contributo " + TipoRit["description"].ToString() +
                                        " non è correttamente configurato per l'E/P");
                        return;                         //Errore fatale!
                    }

                    if (idaccmotive_cost == DBNull.Value)
                    {
                        contributiNonConfigurati += amount;
                    }
                    else
                    {
                        string idrelatedContrib = BudgetFunction.GetIdForDocument(Rit);
                        object idepexpContrib   = Conn.DO_READ_VALUE("epexp", QHS.AppAnd(QHS.CmpEq("idrelated", idrelatedContrib), QHS.CmpEq("nphase", 2)), "idepexp");
                        if ((idepexpContrib == null || idepexpContrib == DBNull.Value) && flagEpExp == "S" && esercizio > 2015)
                        {
                            MessageBox.Show("Errore", "Non è stato trovato alcun impegno di budget per il contributo" + Rit["taxcode"].ToString());
                            return;
                        }
                        DataRow[] ContiContribCosto = EP.GetAccMotiveDetails(idaccmotive_cost.ToString());
                        foreach (DataRow CP in ContiContribCosto)
                        {
                            EP.EffettuaScritturaImpegnoBudget(idepcontext, amount,
                                                              CP["idacc"],
                                                              idreg, idupb,
                                                              CurrCedolino["start"], CurrCedolino["stop"],
                                                              CurrCedolino, idaccmotive_cost, idepexpContrib, null, idrelatedContrib);
                        }
                    }
                    //Fa la scrittura sul conto di debito conto/verso erario usando la tabella anagrafiche della cfg ritenute
                    DataRow[] ContiContribFinanz = EP.GetAccMotiveDetails(idaccmotive_touse.ToString());
                    if (debitoCONTOerario)
                    {
                        foreach (DataRow CP in ContiContribFinanz)
                        {
                            EP.EffettuaScrittura(idepcontext, amount,
                                                 CP["idacc"],
                                                 idregauto, idupb, //era Curr["idreg"]
                                                 CurrCedolino["start"], CurrCedolino["stop"],
                                                 CurrCedolino, idaccmotive_touse);
                        }
                    }
                    else
                    {
                        DataTable Regs = TEH.GetIdRegFor(Rit["taxcode"], DBNull.Value, DBNull.Value);
                        if (Regs == null || Regs.Rows.Count == 0)
                        {
                            MessageBox.Show("Anagrafica per il versamento non trovata per la ritenuta di tipo " + Rit["taxref"].ToString(), "Errore");
                        }
                        else
                        {
                            foreach (DataRow Registry in Regs.Rows)
                            {
                                decimal amount_to_consider = amount * CfgFn.GetNoNullDecimal(Registry["quota"]);
                                int     idreg_to_consider  = CfgFn.GetNoNullInt32(Registry["idreg"]);
                                foreach (DataRow CP in ContiContribFinanz)
                                {
                                    EP.EffettuaScrittura(idepcontext, amount_to_consider,
                                                         CP["idacc"],
                                                         idreg_to_consider, idupb, //era Curr["idreg"]
                                                         CurrCedolino["start"], CurrCedolino["stop"],
                                                         CurrCedolino, idaccmotive_touse);
                                }
                            }
                        }
                    }
                }

                //Effettua la scrittura sulla causale principale
                DataRow[] ContiPrinc = EP.GetAccMotiveDetails(idaccmot_main);
                foreach (DataRow CP in ContiPrinc)
                {
                    EP.EffettuaScritturaImpegnoBudget(idepcontext, totale + contributiNonConfigurati,
                                                      CP["idacc"], idreg, idupb,
                                                      CurrCedolino["start"], CurrCedolino["stop"],
                                                      CurrCedolino, idaccmot_main, idepexp, null, idrelated);
                }


                //Effettua la scrittura sul conto di debito vs fornitore
                EP.EffettuaScrittura(idepcontext, totale,
                                     idacc_registry,
                                     idreg, idupb, CurrCedolino["start"], CurrCedolino["stop"],
                                     CurrCedolino, idaccmot_main);

                EP.RemoveEmptyDetails();

                MetaData MetaEntry = Meta.Dispatcher.Get("entry");
                PostData Post      = MetaEntry.Get_PostData();

                Post.InitClass(EP.D, Meta.Conn);
                if (Post.DO_POST())
                {
                    EditEntry(CurrCedolino);
                }
                else
                {
                    EP.viewDetails(Meta);
                }
            }
        }
Example #3
0
        void GeneraScritture()
        {
            if (DS.pettycashoperation.Rows.Count == 0)
            {
                return;                                        //It was an insert-cancel
            }
            DataRow rPettycashoperation = DS.pettycashoperation.Rows[0];
            // Prendo la Rows[0] perchè alcune info sono in comune alle n-pettycashoperation, quindi evito di mostrare i messaggi all'utente n volte.
            object idpettycash = rPettycashoperation["idpettycash"];
            string filterpcash = "(idpettycash=" + QueryCreator.quotedstrvalue(idpettycash, false) + ")";

            DataRow[] PettyCash = DS.pettycashsetup.Select(filterpcash);
            if (PettyCash.Length == 0)
            {
                MessageBox.Show("Non è stata inserita la configuraz. del fondo economale per quest'anno");
                return;
            }
            DataRow rPettyCash      = PettyCash[0];
            object  idacc_pettycash = rPettyCash["idacc"];

            object idreg          = rPettycashoperation["idreg"];
            object idpettycashreg = rPettyCash["registrymanager"];

            EP_functions EP = new EP_functions(Meta.Dispatcher);

            if (!EP.attivo)
            {
                return;
            }

            object idaccmot_debit = rPettycashoperation["idaccmotive_debit"];
            object idacc_registry = EP.GetSupplierAccountForRegistry(null, idreg);

            if (idacc_registry == null || idacc_registry.ToString() == "")
            {
                MessageBox.Show("Non è stato configurato il conto di debito/credito opportuno");
                return;
            }

            if (idaccmot_debit == DBNull.Value)
            {
                MessageBox.Show("Non è stata impostata la causale di debito. Sarà usata una causale di debito standard.");
            }

            foreach (DataRow Curr in DS.pettycashoperation.Rows)
            {
                EP.GetEntryForDocument(Curr);

                object doc = "Op. Fondo Econ. " +
                             Curr["idpettycash"].ToString() + "/" +
                             Curr["yoperation"].ToString().Substring(2, 2) + "/" +
                             Curr["noperation"].ToString().PadLeft(6, '0');

                EP.SetEntry(Curr["description"], Curr["adate"],
                            doc, Curr["adate"], EP_functions.GetIdForDocument(Curr));

                EP.ClearDetails();

                string  idepcontext_debito = "PSPESED";
                decimal importo            = CfgFn.GetNoNullDecimal(Curr["amount"]);

                //Scrittura :  DEBITO	A	F.ECONOMALE	contesto PSPESED (P.SPESE DEBITO)
                object idacc_debit = idacc_registry;
                if (idaccmot_debit != DBNull.Value)
                {
                    DataRow[] ContiDebito = EP.GetAccMotiveDetails(idaccmot_debit.ToString());
                    if (ContiDebito.Length > 0)
                    {
                        idacc_debit = ContiDebito[0]["idacc"];
                    }
                }
                EP.EffettuaScrittura(idepcontext_debito, importo,
                                     idacc_debit.ToString(),
                                     idreg, Curr["idupb"], Curr["start"], Curr["stop"], Curr, idaccmot_debit);
                EP.EffettuaScrittura(idepcontext_debito, importo,
                                     idacc_pettycash.ToString(),
                                     idpettycashreg, Curr["idupb"], Curr["start"], Curr["stop"], Curr, idaccmot_debit);

                EP.RemoveEmptyDetails();

                MetaData MetaEntry = MetaData.GetMetaData(this, "entry");
                PostData Post      = MetaEntry.Get_PostData();

                Post.InitClass(EP.D, Meta.Conn);
                if (Post.DO_POST())
                {
                    EditEntry(Curr);
                }
                else
                {
                    EP.viewDetails(Meta);
                }
            }
        }
Example #4
0
        bool GeneraScritture()
        {
            if (MessageBox.Show("Si vuole procedere alla generazione delle scritture in partita doppia ?", "Avviso",
                                MessageBoxButtons.OKCancel) == DialogResult.Cancel)
            {
                return(false);
            }
            DataTable storeunloaddetail = Conn.CreateTableByName("storeunloaddetail", "*");

            foreach (DataRow rDetail in Tinvoicedetail.Select())
            {
                EP_functions EP = new EP_functions(Meta.Dispatcher);
                if (!EP.attivo)
                {
                    return(false);
                }

                string filter = QHS.AppAnd(QHS.CmpEq("idstoreunload", rDetail["idstoreunload"]), QHS.CmpEq("idstoreunloaddetail", rDetail["idstoreunloaddetail"]));
                Conn.RUN_SELECT_INTO_TABLE(storeunloaddetail, null, filter, null, true);

                DataRow rStoreunloaddetail = storeunloaddetail.Select(filter)[0];
                EP.GetEntryForDocument(rStoreunloaddetail);

                object doc = DBNull.Value;
                doc = "Scarico n. " + rDetail["nstoreunload"].ToString();

                DataRow rr = EP.SetEntry(rDetail["description"], rDetail["adate"],
                                         doc, DBNull.Value, EP_functions.GetIdForDocument(rStoreunloaddetail));

                EP.ClearDetails(rr);

                //---------------------------------------------------------------------------------------------------
                object idreg     = rDetail["idreg"];
                object idreg_iva = idreg;
                object esercizio = Meta.GetSys("esercizio");

                DataRow currInvSetup = DS.config.Rows[0];

                object idregVersamento12 = currInvSetup["paymentagency12"];
                object idregRimborso12   = currInvSetup["refundagency12"];
                object idacc_refund12    = EP.GetAccountForIvaRefund12();
                object idacc_payment12   = EP.GetAccountForIvaPayment12();


                bool istituzionale          = (CfgFn.GetNoNullInt32(rDetail["TipoAttivita"]) == 1);
                bool deferred               = (rDetail["flagdeferred"].ToString().ToUpper() == "S");
                bool isIntraCom             = (rDetail["flagintracom"].ToString().ToUpper() != "N");// Flagintracom può valere: S-intracom, N o X-extracom.
                bool INVERTI_DEBITO_CREDITO = (istituzionale && isIntraCom);

                string filtroInvKind = QHS.CmpEq("idinvkind", rDetail["idinvkind"]);

                DataTable Tinvoicekind = Conn.RUN_SELECT("invoicekind", "*", null, filtroInvKind, null, true);
                DataRow   TipoDoc      = Tinvoicekind.Rows[0];

                filtroInvKind = QHS.AppAnd(QHS.CmpEq("ayear", Meta.GetSys("esercizio")), filtroInvKind);
                DataTable Tinvoicekindyear = Conn.RUN_SELECT("invoicekindyear", "*", null, filtroInvKind, null, true);
                DataRow   TipoDocYear      = Tinvoicekindyear.Rows[0];

                object invkind_idacc_iva          = DBNull.Value;
                object invkind_idacc_iva_intracom = DBNull.Value;

                object idacc_unabatable = DBNull.Value;
                //costo iva indetraibile (per chi calcola riga per riga e gestisce tale conto)
                if (isIntraCom)
                {
                    idacc_unabatable = TipoDocYear["idacc_unabatable_intra"];
                }
                if (!isIntraCom || idacc_unabatable == DBNull.Value)
                {
                    idacc_unabatable = TipoDocYear["idacc_unabatable"];
                }
                //conto per l'iva
                if (deferred)
                {
                    invkind_idacc_iva = (TipoDocYear["idacc_deferred"] != DBNull.Value)
                        ? TipoDocYear["idacc_deferred"] : TipoDocYear["idacc"];
                }
                else
                {
                    invkind_idacc_iva = TipoDocYear["idacc"];
                }
                //conto per l'iva di segno opposto per fatture intracom.
                if (isIntraCom)
                {
                    if (deferred)
                    {
                        invkind_idacc_iva_intracom = (TipoDocYear["idacc_deferred_intra"] != DBNull.Value)
                            ? TipoDocYear["idacc_deferred_intra"] : TipoDocYear["idacc_intra"];
                    }
                    else
                    {
                        invkind_idacc_iva_intracom = TipoDocYear["idacc_intra"];
                    }
                }

                //Per le fatture istituzionali non intracom ignora l'iva detraibileSara
                if (istituzionale && !isIntraCom)
                {
                    invkind_idacc_iva = DBNull.Value;
                }

                object invkind_idacc_discount = TipoDocYear["idacc_discount"];
                byte   flag = CfgFn.GetNoNullByte(TipoDoc["flag"]);
                string idepcontext;
                idepcontext = "FATACQ";

                if (isIntraCom && istituzionale)
                {
                    object idacc_ivapay = DBNull.Value;
                    idreg_iva    = idregVersamento12;
                    idacc_ivapay = idacc_payment12;
                    if (invkind_idacc_iva == DBNull.Value)
                    {
                        invkind_idacc_iva = idacc_ivapay;
                    }
                }

                string  filterEsercizio = QHC.CmpEq("ayear", Meta.GetSys("esercizio"));
                string  filterkind      = QHC.CmpEq("idinvkind", rDetail["idinvkind"]);
                DataRow rInvoiceKind    = Tinvoicekind.Rows[0];// è lo stesso di sopra

                double abatablerate = CfgFn.GetNoNullDouble(
                    Meta.Conn.DO_READ_VALUE("invoicekindyearview",
                                            GetData.MergeFilters(filterkind, filterEsercizio)
                                            , "abatablerate"));

                double tassocambio = CfgFn.GetNoNullDouble(CfgFn.GetNoNullDouble(rDetail["exchangerate"]));

                double R_imponibile = CfgFn.GetNoNullDouble(rDetail["taxable"]);

                double  iva         = CfgFn.GetNoNullDouble(rDetail["tax"]);
                double  quantita    = CfgFn.GetNoNullDouble(rDetail["number"]);
                double  imponibileD = CfgFn.RoundValuta(R_imponibile * quantita * tassocambio);
                decimal imponibile  = Convert.ToDecimal(imponibileD);

                double ivaindetraibile    = 0;
                double ivadetraibilelorda = 0;
                double ivadetraibile      = 0;

                if (istituzionale)
                {
                    ivaindetraibile = CfgFn.RoundValuta(iva);
                    ivadetraibile   = 0;
                }
                else
                {
                    ivaindetraibile    = CfgFn.GetNoNullDouble(rDetail["unabatable"]);
                    ivadetraibilelorda = CfgFn.RoundValuta((iva - ivaindetraibile));
                    ivadetraibile      = CfgFn.RoundValuta(ivadetraibilelorda * abatablerate);
                }
                decimal valore_iva_totale = CfgFn.GetNoNullDecimal(rDetail["tax"]);

                //iva = iva detraibile, da movimentarsi con il conto normale dell'iva (acq/vendite)
                decimal valore_iva_detraibile = CfgFn.GetNoNullDecimal(ivadetraibile);
                decimal iva_indetraibile      = valore_iva_totale - valore_iva_detraibile;

                // valore_costo = da usare unitamente al conto di costo
                //   è pari all'imponibile + iva indetraibile ove il conto dell'iva indetraibile non sia configurato
                decimal valore_costo = CfgFn.GetNoNullDecimal(imponibile);
                if (idacc_unabatable == DBNull.Value)
                {
                    valore_costo += iva_indetraibile;
                }

                if (invkind_idacc_iva == DBNull.Value && valore_iva_detraibile > 0)
                {
                    string tipo = deferred ? "differita" : "immediata";
                    //////MessageBox.Show("Non è stata trovato il conto per l'iva " + tipo + " per il tipo documento " +
                    //////    rDetail["idinvkind"].ToString());
                    valore_costo          = valore_costo + valore_iva_detraibile;
                    valore_iva_detraibile = 0;
                    //return;
                }

                if (invkind_idacc_iva == DBNull.Value && isIntraCom && istituzionale && iva_indetraibile > 0)
                {
                    //////MessageBox.Show("Non è stata trovato il conto per l'iva  per il tipo documento " +
                    //////    rDetail["idinvkind"].ToString());
                    iva_indetraibile = 0;
                }

                object idaccmotive = rDetail["idaccmotive"];
                if (idaccmotive == DBNull.Value)
                {
                    //////MessageBox.Show("Attenzione, il dettaglio " + rDetail["detaildescription"].ToString() +
                    //////    " non ha la causale!");
                    continue;
                }
                object idaccmotive_main_debit = rDetail["idaccmotivedebit"];
                if (idaccmotive_main_debit == DBNull.Value)
                {
                    idaccmotive_main_debit = idaccmotive;
                }
                DataRow[] REntries = EP.GetAccMotiveDetails(idaccmotive);
                if (REntries.Length == 0)
                {
                    //////MessageBox.Show("Non è stato configurata la causale di costo del dettaglio n." +
                    //////    rDetail["rownum"].ToString() + ". La scrittura non pareggerà.", "Errore");
                }

                //scrittura sul costo iva indetraibile (solo per gli acquisti ove conto configurato)
                // COSTO NUOVO
                if (idacc_unabatable != DBNull.Value && iva_indetraibile > 0)
                {
                    EP.EffettuaScrittura(idepcontext,
                                         iva_indetraibile,
                                         idacc_unabatable,
                                         idreg, rDetail["idupb"], rDetail["competencystart"], rDetail["competencystop"],
                                         rDetail, idaccmotive);
                }

                //scrittura su costo/ricavo (eventualmente include iva indetraibile)
                foreach (DataRow RE in REntries)
                {
                    EP.EffettuaScrittura(idepcontext,
                                         valore_costo,
                                         RE["idacc"],
                                         idreg, rDetail["idupb"], rDetail["competencystart"], rDetail["competencystop"],
                                         rDetail, idaccmotive);
                }

                // A COSTO VECCHIO sulle vecchie coordiante
                ToldIdsor.Clear();
                DataRow Roldidsor = DS.Tables["ToldIdsor"].NewRow();
                Roldidsor["idsor1"] = rDetail["invidsor1"];
                Roldidsor["idsor2"] = rDetail["invidsor2"];
                Roldidsor["idsor3"] = rDetail["invidsor3"];
                DS.Tables["ToldIdsor"].Rows.Add(Roldidsor);

                if (idacc_unabatable != DBNull.Value && iva_indetraibile > 0)
                {
                    EP.EffettuaScrittura(idepcontext,
                                         -iva_indetraibile,
                                         idacc_unabatable,
                                         idreg, rDetail["idupb"], rDetail["competencystart"], rDetail["competencystop"],
                                         Roldidsor, idaccmotive);
                }

                //scrittura su costo/ricavo (eventualmente include iva indetraibile)
                foreach (DataRow RE in REntries)
                {
                    EP.EffettuaScrittura(idepcontext,
                                         -valore_costo,
                                         RE["idacc"],
                                         idreg, rDetail["idupb"], rDetail["competencystart"], rDetail["competencystop"],
                                         Roldidsor, idaccmotive);
                }

                //---------------------------------------------------------------------------------------------------
                EP.RemoveEmptyDetails();

                MetaData MetaEntry = MetaData.GetMetaData(this, "entry");
                PostData Post      = MetaEntry.Get_PostData();

                Post.InitClass(EP.D, Meta.Conn);
                if (Post.DO_POST())
                {
                    EditEntry(EP, rDetail);
                }
            }
            return(true);
        }