invoiceone.mx Open in urlscan Pro
200.78.252.10  Public Scan

Submitted URL: https://invoiceone.ws/
Effective URL: https://invoiceone.mx:8443/aplicativocfdi/
Submission: On August 26 via automatic, source certstream-suspicious — Scanned from DE

Form analysis 1 forms found in the DOM

POST https://invoiceone.mx:8443/aplicativocfdi/

<form method="post" action="https://invoiceone.mx:8443/aplicativocfdi/" id="Form1" enctype="multipart/form-data" target="" encoding="multipart/form-data">
  <div class="aspNetHidden">
    <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="">
    <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="">
  </div>
  <script type="text/javascript">
    //<![CDATA[
    var theForm = document.forms['Form1'];
    if (!theForm) {
      theForm = document.Form1;
    }

    function __doPostBack(eventTarget, eventArgument) {
      if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
      }
    }
    //]]>
  </script>
  <div class="aspNetHidden">
    <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="76D26056">
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAAIS+FMj3sNWbvEx9dR74fa+Wl5APERVpzEAFON01Y9EvSQnGVW12U3uGQH3L9F/ptUiLDwd+Som1p0n8hEwKsOF">
  </div>
  <div id="dLogo" class="LogoDefault">
  </div>
  <div id="SessionUUIDHidden_Container" style="display:inline;">
    <input type="hidden" size="20" autocomplete="off" id="SessionUUIDHidden" name="SessionUUIDHidden" class=" x-form-hidden x-form-field" value="fdd21bed-c2b8-4830-908d-101573339244">
  </div>
  <div id="NominaEmpleados_Cargado_Container" style="display:inline;">
    <input type="hidden" size="20" autocomplete="off" id="NominaEmpleados_Cargado" name="NominaEmpleados_Cargado" class=" x-form-hidden x-form-field">
  </div>
  <div id="NominaGeneracion_Cargado_Container" style="display:inline;">
    <input type="hidden" size="20" autocomplete="off" id="NominaGeneracion_Cargado" name="NominaGeneracion_Cargado" class=" x-form-hidden x-form-field">
  </div>
  <div id="NominaConsulta_Cargado_Container" style="display:inline;">
    <input type="hidden" size="20" autocomplete="off" id="NominaConsulta_Cargado" name="NominaConsulta_Cargado" class=" x-form-hidden x-form-field">
  </div>
  <script type="text/javascript">
    Ext.override(Ext.Window, {
      constrainHeader: true
    });

    function CambiarLogo(gratuito) {
      var divLogo = document.getElementById('dLogo');
      if (divLogo != 'undefined') {
        if (gratuito != 'undefined') {
          if (gratuito == true) {
            divLogo.className = "LogoGratuito";
          } else {
            divLogo.className = "LogoPremium";
          }
        }
      }
    }

    function getX() {
      return "{DX}-1500";
    }

    function getY() {
      return "{DX}-700";
    }
    /* ----------------------------------------- */
    /*          Actualiza el titulo del menu     */
    /* ----------------------------------------- */
    var updateTitle = function(desktop, title) {
      var menu = desktop.getDesktop().taskbar.startMenu;
      if (menu.rendered) menu.setTitle(title);
      else menu.title = title;
    };
    /* ----------------------------------------- */
    /*          Registro de la empresa           */
    /* ----------------------------------------- */
    function validaFormRegistro(mostrarMensaje) {
      var rValido = rTabInfoEmisorFormPL.getForm().isValid();
      if (false == rValido) {
        rUsuarioTabPL.setActiveTab(rTabInfoEmisorFormPL);
        rTabInfoEmisorFormPL.getForm().isValid(); //FIX para la posicion de los indicadores
        if (mostrarMensaje) {
          Ext.Msg.show({
            title: "Paso 1: Información de la Empresa",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Faltan algunos datos de la empresa por validar, por favor ingrese la información solicitada."
          });
        }
      }
      if (rValido) //tab de informacion fiscal
      {
        rValido = rTabRegimenFormPL.getForm().isValid();
        if (false == rValido) {
          rUsuarioTabPL.setActiveTab(rTabRegimenFormPL);
          rTabRegimenFormPL.getForm().isValid(); //FIX
          if (mostrarMensaje) {
            Ext.Msg.show({
              title: "Paso 2: Información Fiscal",
              buttons: Ext.Msg.OK,
              icon: Ext.Msg.ERROR,
              msg: "Faltan algunos datos de la empresa por validar, por favor ingrese la información solicitada."
            });
          }
        }
      }
      if (rValido) //check del contrato
      {
        rValido = rAceptoContratoCheckBox.getValue();
        if (false == rValido) {
          rUsuarioTabPL.setActiveTab(rContratpFormPL);
          if (mostrarMensaje) {
            Ext.Msg.show({
              title: "Paso 4: Contrato",
              buttons: Ext.Msg.OK,
              icon: Ext.Msg.ERROR,
              msg: "Debe aceptar el contrato."
            });
          }
        }
      }
      return rValido;
    }
    /* ---------------------------------------------*/
    /*          Editar info de la empresa           */
    /* -------------------------------------------- */
    function validaFormEditarEmpresa(mostrarMensaje) {
      var rValido = eEmTabInfoEmisorFormPL.getForm().isValid();
      if (false == rValido) {
        eEmTabPanel.setActiveTab(eEmTabInfoEmisorFormPL);
        eEmTabInfoEmisorFormPL.getForm().isValid(); //FIX
        if (mostrarMensaje) {
          Ext.Msg.show({
            title: "Información de la Empresa",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Faltan algunos datos de la empresa por validar, por favor ingrese la información solicitada."
          });
        }
      }
      if (rValido) {
        rValido = eEmTabRegimenFormPL.getForm().isValid();
        if (false == rValido) {
          eEmTabPanel.setActiveTab(eEmTabRegimenFormPL);
          eEmTabRegimenFormPL.getForm().isValid(); //FIX
          if (mostrarMensaje) {
            Ext.Msg.show({
              title: "Información Fiscal",
              buttons: Ext.Msg.OK,
              icon: Ext.Msg.ERROR,
              msg: "Faltan algunos datos de la empresa por validar, por favor ingrese la información solicitada."
            });
          }
        }
      }
      if (rValido) {
        rValido = panelNomina.getForm().isValid();
        if (false == rValido) {
          eEmTabPanel.setActiveTab(panelNomina);
          panelNomina.getForm().isValid(); //FIX
          if (mostrarMensaje) {
            Ext.Msg.show({
              title: "Nómina",
              buttons: Ext.Msg.OK,
              icon: Ext.Msg.ERROR,
              msg: "Faltan algunos datos de la empresa por validar, por favor ingrese la información solicitada."
            });
          }
          //ticket R-4215
        } else {
          var nominaHabilitada = chkNominaHabilitada.checked;
          var nominaHabilitadaAnt = chkNominaHabilitadaAnt.checked;
          if (nominaHabilitada != nominaHabilitadaAnt) {
            var res = window.confirm("Ha realizado cambios en la configuración de Nómina para la Empresa. Todas las pantallas de nómina se actualizarán.  ¿Desea continuar ?");
            return res;
          }
          //ticket R-4215
        }
      }
      return rValido;
    }
    /* ---------------------------------------------*/
    /*          Editar info del receptor            */
    /* -------------------------------------------- */
    function validaFormEditarReceptor(mostrarMensaje) {
      var rValido = eRTabInfoReceptorFormPL.getForm().isValid();
      if (false == rValido) {
        if (mostrarMensaje) {
          Ext.Msg.show({
            title: "Información del Cliente",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Faltan algunos datos del cliente por validar, por favor ingrese la información solicitada."
          });
        }
      }
      return rValido;
    }
    /* ---------------------------------------------*/
    /*          Editar info del impuesto          */
    /* -------------------------------------------- */
    function validaFormEditarImpuesto() {
      var rValido = eImpuestoTabInfoEmisorFormPL.getForm().isValid();
      if (false == rValido) {
        Ext.Msg.show({
          title: "Información del Impuesto",
          buttons: Ext.Msg.OK,
          icon: Ext.Msg.ERROR,
          msg: "Faltan algunos datos del impuesto por validar, por favor ingrese la información solicitada."
        });
      }
      return rValido;
    }
    /* ---------------------------------------------*/
    /*          Editar info de la Serie             */
    /* -------------------------------------------- */
    function validaFormEditarSerie() {
      var rValido = eSTabInfoEmisorFormPL.getForm().isValid();
      if (false == rValido) {
        Ext.Msg.show({
          title: "Información de la Serie",
          buttons: Ext.Msg.OK,
          icon: Ext.Msg.ERROR,
          msg: "Faltan algunos datos de la Serie por validar, por favor ingrese la información solicitada."
        });
      }
      return rValido;
    }
    /* ---------------------------------------------*/
    /*          Editar info del Producto            */
    /* -------------------------------------------- */
    function validaFormEditarProductos() {
      var rValido = ePTabInfoEmisorFormPL.getForm().isValid();
      if (false == rValido) {
        Ext.Msg.show({
          title: "Información del Producto",
          buttons: Ext.Msg.OK,
          icon: Ext.Msg.ERROR,
          msg: "Faltan algunos datos del Producto por validar, por favor ingrese la información solicitada."
        });
      }
      return rValido;
    }
    //AMM
    /* ---------------------------------------------*/
    /*          Editar info de la Oficina           */
    /* -------------------------------------------- */
    function validaFormEditarOficinas(mostrarMensaje) {
      var rValido = eOficinaTabInfoOficinaFormPL.getForm().isValid();
      if (false == rValido) {
        if (mostrarMensaje) {
          Ext.Msg.show({
            title: "Información Expedido En",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Faltan algunos datos de Expedido En por validar, por favor ingrese la información solicitada."
          });
        }
      }
      return rValido;
    }
    //FIN AMM
    //AMM
    /* ---------------------------------------------*/
    /*          cambioar contraseña                 */
    /* -------------------------------------------- */
    function validaFormcambiarContraseñas(mostrarMensaje) {
      var rValido = cambiarContraseñasFormPL.getForm().isValid();
      if (false == rValido) {
        if (mostrarMensaje) {
          Ext.Msg.show({
            title: "Información de cambio de contraseñas",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Faltan algunos datos por validar, por favor ingrese la información solicitada."
          });
        }
      }
      return rValido;
    }
    //FIN AMM
  </script>
  <div id="x-desktop" style="height: 1170px;">
    <dl id="x-shortcuts">
      <dt id="winEmpresasDesktopModule-shortcut" style="left: -5px; top: 10px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-EditarEmpresa"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winOficinasDesktopModule-shortcut" style="left: -5px; top: 84px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-Oficinas"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winImpuestosDesktopModule-shortcut" style="left: -5px; top: 158px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-Impuestos"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winSeriesDesktopModule-shortcut" style="left: -5px; top: 232px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-Series"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winUsuariosDesktopModule-shortcut" style="left: -5px; top: 306px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-Usuarios"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winReceptoresDesktopModule-shortcut" style="left: -5px; top: 380px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-Receptores"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winProductosDesktopModule-shortcut" style="left: -5px; top: 454px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-Producto"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winServiciosDesktopModule-shortcut" style="left: -5px; top: 528px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-Servicios"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winCrearCFDIDesktopModule-shortcut" style="left: -5px; top: 602px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-CrearCfdi"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winCrearCFDI40DesktopModule-shortcut" style="left: -5px; top: 676px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-CrearCfdi40"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winSeleccionarCfdiModule-shortcut" ext:custom="true" style="left: -5px; top: 750px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-ListarCfdi"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winCfdiCENACEModule-shortcut" style="left: -5px; top: 824px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-ListarCfdi"><div class="x-shortcut-text"></div></a></dt>
      <dt id="nomEmpleados-shortcut" style="left: -5px; top: 898px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-nominaempleado"><div class="x-shortcut-text"></div></a></dt>
      <dt id="nomGenerarRecibos-shortcut" style="left: -5px; top: 972px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-nominagenerarrecibo"><div class="x-shortcut-text"></div></a></dt>
      <dt id="nomConsultarRecibos-shortcut" style="left: -5px; top: 1046px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-nominaconsultarrecibo"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winContratarDesktopModule-shortcut" style="left: 63px; top: 10px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-comprar"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winCompraFoliosDesktopModule-shortcut" style="left: 63px; top: 84px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-mis-compras"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winCodigoConfirmacionDesktopModule-shortcut" style="left: 63px; top: 158px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-claves-de-confirmacion"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winChatDesktopModule-shortcut" style="left: 63px; top: 232px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-SoporteEnLInea"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winiTopDesktopModule-shortcut" style="left: 63px; top: 306px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-SoporteEnITop"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winMapeadoresDesktopModule-shortcut" style="left: 63px; top: 380px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-Map"><div class="x-shortcut-text">Mapeadores (WebService)</div></a></dt>
      <dt id="winTimbradoDesktopModule-shortcut" style="left: 63px; top: 454px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-Timbrado"><div class="x-shortcut-text">Cuenta de Timbrado</div></a></dt>
      <dt id="winCFDIConsolidadoDesktopModule-shortcut" style="left: 63px; top: 528px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-Consolidado"><div class="x-shortcut-text">Listado CFDI Consolidado</div></a></dt>
      <dt id="winIntegradoresDesktopModule-shortcut" style="left: 63px; top: 602px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-Integradores"><div class="x-shortcut-text">Integradores</div></a></dt>
      <dt id="winCambiarTemaDesktopModule-shortcut" style="left: 63px; top: 676px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-Tema"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winCambiarContrasenaDesktopModule-shortcut" style="left: 63px; top: 750px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-CambiarContrasenia"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winCambiarEmpresaDesktopModule-shortcut" style="left: 63px; top: 824px;" class=" x-hidden">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-SwitchEmpresa"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winIniciarSesionDesktopModule-shortcut" ext:x="{DX}-90" ext:y="{DY}-90" style="left: 1495px; top: 1080px;">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-Login"><div class="x-shortcut-text"></div></a></dt>
      <dt id="winRegistroDesktopModule-shortcut" ext:x="{DX}-90" ext:y="{DY}-170" style="left: 1495px; top: 1000px;">
        <a href="#"><img src="/aplicativocfdi/extjs/resources/images/default/s-gif/ext.axd" class="shortcut-icon icon-Registro"><div class="x-shortcut-text"></div></a></dt>
    </dl>
    <div class="x-window-proxy" id="ext-gen355" style="display: none; width: 578px; height: 578px; left: 510px; top: 295px; opacity: 0.5; x: 510; y: 295;"></div>
    <div class="ext-el-mask" id="ext-gen356" style="display: block; width: 1600px; height: 1200px; z-index: 9010;"></div>
    <div class="x-shadow" id="ext-gen365" style="z-index: 9012; left: 506px; top: 313px; width: 588px; height: 580px; display: block;">
      <div class="xst">
        <div class="xstl"></div>
        <div class="xstc" style="width: 576px;"></div>
        <div class="xstr"></div>
      </div>
      <div class="xsc" style="height: 568px;">
        <div class="xsml"></div>
        <div class="xsmc" style="width: 576px;"></div>
        <div class="xsmr"></div>
      </div>
      <div class="xsb">
        <div class="xsbl"></div>
        <div class="xsbc" style="width: 576px;"></div>
        <div class="xsbr"></div>
      </div>
    </div>
    <div id="winIniciarSesion" class=" x-window" style="position: absolute; z-index: 9013; visibility: visible; left: 510px; top: 310px; width: 580px; display: block;">
      <div class="x-window-tl">
        <div class="x-window-tr">
          <div class="x-window-tc">
            <div class="x-window-header x-unselectable x-panel-icon icon-user x-window-draggable" id="ext-gen348">
              <div class="x-tool x-tool-close" id="ext-gen353">&nbsp;</div><span class="x-window-header-text" id="ext-gen357">Iniciar Sesión [ InvoiceONE - Proveedor Autorizado de Certificación 57203 ] V.2023.40</span>
            </div>
          </div>
        </div>
      </div>
      <div class="x-window-bwrap" id="ext-gen349">
        <div class="x-window-ml">
          <div class="x-window-mr">
            <div class="x-window-mc" id="ext-gen352">
              <div class="x-window-body" id="ext-gen350" style="padding: 5px; width: 556px; height: 538px;">
                <div id="Panel15" class=" x-panel" style="width: 556px;">
                  <div class="x-panel-bwrap" id="ext-gen359">
                    <div class="x-panel-body x-panel-body-noheader" id="ext-gen360" style="overflow: auto; position: relative; width: 554px; height: 536px;"><iframe id="Panel15_IFrame" name="Panel15_IFrame" class=""
                        src="/aplicativocfdi/paginas/IniciarSesion.aspx?1724691410090" frameborder="0" style="width: 554px; height: 536px;"></iframe></div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="x-window-bl x-panel-nofooter" id="ext-gen351">
          <div class="x-window-br">
            <div class="x-window-bc"></div>
          </div>
        </div>
      </div><a href="#" class="x-dlg-focus" tabindex="-1" id="ext-gen354">&nbsp;</a>
    </div>
  </div>
  <div id="ux-taskbar" class=" x-border-layout-ct" style="overflow: hidden; margin: 0px; border: 0px none;">
    <div id="ux-taskbar-start" class=" x-border-panel" style="width: 87px; left: 0px; top: 0px; height: 30px;">
      <table cellspacing="0" class="x-btn  x-btn-text-icon" id="ext-gen11" style="width: auto;">
        <tbody>
          <tr>
            <td class="ux-startbutton-left"><i>&nbsp;</i></td>
            <td class="ux-startbutton-center"><em class=" unselectable=" on"=""><button class=" x-btn-text start-button" type="BUTTON" style="height:30px;" id="ext-gen12">Inicio</button></em></td>
            <td class="ux-startbutton-right"><i>&nbsp;</i></td>
          </tr>
        </tbody>
      </table>
    </div>
    <div id="ux-taskbuttons-panel" class=" x-border-panel" style="overflow: auto; left: 95px; top: 0px; width: 1505px; height: 30px;">
      <div class="ux-taskbuttons-strip-wrap" id="ext-gen13" style="width: 1505px;">
        <ul class="ux-taskbuttons-strip" id="ext-gen15">
          <li id="ext-gen362">
            <table cellspacing="0" class="x-btn x-btn-text-icon active-win" id="ext-gen363" style="width: auto;">
              <tbody>
                <tr>
                  <td class="ux-taskbutton-left"><i>&nbsp;</i></td>
                  <td class="ux-taskbutton-center"><em class=" unselectable=" on"=""><button class=" x-btn-text icon-user" type="BUTTON" style="height: 28px; width: 78px;" id="ext-gen364">Iniciar S...</button></em></td>
                  <td class="ux-taskbutton-right"><i>&nbsp;</i></td>
                </tr>
              </tbody>
            </table>
          </li>
          <li class="ux-taskbuttons-edge" id="ext-gen16"></li>
          <div class="x-clear" id="ext-gen17"></div>
        </ul>
      </div>
      <div class="ux-taskbuttons-strip-spacer" id="ext-gen14"></div>
      <div id="infoTimbres" style="top: 1px; height: 27px; right: 0px; color: white; font-weight: bold; position: absolute; width: 150px; overflow:hidden;">
        <div>Timbres disponibles<br>? / 9999999</div>
      </div>
    </div>
    <div class="x-clear"></div>
    <div class="x-layout-split x-layout-split-west x-splitbar-h" id="TaskBarStart-xsplit" style="left: 87px; top: 0px; height: 30px;">&nbsp;</div>
  </div>
  <div id="HCvePromo_Container" style="display:inline;">
    <input type="hidden" size="20" autocomplete="off" id="HCvePromo" name="HCvePromo" class=" x-form-hidden x-form-field">
  </div>
  <div id="sessionPL_Content" class="x-hidden">
    <div id="contratImg_Container" style="display:inline;">
      <img id="contratImg" src="Imagenes/contrataciones/nuevo/titulo1-3.png" style="border: none;">
    </div>
  </div>
  <div id="contratacionFieldSet_Content" class="x-hidden">
    <div id="Image2_Container" style="display:inline;">
      <img id="Image2" src="Imagenes/contrataciones/nuevo/titulo2-3.png" style="border: none;">
    </div>
  </div>
  <div id="contratacionDaFieldSet_Content" class="x-hidden">
    <div id="Image3_Container" style="display:inline;">
      <img id="Image3" src="Imagenes/contrataciones/nuevo/titulo3-3.png" style="border: none;">
    </div>
  </div>
  <div id="contratacionSelPlanFieldSet_Content" class="x-hidden">
    <div id="Image6_Container" style="display:inline;">
      <img id="Image6" src="Imagenes/contrataciones/consesion/titulo2-2.png" style="border: none;">
    </div>
  </div>
  <div id="PromoSelPlanFieldSet_Content" class="x-hidden">
    <div id="ctl166_Container" style="display:inline;">
      <span class="x-label" id="ctl166"><img src="data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="x-label-icon " style="display: none;"><span class="x-label-value" id="ext-gen88">&nbsp;</span></span>
    </div>
  </div>
  <div id="contratHidden_Container" style="display:inline;">
    <input type="hidden" size="20" autocomplete="off" id="contratHidden" name="contratHidden" class=" x-form-hidden x-form-field" value="0">
  </div>
  <div id="EsPromocionGratuita_Container" style="display:inline;">
    <input type="hidden" size="20" autocomplete="off" id="EsPromocionGratuita" name="EsPromocionGratuita" class=" x-form-hidden x-form-field" value="0">
  </div>
  <div id="registroInfoLabel_Content" class="x-hidden">
    <br>
  </div>
  <div id="Label7_Content" class="x-hidden">
    <br>
  </div>
  <div id="cambiarContraseñasInfoLabel_Content" class="x-hidden">
    <br>
  </div>
  <div id="cCBuscarReceptorHidden_Container" style="display:inline;">
    <input type="hidden" size="20" autocomplete="off" id="cCBuscarReceptorHidden" name="cCBuscarReceptorHidden" class=" x-form-hidden x-form-field x-hide-display" value="false">
  </div>
  <div id="Panel7_Content" class="x-hidden">
    <span>&nbsp;</span>
  </div>
  <div id="cCBuscarProductoHidden_Container" style="display:inline;">
    <input type="hidden" size="20" autocomplete="off" id="cCBuscarProductoHidden" name="cCBuscarProductoHidden" class=" x-form-hidden x-form-field x-hide-display" value="0">
  </div>
  <div id="cCCrearProductoHidden_Container" style="display:inline;">
    <input type="hidden" size="20" autocomplete="off" id="cCCrearProductoHidden" name="cCCrearProductoHidden" class=" x-form-hidden x-form-field x-hide-display" value="false">
  </div>
  <div id="ccMiltipleProductoHidden_Container" style="display:inline;">
    <input type="hidden" size="20" autocomplete="off" id="ccMiltipleProductoHidden" name="ccMiltipleProductoHidden" class=" x-form-hidden x-form-field x-hide-display" value="1">
  </div>
  <script type="text/javascript">
    var registro = null;

    function guarda_Complemento_Iedu() {
      var ieduStore = new Ext.data.JsonStore({
        id: 'NumeroIndex',
        fields: [{
          name: 'NumeroIndex',
          type: 'int'
        }, {
          name: 'Version',
          type: 'string'
        }, {
          name: 'Nombre',
          type: 'string'
        }, {
          name: 'Curp',
          type: 'string'
        }, {
          name: 'NivelEducativo',
          type: 'string'
        }, {
          name: 'Autorizacion',
          type: 'string'
        }, {
          name: 'RFC',
          type: 'string'
        }, {
          name: 'Incluir',
          type: 'string'
        }]
      });
      var ieduType = ieduStore.recordType;
      var numeroIndex = cIeduPL.getBody().cph_Viewport1.findById('cph_eDnNumeroIndexHidden').getValue();
      var nuevo = new ieduType({
        NumeroIndex: numeroIndex,
        Version: '1.0',
        Nombre: cIeduPL.getBody().cph_Viewport1.findById('cph_eDnNomAlumnoTF').getValue(),
        Curp: cIeduPL.getBody().cph_Viewport1.findById('cph_eDnNomCurpTF').getValue(),
        NivelEducativo: cIeduPL.getBody().cph_Viewport1.findById('cph_eDnCNivelEdCB').getValue(),
        Autorizacion: cIeduPL.getBody().cph_Viewport1.findById('cph_eDnAutorizTF').getValue(),
        Rfc: cIeduPL.getBody().cph_Viewport1.findById('cph_eDnRFCTF').getValue(),
        Incluir: cIeduPL.getBody().cph_Viewport1.findById('cph_eDnInclCB').getValue()
      });
      ieduStore.add(nuevo);
      var datos = Ext.encode(Ext.pluck(ieduStore.data.items, 'data'));
      var rIndice = cCConceptosGridPL.getStore().find('NumeroIndex', numeroIndex);
      if (-1 != rIndice) {
        var cfdireg = cCConceptosGridPL.getStore().getAt(rIndice);
        if (null != cfdireg) cfdireg.data.Comp_Iedu = datos;
      }
      cIeduWindow.hide();
    }

    function descripcionTrigger(el, trigger, tag) {
      cCConceptosGridPL.stopEditing();
      PickWindow.show();
      registro = el.gridEditor.record.data;
      var titulo = "Concepto: #" + registro.NumeroIndex.toString() + " (Descripción del Concepto)";
      PickWindow.setTitle(titulo);
      cCEditorHtml.setValue(registro.Descripcion);
      cCEditorHtml.focus();
    }

    function guardaDescripcionConcepto() {
      if (null != registro) {
        registro.Descripcion = cCEditorHtml.getValue().replace('\n', '<BR />');
        cCConceptosGridPL.stopEditing();
        cCConceptosGridPL.getView().refresh();
        cCEditorHtml.setValue('');
      }
    }
  </script>
  <script type="text/javascript">
    function botonSiguienteClick(tipoBoton, tabPanel, botonAnterior, botonSiguiente) {
      var tabSeleccionado = tabPanel.items.indexOf(tabPanel.activeTab);
      if ('Siguiente' == tipoBoton) tabSeleccionado += 1;
      else tabSeleccionado -= 1;
      if (tabSeleccionado >= tabPanel.items.length) tabPanel.setActiveTab(tabPanel.items.length - 1);
      else {
        if (tabSeleccionado <= 0) tabPanel.setActiveTab(0);
        else tabPanel.setActiveTab(tabSeleccionado);
      }
    }

    function cCSeleccionarProductoTriggerField(el, trigger, tag) {
      cCBuscarProductoHidden.setValue(el.gridEditor.record.data.NumeroIndex.toString());
      switch (tag) {
        case "agregar":
          cCCrearProductoHidden.setValue(true);
          productosAgregarButton.fireEvent("click");
          break;
        case "seleccionar":
          cCCrearProductoHidden.setValue(false);
          cCBuscarProductoWindow.show();
          ccMiltipleProductoHidden.setValue('0');
          cCProductosGridPL.getColumnModel().setHidden(1, true);
          cCProductosGridPL.getColumnModel().setHidden(2, true);
          break;
      }
    };

    function cCSeleccionarProductoTriggerFieldCFDI40(el, trigger, tag) {
      cCBuscarProductoHidden.setValue(el.gridEditor.record.data.NumeroIndex.toString());
      switch (tag) {
        case "agregar":
          cCCrearProductoHidden.setValue(true);
          productosAgregarButton.fireEvent("click");
          break;
        case "seleccionar":
          cCCrearProductoHidden.setValue(false);
          cCBuscarProductoWindow.show();
          ccMiltipleProductoHidden.setValue('0');
          cCProductosGridPL.getColumnModel().setHidden(1, true);
          cCProductosGridPL.getColumnModel().setHidden(2, true);
          break;
      }
    };

    function cCActualizaGridProducto(indice, objProducto) {
      var storeConceptosGrid = cCConceptosGridPL.getStore();
      var conceptoIndice = storeConceptosGrid.find('NumeroIndex', indice);
      var concepto = storeConceptosGrid.getAt(conceptoIndice);
      concepto.data['Codigo'] = objProducto.Codigo;
      concepto.data['ClaveProdServ'] = objProducto.Codigo;
      concepto.data['Unidad'] = objProducto.UnidadNombre;
      concepto.data['Descripcion'] = objProducto.Descripcion;
      concepto.data['PrecioUnitario'] = objProducto.ValorUnitario;
      cCConceptosGridPL.getView().refresh();
      calculaTotales(true, true, true);
    }

    function cCActualizaGridProductocfdi40(indice, objProducto) {
      var storeConceptosGrid = GridPanelConceptosCFDI40.getStore();
      var conceptoIndice = storeConceptosGrid.find('NumeroIndex', indice);
      var concepto = storeConceptosGrid.getAt(conceptoIndice);
      concepto.data['Codigo'] = objProducto.Codigo;
      concepto.data['ClaveProdServ'] = objProducto.Codigo;
      concepto.data['Unidad'] = objProducto.UnidadNombre;
      concepto.data['Descripcion'] = objProducto.Descripcion;
      concepto.data['PrecioUnitario'] = objProducto.ValorUnitario;
      GridPanelConceptosCFDI40.getView().refresh();
      calculaTotales(true, true, true);
    }

    function cCActualizaGridProductoMultiple(objProducto) {
      var storeConceptosGrid = cCConceptosGridPL.getStore();
      var totalItem = storeConceptosGrid.recordType;
      var productoIndice = 0;
      for (productoIndice = 0; productoIndice <= objProducto.length - 1; productoIndice++) {
        var producto = objProducto[productoIndice];
        var nuevo = new totalItem({
          NumeroIndex: storeConceptosGrid.getCount() + 1,
          EsComentario: false,
          Codigo: producto.Codigo,
          Unidad: producto.UnidadNombre,
          Descripcion: producto.Descripcion,
          PrecioUnitario: producto.ValorUnitario,
          Cantidad: producto.Cantidad,
          Importe: 0,
          ExtraInfo: '[]',
          ExtraTipo: 0,
          Editable: true,
          Comp_Iedu: 0,
          ClaveProdServ: producto.ClaveProdServ,
          ClaveUnidad: producto.ClaveUnidad,
          Descuento: 0
        });
        storeConceptosGrid.add(nuevo);
        storeConceptosGrid.commitChanges();
      }
      cCConceptosGridPL.getView().refresh();
      calculaTotales(true, true, true);
    }
    //-------------------------------------------------------------------             
    // Filtros para buscar cfdi: Receptores
    //-------------------------------------------------------------------
    var seleccionarCfdiAplicaFiltroReceptores = function(field) {
      var store = seleccionarCfdiStore;
      store.suspendEvents();
      store.filterBy(seleccionarCfdiObtenerFiltroReceptores());
      store.resumeEvents();
      seleccionarCfdiReceptoresGridPL.getView().refresh(false);
    };
    var seleccionarCfdiLimpiarFiltroReceptores = function() {
      seleccionarCfdiRfcTF.reset();
      seleccionarCfdiNombreTF.reset();
      seleccionarCfdiCalleTF.reset();
      seleccionarCfdiNumExteriorTF.reset();
      seleccionarCfdiNumInteriorTF.reset();
      seleccionarCfdiColoniaTF.reset();
      seleccionarCfdiLocalidadTF.reset();
      seleccionarCfdiReferenciaTF.reset();
      seleccionarCfdiCodigoPostalTF.reset();
      seleccionarCfdiContactoPostalTF.reset();
      seleccionarCfdiCorreoTF.reset();
      seleccionarCfdiTelefonoTF.reset();
      seleccionarCfdiPaginaWebTF.reset();
      seleccionarCfdiFechaTF.reset();
      seleccionarCfdiPaisTF.reset();
      seleccionarCfdiEstadoTF.reset();
      seleccionarCfdiMunicipioTF.reset();
      seleccionarCfdiStore.clearFilter();
    }
    var filtroStringEncabezado = function(value, dataIndex, record) {
      var val = record.get(dataIndex);
      if (typeof val != "string") {
        return value.length == 0;
      }
      return val.toLowerCase().indexOf(value.toLowerCase()) > -1;
    };
    var seleccionarCfdiObtenerFiltroReceptores = function() {
      var f = [];
      //rfc
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiRfcTF.getValue(), "RFC", record);
        }
      });
      //nombre o razon social 
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiNombreTF.getValue(), "Nombre", record);
        }
      });
      //calle
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiCalleTF.getValue(), "Calle", record);
        }
      });
      //Numero exterior
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiNumExteriorTF.getValue(), "NumExterior", record);
        }
      });
      //Numero interiorts
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiNumInteriorTF.getValue(), "NumInterior", record);
        }
      });
      //Colonia
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiColoniaTF.getValue(), "Colonia", record);
        }
      });
      //Localidad
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiLocalidadTF.getValue(), "Localidad", record);
        }
      });
      //Referencia
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiReferenciaTF.getValue(), "Referencia", record);
        }
      });
      //Codigo Postal
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiCodigoPostalTF.getValue(), "CodigoPostal", record);
        }
      });
      //Contacto
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiContactoPostalTF.getValue(), "Contacto", record);
        }
      });
      //Correo electronico
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiCorreoTF.getValue(), "Correo", record);
        }
      });
      //Telefono
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiTelefonoTF.getValue(), "Telefono", record);
        }
      });
      //PaginaWeb
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiPaginaWebTF.getValue(), "PaginaWeb", record);
        }
      });
      //Fecha de r
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiFechaTF.getValue(), "Fec_Movto", record);
        }
      });
      //Pais  
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiPaisTF.getValue(), "Pais", record);
        }
      });
      //Estado
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiEstadoTF.getValue(), "Estado", record);
        }
      });
      //Municipio
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiMunicipioTF.getValue(), "Municipio", record);
        }
      });
      var len = f.length;
      return function(record) {
        for (var i = 0; i < len; i++) {
          if (!f[i].filter(record)) {
            return false;
          }
        }
        return true;
      };
    };
    //-------------------------------------------------------------------             
    // Filtros para buscar cfdi: Cfdi
    //-------------------------------------------------------------------
    var seleccionarCfdiAplicaFiltroCfdi = function(field) {
      var store = seleccionarCfdiGridPL.getStore();
      store.suspendEvents();
      store.filterBy(seleccionarCfdiObtenerFiltroCfdis());
      store.resumeEvents();
      seleccionarCfdiGridPL.getView().refresh(false);
    };
    var seleccionarCfdiLimpiarFiltroCfdis = function() {
      seleccionarCfdiVersionTF.reset();
      seleccionarCfdiSerieTF.reset();
      seleccionarCfdiFolioTF.reset();
      seleccionarCfdiUuidTF.reset();
      seleccionarCfdiNombreRTF.reset();
      seleccionarCfdiRfcReceptorTF.reset();
      seleccionarCfdiFechaEmisionTF.reset();
      seleccionarCfdiTotalTF.reset();
      seleccionarCfdiFechaTFDTF.reset();
      seleccionarCfdiMonedaTF.reset();
      seleccionarCfdiTipoDoctoTF.reset();
      seleccionarCfdiFormaPagoTF.reset();
      seleccionarCfdiExpEnTF.reset();
      seleccionarCfdiUsuarioTF.reset();
      seleccionarCfdiEstatusTF.reset();
      seleccionarCfdiGridPL.getStore().clearFilter();
    }
    var seleccionarCfdiObtenerFiltroCfdis = function() {
      var f = [];
      //version
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiVersionTF.getValue(), "Version", record);
        }
      });
      //rfc
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiSerieTF.getValue(), "Serie", record);
        }
      });
      //Folio
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiFolioTF.getValue(), "Folio", record);
        }
      });
      //Uuid
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiUuidTF.getValue(), "Uuid", record);
        }
      });
      //Nombre Receptor
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiNombreRTF.getValue(), "ReceptorNombre", record);
        }
      });
      //rfc receptor
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiRfcReceptorTF.getValue(), "ReceptorRFC", record);
        }
      });
      //Fecha de emision
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiFechaEmisionTF.getValue(), "FechaEmision", record);
        }
      });
      //Total
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiTotalTF.getValue(), "Total", record);
        }
      });
      //Fecha timbre
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiFechaTFDTF.getValue(), "FechaTimbre", record);
        }
      });
      //Moneda
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiMonedaTF.getValue(), "Moneda", record);
        }
      });
      //Tipo de documento
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiTipoDoctoTF.getValue(), "TipoCfdi", record);
        }
      });
      //Forma de pago
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiFormaPagoTF.getValue(), "FormaPago", record);
        }
      });
      //Expedido en 
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiExpEnTF.getValue(), "ExpEn", record);
        }
      });
      //Usuario
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiUsuarioTF.getValue(), "Usuario", record);
        }
      });
      //estatus
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(seleccionarCfdiEstatusTF.getValue(), "EstatusNombre", record);
        }
      });
      var len = f.length;
      return function(record) {
        for (var i = 0; i < len; i++) {
          if (!f[i].filter(record)) {
            return false;
          }
        }
        return true;
      };
    };
    //-------------------------------------------------------------------             
    // Filtros para buscar cfdi: Cfdi(CENACE)
    //-------------------------------------------------------------------     
    var CENACECfdiAplicaFiltroCfdi = function(field) {
      var store = CENACECfdiGridPL.getStore();
      store.suspendEvents();
      store.filterBy(CENACECfdiObtenerFiltroCfdis());
      store.resumeEvents();
      CENACECfdiGridPL.getView().refresh(false);
    };
    var CENACECfdiLimpiarFiltroCfdis = function() {
      C_CfdiVersionTF.reset();
      C_CfdiSerieTF.reset();
      C_CfdiFolioTF.reset();
      C_CfdiUuidTF.reset();
      C_CfdiNombreRTF.reset();
      C_CfdiRfcReceptorTF.reset();
      C_CfdiFechaEmisionTF.reset();
      C_CfdiTotalTF.reset();
      C_CfdiFechaTFDTF.reset();
      //                Ext.get("C_CfdiMonedaTF").reset();
      C_CfdiTipoDoctoTF.reset();
      C_CfdiFormaPagoTF.reset();
      // Ext.get("C_CfdiExpEnTF").reset();
      //Ext.get("C_CfdiUsuarioTF").reset();
      C_CfdiEstatusTF.reset();
      CENACECfdiGridPL.getStore().clearFilter();
    }
    var CENACECfdiObtenerFiltroCfdis = function() {
      var f = [];
      //version
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(C_CfdiVersionTF.getValue(), "Version", record);
        }
      });
      //rfc
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(C_CfdiSerieTF.getValue(), "Serie", record);
        }
      });
      //Folio
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(C_CfdiFolioTF.getValue(), "Folio", record);
        }
      });
      //Uuid
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(C_CfdiUuidTF.getValue(), "Uuid", record);
        }
      });
      //Nombre Receptor
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(C_CfdiNombreRTF.getValue(), "ReceptorNombre", record);
        }
      });
      //rfc receptor
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(C_CfdiRfcReceptorTF.getValue(), "ReceptorRFC", record);
        }
      });
      //Fecha de emision
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(C_CfdiFechaEmisionTF.getValue(), "FechaEmision", record);
        }
      });
      //Total
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(C_CfdiTotalTF.getValue(), "Total", record);
        }
      });
      //Fecha timbre
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(C_CfdiFechaTFDTF.getValue(), "FechaTimbre", record);
        }
      });
      //Moneda
      //                f.push({
      //                    filter: function (record) {                         
      //                        return filtroStringEncabezado(Ext.get("C_CfdiMonedaTF").getValue(), "Moneda", record);
      //                    }
      //                });
      //Tipo de documento
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(C_CfdiTipoDoctoTF.getValue(), "TipoCfdi", record);
        }
      });
      //Forma de pago
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(C_CfdiFormaPagoTF.getValue(), "FormaPago", record);
        }
      });
      //Expedido en 
      //                f.push({
      //                    filter: function (record) {                         
      //                        return filtroStringEncabezado(Ext.get("C_CfdiExpEnTF").getValue(), "ExpEn", record);
      //                    }
      //                });
      //                //Usuario
      //                f.push({
      //                    filter: function (record) {                         
      //                        return filtroStringEncabezado(Ext.get("C_CfdiUsuarioTF").getValue(), "Usuario", record);
      //                    }
      //                });
      //estatus
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(C_CfdiEstatusTF.getValue(), "EstatusNombre", record);
        }
      });
      var len = f.length;
      return function(record) {
        for (var i = 0; i < len; i++) {
          if (!f[i].filter(record)) {
            return false;
          }
        }
        return true;
      };
    };
    var filtroStringEncabezado = function(value, dataIndex, record) {
      var val = record.get(dataIndex);
      if (typeof val != "string") {
        return value.length == 0;
      }
      return val.toLowerCase().indexOf(value.toLowerCase()) > -1;
    };
    //-------------------------------------------------------------------             
    // Filtros para buscar cfdi: Receptor (en crear cfdi)
    //-------------------------------------------------------------------
    var cCBuscarReceptorAplicaFiltroReceptores = function(field) {
      var store = cCReceptoresGridPL.getStore();
      store.suspendEvents();
      store.filterBy(cCBuscarReceptorObtenerFiltroReceptores());
      store.resumeEvents();
      cCReceptoresGridPL.getView().refresh(false);
    };
    var cCBuscarReceptorLimpiarFiltroReceptores = function() {
      cCBuscarReceptorRfcTF.reset();
      cCBuscarReceptorCodigoTF.reset();
      cCBuscarReceptorNombreTF.reset();
      cCBuscarReceptorCalleTF.reset();
      cCBuscarReceptorNumExteriorTF.reset();
      cCBuscarReceptorNumInteriorTF.reset();
      cCBuscarReceptorColoniaTF.reset();
      cCBuscarReceptorLocalidadTF.reset();
      cCBuscarReceptorReferenciaTF.reset();
      cCBuscarReceptorCodigoPostalTF.reset();
      cCBuscarReceptorContactoPostalTF.reset();
      cCBuscarReceptorCorreoTF.reset();
      cCBuscarReceptorTelefonoTF.reset();
      cCBuscarReceptorPaginaWebTF.reset();
      cCBuscarReceptorFechaTF.reset();
      cCBuscarReceptorEstadoTF.reset();
      cCBuscarReceptorPaisTF.reset();
      cCBuscarReceptorMunicipioTF.reset();
      Ext.get("cCBuscarReceptorNumCuentaTF").reset();
      cCReceptoresGridPL.getStore().clearFilter();
    }
    var cCBuscarReceptorObtenerFiltroReceptores = function() {
      var f = [];
      //rfc
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorRfcTF.getValue(), "RFC", record);
        }
      });
      //nombre o razon social 
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorCodigoTF.getValue(), "Codigo", record);
        }
      });
      //nombre o razon social 
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorNombreTF.getValue(), "Nombre", record);
        }
      });
      //calle
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorCalleTF.getValue(), "Calle", record);
        }
      });
      //Numero exterior
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorNumExteriorTF.getValue(), "NumExterior", record);
        }
      });
      //Numero interiorts
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorNumInteriorTF.getValue(), "NumInterior", record);
        }
      });
      //Colonia
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorColoniaTF.getValue(), "Colonia", record);
        }
      });
      //Localidad
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorLocalidadTF.getValue(), "Localidad", record);
        }
      });
      //Referencia
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorReferenciaTF.getValue(), "Referencia", record);
        }
      });
      //Codigo Postal
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorCodigoPostalTF.getValue(), "CodigoPostal", record);
        }
      });
      //Contacto
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorContactoPostalTF.getValue(), "Contacto", record);
        }
      });
      //Correo electronico
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorCorreoTF.getValue(), "Correo", record);
        }
      });
      //Telefono
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorTelefonoTF.getValue(), "Telefono", record);
        }
      });
      //PaginaWeb
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorPaginaWebTF.getValue(), "PaginaWeb", record);
        }
      });
      //Fecha de r
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorFechaTF.getValue(), "Fec_Movto", record);
        }
      });
      //Pais 
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorPaisTF.getValue(), "Pais", record);
        }
      });
      //Estado
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorEstadoTF.getValue(), "Estado", record);
        }
      });
      //Municipio
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarReceptorMunicipioTF.getValue(), "Municipio", record);
        }
      });
      var len = f.length;
      return function(record) {
        for (var i = 0; i < len; i++) {
          if (!f[i].filter(record)) {
            return false;
          }
        }
        return true;
      };
    };
    //-------------------------------------------------------------------             
    // Filtros para buscar cfdi: Productos
    //-------------------------------------------------------------------
    var cCBuscarProductosAplicaFiltro = function(field) {
      var store = cCProductosStore;
      store.suspendEvents();
      store.filterBy(cCBuscarProductosObtenerFiltro());
      store.resumeEvents();
      cCProductosGridPL.getView().refresh(false);
    };
    var seleccionarProductoLimpiarFiltroProductos = function() {
      cCBuscarProductoCodigoTF.reset();
      cCBuscarProductoUnidadTF.reset();
      cCBuscarProductoDescripcionTF.reset();
      cCBuscarProductoValorUnitarioTF.reset();
      cCBuscarProductoFechaTF.reset();
      cCProductosStore.clearFilter();
    }
    var cCBuscarProductosObtenerFiltro = function() {
      var f = [];
      //Codigo
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarProductoCodigoTF.getValue(), "Codigo", record);
        }
      });
      //tipo 
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarProductoUnidadTF.getValue(), "UnidadNombre", record);
        }
      });
      //descripcion
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarProductoDescripcionTF.getValue(), "Descripcion", record);
        }
      });
      //valor unitario           
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarProductoValorUnitarioTF.getValue(), "ValorUnitario", record);
        }
      });
      //fecha           
      f.push({
        filter: function(record) {
          return filtroStringEncabezado(cCBuscarProductoFechaTF.getValue(), "Fec_Movto", record);
        }
      });
      var len = f.length;
      return function(record) {
        for (var i = 0; i < len; i++) {
          if (!f[i].filter(record)) {
            return false;
          }
        }
        return true;
      };
    };
  </script>
  <div id="txtwinSeleccionarCfdiCount_Container" style="display:inline;">
    <input type="hidden" size="20" autocomplete="off" id="txtwinSeleccionarCfdiCount" name="txtwinSeleccionarCfdiCount" class=" x-form-hidden x-form-field">
  </div>
  <div id="contratacionServiciosTipoTimbradoHidden_Container" style="display:inline;">
    <input type="hidden" size="20" autocomplete="off" id="contratacionServiciosTipoTimbradoHidden" name="contratacionServiciosTipoTimbradoHidden" class=" x-form-hidden x-form-field">
  </div>
  <div id="procesandoCfdiWindow_Content" class="x-hidden">
    <div id="creandoCfdiImage_Container" style="display:inline;">
      <img id="creandoCfdiImage" src="Imagenes/Cfdi/procesando.jpg" style="border: none;">
    </div>
  </div>
  <div id="gratuitoDesktopWindow_Content" class="x-hidden">
    <img id="gratuitoImage" src="Imagenes/Cfdi/creating_cfdiopt.png">
  </div>
  <div id="RutaPremiumOneHidden_Container" style="display:inline;">
    <input type="hidden" size="20" autocomplete="off" id="RutaPremiumOneHidden" name="RutaPremiumOneHidden" class=" x-form-hidden x-form-field">
  </div>
  <script type="text/javascript">
    function abrirFichaOpenPay() {
      var valor = document.getElementById("CompraFoliosePLigaOpenPayHidden").value;
      window.open(valor, '_blank');
      return false;
    }

    function abrirXML() {
      var valor = document.getElementById("CompraFoliosePXMLHidden").value;
      var nombreArchivo = document.getElementById("CompraFoliosePUUIDHidden").value;
      descargarArchivo(generarXml(valor), nombreArchivo + '.xml');
      return false;
    }

    function generarXml(datos) {
      var texto = [];
      texto.push(document.getElementById("CompraFoliosePXMLHidden").value);
      return new Blob(texto, {
        type: 'application/xml'
      });
    };

    function descargarArchivo(contenidoEnBlob, nombreArchivo) {
      var reader = new FileReader();
      reader.onload = function(event) {
        var save = document.createElement('a');
        save.href = event.target.result;
        save.target = '_blank';
        save.download = nombreArchivo || 'archivo.dat';
        var clicEvent = new MouseEvent('click', {
          'view': window,
          'bubbles': true,
          'cancelable': true
        });
        save.dispatchEvent(clicEvent);
        (window.URL || window.webkitURL).revokeObjectURL(save.href);
      };
      reader.readAsDataURL(contenidoEnBlob);
    };
  </script>
  <script type="text/javascript">
    function seleccionarProducto(v, p, record) {
      return (record.data.Tipo == 1 ? "Producto" : "Servicio");
    }

    function seleccionarCfdiEstatusRenderer(v, p, record) {
      return (record.data.Estatus == true ? "<span style='color:green'><strong>" + record.data.EstatusNombre + "</strong></span>" : "<span style='color:red'><strong>" + record.data.EstatusNombre + "</strong></span>");
    }

    function seleccionarCfdiCheckboxRenderer(v, p, record) {
      if (record.data.Estatus == false) return "";
      return '<div class="x-grid3-row-checker" />';
    };

    function seleccionarCfdiCancelarIndividualRenderer(grid, commands, record, row) {
      if ("cancelarCfdi" == commands.command) {
        if (record.data.Estatus == false) {
          commands.hidden = true;
        }
      }
      if ('bajarTxtCancelacion' == commands.command) {
        if ((record.data.Estatus == false) && (record.data.CanTxt == '1')) {
          commands.hidden = false;
        } else commands.hidden = true;
      }
      if ("bajarAcuseCancelacion" == commands.command) {
        if (record.data.Estatus != false) {
          commands.hidden = true;
        }
      }
      if ("invertirPagada" == commands.command) {
        commands.text = record.data.PagadaNombre;
      }
    };

    function contratacionServiciosEliminarCarrito(command, record) {
      Ext.net.DirectMethods.ctl00.contratacionServiciosEliminarCarrito(record.data.id_Servicio);
    }
  </script>
  <script type="text/javascript">
    var addTab = function(tabPL, id, url, titulo, setfocus) {
      var tab = tabPL.getComponent(id);
      if (!tab) {
        tab = tabPL.add({
          id: id,
          title: titulo,
          closable: true,
          autoLoad: {
            showMask: true,
            url: url,
            mode: "iframe",
            maskMsg: "Cargando ..."
          }
        });
      }
      if (setfocus) tabPL.setActiveTab(tab);
    }
  </script>
  <script type="text/javascript">
    var loadPage = function(tabPanel, node) {
      var tab = tabPL.getItem(node.id);
      if (!tab) {
        tab = tabPL.add({
          id: node.id,
          title: node.text,
          closable: true,
          autoLoad: {
            showMask: true,
            url: node.attributes.href,
            mode: "iframe",
            maskMsg: "Cargando ..."
          },
          listeners: {
            update: {
              fn: function(tab, cfg) {
                cfg.iframe.setHeight(cfg.iframe.getSize().height - 20);
              },
              scope: this,
              single: true
            }
          }
        });
      }
      tabPL.setActiveTab(tab);
    }
  </script>
  <script type="text/javascript">
    function propColor(a, b, c, d, e) {
      var cmbObj = Ext.getCmp("cb_" + c.id.replace("ppn_", ""));
      var rec = cmbObj.getStore().query("Propiedad", a, true);
      if (rec.length > 0) {
        if ('CL' == rec.items[0].data.Tipo.trim()) {
          if (null != b) {
            b.style = "width: 100%; background-color: " + a;
          }
          return a;
        }
      }
      return a;
    }
    ///Cambia los campos requeridos dependiendo de la version
    function eEmisorCambiaRequeridos() {
      var version = eEmVersionComboBox.value;
      if (3 == version || 4 == version) {
        eEmNombreEmTF.allowBlank = false;
        eEmCalleTF.allowBlank = false;
        eEmRegimenFiscalGridPL.hide();
      } else {
        eEmNombreEmTF.allowBlank = true;
        eEmCalleTF.allowBlank = true;
        eEmRegimenFiscalGridPL.show();
      }
      eEmTabInfoEmisorFormPL.getForm().isValid();
    }
    ///Cambia los campos requeridos dependiendo de la version
    function rCambiaRequeridos() {
      var version = rVersionComboBox.value;
      if (3 == version || 4 == version) {
        rNombreEmTF.allowBlank = false;
        rCalleTF.allowBlank = false;
        rCodigoPostalTF.allowBlank = false;
        municipiosComboBox.allowBlank = false;
        rRegimenFiscalGridPL.hide();
      } else {
        rNombreEmTF.allowBlank = true;
        rCalleTF.allowBlank = true;
        rCodigoPostalTF.allowBlank = true;
        municipiosComboBox.allowBlank = true;
        rRegimenFiscalGridPL.show();
      }
      rTabInfoEmisorFormPL.getForm().isValid();
      rTabRegimenFormPL.getForm().isValid();
    }
  </script>
  <script type="text/javascript">
    function CrearCfdiMensajeR() {
      Ext.Msg.show({
        title: "Sin Cliente",
        buttons: Ext.Msg.OK,
        msg: "Es necesario seleccionar un Cliente para cargar un CFDI."
      });
    }

    function preguntaLimpiar() {
      Ext.Msg.show({
        title: "Limpiar pantalla",
        buttons: Ext.Msg.YESNO,
        fn: limpiarPantalla,
        icon: Ext.Msg.QUESTION,
        msg: "¿ Desea limpiar la pantalla ? <BR/>Seleccione SI para limpiar la pantalla, de lo contrario seleccione NO para conservar los datos."
      });
    }

    function colapsarCFDI() {
      if ((false == winSeleccionarCfdi.hidden) && (true == winSeleccionarReceptorPL.collapsed) && (seleccionarCfdiFiltrosPL.collapsed)) {
        seleccionarCfdiFiltrosPL.un('collapse', colapsarCFDI);
        seleccionarCfdiFiltrosPL.show();
        setTimeout('seleccionarCfdiFiltrosPL.expand();', 200);
      }
    }

    function limpiarPantalla(btn) {
      if ('yes' == btn) {
        Ext.net.DirectMethods.ctl00.cCLimpiarPantallaCfdi({
          success: function(result) {
            Ext.Msg.notify("Limpiar pantalla", "La pantalla se limpió correctamente.");
          },
          eventMask: {
            showMask: true,
            minDelay: 500,
            msg: 'Limpiando la pantalla, por favor espere...'
          }
        });
      } else {
        Ext.Msg.notify("Reutilizar información", "El usuario reutilizará la informacíon de la pantalla.");
      }
    }

    function limpiarPantallaCFDI40(btn) {
      if ('yes' == btn) {
        Ext.net.DirectMethods.ctl00.cCLimpiarPantallaCfdi40({
          success: function(result) {
            Ext.Msg.notify("Limpiar pantalla", "La pantalla se limpió correctamente.");
          },
          eventMask: {
            showMask: true,
            minDelay: 500,
            msg: 'Limpiando la pantalla, por favor espere...'
          }
        });
      } else {
        Ext.Msg.notify("Reutilizar información", "El usuario reutilizará la informacíon de la pantalla.");
      }
    }
    var detalleActual = null;
    var infoAduaneraActual = null;
    var infoParteActual = null;
    var tipsCFDI = null;

    function ejecutaDetalleImpuestos() {
      if ('' == cCTiposCfdiComboBox.getValue()) {
        cCDetalleCk.setValue(false);
        alert('Seleccione un Tipo de Documento en el paso numero 4.');
      } else {
        cargaImpuestos(cCTiposCfdiComboBox.getStore().getAt(cCTiposCfdiComboBox.selectedIndexField.value), null, null, cCDetalleCk.getValue());
      }
    }

    function cargaImpuestos(record, descuento, motivoDescuento, mostrarDetalle) {
      if (null == descuento) descuento = 0;
      if (null == motivoDescuento) motivoDescuento = '';
      var gridTotales = totalGridPL;
      var store = gridTotales.getStore();
      store.clearData();
      var totalItem = store.recordType;
      var nuevo = new totalItem({
        Id_ImpuestosAplicables: -1,
        ImpuestoNombre: 'SUBTOTAL',
        Descuento: 'Motivo del descuento:',
        Importe: 0,
        TasaOCuota: 0,
        EfectoNombre: ''
      });
      store.add(nuevo);
      //            nuevo = new totalItem({
      //                Id_ImpuestosAplicables: 0,
      //                ImpuestoNombre: 'DESCUENTO',
      //                Descuento: motivoDescuento,
      //                Importe: descuento,
      //                Tasa: 0,
      //                EfectoNombre: ''
      //            });
      //            store.add(nuevo);
      //            var tipoIndex = 0;
      //            
      //            if (mostrarDetalle)
      //            {
      //                var traslados = false;
      //                for (tipoIndex = 0; tipoIndex <= tipsCFDI.length-1; tipoIndex++)
      //                {
      //                    if (tipsCFDI[tipoIndex].Id_TipoCFDI == record.data.Id_TipoCFDI)
      //                    {
      //                        if ('Traslado' == tipsCFDI[tipoIndex].EfectoNombre)
      //                        {
      //                            traslados = true;
      //                            nuevo = new totalItem({
      //                                Id_ImpuestosAplicables: tipsCFDI[tipoIndex].Id_ImpuestosAplicables,
      //                                ImpuestoNombre: tipsCFDI[tipoIndex].ImpuestoNombre,
      //                                Importe: 0,
      //                                Tasa: tipsCFDI[tipoIndex].Tasa,
      //                                EfectoNombre: tipsCFDI[tipoIndex].EfectoNombre
      //                            });
      //                            store.add(nuevo);
      //                        }
      //                    }
      //                }       
      //                
      //                if (traslados)
      //                {
      //                    nuevo = new totalItem({
      //                        Id_ImpuestosAplicables: -9999, 
      //                        ImpuestoNombre: 'Subtotal',
      //                        Importe: 0,
      //                        Tasa: 0,
      //                        EfectoNombre: ''
      //                    });
      //                    store.add(nuevo);
      //                }
      //                
      //                for (tipoIndex = 0; tipoIndex <= tipsCFDI.length-1; tipoIndex++)
      //                {
      //                    if (tipsCFDI[tipoIndex].Id_TipoCFDI == record.data.Id_TipoCFDI)
      //                    {
      //                        if ('Retenido' == tipsCFDI[tipoIndex].EfectoNombre)
      //                        {
      //                            nuevo = new totalItem({
      //                                Id_ImpuestosAplicables: tipsCFDI[tipoIndex].Id_ImpuestosAplicables,
      //                                ImpuestoNombre: tipsCFDI[tipoIndex].ImpuestoNombre,
      //                                Importe: 0,
      //                                Tasa: tipsCFDI[tipoIndex].Tasa,
      //                                EfectoNombre: tipsCFDI[tipoIndex].EfectoNombre
      //                            });
      //                            store.add(nuevo);
      //                        }
      //                    }
      //                }
      //            }
      //            else
      //            {
      //                for (tipoIndex = 0; tipoIndex <= tipsCFDI.length-1; tipoIndex++){
      //                    if (tipsCFDI[tipoIndex].Id_TipoCFDI == record.data.Id_TipoCFDI){
      //                    
      //                            nuevo = new totalItem({
      //                                Id_ImpuestosAplicables: tipsCFDI[tipoIndex].Id_ImpuestosAplicables,
      //                                ImpuestoNombre: tipsCFDI[tipoIndex].ImpuestoNombre,
      //                                Importe: 0,
      //                                Tasa: tipsCFDI[tipoIndex].Tasa,
      //                                EfectoNombre: tipsCFDI[tipoIndex].EfectoNombre
      //                            });
      //                            store.add(nuevo);
      //                    }
      //                }
      //            }
      nuevo = new totalItem({
        Id_ImpuestosAplicables: -2,
        ImpuestoNombre: 'TOTAL',
        Importe: 0,
        Tasa: 0,
        EfectoNombre: ''
      });
      store.add(nuevo);
      gridTotales.getView().refresh(false);
      calculaTotales(true, true, true);
    }

    function cargaImpuestos40(record, descuento, motivoDescuento, mostrarDetalle) {
      if (null == descuento) descuento = 0;
      if (null == motivoDescuento) motivoDescuento = '';
      var gridTotales = GridPanelTotalCFDI40;
      var store = gridTotales.getStore();
      store.clearData();
      var totalItem = store.recordType;
      var nuevo = new totalItem({
        Id_ImpuestosAplicables: -1,
        ImpuestoNombre: 'SUBTOTAL',
        Descuento: 'Motivo del descuento:',
        Importe: 0,
        TasaOCuota: 0,
        EfectoNombre: ''
      });
      store.add(nuevo);
      nuevo = new totalItem({
        Id_ImpuestosAplicables: -2,
        ImpuestoNombre: 'TOTAL',
        Importe: 0,
        Tasa: 0,
        EfectoNombre: ''
      });
      store.add(nuevo);
      gridTotales.getView().refresh(false);
      calculaTotalesCFDI40(true, true, true);
    }

    function verificaBotonEliminar(grid, commands, record, row) {
      if (false == record.data.Editable) commands.hidden = true;
      else
      if (record.data.Id_ImpuestosAplicables < 1) commands.hidden = true;
    }

    function verificaBotonEditarExtraInfo(grid, commands, record, row) {
      if (false == record.data.Editable) commands.hidden = true;
      else
      if (true == record.data.EsComentario) commands.hidden = true;
    }

    function verificaBotonEliminarConcepto(grid, commands, record, row) {
      if (false == record.data.Editable) commands.hidden = true;
    }

    function imprimePorcentaje(value, metadata, record) {
      switch (record.data.TipoFactor) {
        case "TASA": {
          return 'Tasa: ' + value + " %";
        }
        break;
        case "CUOTA": {
          return 'Cuota: ' + Ext.util.Format.usMoney(value);
        }
        break;
        case "EXENTO": {
          return "";
        }
        break;
      }
      return "";
    }

    function imprimeCantidad(value, metadata, record) {
      if (null != value)
        if ("" != value) return value;
        else return 1;
      else return 1;
    }

    function elipsisDescripcionConcepto(valorHtml) {
      var texto = Ext.util.Format.stripTags(valorHtml);
      if (texto.length > 200) return Ext.util.Format.substr(texto, 0, 200) + '...';
      else return texto;
    }

    function imprimeMonedaPrecioUnitario(value, metadata, record) {
      if (null != value) {
        var datos = value.toString();
        if ("" != datos) return Ext.util.Format.usMoney(datos);
        else return Ext.util.Format.usMoney(0);
      } else return Ext.util.Format.usMoney(0);
    }

    function imprimeMonedaDescuento(value, metadata, record) {
      if (null != value) {
        var datos = value.toString();
        if ("" != datos) return Ext.util.Format.usMoney(datos);
        else return Ext.util.Format.usMoney(0);
      } else return Ext.util.Format.usMoney(0);
    }

    function imprimeMonedaPrecioImporte(value, metadata, record) {
      if (null != value) {
        var datos = value.toString();
        if ("" != datos) return Ext.util.Format.usMoney(datos);
        else return Ext.util.Format.usMoney(0);
      } else return Ext.util.Format.usMoney(0);
    }

    function eliminarTotal(comando, record) {
      if ("EliminarImpuesto" == comando) {
        var preguntar = confirm('Quitar el impuesto: ' + record.data.ImpuestoNombre + ' (' + record.data.EfectoNombre + ') ?');
        if (preguntar) {
          var storeGrid = totalGridPL.getStore();
          storeGrid.remove(record);
          if (storeGrid.getCount() == 3) //3 por que es: Subtotal, descuento, total.
            alert("Este documento no tiene ningún impuesto.");
          calculaTotales(true, true, true);
        }
      }
    }

    function verificaCeldas(e) {
      //debugger;
      return null == e.record.data.Tasa;
      if (false == e.record.data.Editable) return false;
      else {
        if (3 == e.column) {
          if (0 == e.row) return false;
          else return true;
        } else {
          if (1 == e.column) {
            return (0 == e.record.data.Id_ImpuestosAplicables);
          } else if (2 == e.column) {
            return (-9999 == e.record.data.Id_ImpuestosAplicables);
          } else if (4 == e.column) {
            return ((e.record.data.Id_ImpuestosAplicables > 0) && ('Traslado' == e.record.data.EfectoNombre));
          } else {
            return (e.record.data.Id_ImpuestosAplicables > 0);
          }
        }
      }
    }

    function verificaCeldaEditable(e) {
      //debugger;
      if (e.column >= 5 && e.column <= 7) return e.record.data.Editable;
      else
      if (e.column == 1) return e.record.data.Editable;
      else return true;
    }

    function validaDescuento(roweditor) {
      if ("Importe" == roweditor.field) {
        if (1 == roweditor.row) {
          var subtotal = 0;
          var storeGrid = cCConceptosGridPL.getStore();
          for (var i = 0; i < storeGrid.getCount(); i++) {
            subtotal += storeGrid.getAt(i).data['Importe'];
          }
          if (roweditor.value >= subtotal) {
            alert('El descuento no puede ser igual o mayor al subtotal.');
            return false;
          }
        }
      }
      return true;
    }

    function guardarDetalleImpuestos() {
      //debugger;
      var winDetalleImpuestos = Ext.getCmp('winDetalleImpuestos');
      var impuestosTrasladosGridPL = winDetalleImpuestos.findById('impuestosTrasladosGridPL');
      var storeimpuestosTrasladosGrid = impuestosTrasladosGridPL.getStore();
      var NumImpuestosTraslados = storeimpuestosTrasladosGrid.getCount();
      if (0 != NumImpuestosTraslados) {
        var TotalImpuestosTraslados = 0;
        for (var i = 0; i < NumImpuestosTraslados; i++) {
          TotalImpuestosTraslados += storeimpuestosTrasladosGrid.getAt(i).data['Importe'];
        }
        detalleActual.data.ImpuestosTraslados = Ext.encode(storeimpuestosTrasladosGrid.getRecordsValues());
        detalleActual.data.TotalImpuestosTraslados = TotalImpuestosTraslados;
      } else {
        detalleActual.data.ImpuestosTraslados = null;
        detalleActual.data.TotalImpuestosTraslados = null;
      }
      var impuestosRetenidosGridPL = winDetalleImpuestos.findById('impuestosRetenidosGridPL');
      var storeimpuestosRetenidosGrid = impuestosRetenidosGridPL.getStore();
      var NumImpuestosRetenidos = storeimpuestosRetenidosGrid.getCount();
      if (0 != NumImpuestosRetenidos) {
        var TotalImpuestosRetenidos = 0;
        for (var i = 0; i < NumImpuestosRetenidos; i++) {
          TotalImpuestosRetenidos += storeimpuestosRetenidosGrid.getAt(i).data['Importe'];
        }
        detalleActual.data.ImpuestosRetenidos = Ext.encode(storeimpuestosRetenidosGrid.getRecordsValues());
        detalleActual.data.TotalImpuestosRetenidos = TotalImpuestosRetenidos;
      } else {
        detalleActual.data.ImpuestosRetenidos = null;
        detalleActual.data.TotalImpuestosRetenidos = null;
      }
      calculaTotales(true, true, true);
      winDetalleImpuestos.hide();
    }

    function guardarDetalleImpuestosCFDI40() {
      //debugger;
      var winDetalleImpuestos = Ext.getCmp('DesktopWindowDetalleImpuestosCFDI40');
      var impuestosTrasladosGridPL = winDetalleImpuestos.findById('impuestosTrasladosGridPLCFDI40');
      var storeimpuestosTrasladosGrid = impuestosTrasladosGridPL.getStore();
      var NumImpuestosTraslados = storeimpuestosTrasladosGrid.getCount();
      if (0 != NumImpuestosTraslados) {
        var TotalImpuestosTraslados = 0;
        for (var i = 0; i < NumImpuestosTraslados; i++) {
          TotalImpuestosTraslados += storeimpuestosTrasladosGrid.getAt(i).data['Importe'];
        }
        detalleActual.data.ImpuestosTraslados = Ext.encode(storeimpuestosTrasladosGrid.getRecordsValues());
        detalleActual.data.TotalImpuestosTraslados = TotalImpuestosTraslados;
      } else {
        detalleActual.data.ImpuestosTraslados = null;
        detalleActual.data.TotalImpuestosTraslados = null;
      }
      var impuestosRetenidosGridPL = winDetalleImpuestos.findById('impuestosRetenidosGridPLCFDI40');
      var storeimpuestosRetenidosGrid = impuestosRetenidosGridPL.getStore();
      var NumImpuestosRetenidos = storeimpuestosRetenidosGrid.getCount();
      if (0 != NumImpuestosRetenidos) {
        var TotalImpuestosRetenidos = 0;
        for (var i = 0; i < NumImpuestosRetenidos; i++) {
          TotalImpuestosRetenidos += storeimpuestosRetenidosGrid.getAt(i).data['Importe'];
        }
        detalleActual.data.ImpuestosRetenidos = Ext.encode(storeimpuestosRetenidosGrid.getRecordsValues());
        detalleActual.data.TotalImpuestosRetenidos = TotalImpuestosRetenidos;
      } else {
        detalleActual.data.ImpuestosRetenidos = null;
        detalleActual.data.TotalImpuestosRetenidos = null;
      }
      calculaTotalesCFDI40(true, true, true);
      winDetalleImpuestos.hide();
    }

    function guardarDetalle() {
      var winDetalle = Ext.getCmp('detallesWindow');
      var aduanasTab = winDetalle.findById('aduanasTab');
      var selectedIndexTabAduanas = aduanasTab.items.indexOf(aduanasTab.getActiveTab());
      var esValido = false;
      switch (selectedIndexTabAduanas) {
        case 0:
          esValido = validaStoreAduanas();
          break;
        case 1:
          esValido = validaStoreAduanas();
          break;
        case 2:
          esValido = true;
          break;
        case 3:
          esValido = true;
          break;
        case 4:
          esValido = true;
          break;
      }
      if (esValido) {
        var info = "";
        switch (selectedIndexTabAduanas) {
          case 0:
            var aduanasGridPanel = winDetalle.findById('aduanasGridPL');
            var storeAduanaGrid = aduanasGridPL.getStore();
            if (null != storeAduanaGrid.getRecordsValues()) info = Ext.encode(storeAduanaGrid.getRecordsValues());
            break;
          case 1:
            var partesGridPanel = winDetalle.findById('partesGridPL');
            var storeParteGrid = partesGridPL.getStore();
            if (null != storeParteGrid.getRecordsValues()) info = Ext.encode(storeParteGrid.getRecordsValues());
            break;
          case 2:
            info = winDetalle.findById('predialTextArea').getValue()
            break;
          case 3:
            var impuestosTrasladosGridPanel = winDetalle.findById('impuestosTrasladosGridPL');
            var storeimpuestosTrasladosGrid = impuestosTrasladosGridPL.getStore();
            if (null != storeimpuestosTrasladosGrid.getRecordsValues()) info = Ext.encode(storeimpuestosTrasladosGrid.getRecordsValues());
            break;
          case 4:
            var impuestosRetenidosGridPanel = winDetalle.findById('impuestosRetenidosGridPL');
            var storeimpuestosRetenidosGrid = impuestosRetenidosGridPL.getStore();
            if (null != storeimpuestosRetenidosGrid.getRecordsValues()) info = Ext.encode(storeimpuestosRetenidosGrid.getRecordsValues());
            break;
        }
        //Setea la info
        detalleActual.data.ExtraInfo = info;
        detalleActual.data.ExtraTipo = selectedIndexTabAduanas;
        detalleActual = null;
        infoAduaneraActual = null;
        winDetalle.hide();
      }
    }

    function guardarDetalleCFDI40() {
      var winDetalle = Ext.getCmp('detallesWindowCFDI40');
      var aduanasTab = winDetalle.findById('aduanasTabCFDI40');
      var selectedIndexTabAduanas = aduanasTab.items.indexOf(aduanasTab.getActiveTab());
      var esValido = false;
      switch (selectedIndexTabAduanas) {
        case 0:
          esValido = validaStoreAduanasCFDI40();
          break;
        case 1:
          esValido = validaStoreAduanasCFDI40();
          break;
        case 2:
          esValido = true;
          break;
        case 3:
          esValido = true;
          break;
        case 4:
          esValido = true;
          break;
        case 5:
          esValido = true;
          break;
      }
      if (esValido) {
        var info = "";
        switch (selectedIndexTabAduanas) {
          case 0:
            var aduanasGridPanel = winDetalle.findById('aduanasGridPLCFDI40');
            var storeAduanaGrid = aduanasGridPLCFDI40.getStore();
            if (null != storeAduanaGrid.getRecordsValues()) info = Ext.encode(storeAduanaGrid.getRecordsValues());
            break;
          case 1:
            var partesGridPanel = winDetalle.findById('partesGridPLCFDI40');
            var storeParteGrid = partesGridPLCFDI40.getStore();
            if (null != storeParteGrid.getRecordsValues()) info = Ext.encode(storeParteGrid.getRecordsValues());
            break;
          case 2:
            info = winDetalle.findById('RFCCuentaTerceros').getValue();
            info = info + "|" + winDetalle.findById('RSCuentaTerceros').getValue();
            info = info + "|" + winDetalle.findById('CPCuentaTerceros').getValue();
            info = info + "|" + winDetalle.findById('CBRegFisCuentaTerceros').getValue();
            break;
          case 3:
            info = winDetalle.findById('predialTextAreaCFDI40').getValue();
            break;
          case 4:
            var impuestosTrasladosGridPanel = winDetalle.findById('impuestosTrasladosGridPLCFDI40');
            var storeimpuestosTrasladosGrid = impuestosTrasladosGridPLCFDI40.getStore();
            if (null != storeimpuestosTrasladosGrid.getRecordsValues()) info = Ext.encode(storeimpuestosTrasladosGrid.getRecordsValues());
            break;
          case 5:
            var impuestosRetenidosGridPanel = winDetalle.findById('impuestosRetenidosGridPLCFDI40');
            var storeimpuestosRetenidosGrid = impuestosRetenidosGridPLCFDI40.getStore();
            if (null != storeimpuestosRetenidosGrid.getRecordsValues()) info = Ext.encode(storeimpuestosRetenidosGrid.getRecordsValues());
            break;
        }
        //Setea la info
        detalleActual.data.ExtraInfo = info;
        detalleActual.data.ExtraTipo = selectedIndexTabAduanas;
        detalleActual = null;
        infoAduaneraActual = null;
        winDetalle.hide();
      }
    }

    function guardarInfoAduaneraDetalle() {
      if (validaParteStoreAduanas()) {
        var win = Ext.getCmp('infoParteAduaneraWindow');
        var infoAduaneraParteGridPanel = win.findById('infoAduaneraParteGridPL');
        var storeAduanaGrid = infoAduaneraParteGridPL.getStore();
        if (null != storeAduanaGrid.getRecordsValues()) infoParteActual.data.InformacionAduaneraExtra = Ext.encode(storeAduanaGrid.getRecordsValues());
        infoAduaneraParteGridPL.getView().refresh(false);
        infoParteActual = null;
        win.hide();
      }
    }

    function guardarInfoAduaneraDetalleCFDI40() {
      if (validaParteStoreAduanasCFDI40()) {
        var win = Ext.getCmp('DesktopWindowAduanasDeLaParteCFDI40');
        var infoAduaneraParteGridPanel = win.findById('infoAduaneraParteGridPLCFDI40');
        var storeAduanaGrid = infoAduaneraParteGridPLCFDI40.getStore();
        if (null != storeAduanaGrid.getRecordsValues()) infoParteActual.data.InformacionAduaneraExtra = Ext.encode(storeAduanaGrid.getRecordsValues());
        infoAduaneraParteGridPLCFDI40.getView().refresh(false);
        infoParteActual = null;
        win.hide();
      }
    }

    function eliminarParteInfoAduanera(comando, record) {
      if ("eliminarParteInfoAduanera" == comando) {
        var preguntar = confirm('Eliminar la aduana: ' + record.data.NumeroIndex + ' ?');
        if (preguntar) {
          var storeGrid = infoAduaneraParteGridPL.getStore();
          storeGrid.remove(record);
          for (var i = 0; i < storeGrid.getCount(); i++) {
            storeGrid.getAt(i).data['NumeroIndex'] = i + 1;
          }
          infoAduaneraParteGridPL.getView().refresh();
        }
      }
    }

    function eliminarParteInfoAduaneraCFDI40(comando, record) {
      if ("eliminarParteInfoAduanera" == comando) {
        var preguntar = confirm('Eliminar la aduana: ' + record.data.NumeroIndex + ' ?');
        if (preguntar) {
          var storeGrid = infoAduaneraParteGridPLCFDI40.getStore();
          storeGrid.remove(record);
          for (var i = 0; i < storeGrid.getCount(); i++) {
            storeGrid.getAt(i).data['NumeroIndex'] = i + 1;
          }
          infoAduaneraParteGridPLCFDI40.getView().refresh();
        }
      }
    }

    function CalculaImpuesto(record) {
      //debugger;
      switch (record.data.TipoFactor) {
        case 'TASA': {
          record.data.Importe = redondear(record.data.CantidadBase * (record.data.TasaOCuota / 100.0));
        }
        break;
        case 'CUOTA': {
          record.data.Importe = redondear(record.data.TasaOCuota);
        }
        break;
        case 'EXENTO': {
          record.data.Importe = 0;
          record.data.TasaOCuota = 0;
        }
        break;
      }
    }

    function CalculaImpuestoCFDI40(record) {
      //debugger;
      switch (record.data.TipoFactor) {
        case 'TASA': {
          record.data.Importe = redondear(record.data.CantidadBase * (record.data.TasaOCuota / 100.0));
        }
        break;
        case 'CUOTA': {
          record.data.Importe = redondear(record.data.TasaOCuota);
        }
        break;
        case 'EXENTO': {
          record.data.Importe = 0;
          record.data.TasaOCuota = 0;
        }
        break;
      }
    }

    function ejecutarComandoConceptos(comando, record) {
      detalleActual = record;
      //debugger;
      if ('EditarDetalleImpuestos' == comando) {
        document.getElementById("ValorImporteProducto_Hidden").value = Ext.decode(detalleActual.data.Importe) - Ext.decode(detalleActual.data.Descuento);
        var winDetalleImpuestos = Ext.getCmp('winDetalleImpuestos');
        var impuestosTrasladosGridPL = winDetalleImpuestos.findById('impuestosTrasladosGridPL');
        var storeimpuestosTrasladosGrid = impuestosTrasladosGridPL.getStore();
        storeimpuestosTrasladosGrid.clearData();
        if (
          (null != detalleActual.data.ImpuestosTraslados) && ('' != detalleActual.data.ImpuestosTraslados)) {
          var impuestosTraslados = Ext.decode(detalleActual.data.ImpuestosTraslados);
          var item = storeimpuestosTrasladosGrid.recordType;
          for (var indice = 0; indice <= impuestosTraslados.length - 1; indice++) {
            var nuevo = new item({
              NumeroIndex: impuestosTraslados[indice].NumeroIndex,
              CantidadBase: impuestosTraslados[indice].CantidadBase,
              TipoImpuesto: impuestosTraslados[indice].TipoImpuesto,
              TipoFactor: impuestosTraslados[indice].TipoFactor,
              TasaOCuota: impuestosTraslados[indice].TasaOCuota,
              Importe: impuestosTraslados[indice].Importe
            });
            storeimpuestosTrasladosGrid.add(nuevo);
          }
          storeimpuestosTrasladosGrid.commitChanges();
        }
        impuestosTrasladosGridPL.getView().refresh(false);
        var impuestosRetenidosGridPL = winDetalleImpuestos.findById('impuestosRetenidosGridPL');
        var storeimpuestosRetenidosGrid = impuestosRetenidosGridPL.getStore();
        storeimpuestosRetenidosGrid.clearData();
        if (
          (null != detalleActual.data.ImpuestosRetenidos) && ('' != detalleActual.data.ImpuestosRetenidos)) {
          var impuestosRetenidos = Ext.decode(detalleActual.data.ImpuestosRetenidos);
          var item = storeimpuestosRetenidosGrid.recordType;
          for (var indice = 0; indice <= impuestosRetenidos.length - 1; indice++) {
            var nuevo = new item({
              NumeroIndex: impuestosRetenidos[indice].NumeroIndex,
              CantidadBase: impuestosRetenidos[indice].CantidadBase,
              TipoImpuesto: impuestosRetenidos[indice].TipoImpuesto,
              TipoFactor: impuestosRetenidos[indice].TipoFactor,
              TasaOCuota: impuestosRetenidos[indice].TasaOCuota,
              Importe: impuestosRetenidos[indice].Importe
            });
            storeimpuestosRetenidosGrid.add(nuevo);
          }
          storeimpuestosRetenidosGrid.commitChanges();
        }
        impuestosRetenidosGridPL.getView().refresh(false);
        winDetalleImpuestos.show();
      } else if ('EditarDetalles' == comando) {
        var winDetalle = Ext.getCmp('detallesWindow');
        if (null != winDetalle) {
          var aduanasTab = winDetalle.findById('aduanasTab');
          var selectedIndexTabAduanas = aduanasTab.items.indexOf(aduanasTab.getActiveTab());
          var aduanasGridPanel = winDetalle.findById('aduanasGridPL');
          var storeAduanaGrid = aduanasGridPL.getStore();
          storeAduanaGrid.clearData();
          var partesGridPanel = winDetalle.findById('partesGridPL');
          var storeParteGrid = partesGridPL.getStore();
          storeParteGrid.clearData();
          winDetalle.findById('predialTextArea').setValue("");
          winDetalle.setTitle('Detalle del concepto #' + detalleActual.data.NumeroIndex);
          switch (detalleActual.data.ExtraTipo) {
            case 0:
              //ADUANAS
              var aduanas = null;
              if (null != detalleActual.data.ExtraInfo && '' != detalleActual.data.ExtraInfo) {
                aduanas = Ext.decode(detalleActual.data.ExtraInfo);
                var conceptoItem = storeAduanaGrid.recordType;
                var indice = 0;
                for (indice = 0; indice <= aduanas.length - 1; indice++) {
                  var nuevo = new conceptoItem({
                    NumeroIndex: aduanas[indice].NumeroIndex,
                    //Aduana: aduanas[indice].Aduana,
                    //FechaEntrega: new Date(aduanas[indice].FechaEntrega.replace(/-/g, "/").replace(/T00:00:00/g, "")),
                    Numero: aduanas[indice].Numero
                  });
                  storeAduanaGrid.add(nuevo);
                }
                storeAduanaGrid.commitChanges();
              }
              break;
            case 1:
              //PARTES
              var partes = null;
              if (null != detalleActual.data.ExtraInfo && '' != detalleActual.data.ExtraInfo) {
                partes = Ext.decode(detalleActual.data.ExtraInfo);
                var conceptoItem = storeParteGrid.recordType;
                var indice = 0;
                for (indice = 0; indice <= partes.length - 1; indice++) {
                  var nuevo = new conceptoItem({
                    NumeroIndex: partes[indice].NumeroIndex,
                    Cantidad: partes[indice].Cantidad,
                    Unidad: partes[indice].Unidad,
                    Codigo: partes[indice].Codigo,
                    Descripcion: partes[indice].Descripcion,
                    ValorUnitario: partes[indice].ValorUnitario,
                    Importe: partes[indice].Importe,
                    InformacionAduaneraExtra: partes[indice].InformacionAduaneraExtra
                  });
                  storeParteGrid.add(nuevo);
                }
                storeParteGrid.commitChanges();
              }
              break;
            case 2:
              //PREDIAL
              winDetalle.findById('predialTextArea').setValue(detalleActual.data.ExtraInfo);
              winDetalle.setTitle('Partida  #' + detalleActual.data.NumeroIndex + ': Aduanas, Partes y Numero Predial');
              break;
            case 3:
              //Traslados en Conceptos
              var impuestosTraslados = null;
              if (null != detalleActual.data.ExtraInfo && '' != detalleActual.data.ExtraInfo) {
                impuestosTraslados = Ext.decode(detalleActual.data.ExtraInfo);
                var conceptoItem = storeimpuestosTrasladosGrid.recordType;
                var indice = 0;
                for (indice = 0; indice <= impuestosTraslados.length - 1; indice++) {
                  var nuevo = new conceptoItem({
                    NumeroIndex: impuestosTraslados[indice].NumeroIndex,
                    CantidadBase: impuestosTraslados[indice].CantidadBase,
                    TipoImpuesto: impuestosTraslados[indice].TipoImpuesto,
                    TipoFactor: impuestosTraslados[indice].TipoFactor,
                    TasaOCuota: impuestosTraslados[indice].TasaOCuota,
                    Importe: impuestosTraslados[indice].Importe
                  });
                  storeimpuestosTrasladosGrid.add(nuevo);
                }
                storeimpuestosTrasladosGrid.commitChanges();
              }
              break;
            case 4:
              //Traslados en Conceptos
              var impuestosRetenidos = null;
              if (null != detalleActual.data.ExtraInfo && '' != detalleActual.data.ExtraInfo) {
                impuestosRetenidos = Ext.decode(detalleActual.data.ExtraInfo);
                var conceptoItem = storeimpuestosRetenidosGrid.recordType;
                var indice = 0;
                for (indice = 0; indice <= impuestosRetenidos.length - 1; indice++) {
                  var nuevo = new conceptoItem({
                    NumeroIndex: impuestosRetenidos[indice].NumeroIndex,
                    CantidadBase: impuestosRetenidos[indice].CantidadBase,
                    TipoImpuesto: impuestosRetenidos[indice].TipoImpuesto,
                    TipoFactor: impuestosRetenidos[indice].TipoFactor,
                    TasaOCuota: impuestosRetenidos[indice].TasaOCuota,
                    Importe: impuestosRetenidos[indice].Importe
                  });
                  storeimpuestosRetenidosGrid.add(nuevo);
                }
                storeimpuestosRetenidosGrid.commitChanges();
              }
              break;
          }
          aduanasGridPL.getView().refresh(false);
          partesGridPL.getView().refresh(false);
          winDetalle.show();
        }
      } else {
        if ("EliminarConcepto" == comando) {
          var preguntar = confirm('¿ Eliminar el concepto: ' + detalleActual.data.NumeroIndex + ' ?');
          if (preguntar) {
            var storeGrid = cCConceptosGridPL.getStore();
            storeGrid.remove(record);
            calculaTotales(true, true, true);
          }
        } else {
          if ("LimpiarConcepto" == comando) {
            var preguntar = confirm('¿ Limpiar el concepto: ' + detalleActual.data.NumeroIndex + ' ?');
            if (preguntar) {
              record.data.Codigo = '';
              record.data.Unidad = '';
              record.data.Descripcion = '';
              record.data.PrecioUnitario = '';
              record.data.Cantidad = '';
              record.data.Importe = '';
              record.data.ExtraInfo = '';
              record.data.ExtraTipo = 1;
              record.data.Editable = true;
              calculaTotales(true, true, true);
            }
          } else {
            if ("Agregar_Comp_Iedu" == comando) {
              cIeduPL.autoLoad.params["NumeroIndex"] = record.data.NumeroIndex;
              if (null != record.data.Comp_Iedu && "" != record.data.Comp_Iedu && "[]" != record.data.Comp_Iedu) {
                var r = Ext.decode(record.data.Comp_Iedu);
                cIeduPL.autoLoad.params["Autorizacion"] = r[0].Autorizacion;
                cIeduPL.autoLoad.params["Curp"] = r[0].Curp;
                cIeduPL.autoLoad.params["NivelEducativo"] = r[0].NivelEducativo;
                cIeduPL.autoLoad.params["Nombre"] = r[0].Nombre;
                cIeduPL.autoLoad.params["RFC"] = r[0].Rfc;
                cIeduPL.autoLoad.params["Version"] = r[0].Version;
                cIeduPL.autoLoad.params["Incluir"] = r[0].Incluir;
              } else {
                cIeduPL.autoLoad.params["Autorizacion"] = '';
                cIeduPL.autoLoad.params["Curp"] = '';
                cIeduPL.autoLoad.params["NivelEducativo"] = 'Preescolar';
                cIeduPL.autoLoad.params["Nombre"] = '';
                cIeduPL.autoLoad.params["RFC"] = '';
                cIeduPL.autoLoad.params["Incluir"] = 'false';
              }
              cIeduWindow.show();
              Ext.net.DirectMethods.ctl00.abreComplementoIedu();
            }
          }
        }
      }
      return true;
    }

    function ejecutarComandoConceptosCFDI40(comando, record) {
      detalleActual = record;
      //debugger;
      if ('EditarDetalleImpuestos' == comando) {
        document.getElementById("ValorImporteProducto_HiddenCFDI40").value = Ext.decode(detalleActual.data.Importe) - Ext.decode(detalleActual.data.Descuento);
        var winDetalleImpuestos = Ext.getCmp('DesktopWindowDetalleImpuestosCFDI40');
        var impuestosTrasladosGridPL = winDetalleImpuestos.findById('impuestosTrasladosGridPLCFDI40');
        var storeimpuestosTrasladosGrid = impuestosTrasladosGridPLCFDI40.getStore();
        storeimpuestosTrasladosGrid.clearData();
        if (
          (null != detalleActual.data.ImpuestosTraslados) && ('' != detalleActual.data.ImpuestosTraslados)) {
          var impuestosTraslados = Ext.decode(detalleActual.data.ImpuestosTraslados);
          var item = storeimpuestosTrasladosGrid.recordType;
          for (var indice = 0; indice <= impuestosTraslados.length - 1; indice++) {
            var nuevo = new item({
              NumeroIndex: impuestosTraslados[indice].NumeroIndex,
              CantidadBase: impuestosTraslados[indice].CantidadBase,
              TipoImpuesto: impuestosTraslados[indice].TipoImpuesto,
              TipoFactor: impuestosTraslados[indice].TipoFactor,
              TasaOCuota: impuestosTraslados[indice].TasaOCuota,
              Importe: impuestosTraslados[indice].Importe
            });
            storeimpuestosTrasladosGrid.add(nuevo);
          }
          storeimpuestosTrasladosGrid.commitChanges();
        }
        impuestosTrasladosGridPLCFDI40.getView().refresh(false);
        var impuestosRetenidosGridPL = winDetalleImpuestos.findById('impuestosRetenidosGridPLCFDI40');
        var storeimpuestosRetenidosGrid = impuestosRetenidosGridPLCFDI40.getStore();
        storeimpuestosRetenidosGrid.clearData();
        if (
          (null != detalleActual.data.ImpuestosRetenidos) && ('' != detalleActual.data.ImpuestosRetenidos)) {
          var impuestosRetenidos = Ext.decode(detalleActual.data.ImpuestosRetenidos);
          var item = storeimpuestosRetenidosGrid.recordType;
          for (var indice = 0; indice <= impuestosRetenidos.length - 1; indice++) {
            var nuevo = new item({
              NumeroIndex: impuestosRetenidos[indice].NumeroIndex,
              CantidadBase: impuestosRetenidos[indice].CantidadBase,
              TipoImpuesto: impuestosRetenidos[indice].TipoImpuesto,
              TipoFactor: impuestosRetenidos[indice].TipoFactor,
              TasaOCuota: impuestosRetenidos[indice].TasaOCuota,
              Importe: impuestosRetenidos[indice].Importe
            });
            storeimpuestosRetenidosGrid.add(nuevo);
          }
          storeimpuestosRetenidosGrid.commitChanges();
        }
        impuestosRetenidosGridPLCFDI40.getView().refresh(false);
        winDetalleImpuestos.show();
      } else if ('EditarDetalles' == comando) {
        var winDetalle = Ext.getCmp('detallesWindowCFDI40');
        if (null != winDetalle) {
          var aduanasTab = winDetalle.findById('aduanasTabCFDI40');
          var selectedIndexTabAduanas = aduanasTab.items.indexOf(aduanasTab.getActiveTab());
          var aduanasGridPanel = winDetalle.findById('aduanasGridPLCFDI40');
          var storeAduanaGrid = aduanasGridPLCFDI40.getStore();
          storeAduanaGrid.clearData();
          var partesGridPanel = winDetalle.findById('partesGridPLCFDI40');
          var storeParteGrid = partesGridPLCFDI40.getStore();
          storeParteGrid.clearData();
          winDetalle.findById('predialTextAreaCFDI40').setValue("");
          winDetalle.setTitle('Detalle del concepto #' + detalleActual.data.NumeroIndex);
          switch (detalleActual.data.ExtraTipo) {
            case 0:
              //ADUANAS
              var aduanas = null;
              if (null != detalleActual.data.ExtraInfo && '' != detalleActual.data.ExtraInfo) {
                aduanas = Ext.decode(detalleActual.data.ExtraInfo);
                var conceptoItem = storeAduanaGrid.recordType;
                var indice = 0;
                for (indice = 0; indice <= aduanas.length - 1; indice++) {
                  var nuevo = new conceptoItem({
                    NumeroIndex: aduanas[indice].NumeroIndex,
                    Numero: aduanas[indice].Numero
                  });
                  storeAduanaGrid.add(nuevo);
                }
                storeAduanaGrid.commitChanges();
              }
              break;
            case 1:
              //PARTES
              var partes = null;
              if (null != detalleActual.data.ExtraInfo && '' != detalleActual.data.ExtraInfo) {
                partes = Ext.decode(detalleActual.data.ExtraInfo);
                var conceptoItem = storeParteGrid.recordType;
                var indice = 0;
                for (indice = 0; indice <= partes.length - 1; indice++) {
                  var nuevo = new conceptoItem({
                    NumeroIndex: partes[indice].NumeroIndex,
                    Cantidad: partes[indice].Cantidad,
                    Unidad: partes[indice].Unidad,
                    Codigo: partes[indice].Codigo,
                    Descripcion: partes[indice].Descripcion,
                    ValorUnitario: partes[indice].ValorUnitario,
                    Importe: partes[indice].Importe,
                    InformacionAduaneraExtra: partes[indice].InformacionAduaneraExtra
                  });
                  storeParteGrid.add(nuevo);
                }
                storeParteGrid.commitChanges();
              }
              break;
            case 2:
              //winDetalle.findById('RFCCuentaTerceros').setValue(detalleActual.data.ExtraInfo);
              break;
            case 3:
              //PREDIAL
              winDetalle.findById('predialTextAreaCFDI40').setValue(detalleActual.data.ExtraInfo);
              winDetalle.setTitle('Partida  #' + detalleActual.data.NumeroIndex + ': Aduanas, Partes y Numero Predial');
              break;
            case 4:
              //Traslados en Conceptos
              var impuestosTraslados = null;
              if (null != detalleActual.data.ExtraInfo && '' != detalleActual.data.ExtraInfo) {
                impuestosTraslados = Ext.decode(detalleActual.data.ExtraInfo);
                var conceptoItem = storeimpuestosTrasladosGrid.recordType;
                var indice = 0;
                for (indice = 0; indice <= impuestosTraslados.length - 1; indice++) {
                  var nuevo = new conceptoItem({
                    NumeroIndex: impuestosTraslados[indice].NumeroIndex,
                    CantidadBase: impuestosTraslados[indice].CantidadBase,
                    TipoImpuesto: impuestosTraslados[indice].TipoImpuesto,
                    TipoFactor: impuestosTraslados[indice].TipoFactor,
                    TasaOCuota: impuestosTraslados[indice].TasaOCuota,
                    Importe: impuestosTraslados[indice].Importe
                  });
                  storeimpuestosTrasladosGrid.add(nuevo);
                }
                storeimpuestosTrasladosGrid.commitChanges();
              }
              break;
            case 5:
              //Traslados en Conceptos
              var impuestosRetenidos = null;
              if (null != detalleActual.data.ExtraInfo && '' != detalleActual.data.ExtraInfo) {
                impuestosRetenidos = Ext.decode(detalleActual.data.ExtraInfo);
                var conceptoItem = storeimpuestosRetenidosGrid.recordType;
                var indice = 0;
                for (indice = 0; indice <= impuestosRetenidos.length - 1; indice++) {
                  var nuevo = new conceptoItem({
                    NumeroIndex: impuestosRetenidos[indice].NumeroIndex,
                    CantidadBase: impuestosRetenidos[indice].CantidadBase,
                    TipoImpuesto: impuestosRetenidos[indice].TipoImpuesto,
                    TipoFactor: impuestosRetenidos[indice].TipoFactor,
                    TasaOCuota: impuestosRetenidos[indice].TasaOCuota,
                    Importe: impuestosRetenidos[indice].Importe
                  });
                  storeimpuestosRetenidosGrid.add(nuevo);
                }
                storeimpuestosRetenidosGrid.commitChanges();
              }
              break;
          }
          aduanasGridPLCFDI40.getView().refresh(false);
          partesGridPLCFDI40.getView().refresh(false);
          detallesWindowCFDI40.show();
        }
      } else {
        if ("EliminarConcepto" == comando) {
          var preguntar = confirm('¿ Eliminar el concepto: ' + detalleActual.data.NumeroIndex + ' ?');
          if (preguntar) {
            var storeGrid = GridPanelConceptosCFDI40.getStore();
            storeGrid.remove(record);
            calculaTotalesCFDI40(true, true, true);
          }
        } else {
          if ("LimpiarConcepto" == comando) {
            var preguntar = confirm('¿ Limpiar el concepto: ' + detalleActual.data.NumeroIndex + ' ?');
            if (preguntar) {
              record.data.Codigo = '';
              record.data.Unidad = '';
              record.data.Descripcion = '';
              record.data.PrecioUnitario = '';
              record.data.Cantidad = '';
              record.data.Importe = '';
              record.data.ExtraInfo = '';
              record.data.ExtraTipo = 1;
              record.data.Editable = true;
              calculaTotalesCFDI40(true, true, true);
            }
          } else {
            if ("Agregar_Comp_Iedu" == comando) {
              cIeduPL.autoLoad.params["NumeroIndex"] = record.data.NumeroIndex;
              if (null != record.data.Comp_Iedu && "" != record.data.Comp_Iedu && "[]" != record.data.Comp_Iedu) {
                var r = Ext.decode(record.data.Comp_Iedu);
                cIeduPL.autoLoad.params["Autorizacion"] = r[0].Autorizacion;
                cIeduPL.autoLoad.params["Curp"] = r[0].Curp;
                cIeduPL.autoLoad.params["NivelEducativo"] = r[0].NivelEducativo;
                cIeduPL.autoLoad.params["Nombre"] = r[0].Nombre;
                cIeduPL.autoLoad.params["RFC"] = r[0].Rfc;
                cIeduPL.autoLoad.params["Version"] = r[0].Version;
                cIeduPL.autoLoad.params["Incluir"] = r[0].Incluir;
              } else {
                cIeduPL.autoLoad.params["Autorizacion"] = '';
                cIeduPL.autoLoad.params["Curp"] = '';
                cIeduPL.autoLoad.params["NivelEducativo"] = 'Preescolar';
                cIeduPL.autoLoad.params["Nombre"] = '';
                cIeduPL.autoLoad.params["RFC"] = '';
                cIeduPL.autoLoad.params["Incluir"] = 'false';
              }
              cIeduWindow.show();
              Ext.net.DirectMethods.ctl00.abreComplementoIedu();
            }
          }
        }
      }
      return true;
    }

    function eliminarInfoAduanera(comando, record) {
      if ("EliminarAduana" == comando) {
        var preguntar = confirm('Eliminar la aduana: ' + detalleActual.data.NumeroIndex + ' ?');
        if (preguntar) {
          var storeGrid = aduanasGridPL.getStore();
          storeGrid.remove(record);
          for (var i = 0; i < storeGrid.getCount(); i++) {
            storeGrid.getAt(i).data['NumeroIndex'] = i + 1;
          }
          aduanasGridPL.getView().refresh();
        }
      }
    }

    function eliminarInfoAduaneraCFDI40(comando, record) {
      if ("EliminarAduana" == comando) {
        var preguntar = confirm('Eliminar la aduana: ' + detalleActual.data.NumeroIndex + ' ?');
        if (preguntar) {
          var storeGrid = aduanasGridPLCFDI40.getStore();
          storeGrid.remove(record);
          for (var i = 0; i < storeGrid.getCount(); i++) {
            storeGrid.getAt(i).data['NumeroIndex'] = i + 1;
          }
          aduanasGridPLCFDI40.getView().refresh();
        }
      }
    }

    function ejecutaComandoParte(comando, record) {
      infoParteActual = record;
      if ('mostrarParteInfoAduanera' == comando) {
        var winDetalleInfo = Ext.getCmp('infoParteAduaneraWindow');
        winDetalleInfo.setTitle('Parte  #' + infoParteActual.data.NumeroIndex + ': Aduanas');
        if (null != winDetalleInfo) {
          var detalles = null;
          var infoAduaneraParteGridPanel = winDetalleInfo.findById('infoAduaneraParteGridPL');
          var storeAduanaGrid = infoAduaneraParteGridPL.getStore();
          storeAduanaGrid.clearData();
          if (null != infoParteActual.data.InformacionAduaneraExtra && '' != infoParteActual.data.InformacionAduaneraExtra) {
            detalles = Ext.decode(infoParteActual.data.InformacionAduaneraExtra);
            var conceptoItem = storeAduanaGrid.recordType;
            var indice = 0;
            for (indice = 0; indice <= detalles.length - 1; indice++) {
              var nuevo = new conceptoItem({
                NumeroIndex: detalles[indice].NumeroIndex,
                Aduana: detalles[indice].Aduana,
                FechaEntrega: new Date(detalles[indice].FechaEntrega.replace(/-/g, "/").replace(/T00:00:00/g, "")),
                Numero: detalles[indice].Numero
              });
              storeAduanaGrid.add(nuevo);
            }
            storeAduanaGrid.commitChanges();
          }
          infoAduaneraParteGridPL.getView().refresh(false);
          winDetalleInfo.show();
        }
      } else {
        if ("eliminarParte" == comando) {
          var preguntar = confirm('Eliminar la parte numero ' + infoParteActual.data.NumeroIndex + ' ?');
          if (preguntar) {
            var storeGrid = partesGridPL.getStore();
            storeGrid.remove(record);
            for (var i = 0; i < storeGrid.getCount(); i++) {
              storeGrid.getAt(i).data['NumeroIndex'] = i + 1;
            }
            partesGridPL.getView().refresh();
          }
        }
      }
    }

    function ejecutaComandoParteCFDI40(comando, record) {
      infoParteActual = record;
      if ('mostrarParteInfoAduanera' == comando) {
        var winDetalleInfo = Ext.getCmp('DesktopWindowAduanasDeLaParteCFDI40');
        winDetalleInfo.setTitle('Parte  #' + infoParteActual.data.NumeroIndex + ': Aduanas');
        if (null != winDetalleInfo) {
          var detalles = null;
          var infoAduaneraParteGridPanel = winDetalleInfo.findById('infoAduaneraParteGridPLCFDI40');
          var storeAduanaGrid = infoAduaneraParteGridPLCFDI40.getStore();
          storeAduanaGrid.clearData();
          if (null != infoParteActual.data.InformacionAduaneraExtra && '' != infoParteActual.data.InformacionAduaneraExtra) {
            detalles = Ext.decode(infoParteActual.data.InformacionAduaneraExtra);
            var conceptoItem = storeAduanaGrid.recordType;
            var indice = 0;
            for (indice = 0; indice <= detalles.length - 1; indice++) {
              var nuevo = new conceptoItem({
                NumeroIndex: detalles[indice].NumeroIndex,
                Aduana: detalles[indice].Aduana,
                FechaEntrega: new Date(detalles[indice].FechaEntrega.replace(/-/g, "/").replace(/T00:00:00/g, "")),
                Numero: detalles[indice].Numero
              });
              storeAduanaGrid.add(nuevo);
            }
            storeAduanaGrid.commitChanges();
          }
          infoAduaneraParteGridPLCFDI40.getView().refresh(false);
          winDetalleInfo.show();
        }
      } else {
        if ("eliminarParte" == comando) {
          var preguntar = confirm('Eliminar la parte numero ' + infoParteActual.data.NumeroIndex + ' ?');
          if (preguntar) {
            var storeGrid = partesGridPLCFDI40.getStore();
            storeGrid.remove(record);
            for (var i = 0; i < storeGrid.getCount(); i++) {
              storeGrid.getAt(i).data['NumeroIndex'] = i + 1;
            }
            partesGridPLCFDI40.getView().refresh();
          }
        }
      }
    }

    function agregaParteAduana() {
      if (validaParteStoreAduanas()) {
        var conceptoItem = infoAduaneraParteGridPL.getStore().recordType;
        var nuevo = new conceptoItem({
          NumeroIndex: infoAduaneraParteGridPL.getStore().getCount() + 1,
          Aduana: '',
          FechaEntrega: null,
          Numero: ''
        });
        infoAduaneraParteGridPL.getStore().add(nuevo);
        infoAduaneraParteGridPL.startEditing(infoAduaneraParteGridPL.getStore().getCount() - 1, 1);
      }
    }

    function agregaParteAduanaCFDI40() {
      if (validaParteStoreAduanasCFDI40()) {
        var conceptoItem = infoAduaneraParteGridPLCFDI40.getStore().recordType;
        var nuevo = new conceptoItem({
          NumeroIndex: infoAduaneraParteGridPLCFDI40.getStore().getCount() + 1,
          Aduana: '',
          FechaEntrega: null,
          Numero: ''
        });
        infoAduaneraParteGridPLCFDI40.getStore().add(nuevo);
        infoAduaneraParteGridPLCFDI40.startEditing(infoAduaneraParteGridPLCFDI40.getStore().getCount() - 1, 1);
      }
    }

    function validaParteStoreAduanas() {
      var valido = true;
      var storeGrid = infoAduaneraParteGridPL.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if (null == storeGrid.getAt(i).data['Aduana'] || '' == storeGrid.getAt(i).data['Aduana']) {
          valido = false;
          infoAduaneraParteGridPL.startEditing(i, 1);
          break;
        }
        if (null == storeGrid.getAt(i).data['FechaEntrega']) {
          valido = false;
          infoAduaneraParteGridPL.startEditing(i, 2);
          break;
        }
        if (null == storeGrid.getAt(i).data['Numero'] || '' == storeGrid.getAt(i).data['Numero']) {
          valido = false;
          infoAduaneraParteGridPL.startEditing(i, 3);
          break;
        }
      }
      return valido;
    }

    function validaParteStoreAduanasCFDI40() {
      var valido = true;
      var storeGrid = infoAduaneraParteGridPLCFDI40.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if (null == storeGrid.getAt(i).data['Aduana'] || '' == storeGrid.getAt(i).data['Aduana']) {
          valido = false;
          infoAduaneraParteGridPLCFDI40.startEditing(i, 1);
          break;
        }
        if (null == storeGrid.getAt(i).data['FechaEntrega']) {
          valido = false;
          infoAduaneraParteGridPLCFDI40.startEditing(i, 2);
          break;
        }
        if (null == storeGrid.getAt(i).data['Numero'] || '' == storeGrid.getAt(i).data['Numero']) {
          valido = false;
          infoAduaneraParteGridPLCFDI40.startEditing(i, 3);
          break;
        }
      }
      return valido;
    }

    function eEmisorValidaRegimenStore() {
      var valido = true;
      var storeGrid = eEmRegimenFiscalGridPL.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if ('' == storeGrid.getAt(i).data['Descripcion'].trim()) {
          valido = false;
          eEmRegimenFiscalGridPL.startEditing(i, 1);
          break;
        }
      }
      return valido;
    }

    function eEmisorAgregarRegimenFiscalEditor() {
      if (eEmisorValidaRegimenStore()) {
        var conceptoItem = eEmRegimenFiscalGridPL.getStore().recordType;
        var nuevo = new conceptoItem({
          NumeroIndex: eEmRegimenFiscalGridPL.getStore().getCount() + 1,
          Descripcion: ''
        });
        eEmRegimenFiscalGridPL.getStore().add(nuevo);
        eEmRegimenFiscalGridPL.startEditing(eEmRegimenFiscalGridPL.getStore().getCount() - 1, 1);
      }
    }

    function agregaConcepto() {
      if (validaStore(false)) {
        var conceptoItem = cCConceptosGridPL.getStore().recordType;
        var nuevo = new conceptoItem({
          NumeroIndex: cCConceptosGridPL.getStore().getCount() + 1,
          EsComentario: false,
          Codigo: '',
          Unidad: '',
          Descripcion: '',
          Descuento: 0,
          PrecioUnitario: 0,
          Cantidad: 1,
          Importe: 0,
          ExtraInfo: '[]',
          ExtraTipo: 0,
          Editable: true
        });
        cCConceptosGridPL.getStore().add(nuevo);
        cCConceptosGridPL.startEditing(cCConceptosGridPL.getStore().getCount() - 1, 2);
      }
    }

    function agregaConceptoCFDI40() {
      if (validaStoreCFDI40(false)) {
        var conceptoItem = GridPanelConceptosCFDI40.getStore().recordType;
        var nuevo = new conceptoItem({
          NumeroIndex: GridPanelConceptosCFDI40.getStore().getCount() + 1,
          EsComentario: false,
          Codigo: '84111506',
          Unidad: 'ACT',
          Descripcion: 'Pago',
          Descuento: 0,
          PrecioUnitario: 0,
          Cantidad: 1,
          Importe: 0,
          ExtraInfo: '[]',
          ExtraTipo: 0,
          Editable: true,
          ObjImpuesto: '01'
        });
        GridPanelConceptosCFDI40.getStore().add(nuevo);
        GridPanelConceptosCFDI40.startEditing(GridPanelConceptosCFDI40.getStore().getCount() - 1, 2);
      }
    }

    function agregaConceptoDePago() {
      if (validaStore(false)) {
        var conceptoItem = cCConceptosGridPL.getStore().recordType;
        var nuevo = new conceptoItem({
          NumeroIndex: cCConceptosGridPL.getStore().getCount() + 1,
          EsComentario: false,
          Codigo: '84111506',
          Unidad: 'ACT',
          Descripcion: 'Pago',
          Descuento: 0,
          PrecioUnitario: 0,
          Cantidad: 1,
          Importe: 0,
          ExtraInfo: '[]',
          ExtraTipo: 0,
          Editable: true
        });
        cCConceptosGridPL.getStore().add(nuevo);
        cCConceptosGridPL.startEditing(cCConceptosGridPL.getStore().getCount() - 1, 2);
      }
    }

    function actualizaTotalComplementoImpLocal(subtotal, total) {
      if ('undefined' != typeof(tabImpuestosLoc) && null != tabImpuestosLoc) {
        total = tabImpuestosLoc.getBody().reCalculaTotales(subtotal, total);
      }
      return total;
    }

    function actualizaTotalComplementoImpLocalCFDI40(subtotal, total) {
      if ('undefined' != typeof(tabImpuestosLoc) && null != tabImpuestosLoc) {
        total = tabImpuestosLoc.getBody().reCalculaTotalesCFDI40(subtotal, total);
      }
      return total;
    }

    function reCalculaTotales(columaEdit) {
      calculaTotales(true, true, true);
      return;
      var gridTotales = totalGridPL;
      if (store.getAt(1).data['Importe'] == "") {
        store.getAt(1).data['Importe'] = 0;
      }
      if (1 == columaEdit.row) {
        calculaTotales(false, true, true);
      } else {
        if (((gridTotales.getStore().getCount() - 1) == columaEdit.row) && ('TOTAL' == columaEdit.record.data.ImpuestoNombre)) {
          cCTotalTF.setValue(convertirNumLetras(redondear(columaEdit.record.data.Importe)));
        } else {
          if (4 == columaEdit.column) {
            var mensajeError = "";
            var subtotal = 0;
            var subtotalReal = 0;
            var total = 0;
            var descuento = 0;
            var importeIEPS = 0;
            var impuestosTraslados = 0;
            var impuestosRetenidos = 0;
            //Grid conceptos
            var storeGrid = cCConceptosGridPL.getStore();
            var store = gridTotales.getStore();
            subtotal = store.getAt(0).data['Importe'];
            descuento = store.getAt(1).data['Importe'];
            if (descuento > subtotal) {
              store.getAt(1).data['Importe'] = 0;
              descuento = 0;
              mensajeError = "El descuento se asigno a 0 por que el descuento era mayor que el subtotal.";
            }
            //Asigna el subtotal
            subtotalReal = subtotal = (subtotal - descuento);
            //calculo IEPS para sumarlo al subtotal
            for (var i = 2; i <= store.getCount() - 1; i++) {
              if (store.getAt(i).data['Id_ImpuestosAplicables'] > 0) {
                if ('Traslado' == store.getAt(i).data['EfectoNombre']) {
                  if ('IEPS' == store.getAt(i).data['ImpuestoNombre']) {
                    if (columaEdit.row == i) store.getAt(i).data['Importe'] = (subtotalReal * (store.getAt(i).data['Tasa'] / 100));
                    importeIEPS += store.getAt(i).data['Importe'];
                  }
                }
              }
            }
            for (var i = 2; i <= store.getCount() - 1; i++) {
              if (store.getAt(i).data['Id_ImpuestosAplicables'] > 0) {
                if ('Traslado' == store.getAt(i).data['EfectoNombre']) {
                  if ('IEPS' != store.getAt(i).data['ImpuestoNombre']) {
                    if (columaEdit.row == i) store.getAt(i).data['Importe'] = subtotalReal * (store.getAt(i).data['Tasa'] / 100);
                    impuestosTraslados += store.getAt(i).data['Importe'];
                  }
                } else {
                  if (columaEdit.row == i) store.getAt(i).data['Importe'] = subtotalReal * (store.getAt(i).data['Tasa'] / 100);
                  impuestosRetenidos += store.getAt(i).data['Importe'];
                }
              }
            }
            //recalcula el total total
            total = subtotalReal + importeIEPS + impuestosTraslados - impuestosRetenidos;
            //aplica el complemento de impuestos locales
            total = actualizaTotalComplementoImpLocal(subtotalReal, total);
            store.getAt(store.getCount() - 1).data['Importe'] = total;
            gridTotales.getView().refresh(false);
            cCTotalTF.setValue(convertirNumLetras(redondear(total)));
            if ("" != mensajeError) {
              alert(mensajeError);
            }
          } else {
            sumaTotales();
          }
        }
      }
    }

    function reCalculaTotalesCFDI40(columaEdit) {
      calculaTotalesCFDI40(true, true, true);
      return;
      var gridTotales = GridPanelTotalCFDI40;
      if (store.getAt(1).data['Importe'] == "") {
        store.getAt(1).data['Importe'] = 0;
      }
      if (1 == columaEdit.row) {
        calculaTotalesCFDI40(false, true, true);
      } else {
        if (((gridTotales.getStore().getCount() - 1) == columaEdit.row) && ('TOTAL' == columaEdit.record.data.ImpuestoNombre)) {
          TSCantidadLetraCFDI40.setValue(convertirNumLetras(redondear(columaEdit.record.data.Importe)));
        } else {
          if (4 == columaEdit.column) {
            var mensajeError = "";
            var subtotal = 0;
            var subtotalReal = 0;
            var total = 0;
            var descuento = 0;
            var importeIEPS = 0;
            var impuestosTraslados = 0;
            var impuestosRetenidos = 0;
            //Grid conceptos
            var storeGrid = GridPanelConceptosCFDI40.getStore();
            var store = gridTotales.getStore();
            subtotal = store.getAt(0).data['Importe'];
            descuento = store.getAt(1).data['Importe'];
            if (descuento > subtotal) {
              store.getAt(1).data['Importe'] = 0;
              descuento = 0;
              mensajeError = "El descuento se asigno a 0 por que el descuento era mayor que el subtotal.";
            }
            //Asigna el subtotal
            subtotalReal = subtotal = (subtotal - descuento);
            //calculo IEPS para sumarlo al subtotal
            for (var i = 2; i <= store.getCount() - 1; i++) {
              if (store.getAt(i).data['Id_ImpuestosAplicables'] > 0) {
                if ('Traslado' == store.getAt(i).data['EfectoNombre']) {
                  if ('IEPS' == store.getAt(i).data['ImpuestoNombre']) {
                    if (columaEdit.row == i) store.getAt(i).data['Importe'] = (subtotalReal * (store.getAt(i).data['Tasa'] / 100));
                    importeIEPS += store.getAt(i).data['Importe'];
                  }
                }
              }
            }
            for (var i = 2; i <= store.getCount() - 1; i++) {
              if (store.getAt(i).data['Id_ImpuestosAplicables'] > 0) {
                if ('Traslado' == store.getAt(i).data['EfectoNombre']) {
                  if ('IEPS' != store.getAt(i).data['ImpuestoNombre']) {
                    if (columaEdit.row == i) store.getAt(i).data['Importe'] = subtotalReal * (store.getAt(i).data['Tasa'] / 100);
                    impuestosTraslados += store.getAt(i).data['Importe'];
                  }
                } else {
                  if (columaEdit.row == i) store.getAt(i).data['Importe'] = subtotalReal * (store.getAt(i).data['Tasa'] / 100);
                  impuestosRetenidos += store.getAt(i).data['Importe'];
                }
              }
            }
            //recalcula el total total
            total = subtotalReal + importeIEPS + impuestosTraslados - impuestosRetenidos;
            //aplica el complemento de impuestos locales
            total = actualizaTotalComplementoImpLocalCFDI40(subtotalReal, total);
            store.getAt(store.getCount() - 1).data['Importe'] = total;
            gridTotales.getView().refresh(false);
            TSCantidadLetraCFDI40.setValue(convertirNumLetras(redondear(total)));
            if ("" != mensajeError) {
              alert(mensajeError);
            }
          } else {
            sumaTotalesCFDI40();
          }
        }
      }
    }

    function determinaCalculoTotales(columnaEdit) {
      calculaTotales(true, true, true);
    }

    function determinaCalculoTotalesCFDI40(columnaEdit) {
      calculaTotalesCFDI40(true, true, true);
    }

    function calculaTotales(actualizaConceptos, actualizaImpuestos, aplicarImpuestoLocal) {
      //debugger;
      var mensajeError = "";
      var subtotal = 0;
      var subtotalReal = 0;
      var total = 0;
      var descuento = 0;
      var impuestosTraslados = 0;
      var impuestosRetenidos = 0;
      //Suma (Cantidad * Importe)
      var storeGrid = cCConceptosGridPL.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        storeGrid.getAt(i).data['NumeroIndex'] = i + 1;
        if ((null != storeGrid.getAt(i).data['PrecioUnitario'] && storeGrid.getAt(i).data['PrecioUnitario'].toString().length > 0) && (null != storeGrid.getAt(i).data['Cantidad'] && storeGrid.getAt(i).data['Cantidad'].toString().length > 0)) {
          if (actualizaConceptos) storeGrid.getAt(i).data['Importe'] = parseFloat(storeGrid.getAt(i).data['PrecioUnitario']) * parseFloat(storeGrid.getAt(i).data['Cantidad']);
          if (false == storeGrid.getAt(i).data['EsComentario']) {
            subtotal += parseFloat(storeGrid.getAt(i).data['Importe']);
            if (storeGrid.getAt(i).data['Descuento'] == "") {
              storeGrid.getAt(i).data['Descuento'] = 0;
            }
            descuento += parseFloat(storeGrid.getAt(i).data['Descuento']);
            if (null != storeGrid.getAt(i).data['TotalImpuestosTraslados']) {
              impuestosTraslados += parseFloat(storeGrid.getAt(i).data['TotalImpuestosTraslados']);
            }
            if (null != storeGrid.getAt(i).data['TotalImpuestosRetenidos']) {
              impuestosRetenidos += parseFloat(storeGrid.getAt(i).data['TotalImpuestosRetenidos']);
            }
          }
          subtotal = redondear(subtotal);
        } else {
          if (actualizaConceptos) storeGrid.getAt(i).data['Importe'] = null;
        }
      }
      cCConceptosGridPL.getView().refresh();
      //debugger;
      subtotalReal = (subtotal - descuento);
      total = subtotalReal + impuestosTraslados - impuestosRetenidos;
      if (aplicarImpuestoLocal) {
        total = actualizaTotalComplementoImpLocal(subtotalReal, total);
      }
      var gridTotales = totalGridPL;
      var store = gridTotales.getStore();
      var clsTotal = store.recordType;
      store.clearData();
      {
        var nuevo = new clsTotal({
          Id_ImpuestosAplicables: store.getCount(),
          Descuento: "",
          ImpuestoNombre: "Subtotal",
          Importe: subtotal,
          TipoFactor: null,
          TasaOCuota: null,
          EfectoNombre: "",
          Editable: false
        });
        store.add(nuevo);
      }
      if (0 != descuento) {
        var nuevo = new clsTotal({
          Id_ImpuestosAplicables: store.getCount(),
          Descuento: "",
          ImpuestoNombre: "Descuento",
          Importe: descuento,
          TipoFactor: null,
          TasaOCuota: null,
          EfectoNombre: "",
          Editable: false
        });
        store.add(nuevo);
      }
      var cCDetalleCk = Ext.getCmp('cCDetalleCk');
      if (true == cCDetalleCk.getValue()) {
        var arrTraslados = {};
        var arrRetenidos = {};
        for (var i = 0; i < storeGrid.getCount(); i++) {
          var impuestosTraslados = Ext.decode(storeGrid.getAt(i).data['ImpuestosTraslados']);
          for (var indice = 0; indice <= impuestosTraslados.length - 1; indice++) {
            var key = impuestosTraslados[indice].TipoImpuesto + impuestosTraslados[indice].TipoFactor + impuestosTraslados[indice].TasaOCuota;
            var ant = arrTraslados[key];
            if (null == ant) {
              var nuevo = new clsTotal({
                Id_ImpuestosAplicables: store.getCount(),
                Descuento: "",
                ImpuestoNombre: impuestosTraslados[indice].TipoImpuesto,
                Importe: impuestosTraslados[indice].Importe,
                TipoFactor: impuestosTraslados[indice].TipoFactor,
                TasaOCuota: impuestosTraslados[indice].TasaOCuota,
                EfectoNombre: "Traslado",
                Editable: false
              });
              arrTraslados[key] = nuevo;
            } else {
              ant.data.Importe = ant.data.Importe + impuestosTraslados[indice].Importe;
            }
          }
          var impuestosRetenidos = Ext.decode(storeGrid.getAt(i).data['ImpuestosRetenidos']);
          for (var indice = 0; indice <= impuestosRetenidos.length - 1; indice++) {
            var key = impuestosRetenidos[indice].TipoImpuesto + impuestosRetenidos[indice].TipoFactor + impuestosRetenidos[indice].TasaOCuota;
            var ant = arrRetenidos[key];
            if (null == ant) {
              var nuevo = new clsTotal({
                Id_ImpuestosAplicables: store.getCount(),
                Descuento: "",
                ImpuestoNombre: impuestosRetenidos[indice].TipoImpuesto,
                Importe: impuestosRetenidos[indice].Importe,
                TipoFactor: impuestosRetenidos[indice].TipoFactor,
                TasaOCuota: impuestosRetenidos[indice].TasaOCuota,
                EfectoNombre: "Retenido",
                Editable: false
              });
              arrRetenidos[key] = nuevo;
            } else {
              ant.data.Importe = ant.data.Importe + impuestosRetenidos[indice].Importe;
            }
          }
        }
        for (var key in arrTraslados) {
          store.add(arrTraslados[key]);
        }
        for (var key in arrRetenidos) {
          store.add(arrRetenidos[key]);
        }
      } else {
        if (0 != impuestosTraslados) {
          var nuevo = new clsTotal({
            Id_ImpuestosAplicables: store.getCount(),
            Descuento: "",
            ImpuestoNombre: "Imp. Trasladados",
            Importe: impuestosTraslados,
            TipoFactor: null,
            TasaOCuota: null,
            EfectoNombre: "",
            Editable: false
          });
          store.add(nuevo);
        }
        if (0 != impuestosRetenidos) {
          var nuevo = new clsTotal({
            Id_ImpuestosAplicables: store.getCount(),
            Descuento: "",
            ImpuestoNombre: "Imp. Retenidos",
            Importe: impuestosRetenidos,
            TipoFactor: null,
            TasaOCuota: null,
            EfectoNombre: "",
            Editable: false
          });
          store.add(nuevo);
        }
      } {
        var nuevo = new clsTotal({
          Id_ImpuestosAplicables: store.getCount(),
          Descuento: "",
          ImpuestoNombre: "Total",
          Importe: total,
          TipoFactor: null,
          TasaOCuota: null,
          EfectoNombre: "",
          Editable: false
        });
        store.add(nuevo);
      }
      store.commitChanges();
      gridTotales.getView().refresh(false);
      cCTotalTF.setValue(convertirNumLetras(redondear(total)));
      if ("" != mensajeError) {
        alert(mensajeError);
      }
    }

    function calculaTotalesCFDI40(actualizaConceptos, actualizaImpuestos, aplicarImpuestoLocal) {
      //debugger;
      var mensajeError = "";
      var subtotal = 0;
      var subtotalReal = 0;
      var total = 0;
      var descuento = 0;
      var impuestosTraslados = 0;
      var impuestosRetenidos = 0;
      //Suma (Cantidad * Importe)
      var storeGrid = GridPanelConceptosCFDI40.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        storeGrid.getAt(i).data['NumeroIndex'] = i + 1;
        if ((null != storeGrid.getAt(i).data['PrecioUnitario'] && storeGrid.getAt(i).data['PrecioUnitario'].toString().length > 0) && (null != storeGrid.getAt(i).data['Cantidad'] && storeGrid.getAt(i).data['Cantidad'].toString().length > 0)) {
          if (actualizaConceptos) storeGrid.getAt(i).data['Importe'] = parseFloat(storeGrid.getAt(i).data['PrecioUnitario']) * parseFloat(storeGrid.getAt(i).data['Cantidad']);
          if (false == storeGrid.getAt(i).data['EsComentario']) {
            subtotal += parseFloat(storeGrid.getAt(i).data['Importe']);
            if (storeGrid.getAt(i).data['Descuento'] == "") {
              storeGrid.getAt(i).data['Descuento'] = 0;
            }
            descuento += parseFloat(storeGrid.getAt(i).data['Descuento']);
            if (null != storeGrid.getAt(i).data['TotalImpuestosTraslados']) {
              impuestosTraslados += parseFloat(storeGrid.getAt(i).data['TotalImpuestosTraslados']);
            }
            if (null != storeGrid.getAt(i).data['TotalImpuestosRetenidos']) {
              impuestosRetenidos += parseFloat(storeGrid.getAt(i).data['TotalImpuestosRetenidos']);
            }
          }
          subtotal = redondear(subtotal);
        } else {
          if (actualizaConceptos) storeGrid.getAt(i).data['Importe'] = null;
        }
      }
      GridPanelConceptosCFDI40.getView().refresh();
      //debugger;
      subtotalReal = (subtotal - descuento);
      total = subtotalReal + impuestosTraslados - impuestosRetenidos;
      if (aplicarImpuestoLocal) {
        total = actualizaTotalComplementoImpLocalCFDI40(subtotalReal, total);
      }
      var gridTotales = GridPanelTotalCFDI40;
      var store = gridTotales.getStore();
      var clsTotal = store.recordType;
      store.clearData();
      {
        var nuevo = new clsTotal({
          Id_ImpuestosAplicables: store.getCount(),
          Descuento: "",
          ImpuestoNombre: "Subtotal",
          Importe: subtotal,
          TipoFactor: null,
          TasaOCuota: null,
          EfectoNombre: "",
          Editable: false
        });
        store.add(nuevo);
      }
      if (0 != descuento) {
        var nuevo = new clsTotal({
          Id_ImpuestosAplicables: store.getCount(),
          Descuento: "",
          ImpuestoNombre: "Descuento",
          Importe: descuento,
          TipoFactor: null,
          TasaOCuota: null,
          EfectoNombre: "",
          Editable: false
        });
        store.add(nuevo);
      }
      var cCDetalleCk = Ext.getCmp('CHbCalcularTotalesCFDI40');
      if (true == cCDetalleCk.getValue()) {
        var arrTraslados = {};
        var arrRetenidos = {};
        for (var i = 0; i < storeGrid.getCount(); i++) {
          var impuestosTraslados = Ext.decode(storeGrid.getAt(i).data['ImpuestosTraslados']);
          for (var indice = 0; indice <= impuestosTraslados.length - 1; indice++) {
            var key = impuestosTraslados[indice].TipoImpuesto + impuestosTraslados[indice].TipoFactor + impuestosTraslados[indice].TasaOCuota;
            var ant = arrTraslados[key];
            if (null == ant) {
              var nuevo = new clsTotal({
                Id_ImpuestosAplicables: store.getCount(),
                Descuento: "",
                ImpuestoNombre: impuestosTraslados[indice].TipoImpuesto,
                Importe: impuestosTraslados[indice].Importe,
                TipoFactor: impuestosTraslados[indice].TipoFactor,
                TasaOCuota: impuestosTraslados[indice].TasaOCuota,
                EfectoNombre: "Traslado",
                Editable: false
              });
              arrTraslados[key] = nuevo;
            } else {
              ant.data.Importe = ant.data.Importe + impuestosTraslados[indice].Importe;
            }
          }
          var impuestosRetenidos = Ext.decode(storeGrid.getAt(i).data['ImpuestosRetenidos']);
          for (var indice = 0; indice <= impuestosRetenidos.length - 1; indice++) {
            var key = impuestosRetenidos[indice].TipoImpuesto + impuestosRetenidos[indice].TipoFactor + impuestosRetenidos[indice].TasaOCuota;
            var ant = arrRetenidos[key];
            if (null == ant) {
              var nuevo = new clsTotal({
                Id_ImpuestosAplicables: store.getCount(),
                Descuento: "",
                ImpuestoNombre: impuestosRetenidos[indice].TipoImpuesto,
                Importe: impuestosRetenidos[indice].Importe,
                TipoFactor: impuestosRetenidos[indice].TipoFactor,
                TasaOCuota: impuestosRetenidos[indice].TasaOCuota,
                EfectoNombre: "Retenido",
                Editable: false
              });
              arrRetenidos[key] = nuevo;
            } else {
              ant.data.Importe = ant.data.Importe + impuestosRetenidos[indice].Importe;
            }
          }
        }
        for (var key in arrTraslados) {
          store.add(arrTraslados[key]);
        }
        for (var key in arrRetenidos) {
          store.add(arrRetenidos[key]);
        }
      } else {
        if (0 != impuestosTraslados) {
          var nuevo = new clsTotal({
            Id_ImpuestosAplicables: store.getCount(),
            Descuento: "",
            ImpuestoNombre: "Imp. Trasladados",
            Importe: impuestosTraslados,
            TipoFactor: null,
            TasaOCuota: null,
            EfectoNombre: "",
            Editable: false
          });
          store.add(nuevo);
        }
        if (0 != impuestosRetenidos) {
          var nuevo = new clsTotal({
            Id_ImpuestosAplicables: store.getCount(),
            Descuento: "",
            ImpuestoNombre: "Imp. Retenidos",
            Importe: impuestosRetenidos,
            TipoFactor: null,
            TasaOCuota: null,
            EfectoNombre: "",
            Editable: false
          });
          store.add(nuevo);
        }
      } {
        var nuevo = new clsTotal({
          Id_ImpuestosAplicables: store.getCount(),
          Descuento: "",
          ImpuestoNombre: "Total",
          Importe: total,
          TipoFactor: null,
          TasaOCuota: null,
          EfectoNombre: "",
          Editable: false
        });
        store.add(nuevo);
      }
      store.commitChanges();
      gridTotales.getView().refresh(false);
      TSCantidadLetraCFDI40.setValue(convertirNumLetras(redondear(total)));
      if ("" != mensajeError) {
        alert(mensajeError);
      }
    }

    function sumaTotalesCFDI40() {
      calculaTotalesCFDI40(true, true, true);
      return;
      var mensajeError = "";
      var subtotal = 0;
      var subtotalReal = 0;
      var total = 0;
      var descuento = 0;
      var importeIEPS = 0;
      var impuestosTraslados = 0;
      var impuestosRetenidos = 0;
      //Suma (Cantidad * Importe)
      var storeGrid = GridPanelConceptosCFDI40.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if ((null != storeGrid.getAt(i).data['PrecioUnitario'] && storeGrid.getAt(i).data['PrecioUnitario'].toString().length > 0) && (null != storeGrid.getAt(i).data['Cantidad'] && storeGrid.getAt(i).data['Cantidad'].toString().length > 0)) {
          if (false == storeGrid.getAt(i).data['EsComentario']) subtotal += storeGrid.getAt(i).data['Importe'];
        }
      }
      //Descuento
      var gridTotales = fitTotalPLCFDI40;
      var store = gridTotales.getStore();
      descuento = store.getAt(1).data['Importe'];
      if (descuento > subtotal) {
        store.getAt(1).data['Importe'] = 0;
        descuento = 0;
        mensajeError = "El descuento se asigno a 0 por que el descuento era mayor que el subtotal.";
      }
      store.getAt(0).data['Importe'] = subtotal;
      subtotalReal = subtotal = (subtotal - descuento);
      //calculo IEPS para sumarlo al subtotal
      for (var i = 2; i <= store.getCount() - 1; i++) {
        if (store.getAt(i).data['Id_ImpuestosAplicables'] > 0) {
          if ('Traslado' == store.getAt(i).data['EfectoNombre']) {
            if ('IEPS' == store.getAt(i).data['ImpuestoNombre']) {
              importeIEPS += store.getAt(i).data['Importe'];
            }
          }
        }
      }
      for (var i = 2; i <= store.getCount() - 1; i++) {
        if (store.getAt(i).data['Id_ImpuestosAplicables'] > 0) {
          if ('Traslado' == store.getAt(i).data['EfectoNombre']) {
            if ('IEPS' != store.getAt(i).data['ImpuestoNombre']) {
              impuestosTraslados += store.getAt(i).data['Importe'];
            }
          } else {
            impuestosRetenidos += store.getAt(i).data['Importe'];
          }
        }
      }
      total = subtotalReal + importeIEPS + impuestosTraslados - impuestosRetenidos;
      //aplica el complemento de impuestos locales
      total = actualizaTotalComplementoImpLocalCFDI40(subtotalReal, total);
      store.getAt(store.getCount() - 1).data['Importe'] = total;
      gridTotales.getView().refresh(false);
      TSCantidadLetraCFDI40.setValue(convertirNumLetras(redondear(total)));
      if ("" != mensajeError) {
        alert(mensajeError);
      }
    }

    function sumaTotales() {
      calculaTotales(true, true, true);
      return;
      var mensajeError = "";
      var subtotal = 0;
      var subtotalReal = 0;
      var total = 0;
      var descuento = 0;
      var importeIEPS = 0;
      var impuestosTraslados = 0;
      var impuestosRetenidos = 0;
      //Suma (Cantidad * Importe)
      var storeGrid = cCConceptosGridPL.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if ((null != storeGrid.getAt(i).data['PrecioUnitario'] && storeGrid.getAt(i).data['PrecioUnitario'].toString().length > 0) && (null != storeGrid.getAt(i).data['Cantidad'] && storeGrid.getAt(i).data['Cantidad'].toString().length > 0)) {
          if (false == storeGrid.getAt(i).data['EsComentario']) subtotal += storeGrid.getAt(i).data['Importe'];
        }
      }
      //Descuento
      var gridTotales = totalGridPL;
      var store = gridTotales.getStore();
      descuento = store.getAt(1).data['Importe'];
      if (descuento > subtotal) {
        store.getAt(1).data['Importe'] = 0;
        descuento = 0;
        mensajeError = "El descuento se asigno a 0 por que el descuento era mayor que el subtotal.";
      }
      store.getAt(0).data['Importe'] = subtotal;
      subtotalReal = subtotal = (subtotal - descuento);
      //calculo IEPS para sumarlo al subtotal
      for (var i = 2; i <= store.getCount() - 1; i++) {
        if (store.getAt(i).data['Id_ImpuestosAplicables'] > 0) {
          if ('Traslado' == store.getAt(i).data['EfectoNombre']) {
            if ('IEPS' == store.getAt(i).data['ImpuestoNombre']) {
              importeIEPS += store.getAt(i).data['Importe'];
            }
          }
        }
      }
      for (var i = 2; i <= store.getCount() - 1; i++) {
        if (store.getAt(i).data['Id_ImpuestosAplicables'] > 0) {
          if ('Traslado' == store.getAt(i).data['EfectoNombre']) {
            if ('IEPS' != store.getAt(i).data['ImpuestoNombre']) {
              impuestosTraslados += store.getAt(i).data['Importe'];
            }
          } else {
            impuestosRetenidos += store.getAt(i).data['Importe'];
          }
        }
      }
      total = subtotalReal + importeIEPS + impuestosTraslados - impuestosRetenidos;
      //aplica el complemento de impuestos locales
      total = actualizaTotalComplementoImpLocal(subtotalReal, total);
      store.getAt(store.getCount() - 1).data['Importe'] = total;
      gridTotales.getView().refresh(false);
      cCTotalTF.setValue(convertirNumLetras(redondear(total)));
      if ("" != mensajeError) {
        alert(mensajeError);
      }
    }

    function reSumaTotales() {
      var mensajeError = "";
      var subtotal = 0;
      var subtotalReal = 0;
      var total = 0;
      var descuento = 0;
      var importeIEPS = 0;
      var impuestosTraslados = 0;
      var impuestosRetenidos = 0;
      //Suma (Cantidad * Importe)
      var storeGrid = cCConceptosGridPL.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if ((null != storeGrid.getAt(i).data['PrecioUnitario'] && storeGrid.getAt(i).data['PrecioUnitario'].toString().length > 0) && (null != storeGrid.getAt(i).data['Cantidad'] && storeGrid.getAt(i).data['Cantidad'].toString().length > 0)) {
          if (false == storeGrid.getAt(i).data['EsComentario']) subtotal += storeGrid.getAt(i).data['Importe'];
        }
      }
      //Descuento
      var gridTotales = totalGridPL;
      var store = gridTotales.getStore();
      descuento = store.getAt(1).data['Importe'];
      subtotalReal = subtotal = (subtotal - descuento);
      //calculo IEPS para sumarlo al subtotal
      for (var i = 2; i <= store.getCount() - 1; i++) {
        if (store.getAt(i).data['Id_ImpuestosAplicables'] > 0) {
          if ('Traslado' == store.getAt(i).data['EfectoNombre']) {
            if ('IEPS' == store.getAt(i).data['ImpuestoNombre']) {
              importeIEPS += store.getAt(i).data['Importe'];
            }
          }
        }
      }
      for (var i = 2; i <= store.getCount() - 1; i++) {
        if (store.getAt(i).data['Id_ImpuestosAplicables'] > 0) {
          if ('Traslado' == store.getAt(i).data['EfectoNombre']) {
            if ('IEPS' != store.getAt(i).data['ImpuestoNombre']) {
              impuestosTraslados += store.getAt(i).data['Importe'];
            }
          } else {
            impuestosRetenidos += store.getAt(i).data['Importe'];
          }
        }
      }
      total = subtotalReal + importeIEPS + impuestosTraslados - impuestosRetenidos;
      store.getAt(store.getCount() - 1).data['Importe'] = total;
      gridTotales.getView().refresh(false);
      cCTotalTF.setValue(convertirNumLetras(redondear(total)));
    }

    function redondear(num) {
      var original = parseFloat(num);
      var result = Math.round(original * 100) / 100;
      return result;
    }

    function cCValidaReceptor() {
      var valido = true;
      if (false == infoReceptorFormPL.getForm().isValid()) {
        Ext.Msg.show({
          title: "Información Incompleta",
          buttons: Ext.Msg.OK,
          icon: Ext.Msg.ERROR,
          msg: "Faltan algunos datos en la Información del Receptor, por favor ingrese la información solicitada."
        });
        valido = false;
      }
      return valido;
    }

    function cCValidaReceptor40() {
      var valido = true;
      if (false == FormPanelReceptorCFDI40.getForm().isValid()) {
        Ext.Msg.show({
          title: "Información Incompleta",
          buttons: Ext.Msg.OK,
          icon: Ext.Msg.ERROR,
          msg: "Faltan algunos datos en la Información del Receptor, por favor ingrese la información solicitada."
        });
        valido = false;
      }
      return valido;
    }

    function validaCancelacionV4() {
      var valido = true;
      if ('' == MotivoCancelacion.getValue()) {
        valido = false;
        Ext.Msg.show({
          title: "Información Incompleta",
          buttons: Ext.Msg.OK,
          icon: Ext.Msg.ERROR,
          msg: "Debe seleccionar un motivo de cancelación."
        });
      } else if ('01' == MotivoCancelacion.getValue() && '' == UUIDSustituir.getValue()) {
        valido = false;
        Ext.Msg.show({
          title: "Información Incompleta",
          buttons: Ext.Msg.OK,
          icon: Ext.Msg.ERROR,
          msg: "Debe indicar el UUID a sustituir."
        });
      }
      return valido;
    }

    function validaStore(validaDatos) {
      var valido = true;
      var comprobFiscal = false;
      var versionCfdi = cCVersionTF.getValue().toString();
      var storeGrid = cCConceptosGridPL.getStore();
      //alert("validaStore");
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if (false == storeGrid.getAt(i).data['EsComentario']) comprobFiscal = true;
      }
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if (false == storeGrid.getAt(i).data['EsComentario']) {
          if ("3.2" == versionCfdi) {
            if ('' == storeGrid.getAt(i).data['Unidad'].trim()) {
              valido = false;
              cCConceptosGridPL.startEditing(i, 3);
              break;
            }
          }
          if ('' == storeGrid.getAt(i).data['Descripcion'].trim()) {
            valido = false;
            cCConceptosGridPL.startEditing(i, 4);
            break;
          }
          //                    if (0 >= storeGrid.getAt(i).data['PrecioUnitario']) {
          //                        valido = false;
          //                        cCConceptosGridPL.startEditing(i, 5);
          //                        break;
          //                    }
          //                    if ('0' == storeGrid.getAt(i).data['Cantidad'] || 0 == storeGrid.getAt(i).data['Cantidad']) {
          //                        valido = false;
          //                        cCConceptosGridPL.startEditing(i, 6);
          //                        break;
          //                    }
        } else {
          if ('' == storeGrid.getAt(i).data['Descripcion'].trim()) {
            valido = false;
            cCConceptosGridPL.startEditing(i, 4);
            break;
          }
        }
      }
      if (validaDatos) {
        if (valido && ('' == cCId_Num_ReceptorHidden.getValue() || '00000000-0000-0000-0000-000000000000' == cCId_Num_ReceptorHidden.getValue())) {
          valido = false;
          Ext.Msg.show({
            title: "Información Incompleta",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Debe seleccion un Cliente para crear un cfdi."
          });
        }
        if (valido && !infoReceptorFormPL.getForm().isValid()) {
          valido = false;
          Ext.Msg.show({
            title: "Información Incompleta",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Faltan algunos datos en la Información del Receptor, por favor ingrese la información solicitada."
          });
        }
        if (valido && !infoComprobanteFormPL.getForm().isValid()) {
          valido = false;
          Ext.Msg.show({
            title: "Información Incompleta",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Faltan algunos datos en la Información del Comprobante, por favor ingrese la información solicitada."
          });
        }
        if (valido && !infoAdicionalPL.getForm().isValid()) {
          valido = false;
          Ext.Msg.show({
            title: "Información Incompleta",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Faltan algunos datos en la Información Adicional, por favor ingrese la información solicitada."
          });
        }
        if (valido && !formaPagoFormPL.getForm().isValid()) {
          valido = false;
          Ext.Msg.show({
            title: "Información Incompleta",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Faltan algunos datos en la Información del Pago, por favor ingrese la información solicitada."
          });
        }
        if (storeGrid.getCount() == 0) {
          Ext.Msg.show({
            title: "Conceptos Incompletos",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Al menos un Concepto es requerido."
          });
          return false;
        } else {
          if (false == comprobFiscal) {
            Ext.Msg.show({
              title: "Información Incompleta",
              buttons: Ext.Msg.OK,
              icon: Ext.Msg.ERROR,
              msg: "Todos los Conceptos son de tipo Comentario, debe agregar al menos un Concepto de tipo 'No Comentario'."
            });
          }
        }
        return (valido && comprobFiscal);
      } else return valido;
    }

    function validaStoreCFDI40(validaDatos) {
      var valido = true;
      var comprobFiscal = false;
      var versionCfdi = TFEmisorCFDI40Version.getValue().toString();
      var storeGrid = GridPanelConceptosCFDI40.getStore();
      //alert("validaStore");
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if (false == storeGrid.getAt(i).data['EsComentario']) comprobFiscal = true;
      }
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if (false == storeGrid.getAt(i).data['EsComentario']) {
          if ("4.0" == versionCfdi) {
            if ('' == storeGrid.getAt(i).data['Unidad'].trim()) {
              valido = false;
              GridPanelConceptosCFDI40.startEditing(i, 3);
              break;
            }
          }
          if ('' == storeGrid.getAt(i).data['Descripcion'].trim()) {
            valido = false;
            GridPanelConceptosCFDI40.startEditing(i, 4);
            break;
          }
        } else {
          if ('' == storeGrid.getAt(i).data['Descripcion'].trim()) {
            valido = false;
            GridPanelConceptosCFDI40.startEditing(i, 4);
            break;
          }
        }
      }
      if (validaDatos) {
        if (valido && ('' == Id_Num_ReceptorHiddenCFDI40.getValue() || '00000000-0000-0000-0000-000000000000' == Id_Num_ReceptorHiddenCFDI40.getValue())) {
          valido = false;
          Ext.Msg.show({
            title: "Información Incompleta",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Debe seleccion un Cliente para crear un cfdi."
          });
        }
        if (valido && !FormPanelReceptorCFDI40.getForm().isValid()) {
          valido = false;
          Ext.Msg.show({
            title: "Información Incompleta",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Faltan algunos datos en la Información del Receptor, por favor ingrese la información solicitada."
          });
        }
        if (valido && !FormPanelReceptorCFDI40.getForm().isValid()) {
          valido = false;
          Ext.Msg.show({
            title: "Información Incompleta",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Faltan algunos datos en la Información del Comprobante, por favor ingrese la información solicitada."
          });
        }
        if (valido && !FPInfoAdicionalCFDI40.getForm().isValid()) {
          valido = false;
          Ext.Msg.show({
            title: "Información Incompleta",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Faltan algunos datos en la Información Adicional, por favor ingrese la información solicitada."
          });
        }
        if (valido && !FormPanelInfoPagoCFDI40.getForm().isValid()) {
          valido = false;
          Ext.Msg.show({
            title: "Información Incompleta",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Faltan algunos datos en la Información del Pago, por favor ingrese la información solicitada."
          });
        }
        if (storeGrid.getCount() == 0) {
          Ext.Msg.show({
            title: "Conceptos Incompletos",
            buttons: Ext.Msg.OK,
            icon: Ext.Msg.ERROR,
            msg: "Al menos un Concepto es requerido."
          });
          return false;
        } else {
          if (false == comprobFiscal) {
            Ext.Msg.show({
              title: "Información Incompleta",
              buttons: Ext.Msg.OK,
              icon: Ext.Msg.ERROR,
              msg: "Todos los Conceptos son de tipo Comentario, debe agregar al menos un Concepto de tipo 'No Comentario'."
            });
          }
        }
        return (valido && comprobFiscal);
      } else return valido;
    }
    /* ADUANAS */
    function formatDate(value) {
      try {
        return value ? value.dateFormat('d/M/Y') : '';
      } catch (e) {
        return value;
      }
    }

    function agregaAduana() {
      if (validaStoreAduanas()) {
        var conceptoItem = aduanasGridPL.getStore().recordType;
        var nuevo = new conceptoItem({
          NumeroIndex: aduanasGridPL.getStore().getCount() + 1,
          Aduana: '',
          FechaEntrega: null,
          Numero: ''
        });
        aduanasGridPL.getStore().add(nuevo);
        aduanasGridPL.startEditing(aduanasGridPL.getStore().getCount() - 1, 1);
      }
    }

    function agregaAduanaCFDI40() {
      if (validaStoreAduanasCFDI40()) {
        var conceptoItem = aduanasGridPLCFDI40.getStore().recordType;
        var nuevo = new conceptoItem({
          NumeroIndex: aduanasGridPLCFDI40.getStore().getCount() + 1,
          Aduana: '',
          FechaEntrega: null,
          Numero: ''
        });
        aduanasGridPLCFDI40.getStore().add(nuevo);
        aduanasGridPLCFDI40.startEditing(aduanasGridPLCFDI40.getStore().getCount() - 1, 1);
      }
    }

    function validaStoreAduanas() {
      var valido = true;
      var storeGrid = aduanasGridPL.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        //                    if (null == storeGrid.getAt(i).data['Aduana'] || '' == storeGrid.getAt(i).data['Aduana']) {
        //                        valido = false;
        //                        aduanasTab.setActiveTab(aduanaTabPL);
        //                        aduanasGridPL.startEditing(i, 1);
        //                        break;
        //                    }
        //                    if (null == storeGrid.getAt(i).data['FechaEntrega']) {
        //                        valido = false;
        //                        aduanasTab.setActiveTab(aduanaTabPL);
        //                        aduanasGridPL.startEditing(i, 2);
        //                        break;
        //                    }
        if (null == storeGrid.getAt(i).data['Numero'] || '' == storeGrid.getAt(i).data['Numero']) {
          valido = false;
          aduanasTab.setActiveTab(aduanaTabPL);
          aduanasGridPL.startEditing(i, 3);
          break;
        }
      }
      return valido;
    }

    function validaStoreAduanasCFDI40() {
      var valido = true;
      var storeGrid = aduanasGridPLCFDI40.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if (null == storeGrid.getAt(i).data['Numero'] || '' == storeGrid.getAt(i).data['Numero']) {
          valido = false;
          aduanasTabCFDI40.setActiveTab(aduanaTabPLCFDI40);
          aduanasGridPLCFDI40.startEditing(i, 3);
          break;
        }
      }
      return valido;
    }
    /* FIN ADUANAS */
    /* PARTES */
    function agregaParte() {
      if (validaStorePartes()) {
        var conceptoItem = partesGridPL.getStore().recordType;
        var nuevo = new conceptoItem({
          NumeroIndex: partesGridPL.getStore().getCount() + 1,
          Cantidad: 1,
          Unidad: '',
          Codigo: '',
          Descripcion: '',
          ValorUnitario: 0,
          Importe: 0,
          InformacionAduaneraExtra: ''
        });
        partesGridPL.getStore().add(nuevo);
        partesGridPL.startEditing(partesGridPL.getStore().getCount() - 1, 1);
      }
    }

    function agregaParteCFDI40() {
      if (validaStorePartesCFDI40()) {
        var conceptoItem = partesGridPLCFDI40.getStore().recordType;
        var nuevo = new conceptoItem({
          NumeroIndex: partesGridPLCFDI40.getStore().getCount() + 1,
          Cantidad: 1,
          Unidad: '',
          Codigo: '',
          Descripcion: '',
          ValorUnitario: 0,
          Importe: 0,
          InformacionAduaneraExtra: ''
        });
        partesGridPLCFDI40.getStore().add(nuevo);
        partesGridPLCFDI40.startEditing(partesGridPLCFDI40.getStore().getCount() - 1, 1);
      }
    }

    function validaStorePartes() {
      var valido = true;
      var storeGrid = partesGridPL.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if (0 == storeGrid.getAt(i).data['Cantidad']) {
          valido = false;
          aduanasTab.setActiveTab(partesTabPL);
          partesGridPL.startEditing(i, 1);
          break;
        }
        if (null == storeGrid.getAt(i).data['Descripcion'] || '' == storeGrid.getAt(i).data['Descripcion']) {
          valido = false;
          aduanasTab.setActiveTab(partesTabPL);
          partesGridPL.startEditing(i, 4);
          break;
        }
      }
      return valido;
    }

    function validaStorePartesCFDI40() {
      var valido = true;
      var storeGrid = partesGridPLCFDI40.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if (0 == storeGrid.getAt(i).data['Cantidad']) {
          valido = false;
          aduanasTabCFDI40.setActiveTab(partesTabPLCFDI40);
          partesGridPLCFDI40.startEditing(i, 1);
          break;
        }
        if (null == storeGrid.getAt(i).data['Descripcion'] || '' == storeGrid.getAt(i).data['Descripcion']) {
          valido = false;
          aduanasTabCFDI40.setActiveTab(partesTabPLCFDI40);
          partesGridPLCFDI40.startEditing(i, 4);
          break;
        }
      }
      return valido;
    }

    function maxParcialidades() {
      var minv = cCDesdeSpinnerField.getValue();
      var maxv = cCASpinnerField.getValue();
      cCDesdeSpinnerField.setMaxValue(maxv);
      if (minv > maxv) {
        cCDesdeSpinnerField.setValue(maxv);
      }
      return false;
    }
    /* FIN PARTES */
    /* Impuestos Traslados Conceptos */
    function eliminarimpuestosTraslados(comando, record) {
      if ("eliminarTraslado" == comando) {
        var preguntar = confirm('Eliminar el traslado: ' + detalleActual.data.NumeroIndex + ' ?');
        if (preguntar) {
          var storeGrid = impuestosTrasladosGridPL.getStore();
          storeGrid.remove(record);
          for (var i = 0; i < storeGrid.getCount(); i++) {
            storeGrid.getAt(i).data['NumeroIndex'] = i + 1;
          }
          impuestosTrasladosGridPL.getView().refresh();
        }
      }
    }

    function eliminarimpuestosTrasladosCFDI40(comando, record) {
      if ("eliminarTraslado" == comando) {
        var preguntar = confirm('Eliminar el traslado: ' + detalleActual.data.NumeroIndex + ' ?');
        if (preguntar) {
          var storeGrid = impuestosTrasladosGridPLCFDI40.getStore();
          storeGrid.remove(record);
          for (var i = 0; i < storeGrid.getCount(); i++) {
            storeGrid.getAt(i).data['NumeroIndex'] = i + 1;
          }
          impuestosTrasladosGridPLCFDI40.getView().refresh();
        }
      }
    }

    function agregaimpuestosTraslados() {
      //debugger;
      if (validaStoreimpuestosTraslados()) {
        var impuestosTrasladosGridPL = Ext.getCmp("impuestosTrasladosGridPL");
        var store = impuestosTrasladosGridPL.getStore();
        var conceptoItem = store.recordType;
        var nuevo = new conceptoItem({
          NumeroIndex: store.getCount() + 1,
          CantidadBase: document.getElementById("ValorImporteProducto_Hidden").value,
          TipoImpuesto: '',
          TipoFactor: '',
          TasaOCuota: 0,
          Importe: 0
        });
        store.add(nuevo);
        impuestosTrasladosGridPL.startEditing(store.getCount() - 1, 1);
      }
    }

    function agregaimpuestosTrasladosCFDI40() {
      //debugger;
      if (validaStoreimpuestosTrasladosCFDI40()) {
        var impuestosTrasladosGridPL = Ext.getCmp("impuestosTrasladosGridPLCFDI40");
        var store = impuestosTrasladosGridPL.getStore();
        var conceptoItem = store.recordType;
        var nuevo = new conceptoItem({
          NumeroIndex: store.getCount() + 1,
          CantidadBase: document.getElementById("ValorImporteProducto_HiddenCFDI40").value,
          TipoImpuesto: '',
          TipoFactor: '',
          TasaOCuota: 0,
          Importe: 0
        });
        store.add(nuevo);
        impuestosTrasladosGridPL.startEditing(store.getCount() - 1, 1);
      }
    }

    function validaStoreimpuestosTraslados() {
      var valido = true;
      var storeGrid = impuestosTrasladosGridPL.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if (0 == storeGrid.getAt(i).data['CantidadBase']) {
          valido = false;
          winDetalleImpuestosTab.setActiveTab(impuestosTrasladosTabPL);
          impuestosTrasladosGridPL.startEditing(i, 1);
          break;
        }
        if (0 >= storeGrid.getAt(i).data['TasaOCuota'] || null == storeGrid.getAt(i).data['TasaOCuota']) {
          valido = false;
          winDetalleImpuestosTab.setActiveTab(impuestosTrasladosTabPL);
          impuestosTrasladosGridPL.startEditing(i, 4);
          break;
        }
      }
      return valido;
    }

    function validaStoreimpuestosTrasladosCFDI40() {
      var valido = true;
      var storeGrid = impuestosTrasladosGridPLCFDI40.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if (0 == storeGrid.getAt(i).data['CantidadBase']) {
          valido = false;
          winDetalleImpuestosTabCFDI40.setActiveTab(impuestosTrasladosTabPLCFDI40);
          impuestosTrasladosGridPLCFDI40.startEditing(i, 1);
          break;
        }
        if (0 >= storeGrid.getAt(i).data['TasaOCuota'] || null == storeGrid.getAt(i).data['TasaOCuota']) {
          valido = false;
          winDetalleImpuestosTabCFDI40.setActiveTab(impuestosTrasladosTabPLCFDI40);
          impuestosTrasladosGridPLCFDI40.startEditing(i, 4);
          break;
        }
      }
      return valido;
    }
    /* Fin Impuestos Traslados Conceptos */
    /* Impuestos Retenidos Conceptos */
    function eliminarimpuestosRetenidos(comando, record) {
      if ("eliminarRetencion" == comando) {
        var preguntar = confirm('Eliminar el retencion: ' + detalleActual.data.NumeroIndex + ' ?');
        if (preguntar) {
          var storeGrid = impuestosRetenidosGridPL.getStore();
          storeGrid.remove(record);
          for (var i = 0; i < storeGrid.getCount(); i++) {
            storeGrid.getAt(i).data['NumeroIndex'] = i + 1;
          }
          impuestosRetenidosGridPL.getView().refresh();
        }
      }
    }

    function eliminarimpuestosRetenidosCFDI40(comando, record) {
      if ("eliminarRetencion" == comando) {
        var preguntar = confirm('Eliminar el retencion: ' + detalleActual.data.NumeroIndex + ' ?');
        if (preguntar) {
          var storeGrid = impuestosRetenidosGridPLCFDI40.getStore();
          storeGrid.remove(record);
          for (var i = 0; i < storeGrid.getCount(); i++) {
            storeGrid.getAt(i).data['NumeroIndex'] = i + 1;
          }
          impuestosRetenidosGridPLCFDI40.getView().refresh();
        }
      }
    }

    function agregaimpuestosRetenidos() {
      //debugger;
      if (validaStoreimpuestosRetenidos()) {
        var conceptoItem = impuestosRetenidosGridPL.getStore().recordType;
        var nuevo = new conceptoItem({
          NumeroIndex: impuestosRetenidosGridPL.getStore().getCount() + 1,
          CantidadBase: document.getElementById("ValorImporteProducto_Hidden").value,
          TipoImpuesto: '',
          TipoFactor: '',
          TasaOCuota: 0,
          Importe: 0
        });
        impuestosRetenidosGridPL.getStore().add(nuevo);
        impuestosRetenidosGridPL.startEditing(impuestosRetenidosGridPL.getStore().getCount() - 1, 1);
      }
    }

    function agregaimpuestosRetenidosCFDI40() {
      //debugger;
      if (validaStoreimpuestosRetenidosCFDI40()) {
        var conceptoItem = impuestosRetenidosGridPLCFDI40.getStore().recordType;
        var nuevo = new conceptoItem({
          NumeroIndex: impuestosRetenidosGridPLCFDI40.getStore().getCount() + 1,
          CantidadBase: document.getElementById("ValorImporteProducto_HiddenCFDI40").value,
          TipoImpuesto: '',
          TipoFactor: '',
          TasaOCuota: 0,
          Importe: 0
        });
        impuestosRetenidosGridPLCFDI40.getStore().add(nuevo);
        impuestosRetenidosGridPLCFDI40.startEditing(impuestosRetenidosGridPLCFDI40.getStore().getCount() - 1, 1);
      }
    }

    function validaStoreimpuestosRetenidos() {
      var valido = true;
      var storeGrid = impuestosRetenidosGridPL.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if (0 == storeGrid.getAt(i).data['CantidadBase']) {
          valido = false;
          winDetalleImpuestosTab.setActiveTab(impuestosRetenidosTabPL);
          impuestosRetenidosGridPL.startEditing(i, 1);
          break;
        }
        if (0 >= storeGrid.getAt(i).data['TasaOCuota'] || null == storeGrid.getAt(i).data['TasaOCuota']) {
          valido = false;
          winDetalleImpuestosTab.setActiveTab(impuestosRetenidosTabPL);
          impuestosRetenidosGridPL.startEditing(i, 4);
          break;
        }
      }
      return valido;
    }

    function validaStoreimpuestosRetenidosCFDI40() {
      var valido = true;
      var storeGrid = impuestosRetenidosGridPLCFDI40.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if (0 == storeGrid.getAt(i).data['CantidadBase']) {
          valido = false;
          DesktopWindowDetalleImpuestosCFDI40.setActiveTab(impuestosRetenidosTabPLCFDI40);
          impuestosRetenidosGridPLCFDI40.startEditing(i, 1);
          break;
        }
        if (0 >= storeGrid.getAt(i).data['TasaOCuota'] || null == storeGrid.getAt(i).data['TasaOCuota']) {
          valido = false;
          DesktopWindowDetalleImpuestosCFDI40.setActiveTab(impuestosRetenidosTabPLCFDI40);
          impuestosRetenidosGridPLCFDI40.startEditing(i, 4);
          break;
        }
      }
      return valido;
    }
    /* Fin Impuestos Retenidos Conceptos */
    /* Inicia CFDI Relacionados */
    function verificaBotonEditarExtraInfoCFDIRelacionado(grid, commands, record, row) {
      if (false == record.data.Editable) commands.hidden = true;
      else
      if (true == record.data.EsComentario) commands.hidden = true;
    }

    function verificaBotonEliminarConceptoCFDIRelacionado(grid, commands, record, row) {
      if (false == record.data.Editable) commands.hidden = true;
    }
    var detalleActualCFDIRelacionado = null;

    function ejecutarComandoConceptosCFDIRelacionados(comando, record) {
      detalleActualCFDIRelacionado = record;
      if ('EditarDetalleCFDIRelacionados' == comando) {
        var winDetalle = Ext.getCmp('detallesWindowCFDIRelacionados');
        if (null != winDetalle) {
          var CFDIRelacionadoGridPanel = winDetalle.findById('CFDIRelacionadosGridPL2');
          var storeCFDIRelacionadoGrid = CFDIRelacionadosGridPL2.getStore();
          storeCFDIRelacionadoGrid.clearData();
          //CFDIRelacionado
          var uuids = null;
          if (null != detalleActualCFDIRelacionado.data.UUIDRelacionado && '' != detalleActualCFDIRelacionado.data.UUIDRelacionado) {
            uuids = Ext.decode(detalleActualCFDIRelacionado.data.UUIDRelacionado);
            var conceptoItem = storeCFDIRelacionadoGrid.recordType;
            var indice = 0;
            for (indice = 0; indice <= uuids.length - 1; indice++) {
              var nuevo = new conceptoItem({
                UUIDRelacionado: uuids[indice].UUIDRelacionado
              });
              storeCFDIRelacionadoGrid.add(nuevo);
            }
            storeCFDIRelacionadoGrid.commitChanges();
          }
          CFDIRelacionadosGridPL.getView().refresh(false);
          winDetalle.show();
        }
      } else {
        if ("LimpiarConceptoCFDIRelacionados" == comando) {
          var preguntar = confirm('¿ Limpiar los UUIDs ?');
          if (preguntar) {
            record.data.UUIDRelacionado = '';
            record.data.ExtraInfo = '';
            record.data.ExtraTipo = 1;
            record.data.Editable = true;
          }
        }
      }
      return true;
    }

    function ejecutarComandoConceptosCFDIRelacionadosCFDI40(comando, record) {
      detalleActualCFDIRelacionado = record;
      if ('EditarDetalleCFDIRelacionados' == comando) {
        var winDetalle = Ext.getCmp('detallesWindowCFDIRelacionados');
        if (null != winDetalle) {
          var CFDIRelacionadoGridPanel = winDetalle.findById('CFDIRelacionadosGridPL2');
          var storeCFDIRelacionadoGrid = CFDIRelacionadosGridPL2.getStore();
          storeCFDIRelacionadoGrid.clearData();
          //CFDIRelacionado
          var uuids = null;
          if (null != detalleActualCFDIRelacionado.data.UUIDRelacionado && '' != detalleActualCFDIRelacionado.data.UUIDRelacionado) {
            uuids = Ext.decode(detalleActualCFDIRelacionado.data.UUIDRelacionado);
            var conceptoItem = storeCFDIRelacionadoGrid.recordType;
            var indice = 0;
            for (indice = 0; indice <= uuids.length - 1; indice++) {
              var nuevo = new conceptoItem({
                UUIDRelacionado: uuids[indice].UUIDRelacionado
              });
              storeCFDIRelacionadoGrid.add(nuevo);
            }
            storeCFDIRelacionadoGrid.commitChanges();
          }
          CFDIRelacionadosGridPLCFDI40.getView().refresh(false);
          winDetalle.show();
        }
      } else {
        if ("LimpiarConceptoCFDIRelacionados" == comando) {
          var preguntar = confirm('¿ Limpiar los UUIDs ?');
          if (preguntar) {
            record.data.UUIDRelacionado = '';
            record.data.ExtraInfo = '';
            record.data.ExtraTipo = 1;
            record.data.Editable = true;
          }
        }
      }
      return true;
    }

    function eliminarInfoCFDIRelacionado(comando, record) {
      if ("EliminarUUIDRelacionados" == comando) {
        var preguntar = confirm('Eliminar el UUID ?');
        if (preguntar) {
          var storeGrid = CFDIRelacionadosGridPL2.getStore();
          storeGrid.remove(record);
          CFDIRelacionadosGridPL2.getView().refresh();
        }
      }
    }

    function eliminarInfoCFDIRelacionadoCFDI40(comando, record) {
      if ("EliminarUUIDRelacionados" == comando) {
        var preguntar = confirm('Eliminar el UUID ?');
        if (preguntar) {
          var storeGrid = CFDIRelacionadosGridPL2.getStore();
          storeGrid.remove(record);
          CFDIRelacionadosGridPL2.getView().refresh();
        }
      }
    }

    function agregaCFDIRelacionado() {
      if (validaStoreCFDIRelacionado()) {
        var conceptoItem = CFDIRelacionadosGridPL2.getStore().recordType;
        var nuevo = new conceptoItem({
          UUIDRelacionado: ''
        });
        CFDIRelacionadosGridPL2.getStore().add(nuevo);
        CFDIRelacionadosGridPL2.startEditing(CFDIRelacionadosGridPL2.getStore().getCount() - 1, 1);
      }
    }

    function agregaCFDIRelacionadoCFDI40() {
      if (validaStoreCFDIRelacionadoCFDI40()) {
        var conceptoItem = CFDIRelacionadosGridPL2.getStore().recordType;
        var nuevo = new conceptoItem({
          UUIDRelacionado: ''
        });
        CFDIRelacionadosGridPL2.getStore().add(nuevo);
        CFDIRelacionadosGridPL2.startEditing(CFDIRelacionadosGridPL2.getStore().getCount() - 1, 1);
      }
    }

    function validaStoreCFDIRelacionado() {
      var valido = true;
      var storeGrid = CFDIRelacionadosGridPL2.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if (null == storeGrid.getAt(i).data['UUIDRelacionado'] || '' == storeGrid.getAt(i).data['UUIDRelacionado']) {
          valido = false;
          CFDIRelacionadosTab.setActiveTab(CFDIRelacionadosTabPL);
          CFDIRelacionadosGridPL2.startEditing(i, 1);
          break;
        }
      }
      return valido;
    }

    function validaStoreCFDIRelacionadoCFDI40() {
      var valido = true;
      var storeGrid = CFDIRelacionadosGridPL2.getStore();
      for (var i = 0; i < storeGrid.getCount(); i++) {
        if (null == storeGrid.getAt(i).data['UUIDRelacionado'] || '' == storeGrid.getAt(i).data['UUIDRelacionado']) {
          valido = false;
          CFDIRelacionadosTab.setActiveTab(CFDIRelacionadosTabPL);
          CFDIRelacionadosGridPL2.startEditing(i, 1);
          break;
        }
      }
      return valido;
    }

    function guardarDetalleCFDIRelacionado() {
      var winDetalle = Ext.getCmp('detallesWindowCFDIRelacionados');
      var CFDIRelacionadoTab = winDetalle.findById('CFDIRelacionadosTab');
      var selectedIndexTabCFDIRelacionado = CFDIRelacionadoTab.items.indexOf(CFDIRelacionadoTab.getActiveTab());
      var esValido = false;
      esValido = validaStoreCFDIRelacionado();
      if (esValido) {
        var CFDIRelacionadoGridPanel = winDetalle.findById('CFDIRelacionadosGridPL2');
        var storeCFDIRelacionadoGrid = CFDIRelacionadosGridPL2.getStore();
        if (null != storeCFDIRelacionadoGrid.getRecordsValues()) {
          detalleActualCFDIRelacionado.data.UUIDRelacionado = Ext.encode(storeCFDIRelacionadoGrid.getRecordsValues());
        } else {
          detalleActualCFDIRelacionado.data.UUIDRelacionado = null;
        }
        winDetalle.hide();
      }
    }

    function guardarDetalleCFDIRelacionadoCFDI40() {
      var winDetalle = Ext.getCmp('detallesWindowCFDIRelacionados');
      var CFDIRelacionadoTab = winDetalle.findById('CFDIRelacionadosTab');
      var selectedIndexTabCFDIRelacionado = CFDIRelacionadoTab.items.indexOf(CFDIRelacionadoTab.getActiveTab());
      var esValido = false;
      esValido = validaStoreCFDIRelacionadoCFDI40();
      if (esValido) {
        var CFDIRelacionadoGridPanel = winDetalle.findById('CFDIRelacionadosGridPL2');
        var storeCFDIRelacionadoGrid = CFDIRelacionadosGridPL2.getStore();
        if (null != storeCFDIRelacionadoGrid.getRecordsValues()) {
          detalleActualCFDIRelacionado.data.UUIDRelacionado = Ext.encode(storeCFDIRelacionadoGrid.getRecordsValues());
        } else {
          detalleActualCFDIRelacionado.data.UUIDRelacionado = null;
        }
        winDetalle.hide();
      }
    }
    /* Fin CFDI Relacionados */
  </script>
  <script language="javascript" type="text/javascript">
    /* BASADO EN http://perlenespanol.com/foro/post22866.html#p22866 */
    // Función modulo, regresa el residuo de una división 
    function mod(dividendo, divisor) {
      resDiv = dividendo / divisor;
      parteEnt = Math.floor(resDiv); // Obtiene la parte Entera de resDiv 
      parteFrac = resDiv - parteEnt; // Obtiene la parte Fraccionaria de la división
      //modulo = parteFrac * divisor;  // Regresa la parte fraccionaria * la división (modulo) 
      modulo = Math.round(parteFrac * divisor)
      return modulo;
    } // Fin de función mod
    // Función ObtenerParteEntDiv, regresa la parte entera de una división
    function ObtenerParteEntDiv(dividendo, divisor) {
      resDiv = dividendo / divisor;
      parteEntDiv = Math.floor(resDiv);
      return parteEntDiv;
    } // Fin de función ObtenerParteEntDiv
    // function fraction_part, regresa la parte Fraccionaria de una cantidad
    function fraction_part(dividendo, divisor) {
      resDiv = dividendo / divisor;
      f_part = Math.floor(resDiv);
      return f_part;
    } // Fin de función fraction_part
    // function string_literal conversion is the core of this program 
    // converts numbers to spanish strings, handling the general special 
    // cases in spanish language. 
    function string_literal_conversion(number) {
      // first, divide your number in hundreds, tens and units, cascadig 
      // trough subsequent divisions, using the modulus of each division 
      // for the next. 
      centenas = ObtenerParteEntDiv(number, 100);
      number = mod(number, 100);
      decenas = ObtenerParteEntDiv(number, 10);
      number = mod(number, 10);
      unidades = ObtenerParteEntDiv(number, 1);
      number = mod(number, 1);
      string_hundreds = "";
      string_tens = "";
      string_units = "";
      // cascade trough hundreds. This will convert the hundreds part to 
      // their corresponding string in spanish.
      if (centenas == 1) {
        string_hundreds = "ciento ";
      }
      if (centenas == 2) {
        string_hundreds = "doscientos ";
      }
      if (centenas == 3) {
        string_hundreds = "trescientos ";
      }
      if (centenas == 4) {
        string_hundreds = "cuatrocientos ";
      }
      if (centenas == 5) {
        string_hundreds = "quinientos ";
      }
      if (centenas == 6) {
        string_hundreds = "seiscientos ";
      }
      if (centenas == 7) {
        string_hundreds = "setecientos ";
      }
      if (centenas == 8) {
        string_hundreds = "ochocientos ";
      }
      if (centenas == 9) {
        string_hundreds = "novecientos ";
      }
      // end switch hundreds 
      // casgade trough tens. This will convert the tens part to corresponding 
      // strings in spanish. Note, however that the strings between 11 and 19 
      // are all special cases. Also 21-29 is a special case in spanish. 
      if (decenas == 1) {
        //Special case, depends on units for each conversion
        if (unidades == 1) {
          string_tens = "once";
        }
        if (unidades == 2) {
          string_tens = "doce";
        }
        if (unidades == 3) {
          string_tens = "trece";
        }
        if (unidades == 4) {
          string_tens = "catorce";
        }
        if (unidades == 5) {
          string_tens = "quince";
        }
        if (unidades == 6) {
          string_tens = "dieciseis";
        }
        if (unidades == 7) {
          string_tens = "diecisiete";
        }
        if (unidades == 8) {
          string_tens = "dieciocho";
        }
        if (unidades == 9) {
          string_tens = "diecinueve";
        }
      }
      //alert("STRING_TENS ="+string_tens);
      if (decenas == 2) {
        string_tens = "veinti";
      }
      if (decenas == 3) {
        string_tens = "treinta";
      }
      if (decenas == 4) {
        string_tens = "cuarenta";
      }
      if (decenas == 5) {
        string_tens = "cincuenta";
      }
      if (decenas == 6) {
        string_tens = "sesenta";
      }
      if (decenas == 7) {
        string_tens = "setenta";
      }
      if (decenas == 8) {
        string_tens = "ochenta";
      }
      if (decenas == 9) {
        string_tens = "noventa";
      }
      // Fin de swicth decenas
      // cascades trough units, This will convert the units part to corresponding 
      // strings in spanish. Note however that a check is being made to see wether 
      // the special cases 11-19 were used. In that case, the whole conversion of 
      // individual units is ignored since it was already made in the tens cascade. 
      if (decenas == 1) {
        string_units = ""; // empties the units check, since it has alredy been handled on the tens switch 
      } else {
        if (unidades == 1) {
          string_units = "un";
        }
        if (unidades == 2) {
          string_units = "dos";
        }
        if (unidades == 3) {
          string_units = "tres";
        }
        if (unidades == 4) {
          string_units = "cuatro";
        }
        if (unidades == 5) {
          string_units = "cinco";
        }
        if (unidades == 6) {
          string_units = "seis";
        }
        if (unidades == 7) {
          string_units = "siete";
        }
        if (unidades == 8) {
          string_units = "ocho";
        }
        if (unidades == 9) {
          string_units = "nueve";
        }
        // end switch units 
      } // end if-then-else 
      //final special cases. This conditions will handle the special cases which 
      //are not as general as the ones in the cascades. Basically four: 
      // when you've got 100, you dont' say 'ciento' you say 'cien' 
      // 'ciento' is used only for [101 >= number > 199] 
      if (centenas == 1 && decenas == 0 && unidades == 0) {
        string_hundreds = "cien ";
      }
      // when you've got 10, you don't say any of the 11-19 special 
      // cases.. just say 'diez' 
      if (decenas == 1 && unidades == 0) {
        string_tens = "diez ";
      }
      // when you've got 20, you don't say 'veinti', which is used 
      // only for [21 >= number > 29] 
      if (decenas == 2 && unidades == 0) {
        string_tens = "veinte ";
      }
      // for numbers >= 30, you don't use a single word such as veintiuno 
      // (twenty one), you must add 'y' (and), and use two words. v.gr 31 
      // 'treinta y uno' (thirty and one) 
      if (decenas >= 3 && unidades >= 1) {
        string_tens = string_tens + " y ";
      }
      // this line gathers all the hundreds, tens and units into the final string 
      // and returns it as the function value.
      final_string = string_hundreds + string_tens + string_units;
      return final_string;
    } //end of function string_literal_conversion()================================ 
    // handle some external special cases. Specially the millions, thousands 
    // and hundreds descriptors. Since the same rules apply to all number triads 
    // descriptions are handled outside the string conversion function, so it can 
    // be re used for each triad. 
    function convertirNumLetras(number) {
      var tipoMonedaSeleccionada = "";
      var millions_final_string = "";
      var thousands_final_string = "";
      var centenas_final_string = "";
      var monedaValue = cCMonedaComboBox.value.toString();
      var moneda = "";
      switch (monedaValue) {
        case "1":
          tipoMonedaSeleccionada = " M.N. ";
          break;
        case "2":
          tipoMonedaSeleccionada = " € ";
          break;
        case "3":
          tipoMonedaSeleccionada = " USD ";
          break;
        case "4":
          tipoMonedaSeleccionada = " M.N. ";
          break;
      }
      if (number == 0) {
        switch (monedaValue) {
          case "1":
            moneda = " PESO ";
            break;
          case "2":
            moneda = " EURO ";
            break;
          case "3":
            moneda = " DOLAR ";
            break;
          case "4":
            moneda = " PESO ";
            break;
        }
      } else {
        switch (monedaValue) {
          case "1":
            moneda = " PESOS ";
            break;
          case "2":
            moneda = " EUROS ";
            break;
          case "3":
            moneda = " DOLARES ";
            break;
          case "4":
            moneda = " PESOS ";
            break;
        }
      }
      if (0 == number) return "CERO " + moneda + " 00/100 " + tipoMonedaSeleccionada;
      else number = number.toString();
      number1 = number;
      cent = number1.split(".");
      centavos = cent[1];
      //Mind Mod
      number = cent[0];
      if (centavos == 0 || centavos == undefined) {
        centavos = "00";
      }
      if (number == 0 || number == "") { // if amount = 0, then forget all about conversions, 
        centenas_final_string = " cero "; // amount is zero (cero). handle it externally, to 
        // function breakdown 
      } else {
        //R-005585
        millions = ObtenerParteEntDiv(number, 1000000); // first, send the millions to the string 
        number = mod(number, 1000000); // conversion function 
        if (0 == millions) {
          millions_final_string = " ";
        } else if (millions == 1) { // if only 1, use 'millon' (million). if 
          millions_final_string = "un millón "; // > than 1, use 'millones' (millions) as 
        } else {
          descriptor = " millones ";
          //miles de millones
          thousands = ObtenerParteEntDiv(millions, 1000); // now, send the thousands to the string 
          millions = mod(millions, 1000); // conversion function. 
          if (0 == thousands) {
            millions_final_string = "";
          } else if (thousands == 1) {
            millions_final_string = "un mil ";
          } else {
            millions_final_string = string_literal_conversion(thousands) + " mil ";
          }
          millions_final_string = millions_final_string + string_literal_conversion(millions) + descriptor;
        }
        //R-005585
        thousands = ObtenerParteEntDiv(number, 1000); // now, send the thousands to the string 
        number = mod(number, 1000); // conversion function. 
        if (thousands != 1) { // This condition eliminates the descriptor 
          thousands_final_string = string_literal_conversion(thousands) + " mil ";
        }
        if (thousands == 1) {
          thousands_final_string = " mil ";
        }
        if (thousands < 1) {
          thousands_final_string = " ";
        }
        centenas = number;
        centenas_final_string = string_literal_conversion(centenas);
        if ((millions > 0) && (thousands == 0) && (centenas == 0)) {
          millions_final_string = millions_final_string + "de ";
        }
      }
      cad = millions_final_string + thousands_final_string + centenas_final_string;
      cad = cad.toUpperCase();
      if (centavos.length > 2) {
        if (centavos.substring(2, 3) >= 5) {
          centavos = centavos.substring(0, 1) + (parseInt(centavos.substring(1, 2)) + 1).toString();
        } else {
          centavos = centavos.substring(0, 1);
        }
      }
      if (centavos.length == 1) {
        centavos = centavos + "0";
      }
      centavos = centavos + "/100";
      if (cad == '  MIL ') {
        cad = ' UN MIL ';
      }
      return cad + moneda + centavos + " " + tipoMonedaSeleccionada;
    }
    var promoSelectionChanged = function(dv, nodes) {
      if (null != nodes && nodes.length > 0) {
        Ext.get('rd_' + nodes[0].id).dom.checked = true;
        Ext.get('PromoSelHidden').dom.value = nodes[0].id;
      } else {
        var relsel = Ext.query('input[name=Promo]:checked');
        if (relsel.length > 0) {
          ImageViewPromo.selectedData = [{
            recordID: relsel[0].value
          }];
          ImageViewPromo.doSelection();
        }
      }
    };
    var paqueteSelectionChanged = function(dv, nodes) {
      if (null != nodes && nodes.length > 0) {
        Ext.get('rd_' + nodes[0].id).dom.checked = true;
        Ext.get('PaqSelHidden').dom.value = nodes[0].id;
      } else {
        var relsel = Ext.query('input[name=Paquete]:checked');
        if (relsel.length > 0) {
          ImageView.selectedData = [{
            recordID: relsel[0].value
          }];
          ImageView.doSelection();
        }
      }
    };
  </script>
  <script type="text/javascript">
    (function(i, s, o, g, r, a, m) {
      i['GoogleAnalyticsObject'] = r;
      i[r] = i[r] || function() {
        (i[r].q = i[r].q || []).push(arguments)
      }, i[r].l = 1 * new Date();
      a = s.createElement(o),
        m = s.getElementsByTagName(o)[0];
      a.async = 1;
      a.src = g;
      m.parentNode.insertBefore(a, m)
    })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
    ga('create', 'UA-32817246-1', 'auto');
    ga('send', 'pageview');
  </script>
  <div class="x-window-proxy" id="ext-gen65"></div>
  <div class="ext-el-mask" id="ext-gen66" style="display: none;"></div>
  <div id="recordarWindow" class=" x-window x-resizable-pinned" style="position: absolute; z-index: 11000; visibility: hidden; left: -10000px; top: -10000px; width: 300px;">
    <div class="x-window-tl">
      <div class="x-window-tr">
        <div class="x-window-tc">
          <div class="x-window-header x-unselectable x-window-draggable" id="ext-gen56"><span class="x-window-header-text" id="ext-gen67">Recuperar Contraseña</span></div>
        </div>
      </div>
    </div>
    <div class="x-window-bwrap" id="ext-gen57">
      <div class="x-window-ml">
        <div class="x-window-mr">
          <div class="x-window-mc" id="ext-gen61">
            <div class="x-window-body" id="ext-gen58" style="width: 286px; height: 68px;">
              <div id="recuperarCuentaFormPL" class=" x-panel x-form-label-top" style="width: 286px;">
                <div class="x-panel-bwrap" id="ext-gen73">
                  <div class="x-panel-body x-panel-body-noheader x-form" method="POST" id="ext-gen55" style="padding: 5px; width: 274px; height: 56px;">
                    <div class="x-form-item " tabindex="-1" id="ext-gen75"><label for="recuperarCuentaCorreoTF" style="width:auto;" class="x-form-item-label" id="ext-gen76">Correo electrónico:</label>
                      <div class="x-form-element" id="x-form-el-recuperarCuentaCorreoTF" style="padding-left:0;"><input type="text" size="20" autocomplete="off" id="recuperarCuentaCorreoTF" name="recuperarCuentaCorreoTF"
                          class=" x-form-text x-form-field" maxlength="150" style="width: 246px;">
                        <div class="x-form-indicator icon-accept" style="padding-left: 18px; left: 256px; top: 4px;" id="ext-gen77"></div>
                      </div>
                      <div class="x-form-clear-left"></div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="x-window-bl" id="ext-gen60">
        <div class="x-window-br">
          <div class="x-window-bc">
            <div class="x-window-footer x-panel-btns" id="ext-gen59" style="width: 276px;">
              <div id="ext-comp-1012" class="x-panel-fbar x-small-editor x-toolbar-layout-ct" style="width: auto;">
                <table cellspacing="0" class="x-toolbar-ct">
                  <tbody>
                    <tr>
                      <td class="x-toolbar-left" align="left">
                        <table cellspacing="0">
                          <tbody>
                            <tr class="x-toolbar-left-row"></tr>
                          </tbody>
                        </table>
                      </td>
                      <td class="x-toolbar-right" align="right">
                        <table cellspacing="0" class="x-toolbar-right-ct">
                          <tbody>
                            <tr>
                              <td>
                                <table cellspacing="0">
                                  <tbody>
                                    <tr class="x-toolbar-right-row">
                                      <td class="x-toolbar-cell" id="ext-gen68">
                                        <table id="recuperarCuentaRecordarButton" cellspacing="0" class="x-btn  x-btn-text-icon" style="width: auto;">
                                          <tbody class="x-btn-small x-btn-icon-small-left">
                                            <tr>
                                              <td class="x-btn-tl"><i>&nbsp;</i></td>
                                              <td class="x-btn-tc"></td>
                                              <td class="x-btn-tr"><i>&nbsp;</i></td>
                                            </tr>
                                            <tr>
                                              <td class="x-btn-ml"><i>&nbsp;</i></td>
                                              <td class="x-btn-mc"><em class="" unselectable="on"><button type="button" id="ext-gen69" class=" x-btn-text icon-accept">Recibir Accesos</button></em></td>
                                              <td class="x-btn-mr"><i>&nbsp;</i></td>
                                            </tr>
                                            <tr>
                                              <td class="x-btn-bl"><i>&nbsp;</i></td>
                                              <td class="x-btn-bc"></td>
                                              <td class="x-btn-br"><i>&nbsp;</i></td>
                                            </tr>
                                          </tbody>
                                        </table>
                                      </td>
                                      <td class="x-toolbar-cell" id="ext-gen70">
                                        <table id="Button36" cellspacing="0" class="x-btn  x-btn-text-icon" style="width: 75px;">
                                          <tbody class="x-btn-small x-btn-icon-small-left">
                                            <tr>
                                              <td class="x-btn-tl"><i>&nbsp;</i></td>
                                              <td class="x-btn-tc"></td>
                                              <td class="x-btn-tr"><i>&nbsp;</i></td>
                                            </tr>
                                            <tr>
                                              <td class="x-btn-ml"><i>&nbsp;</i></td>
                                              <td class="x-btn-mc"><em class="" unselectable="on"><button type="button" id="ext-gen71" class=" x-btn-text icon-cancel">Cerrar</button></em></td>
                                              <td class="x-btn-mr"><i>&nbsp;</i></td>
                                            </tr>
                                            <tr>
                                              <td class="x-btn-bl"><i>&nbsp;</i></td>
                                              <td class="x-btn-bc"></td>
                                              <td class="x-btn-br"><i>&nbsp;</i></td>
                                            </tr>
                                          </tbody>
                                        </table>
                                      </td>
                                    </tr>
                                  </tbody>
                                </table>
                              </td>
                              <td>
                                <table cellspacing="0">
                                  <tbody>
                                    <tr class="x-toolbar-extras-row"></tr>
                                  </tbody>
                                </table>
                              </td>
                            </tr>
                          </tbody>
                        </table>
                      </td>
                    </tr>
                  </tbody>
                </table>
              </div>
              <div class="x-clear" id="ext-gen63"></div>
            </div>
          </div>
        </div>
      </div>
    </div><a href="#" class="x-dlg-focus" tabindex="-1" id="ext-gen64">&nbsp;</a>
    <div class="x-resizable-handle x-resizable-handle-north x-unselectable x-window-handle" id="ext-gen78"></div>
    <div class="x-resizable-handle x-resizable-handle-south x-unselectable x-window-handle" id="ext-gen79"></div>
    <div class="x-resizable-handle x-resizable-handle-east x-unselectable x-window-handle" id="ext-gen80"></div>
    <div class="x-resizable-handle x-resizable-handle-west x-unselectable x-window-handle" id="ext-gen81"></div>
    <div class="x-resizable-handle x-resizable-handle-northeast x-unselectable x-window-handle" id="ext-gen82"></div>
    <div class="x-resizable-handle x-resizable-handle-northwest x-unselectable x-window-handle" id="ext-gen83"></div>
    <div class="x-resizable-handle x-resizable-handle-southeast x-unselectable x-window-handle" id="ext-gen84"></div>
    <div class="x-resizable-handle x-resizable-handle-southwest x-unselectable x-window-handle" id="ext-gen85"></div>
  </div>
  <div class="x-window-proxy" id="ext-gen96"></div>
  <div class="ext-el-mask" id="ext-gen97" style="display: none;"></div>
  <div id="wincontraDatFactar" class=" x-window" style="position: absolute; z-index: 11000; visibility: hidden; left: -10000px; top: -10000px; width: 670px;">
    <div class="x-window-tl">
      <div class="x-window-tr">
        <div class="x-window-tc">
          <div class="x-window-header x-unselectable x-panel-icon icon-user x-window-draggable" id="ext-gen90"><span class="x-window-header-text" id="ext-gen98">Datos de Facturación</span></div>
        </div>
      </div>
    </div>
    <div class="x-window-bwrap" id="ext-gen91">
      <div class="x-window-ml">
        <div class="x-window-mr">
          <div class="x-window-mc" id="ext-gen94">
            <div class="x-window-body" id="ext-gen92" style="padding: 5px; width: 646px; height: 311px;">
              <div id="FormPanel7" class=" x-panel" style="padding: 0px; width: 646px;">
                <div class="x-panel-bwrap" id="ext-gen100">
                  <div class="x-panel-body x-panel-body-noheader x-form x-column-layout-ct" method="POST" id="ext-gen89" style="padding: 5px; width: 634px; height: 283px;">
                    <div id="FormPanel7_Content" class="">
                      <div id="Image4_Container" style="display:inline;">
                        <img id="Image4" src="Imagenes/contrataciones/nuevo/titulo-otros-datos.png" style="border: none;">
                      </div>
                    </div>
                    <div class="x-column-inner" id="ext-gen107" style="width: 634px; height: 283px;">
                      <div id="Panel82" class=" x-panel x-panel-noborder x-form-label-top x-column" style="width: 634px;">
                        <div class="x-panel-bwrap" id="ext-gen109">
                          <div class="x-panel-body x-panel-body-noheader x-panel-body-noborder" id="ext-gen110" style="width: 634px; height: 283px;">
                            <div id="contraDatFactTFDPL" class=" x-panel x-panel-noborder" style="width: 634px;">
                              <div class="x-panel-bwrap" id="ext-gen112">
                                <div class="x-panel-body x-panel-body-noheader x-panel-body-noborder x-column-layout-ct" id="ext-gen113" style="height: 50px; width: 634px;">
                                  <div class="x-column-inner" id="ext-gen124" style="width: 634px; height: 50px;">
                                    <div id="Panel86" class=" x-panel x-panel-noborder x-form-label-top x-column" style="width: 330px;">
                                      <div class="x-panel-bwrap" id="ext-gen126">
                                        <div class="x-panel-body x-panel-body-noheader x-panel-body-noborder" id="ext-gen127" style="padding: 5px; width: 320px; height: 40px;">
                                          <div class="x-form-item " tabindex="-1" id="ext-gen132"><label for="contraDatFactNombreEmTF" style="width:auto;" class="x-form-item-label" id="ext-gen133">Nombre de la Empresa (Razón Social):</label>
                                            <div class="x-form-element" id="x-form-el-contraDatFactNombreEmTF" style="padding-left:0;"><input type="text" size="20" autocomplete="off" id="contraDatFactNombreEmTF" name="contraDatFactNombreEmTF"
                                                class=" x-form-text x-form-field" maxlength="150" style="width: 297px;">
                                              <div class="x-form-indicator icon-accept" style="padding-left: 18px; left: 307px; top: 4px;" id="ext-gen134"></div>
                                            </div>
                                            <div class="x-form-clear-left"></div>
                                          </div>
                                        </div>
                                      </div>
                                    </div>
                                    <div id="contraDatFactRFCPL" class=" x-panel x-panel-noborder x-form-label-top x-column" style="width: 150px;">
                                      <div class="x-panel-bwrap" id="ext-gen129">
                                        <div class="x-panel-body x-panel-body-noheader x-panel-body-noborder" id="ext-gen130" style="padding: 5px; width: 140px; height: 40px;">
                                          <div class="x-form-item " tabindex="-1" id="ext-gen135"><label for="contraDatFactRfcTF" style="width:auto;" class="x-form-item-label" id="ext-gen136">RFC:</label>
                                            <div class="x-form-element" id="x-form-el-contraDatFactRfcTF" style="padding-left:0;"><input type="text" size="20" autocomplete="off" id="contraDatFactRfcTF" name="contraDatFactRfcTF"
                                                class=" x-form-text x-form-field" maxlength="13" style="text-transform: uppercase; width: 117px;">
                                              <div class="x-form-indicator icon-accept" style="padding-left: 18px; left: 127px; top: 4px;" id="ext-gen137"></div>
                                            </div>
                                            <div class="x-form-clear-left"></div>
                                          </div>
                                        </div>
                                      </div>
                                    </div>
                                    <div class="x-clear" id="ext-gen125"></div>
                                  </div>
                                </div>
                              </div>
                            </div>
                            <div id="Panel93" class=" x-panel x-panel-noborder" style="width: 634px;">
                              <div class="x-panel-bwrap" id="ext-gen115">
                                <div class="x-panel-body x-panel-body-noheader x-panel-body-noborder x-column-layout-ct" id="ext-gen116" style="height: 50px; width: 634px;">
                                  <div class="x-column-inner" id="ext-gen138" style="width: 634px; height: 50px;">
                                    <div id="Panel95" class=" x-panel x-panel-noborder x-form-label-top x-column" style="width: 330px;">
                                      <div class="x-panel-bwrap" id="ext-gen140">
                                        <div class="x-panel-body x-panel-body-noheader x-panel-body-noborder" id="ext-gen141" style="padding: 5px; width: 320px; height: 40px;">
                                          <div class="x-form-item " tabindex="-1" id="ext-gen149"><label for="contraDatFactCalleTF" style="width:auto;" class="x-form-item-label" id="ext-gen150">Calle:</label>
                                            <div class="x-form-element" id="x-form-el-contraDatFactCalleTF" style="padding-left:0;"><input type="text" size="20" autocomplete="off" id="contraDatFactCalleTF" name="contraDatFactCalleTF"
                                                class=" x-form-text x-form-field" maxlength="100" style="padding-left: 5px; width: 295px;">
                                              <div class="x-form-indicator icon-accept" style="padding-left: 18px; left: 307px; top: 4px;" id="ext-gen151"></div>
                                            </div>
                                            <div class="x-form-clear-left"></div>
                                          </div>
                                        </div>
                                      </div>
                                    </div>
                                    <div id="Panel98" class=" x-panel x-panel-noborder x-form-label-top x-column" style="width: 150px;">
                                      <div class="x-panel-bwrap" id="ext-gen143">
                                        <div class="x-panel-body x-panel-body-noheader x-panel-body-noborder" id="ext-gen144" style="padding: 5px; width: 140px; height: 40px;">
                                          <div class="x-form-item " tabindex="-1" id="ext-gen152"><label for="contraDatFactNumeroExteriorTF" style="width:auto;" class="x-form-item-label" id="ext-gen153">Número exterior:</label>
                                            <div class="x-form-element" id="x-form-el-contraDatFactNumeroExteriorTF" style="padding-left:0;"><input type="text" size="20" autocomplete="off" id="contraDatFactNumeroExteriorTF"
                                                name="contraDatFactNumeroExteriorTF" class=" x-form-text x-form-field" maxlength="30" style="width: 132px;"></div>
                                            <div class="x-form-clear-left"></div>
                                          </div>
                                        </div>
                                      </div>
                                    </div>
                                    <div id="Panel99" class=" x-panel x-panel-noborder x-form-label-top x-column" style="width: 150px;">
                                      <div class="x-panel-bwrap" id="ext-gen146">
                                        <div class="x-panel-body x-panel-body-noheader x-panel-body-noborder" id="ext-gen147" style="padding: 5px; width: 140px; height: 40px;">
                                          <div class="x-form-item " tabindex="-1" id="ext-gen154"><label for="contraDatFactNumeroInteriorTF" style="width:auto;" class="x-form-item-label" id="ext-gen155">Número interior:</label>
                                            <div class="x-form-element" id="x-form-el-contraDatFactNumeroInteriorTF" style="padding-left:0;"><input type="text" size="20" autocomplete="off" id="contraDatFactNumeroInteriorTF"
                                                name="contraDatFactNumeroInteriorTF" class=" x-form-text x-form-field" maxlength="30" style="width: 132px;"></div>
                                            <div class="x-form-clear-left"></div>
                                          </div>
                                        </div>
                                      </div>
                                    </div>
                                    <div class="x-clear" id="ext-gen139"></div>
                                  </div>
                                </div>
                              </div>
                            </div>
                            <div id="Panel103" class=" x-panel x-panel-noborder" style="width: 634px;">
                              <div class="x-panel-bwrap" id="ext-gen118">
                                <div class="x-panel-body x-panel-body-noheader x-panel-body-noborder x-column-layout-ct" id="ext-gen119" style="height: 50px; width: 634px;">
                                  <div class="x-column-inner" id="ext-gen156" style="width: 634px; height: 50px;">
                                    <div id="Panel100" class=" x-panel x-panel-noborder x-form-label-top x-column" style="width: 170px;">
                                      <div class="x-panel-bwrap" id="ext-gen158">
                                        <div class="x-panel-body x-panel-body-noheader x-panel-body-noborder" id="ext-gen159" style="padding: 5px; width: 160px; height: 40px;">
                                          <div class="x-form-item " tabindex="-1" id="ext-gen170"><label for="contraDatFactColoniaTF" style="width:auto;" class="x-form-item-label" id="ext-gen171">Colonia:</label>
                                            <div class="x-form-element" id="x-form-el-contraDatFactColoniaTF" style="padding-left:0;"><input type="text" size="20" autocomplete="off" id="contraDatFactColoniaTF" name="contraDatFactColoniaTF"
                                                class=" x-form-text x-form-field" maxlength="100" style="width: 152px;"></div>
                                            <div class="x-form-clear-left"></div>
                                          </div>
                                        </div>
                                      </div>
                                    </div>
                                    <div id="Panel106" class=" x-panel x-panel-noborder x-form-label-top x-column" style="width: 160px;">
                                      <div class="x-panel-bwrap" id="ext-gen161">
                                        <div class="x-panel-body x-panel-body-noheader x-panel-body-noborder" id="ext-gen162" style="padding: 5px; width: 150px; height: 40px;">
                                          <div class="x-form-item " tabindex="-1" id="ext-gen172"><label for="contratEstadoDatFactComboBox" style="width:auto;" class="x-form-item-label" id="ext-gen173">Estado:</label>
                                            <div class="x-form-element" id="x-form-el-contratEstadoDatFactComboBox" style="padding-left:0;">
                                              <div class="x-form-field-wrap x-form-field-trigger-wrap" id="ext-gen174" style="width: 135px;"><input type="hidden" name="contratEstadoDatFactComboBox_Value" id="ext-gen176" value="0"><input type="text"
                                                  size="24" autocomplete="off" id="contratEstadoDatFactComboBox" name="contratEstadoDatFactComboBox" class="x-form-text x-form-field x-trigger-noedit" readonly="" title="" style="width: 110px;"><img
                                                  src="data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="x-form-trigger x-form-arrow-trigger" id="ext-gen175"><input type="hidden" size="20" autocomplete="off"
                                                  id="contratEstadoDatFactComboBox_SelIndex" name="contratEstadoDatFactComboBox_SelIndex" class=" x-form-hidden x-form-field" value="0"></div>
                                              <div class="x-form-indicator icon-accept" style="padding-left: 18px; left: 137px; top: 4px;" id="ext-gen177"></div>
                                            </div>
                                            <div class="x-form-clear-left"></div>
                                          </div>
                                        </div>
                                      </div>
                                    </div>
                                    <div id="Panel101" class=" x-panel x-panel-noborder x-form-label-top x-column" style="width: 150px;">
                                      <div class="x-panel-bwrap" id="ext-gen164">
                                        <div class="x-panel-body x-panel-body-noheader x-panel-body-noborder" id="ext-gen165" style="padding: 5px; width: 140px; height: 40px;">
                                          <div class="x-form-item " tabindex="-1" id="ext-gen178"><label for="contratMunDatFactComboBox" style="width:auto;" class="x-form-item-label" id="ext-gen179">Municipio:</label>
                                            <div class="x-form-element" id="x-form-el-contratMunDatFactComboBox" style="padding-left:0;">
                                              <div class="x-form-field-wrap x-form-field-trigger-wrap" id="ext-gen180" style="width: 120px;"><input type="hidden" name="contratMunDatFactComboBox_Value" id="ext-gen182" value=""><input type="text"
                                                  size="24" autocomplete="off" id="contratMunDatFactComboBox" name="contratMunDatFactComboBox" class="x-form-text x-form-field x-trigger-noedit" readonly="" title="" style="width: 95px;"><img
                                                  src="data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="x-form-trigger x-form-arrow-trigger" id="ext-gen181"><input type="hidden" size="20" autocomplete="off"
                                                  id="contratMunDatFactComboBox_SelIndex" name="contratMunDatFactComboBox_SelIndex" class=" x-form-hidden x-form-field" value="0"></div>
                                            </div>
                                            <div class="x-form-clear-left"></div>
                                          </div>
                                        </div>
                                      </div>
                                    </div>
                                    <div id="Panel96" class=" x-panel x-panel-noborder x-form-label-top x-column" style="width: 150px;">
                                      <div class="x-panel-bwrap" id="ext-gen167">
                                        <div class="x-panel-body x-panel-body-noheader x-panel-body-noborder" id="ext-gen168" style="padding: 5px; width: 140px; height: 40px;">
                                          <div class="x-form-item " tabindex="-1" id="ext-gen183"><label for="contraDatFactCodigoPostalTF" style="width:auto;" class="x-form-item-label" id="ext-gen184">Código Postal:</label>
                                            <div class="x-form-element" id="x-form-el-contraDatFactCodigoPostalTF" style="padding-left:0;"><input type="text" size="20" autocomplete="off" id="contraDatFactCodigoPostalTF"
                                                name="contraDatFactCodigoPostalTF" class=" x-form-text x-form-field" maxlength="5" style="width: 117px;">
                                              <div class="x-form-indicator icon-accept" style="padding-left: 18px; left: 127px; top: 4px;" id="ext-gen185"></div>
                                            </div>
                                            <div class="x-form-clear-left"></div>
                                          </div>
                                        </div>
                                      </div>
                                    </div>
                                    <div class="x-clear" id="ext-gen157"></div>
                                  </div>
                                </div>
                              </div>
                            </div>
                            <div id="Panel83" class=" x-panel x-panel-noborder" style="width: 634px;">
                              <div class="x-panel-bwrap" id="ext-gen121">
                                <div class="x-panel-body x-panel-body-noheader x-panel-body-noborder x-column-layout-ct" id="ext-gen122" style="width: 634px; height: 70px;">
                                  <div class="x-column-inner" id="ext-gen186" style="width: 634px; height: 70px;"><img id="Image5" src="Imagenes/contrataciones/nuevo/nota-otros-datos.png" class=" x-column"
                                      style="border: none; width: 634px; height: 70px;">
                                    <div class="x-clear" id="ext-gen187"></div>
                                  </div>
                                </div>
                              </div>
                            </div>
                          </div>
                        </div>
                      </div>
                      <div class="x-clear" id="ext-gen108"></div>
                    </div>
                  </div>
                  <div class="x-panel-footer x-panel-btns" id="ext-gen101" style="width: 636px;">
                    <div id="ext-comp-1020" class="x-panel-fbar x-small-editor x-toolbar-layout-ct" style="width: auto;">
                      <table cellspacing="0" class="x-toolbar-ct">
                        <tbody>
                          <tr>
                            <td class="x-toolbar-left" align="left">
                              <table cellspacing="0">
                                <tbody>
                                  <tr class="x-toolbar-left-row"></tr>
                                </tbody>
                              </table>
                            </td>
                            <td class="x-toolbar-right" align="right">
                              <table cellspacing="0" class="x-toolbar-right-ct">
                                <tbody>
                                  <tr>
                                    <td>
                                      <table cellspacing="0">
                                        <tbody>
                                          <tr class="x-toolbar-right-row">
                                            <td class="x-toolbar-cell" id="ext-gen105"><img id="canDatFisImageButton" src="imagenes/contrataciones/cancelar.png" style="border: none; cursor: pointer;"></td>
                                            <td class="x-toolbar-cell" id="ext-gen106"><img id="regDatFisLinkButton" src="imagenes/contrataciones/guardar.png" style="border: none; cursor: pointer;"></td>
                                          </tr>
                                        </tbody>
                                      </table>
                                    </td>
                                    <td>
                                      <table cellspacing="0">
                                        <tbody>
                                          <tr class="x-toolbar-extras-row"></tr>
                                        </tbody>
                                      </table>
                                    </td>
                                  </tr>
                                </tbody>
                              </table>
                            </td>
                          </tr>
                        </tbody>
                      </table>
                    </div>
                    <div class="x-clear" id="ext-gen103"></div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="x-window-bl x-panel-nofooter" id="ext-gen93">
        <div class="x-window-br">
          <div class="x-window-bc"></div>
        </div>
      </div>
    </div><a href="#" class="x-dlg-focus" tabindex="-1" id="ext-gen95">&nbsp;</a>
  </div>
  <div class="x-window-proxy" id="ext-gen197"></div>
  <div class="ext-el-mask" id="ext-gen198" style="display: none;"></div>
  <div id="winContratPriv" class=" x-window" style="position: absolute; z-index: 11000; visibility: hidden; left: -10000px; top: -10000px; width: 670px;">
    <div class="x-window-tl">
      <div class="x-window-tr">
        <div class="x-window-tc">
          <div class="x-window-header x-unselectable x-panel-icon icon-user x-window-draggable" id="ext-gen188"><span class="x-window-header-text" id="ext-gen199">Datos de Facturación</span></div>
        </div>
      </div>
    </div>
    <div class="x-window-bwrap" id="ext-gen189">
      <div class="x-window-ml">
        <div class="x-window-mr">
          <div class="x-window-mc" id="ext-gen193">
            <div class="x-window-body" id="ext-gen190" style="padding: 5px; width: 646px; height: 278px;"><textarea style="width: 638px; height: 272px;" autocomplete="off" id="contratPrivTextArea" name="contratPrivTextArea"
                class=" x-form-textarea x-form-field"></textarea></div>
          </div>
        </div>
      </div>
      <div class="x-window-bl" id="ext-gen192">
        <div class="x-window-br">
          <div class="x-window-bc">
            <div class="x-window-footer x-panel-btns" id="ext-gen191" style="width: 646px;">
              <div id="ext-comp-1021" class="x-panel-fbar x-small-editor x-toolbar-layout-ct" style="width: auto;">
                <table cellspacing="0" class="x-toolbar-ct">
                  <tbody>
                    <tr>
                      <td class="x-toolbar-left" align="left">
                        <table cellspacing="0">
                          <tbody>
                            <tr class="x-toolbar-left-row"></tr>
                          </tbody>
                        </table>
                      </td>
                      <td class="x-toolbar-right" align="right">
                        <table cellspacing="0" class="x-toolbar-right-ct">
                          <tbody>
                            <tr>
                              <td>
                                <table cellspacing="0">
                                  <tbody>
                                    <tr class="x-toolbar-right-row">
                                      <td class="x-toolbar-cell" id="ext-gen200">
                                        <table id="Button2" cellspacing="0" class="x-btn  x-btn-text-icon" style="width: 75px;">
                                          <tbody class="x-btn-small x-btn-icon-small-left">
                                            <tr>
                                              <td class="x-btn-tl"><i>&nbsp;</i></td>
                                              <td class="x-btn-tc"></td>
                                              <td class="x-btn-tr"><i>&nbsp;</i></td>
                                            </tr>
                                            <tr>
                                              <td class="x-btn-ml"><i>&nbsp;</i></td>
                                              <td class="x-btn-mc"><em class="" unselectable="on"><button type="button" id="ext-gen201" class=" x-btn-text icon-cancel">Cerrar</button></em></td>
                                              <td class="x-btn-mr"><i>&nbsp;</i></td>
                                            </tr>
                                            <tr>
                                              <td class="x-btn-bl"><i>&nbsp;</i></td>
                                              <td class="x-btn-bc"></td>
                                              <td class="x-btn-br"><i>&nbsp;</i></td>
                                            </tr>
                                          </tbody>
                                        </table>
                                      </td>
                                    </tr>
                                  </tbody>
                                </table>
                              </td>
                              <td>
                                <table cellspacing="0">
                                  <tbody>
                                    <tr class="x-toolbar-extras-row"></tr>
                                  </tbody>
                                </table>
                              </td>
                            </tr>
                          </tbody>
                        </table>
                      </td>
                    </tr>
                  </tbody>
                </table>
              </div>
              <div class="x-clear" id="ext-gen195"></div>
            </div>
          </div>
        </div>
      </div>
    </div><a href="#" class="x-dlg-focus" tabindex="-1" id="ext-gen196">&nbsp;</a>
  </div>
  <div class="x-window-proxy" id="ext-gen210"></div>
  <div id="winAgradecimientos" class=" x-window" style="position: absolute; z-index: 11000; visibility: hidden; left: -10000px; top: -10000px; width: 600px;">
    <div class="x-window-tl">
      <div class="x-window-tr">
        <div class="x-window-tc">
          <div class="x-window-header x-unselectable x-panel-icon icon-user x-window-draggable" id="ext-gen203">
            <div class="x-tool x-tool-close" id="ext-gen208">&nbsp;</div><span class="x-window-header-text" id="ext-gen211">Contrataciones [InvoiceOne - Proveedor Autorizado de Certificación CFDI 57203]</span>
          </div>
        </div>
      </div>
    </div>
    <div class="x-window-bwrap" id="ext-gen204">
      <div class="x-window-ml">
        <div class="x-window-mr">
          <div class="x-window-mc" id="ext-gen207">
            <div class="x-window-body" id="ext-gen205" style="padding: 5px; width: 576px; height: 488px;">
              <div id="Panel105" class=" x-panel" style="width: 576px;">
                <div class="x-panel-bwrap" id="ext-gen213">
                  <div class="x-panel-body x-panel-body-noheader" id="ext-gen214" style="overflow: auto; position: relative; width: 574px; height: 486px;"></div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="x-window-bl x-panel-nofooter" id="ext-gen206">
        <div class="x-window-br">
          <div class="x-window-bc"></div>
        </div>
      </div>
    </div><a href="#" class="x-dlg-focus" tabindex="-1" id="ext-gen209">&nbsp;</a>
  </div>
  <div class="x-window-proxy" id="ext-gen320"></div>
  <div class="ext-el-mask" id="ext-gen321" style="display: none;"></div>
  <div id="winAviso" class=" x-window" style="position: absolute; z-index: 11000; visibility: hidden; left: -10000px; top: -10000px; width: 500px;">
    <div class="x-window-tl">
      <div class="x-window-tr">
        <div class="x-window-tc">
          <div class="x-window-header x-unselectable x-panel-icon icon-user x-window-draggable" id="ext-gen312">
            <div class="x-tool x-tool-close" id="ext-gen318">&nbsp;</div>
            <div class="x-tool x-tool-minimize" id="ext-gen317">&nbsp;</div><span class="x-window-header-text" id="ext-gen322">Aviso Importante</span>
          </div>
        </div>
      </div>
    </div>
    <div class="x-window-bwrap" id="ext-gen313">
      <div class="x-window-ml">
        <div class="x-window-mr">
          <div class="x-window-mc" id="ext-gen316">
            <div class="x-window-body" id="ext-gen314" style="padding: 5px; width: 476px; height: 208px;">
              <div id="pnlMsg" class=" x-panel x-form-label-left" style="width: 476px;">
                <div class="x-panel-bwrap" id="ext-gen324">
                  <div class="x-panel-body x-panel-body-noheader x-form" method="POST" id="ext-gen311" style="width: 474px; height: 168px;">
                    <div class="x-form-item  x-hide-label" tabindex="-1" id="ext-gen331"><label for="txtMensaje" style="width:100px;" class="x-form-item-label" id="ext-gen332"></label>
                      <div class="x-form-element" id="x-form-el-txtMensaje" style="padding-left:105px"><textarea style="width: 467px; height: 164px; overflow: auto;" autocomplete="off" id="txtMensaje" name="txtMensaje"
                          class=" x-form-textarea x-form-field" readonly=""></textarea></div>
                      <div class="x-form-clear-left"></div>
                    </div>
                  </div>
                  <div class="x-panel-footer x-panel-btns" id="ext-gen325" style="width: 466px;">
                    <div id="ext-comp-1286" class="x-panel-fbar x-small-editor x-toolbar-layout-ct" style="width: auto;">
                      <table cellspacing="0" class="x-toolbar-ct">
                        <tbody>
                          <tr>
                            <td class="x-toolbar-left" align="left">
                              <table cellspacing="0">
                                <tbody>
                                  <tr class="x-toolbar-left-row"></tr>
                                </tbody>
                              </table>
                            </td>
                            <td class="x-toolbar-right" align="right">
                              <table cellspacing="0" class="x-toolbar-right-ct">
                                <tbody>
                                  <tr>
                                    <td>
                                      <table cellspacing="0">
                                        <tbody>
                                          <tr class="x-toolbar-right-row">
                                            <td class="x-toolbar-cell" id="ext-gen329">
                                              <table id="btnCerrarMensaje" cellspacing="0" class="x-btn  x-btn-text-icon" style="width: 75px;">
                                                <tbody class="x-btn-small x-btn-icon-small-left">
                                                  <tr>
                                                    <td class="x-btn-tl"><i>&nbsp;</i></td>
                                                    <td class="x-btn-tc"></td>
                                                    <td class="x-btn-tr"><i>&nbsp;</i></td>
                                                  </tr>
                                                  <tr>
                                                    <td class="x-btn-ml"><i>&nbsp;</i></td>
                                                    <td class="x-btn-mc"><em class="" unselectable="on"><button type="button" id="ext-gen330" class=" x-btn-text icon-accept">Aceptar</button></em></td>
                                                    <td class="x-btn-mr"><i>&nbsp;</i></td>
                                                  </tr>
                                                  <tr>
                                                    <td class="x-btn-bl"><i>&nbsp;</i></td>
                                                    <td class="x-btn-bc"></td>
                                                    <td class="x-btn-br"><i>&nbsp;</i></td>
                                                  </tr>
                                                </tbody>
                                              </table>
                                            </td>
                                          </tr>
                                        </tbody>
                                      </table>
                                    </td>
                                    <td>
                                      <table cellspacing="0">
                                        <tbody>
                                          <tr class="x-toolbar-extras-row"></tr>
                                        </tbody>
                                      </table>
                                    </td>
                                  </tr>
                                </tbody>
                              </table>
                            </td>
                          </tr>
                        </tbody>
                      </table>
                    </div>
                    <div class="x-clear" id="ext-gen327"></div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="x-window-bl x-panel-nofooter" id="ext-gen315">
        <div class="x-window-br">
          <div class="x-window-bc"></div>
        </div>
      </div>
    </div><a href="#" class="x-dlg-focus" tabindex="-1" id="ext-gen319">&nbsp;</a>
  </div>
</form>

Text Content

Mapeadores (WebService)
Cuenta de Timbrado
Listado CFDI Consolidado
Integradores








 
Iniciar Sesión [ InvoiceONE - Proveedor Autorizado de Certificación 57203 ]
V.2023.40

 

 Inicio 

 *  Iniciar S... 

 * 
   


Timbres disponibles
? / 9999999

 





 









 










Recuperar Contraseña
Correo electrónico:



   Recibir Accesos   

   Cerrar   




 










Datos de Facturación
Nombre de la Empresa (Razón Social):


RFC:



Calle:


Número exterior:


Número interior:



Colonia:


Estado:


Municipio:


Código Postal:








 


Datos de Facturación

   Cerrar   




 

 
Contrataciones [InvoiceOne - Proveedor Autorizado de Certificación CFDI 57203]

 


 
 
Aviso Importante

   Aceptar   





 





 
Please wait
Loading wallpaper...


 
 


   Aceptar   

   Sí   

   No   

   Cancelar