/// <summary>
        /// Registra un Item del Documento de Compra
        /// </summary>
        public bool fu_reg_cmp(c_cnx000 _cnx000)
        {
            try
            {
                StringBuilder vv_str_sql = new StringBuilder();
                vv_str_sql.AppendLine(" Insert into cmp001a( ");
                vv_str_sql.AppendLine("va_cod_cmp,va_nro_itm,va_cod_pro,va_nom_pro,va_cod_uni,va_can_pro, ");
                vv_str_sql.AppendLine("va_pre_uni,va_imp_tot,va_cod_alm,va_tip_cmp,va_lot_cod,va_fec_ven) ");
                vv_str_sql.AppendFormat(" values({0}, ", va_cod_cmp);
                vv_str_sql.AppendFormat(" {0}, ", va_nro_itm);
                vv_str_sql.AppendFormat(" '{0}', ", va_cod_pro);
                vv_str_sql.AppendFormat(" '{0}', ", va_nom_pro);
                vv_str_sql.AppendFormat(" '{0}', ", va_cod_uni);
                vv_str_sql.AppendFormat(" {0}, ", va_can_pro);
                vv_str_sql.AppendFormat(" {0}, ", va_pre_uni);
                vv_str_sql.AppendFormat(" {0}, ", va_imp_tot);
                vv_str_sql.AppendFormat(" {0}, ", va_cod_alm);
                vv_str_sql.AppendFormat(" '{0}', ", va_tip_cmp);
                vv_str_sql.AppendFormat(" '{0}', ", va_lot_cod);
                vv_str_sql.AppendFormat(" '{0}') ", va_fec_ven.ToShortDateString());


                if (!_cnx000.fu_exe_sql_no(vv_str_sql.ToString()))
                {
                    Exception ex = new Exception("Error:cmp001a- No se pudo Registrar el item: " + va_cod_pro);
                    throw ex;
                }

                return(true);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Registra los datos de la Cabecera del Documento de Compra
        /// </summary>
        private bool fu_reg_cab(c_cnx000 _cnx000)
        {
            try
            {
                StringBuilder vv_str_sql = new StringBuilder();
                vv_str_sql.AppendLine(" Insert into cmp001( ");
                vv_str_sql.AppendLine("va_cod_doc,va_nro_tal,va_nro_doc,va_cod_prv,va_fec_cmp,va_cod_ges,va_emp_cod, ");
                vv_str_sql.AppendLine("va_cod_suc,va_tip_cmp,va_cod_alm,va_fec_emi,va_fom_pag,va_pla_pag,va_mon_eda, ");
                vv_str_sql.AppendLine("va_tip_cam,va_tot_bru,va_des_cmp,va_tot_net,va_obs_cmp,va_est_ado,va_nro_fac, ");
                vv_str_sql.AppendLine("va_nit_fac,va_raz_fac,va_nro_aut,va_cod_ctr,va_tot_exe,va_tot_suj,va_tot_imp, ");
                vv_str_sql.AppendLine("va_rim_itr,va_riu_bie,va_riu_ser,va_rie_alq) ");
                vv_str_sql.AppendFormat(" values('{0}', ", va_cod_doc);
                vv_str_sql.AppendFormat("  {0}, ", va_nro_tal);
                vv_str_sql.AppendFormat("  {0}, ", va_nro_doc);
                vv_str_sql.AppendFormat("  '{0}', ", va_cod_prv);
                vv_str_sql.AppendFormat("  '{0}', ", va_fec_cmp.ToShortDateString());
                vv_str_sql.AppendFormat("  {0}, ", va_cod_ges);
                vv_str_sql.AppendFormat("  {0}, ", va_emp_cod);
                vv_str_sql.AppendFormat("  {0}, ", va_cod_suc);
                vv_str_sql.AppendFormat("  '{0}', ", va_tip_cmp);
                vv_str_sql.AppendFormat("  {0}, ", va_cod_alm);
                vv_str_sql.AppendFormat("  '{0}', ", va_fec_emi.ToShortDateString());
                vv_str_sql.AppendFormat("  '{0}', ", va_fom_pag);
                vv_str_sql.AppendFormat("  {0}, ", va_pla_pag);
                vv_str_sql.AppendFormat("  '{0}', ", va_mon_eda);
                vv_str_sql.AppendFormat("  {0}, ", va_tip_cam);
                vv_str_sql.AppendFormat("  {0}, ", va_tot_bru);
                vv_str_sql.AppendFormat("  {0}, ", va_des_cmp);
                vv_str_sql.AppendFormat("  {0}, ", va_tot_net);
                vv_str_sql.AppendFormat("  '{0}', ", va_obs_cmp);
                vv_str_sql.AppendFormat("  '{0}', ", va_est_ado);
                vv_str_sql.AppendFormat("  {0}, ", va_nro_fac);
                vv_str_sql.AppendFormat("  {0}, ", va_nit_fac);
                vv_str_sql.AppendFormat("  '{0}', ", va_raz_fac);
                vv_str_sql.AppendFormat("  '{0}', ", va_nro_aut);
                vv_str_sql.AppendFormat("  '{0}', ", va_cod_ctr);
                vv_str_sql.AppendFormat("  {0}, ", va_tot_exe);
                vv_str_sql.AppendFormat("  {0}, ", va_tot_suj);
                vv_str_sql.AppendFormat("  {0}, ", va_tot_imp);
                vv_str_sql.AppendFormat("  {0}, ", va_rim_itr);
                vv_str_sql.AppendFormat("  {0}, ", va_riu_bie);
                vv_str_sql.AppendFormat("  {0}, ", va_riu_ser);
                vv_str_sql.AppendFormat("  {0}) ", va_rie_alq);

                va_cod_cmp = _cnx000.fu_exe_sql_id(vv_str_sql.ToString());

                if (va_cod_cmp <= 0)
                {
                    Exception ex = new Exception("Error:cmp001- No se pudo Registrar el Movimiento del Producto: ");
                    throw ex;
                }

                return(true);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Registra Documento de Compra
        /// </summary>
        public Boolean fu_reg_cmp()
        {
            c_cnx000 o_cnx000 = new c_cnx000();

            using (TransactionScope oTran = new TransactionScope())
            {
                try
                {
                    //Grabamos Cabecera
                    fu_reg_cab(o_cnx000);
                    foreach (c_cmp001a item in lisItem)
                    {
                        item.va_cod_cmp = va_cod_cmp;
                        if (!item.fu_reg_cmp(o_cnx000))
                        {
                            oTran.Dispose();
                            throw new Exception("Error:cmp001- No se pudo Registrar el item: " + item.va_cod_pro);
                        }
                        c_inv100 o_inv100 = new DATOS.c_inv100();
                        o_inv100.va_cod_pro = item.va_cod_pro;
                        o_inv100.va_alm_mov = item.va_cod_alm;
                        o_inv100.va_can_pro = item.va_can_pro;
                        o_inv100.va_cod_suc = va_cod_suc;
                        o_inv100.va_emp_cod = va_emp_cod;
                        o_inv100.va_est_tra = va_est_ado;
                        o_inv100.va_fec_pro = va_fec_cmp;
                        o_inv100.va_fec_tra = va_fec_emi;
                        o_inv100.va_fec_ven = item.va_fec_ven;
                        o_inv100.va_gst_cod = va_cod_ges;
                        o_inv100.va_imp_tot = va_tot_net;
                        o_inv100.va_lot_cod = item.va_lot_cod;
                        o_inv100.va_mod_org = "CMP";
                        o_inv100.va_mon_tra = va_mon_eda;
                        o_inv100.va_nro_tal = va_nro_tal;
                        o_inv100.va_ref_doc = va_nro_fac;
                        o_inv100.va_tas_cam = va_tip_cam;
                        o_inv100.va_tip_tra = va_tip_cmp;
                        o_inv100.va_tra_glo = "Compra de Productos";
                        o_inv100.va_tra_org = va_nro_doc;

                        switch (va_tip_cmp)
                        {
                        case "IVA":             //IVA
                            o_inv100.va_tra_fac = "0";
                            o_inv100.va_cos_uni = item.va_pre_uni - Math.Round(item.va_pre_uni * 13 / 100, 4);

                            break;

                        case "EXE":             //EXENTA
                            o_inv100.va_cos_uni = item.va_pre_uni;
                            break;

                        case "RETBIEN":          //RETENCION BIEN
                            o_inv100.va_tra_ret = "1";
                            o_inv100.va_cos_uni = item.va_pre_uni + Math.Round(item.va_pre_uni / (92 / 100), 4);
                            break;

                        case "RETSER":           //RETENCION SERVICIOS
                            o_inv100.va_tra_ret = "1";
                            o_inv100.va_cos_uni = item.va_pre_uni + Math.Round(item.va_pre_uni / (84.5m / 100), 4);
                            break;

                        case "IVAXREC":          //IVA POR RECUPERAR
                            o_inv100.va_cos_uni = Math.Round(item.va_pre_uni * 13 / 100, 4);
                            break;

                        default:
                            o_inv100.va_tra_fac = "1";
                            o_inv100.va_tra_ret = "0";
                            break;
                        }

                        //Registramos el movimiento en Inventario y Actualizamos Saldos
                        if (!o_inv100.fu_reg_mov(o_cnx000, c_inv100.TipoTransaccions.Ingreso))
                        {
                            oTran.Dispose();
                            throw new Exception("Error:cmp001- No se pudo Registrar el Movimiento de Inventario del Item: " + item.va_cod_pro);
                        }
                    }
                    oTran.Complete();
                    return(true);
                }
                catch (Exception ex)
                {
                    oTran.Dispose();
                    throw ex;
                }
            }
        }