예제 #1
0
    def Validacion(self):
        retorno = True
        if not self.view.validaCliente.text():
            Ventanas.showAlert(
                LeerIni('nombre_sistema'),
                "ERROR: No se ha especificado un cliente valido")
            retorno = False

        for x in range(self.view.gridFactura.rowCount()):
            iva = float(self.view.gridFactura.ObtenerItem(fila=x, col='IVA'))
            if str(iva) not in FEv1().TASA_IVA:
                Ventanas.showAlert(
                    LeerIni('nombre_sistema'),
                    "Error el item {} no tiene un IVA valido".format(x + 1))
                retorno = False
            codigo = self.view.gridFactura.ObtenerItem(fila=x, col='Codigo')
            try:
                articulo = Articulo.get_by_id(codigo)
            except Articulo.DoesNotExist:
                Ventanas.showAlert(
                    LeerIni('nombre_sistema'),
                    "Error el item {} tiene un articulo no valido".format(x +
                                                                          1))
                retorno = False

        return retorno
 def ObtieneNumeroFactura(self):
     self.view.layoutFactura.lineEditPtoVta.setText(LeerIni(clave='pto_vta', key='WSFEv1').zfill(4))
     # tipos = Tipocomprobantes.ComboTipoComp(tiporesp=int(LeerIni(clave='cat_iva', key='WSFEv1')))
     # tipo_cpte = [k for (k, v) in tipos.valores.iteritems() if v == self.view.cboComprobante.text()][0]
     tipo_cpte = self.view.cboComprobante.text()
     nro = FEv1().UltimoComprobante(tipo=tipo_cpte,
                                    ptovta=self.view.layoutFactura.lineEditPtoVta.text())
     self.tipo_cpte = tipo_cpte
     self.view.layoutFactura.lineEditNumero.setText(str(int(nro)+1).zfill(8))
     self.SumaTodo()
예제 #3
0
    def Comprobar(self, *args, **kwargs):

        cbte_modo = kwargs['cbte_modo']  # modalidad de emision: CAI, CAE, CAEA
        cuit_emisor = kwargs['cuit_emisor'].replace('-', '')  # proveedor
        pto_vta = kwargs['pto_vta']  # punto de venta habilitado en AFIP
        cbte_tipo = kwargs[
            'cbte_tipo']  # 1: factura A (ver tabla de parametros)
        cbte_nro = kwargs['cbte_nro']  # numero de factura
        cbte_fch = kwargs['cbte_fch']  # fecha en formato aaaammdd
        cod_autorizacion = kwargs[
            'cod_autorizacion']  # numero de CAI, CAE o CAEA
        # if cbte_modo == 'CAI':
        #     imp_total = "0"  # importe total
        #     doc_tipo_receptor = ""  # CUIT (obligatorio Facturas A o M)
        #     doc_nro_receptor = ""  # numero de CUIT del cliente
        # else:
        imp_total = kwargs['imp_total']  # importe total
        doc_tipo_receptor = kwargs[
            'doc_tipo_receptor']  # CUIT (obligatorio Facturas A o M)
        doc_nro_receptor = kwargs['doc_nro_receptor'].replace(
            '-', '')  # numero de CUIT del cliente

        wsfev1 = FEv1()
        ta = wsfev1.Autenticar(service='wscdc')
        self.SetTicketAcceso(ta_string=ta)
        self.Cuit = LeerIni(clave='cuit',
                            key='WSCDC')  #cuit de la empresa/persona
        if LeerIni(clave='h**o') == 'N':
            self.WSDL = LeerIni(clave='url_prod', key='WSCDC')
            self.Conectar("", self.WSDL)
        else:
            self.Conectar()

        # if cbte_modo == 'CAI':
        #     ok = self.ConstatarComprobante(cbte_modo, cuit_emisor, pto_vta, cbte_tipo,
        #                         cbte_nro, cbte_fch, imp_total, cod_autorizacion)
        # else:
        ok = self.ConstatarComprobante(cbte_modo, cuit_emisor, pto_vta,
                                       cbte_tipo, cbte_nro, cbte_fch,
                                       imp_total, cod_autorizacion,
                                       doc_tipo_receptor, doc_nro_receptor)

        return ok
예제 #4
0
    def ConsultarPersona(self, cuit=''):
        self.H**O = True if LeerIni(clave='h**o') == 'S' else False

        wsfev1 = FEv1()
        ta = wsfev1.Autenticar(service='ws_sr_padron_a5')
        # ta = wsfev1.Autenticar(service='ws_sr_padron_a13')
        self.SetTicketAcceso(ta_string=ta)
        self.Cuit = LeerIni(clave='cuit',
                            key='WSFEv1')  #cuit de la empresa/persona

        if LeerIni(clave='h**o') == 'N':
            self.WSDL = "https://aws.afip.gov.ar/sr-padron/webservices/personaServiceA5?wsdl"
            # self.WSDL = "https://aws.afip.gov.ar/sr-padron/webservices/personaServiceA13?wsdl"
            self.Conectar("", self.WSDL)
        else:
            self.Conectar()
        ok = self.Consultar(id_persona=cuit)
        # ok = self.Consultar(id_persona=23347203)
        return ok
예제 #5
0
 def ConsultaCAE(self):
     fe = FEv1()
     # tipocbte = [k for (k, v) in self.view.cboTipoComp.valores.iteritems() if v == self.view.cboTipoComp.text()][0]
     tipocbte = self.view.cboTipoComp.text()
     fe.ConsultarCAE(tipocbte=tipocbte,
                     puntoventa=self.view.layoutFactura.lineEditPtoVta.text(),
                     numero=self.view.layoutFactura.lineEditNumero.text())
     self.view.textCAE.setText(fe.CAE)
     self.view.textTotal.setText(str(fe.ImpTotal))
     self.view.textNeto.setText(str(fe.ImpNeto))
     self.view.textIVA.setText(str(fe.ImpIVA))
     self.view.textDGR.setText(str(fe.ImpTrib))
     self.view.textTipoDoc.setText(str(fe.factura["tipo_doc"]))
     self.view.textDocCli.setText(str(fe.factura["nro_doc"]))
     self.view.textFecha.setText(fe.FechaCbte)
     self.view.gridIVA.setRowCount(0)
     for iva in fe.factura['iva']:
         item = [
             iva['iva_id'], iva['base_imp'], iva['importe']
         ]
         self.view.gridIVA.AgregaItem(items=item)
예제 #6
0
    def ImprimeFactura(self, idcabecera=None, mostrar=True, *args, **kwargs):
        if not idcabecera:
            return
        cabfact = Cabfact().get_by_id(idcabecera)
        print("imprimir factura {}".format(cabfact.numero))
        pyfpdf = FEPDF()
        #cuit del emisor
        pyfpdf.CUIT = LeerIni(clave='cuit', key='WSFEv1')
        #establezco formatos (cantidad de decimales):
        pyfpdf.FmtCantidad = "0.4"
        pyfpdf.FmtPrecio = "0.2"
        #Datos del encabezado de la factura:
        tipo_cbte = cabfact.tipocomp.codigo
        punto_vta = cabfact.numero[:4]
        cbte_nro = cabfact.numero[-8:]
        fecha = FechaMysql(cabfact.fecha)
        concepto = cabfact.concepto
        #datos del cliente:
        tipo_doc = "80" if cabfact.cliente.tiporesp_id != 3 else "96"
        nro_doc = cabfact.cliente.cuit if cabfact.cliente.tiporesp_id != 3 else str(
            cabfact.cliente.dni)
        nombre_cliente = cabfact.nombre if cabfact.nombre != '' else cabfact.cliente.nombre
        domicilio_cliente = cabfact.domicilio

        #totales del comprobante:
        imp_total = cabfact.total
        imp_tot_conc = "0.00"
        imp_neto = cabfact.neto
        imp_iva = cabfact.iva
        imp_trib = cabfact.percepciondgr
        imp_op_ex = "0.00"
        imp_subtotal = cabfact.neto
        fecha_cbte = fecha
        fecha_venc_pago = fecha
        #Fechas del período del servicio facturado
        if int(cabfact.concepto) in [
                FEv1().SERVICIOS, FEv1().PRODUCTOYSERVICIOS
        ]:
            fecha_serv_desde = FechaMysql(cabfact.desde)
            fecha_serv_hasta = FechaMysql(cabfact.hasta)
        else:
            fecha_serv_hasta = None
            fecha_serv_desde = None

        moneda_id = "PES"
        moneda_ctz = "1.000"
        obs_generales = ""
        obs_comerciales = ""
        moneda_id = ""
        moneda_ctz = 1
        cae = cabfact.cae
        fecha_vto_cae = FechaMysql(cabfact.venccae)

        #Creo la factura(internamente en la interfaz)
        ok = pyfpdf.CrearFactura(concepto, tipo_doc, nro_doc, tipo_cbte,
                                 punto_vta, cbte_nro, imp_total, imp_tot_conc,
                                 imp_neto, imp_iva, imp_trib, imp_op_ex,
                                 fecha_cbte, fecha_venc_pago, fecha_serv_desde,
                                 fecha_serv_hasta, moneda_id, moneda_ctz, cae,
                                 fecha_vto_cae, "", nombre_cliente,
                                 domicilio_cliente, 0)
        pyfpdf.EstablecerParametro("forma_pago", cabfact.formapago.detalle)
        pyfpdf.EstablecerParametro(
            "custom-nro-cli",
            "[{}]".format(str(cabfact.cliente.idcliente).zfill(5)))
        pyfpdf.EstablecerParametro("localidad_cli",
                                   cabfact.cliente.localidad.nombre)
        pyfpdf.EstablecerParametro("provincia_cli",
                                   cabfact.cliente.localidad.provincia)
        pyfpdf.EstablecerParametro("iva_cli", cabfact.cliente.tiporesp.nombre)

        #Agregar comprobantes asociados(si es una NC / ND):
        if cabfact.tipocomp.codigo in [3, 8, 13]:
            cpbterel = CpbteRel().select().where(
                CpbteRel.idcabfact == cabfact.idcabfact)
            for cp in cpbterel:
                tipo = cp.idtipocpbte.codigo
                pto_vta = cp.numero[:4]
                nro = cp.numero[-8:]
                pyfpdf.AgregarCmpAsoc(tipo, pto_vta, nro)
        # if str(self.view.cboComprobante.text()).find('credito'):
        #     tipo = 19
        #     pto_vta = 2
        #     nro = 1234
        #     pyfepdf.AgregarCmpAsoc(tipo, pto_vta, nro)

        #Agrego subtotales de IVA(uno por alicuota)
        if cabfact.netoa != 0:
            iva_id = 5  #c�digo para al�cuota del 21 %
            base_imp = cabfact.netoa  #importe neto sujeto a esta al�cuota
            importe = cabfact.netoa * 21 / 100  #importe liquidado de iva
            ok = pyfpdf.AgregarIva(iva_id, base_imp, importe)

        if cabfact.netob != 0:
            iva_id = 4  # c�digo para al�cuota del 10.5 %
            base_imp = cabfact.netob  # importe neto sujeto a esta al�cuota
            importe = cabfact.netob * 10.5 / 100  # importe liquidado de iva
            ok = pyfpdf.AgregarIva(iva_id, base_imp, importe)

        if cabfact.netoa == 0 and cabfact.netob == 0:
            iva_id = 3  # c�digo para al�cuota del 21 %
            base_imp = cabfact.netob  # importe neto sujeto a esta al�cuota
            importe = 0  # importe liquidado de iva
            ok = pyfpdf.AgregarIva(iva_id, base_imp, importe)

        if cabfact.percepciondgr != 0:
            #Agregar cada impuesto(por ej.IIBB, retenciones, percepciones, etc.):
            tributo_id = 99  #codigo para 99 - otros tributos
            Desc = cabfact.cliente.percepcion.detalle
            base_imp = cabfact.neto  #importe sujeto a estetributo
            alic = cabfact.cliente.percepcion.porcentaje  #alicuota(porcentaje) de estetributo
            importe = cabfact.percepciondgr  #importe liquidado de este tributo
            ok = pyfpdf.AgregarTributo(tributo_id, Desc, base_imp, alic,
                                       importe)

        det = Detfact().select().where(Detfact.idcabfact == cabfact.idcabfact)
        for d in det:
            #Agrego detalles de cada item de la factura:
            u_mtx = 0  #unidades
            cod_mtx = ""  #c�digo de barras
            codigo = d.idarticulo.idarticulo  #codigo interno a imprimir(ej. "articulo")
            ds = d.descad.strip()
            qty = d.cantidad  #cantidad
            umed = 7  #c�digo de unidad de medida(ej. 7 para"unidades")
            precio = d.precio  #precio neto(A) o iva incluido(B)
            bonif = 0  #importe de descuentos
            iva_id = FEv1().TASA_IVA[str(float(
                d.tipoiva.iva))]  #c�digopara al�cuota del 21 %
            imp_iva = d.montoiva  #importe liquidado deiva
            importe = d.precio * d.cantidad  #importe total del item
            despacho = ""  #numero de despacho de importaci�n
            dato_a = ""  #primer dato adicional del item
            dato_b = ""
            dato_c = ""
            dato_d = ""
            dato_e = ""  #ultimo dato adicionaldel item
            ok = pyfpdf.AgregarDetalleItem(u_mtx, cod_mtx, codigo, ds, qty,
                                           umed, precio, bonif, iva_id,
                                           imp_iva, importe, despacho, dato_a,
                                           dato_b, dato_c, dato_d, dato_e)

        #Agrego datos adicionales fijos:
        ok = pyfpdf.AgregarDato("logo",
                                ubicacion_sistema() + "plantillas/logo.png")
        fondo = ParamSist.ObtenerParametro("FONDO_FACTURA")
        if fondo:
            x1 = ParamSist.ObtenerParametro("FONDO_FACTURA_X1") or 50
            y1 = ParamSist.ObtenerParametro("FONDO_FACTURA_Y1") or 117.1
            x2 = ParamSist.ObtenerParametro("FONDO_FACTURA_X2") or 150
            y2 = ParamSist.ObtenerParametro("FONDO_FACTURA_Y2") or 232.9
            pyfpdf.AgregarCampo("fondo_factura",
                                'I',
                                x1,
                                y1,
                                x2,
                                y2,
                                foreground=0x808080,
                                priority=-1,
                                text=imagen(fondo))
        ok = pyfpdf.AgregarDato(
            "EMPRESA", "Razon social: {}".format(
                DeCodifica(LeerIni(clave='empresa', key='FACTURA'))))
        ok = pyfpdf.AgregarDato(
            "MEMBRETE1", "Domicilio Comercial: {}".format(
                DeCodifica(LeerIni(clave='membrete1', key='FACTURA'))))
        ok = pyfpdf.AgregarDato(
            "MEMBRETE2", DeCodifica(LeerIni(clave='membrete2', key='FACTURA')))
        ok = pyfpdf.AgregarDato(
            "CUIT", 'CUIT: {}'.format(LeerIni(clave='cuit', key='WSFEv1')))
        ok = pyfpdf.AgregarDato("IIBB", LeerIni(clave='iibb', key='FACTURA'))
        ok = pyfpdf.AgregarDato(
            "IVA", "Condicion frente al IVA: {}".format(
                LeerIni(clave='iva', key='FACTURA')))
        ok = pyfpdf.AgregarDato(
            "INICIO", "Fecha inicio actividades: {}".format(
                LeerIni(clave='inicio', key='FACTURA')))

        if int(cabfact.tipocomp.codigo
               ) in Constantes.COMPROBANTES_FCE:  #si es una FCE
            pyfpdf.AgregarDato('CBUFCE', LeerIni('CBUFCE', key='FACTURA'))
            pyfpdf.AgregarDato('ALIASFCE', LeerIni('ALIASFCE', key='FACTURA'))
            pyfpdf.AgregarDato('nombre_condvta', Constantes.COND_VTA['T'])
            ok = pyfpdf.CargarFormato(ubicacion_sistema() +
                                      "/plantillas/factura-fce.csv")
        else:
            #Cargo el formato desde el archivo CSV(opcional)
            #(carga todos los campos a utilizar desde la planilla)
            ok = pyfpdf.CargarFormato(ubicacion_sistema() +
                                      "/plantillas/factura.csv")
        #Creo plantilla para esta factura(papel A4vertical):

        if LeerIni(clave='h**o') == 'S':
            pyfpdf.AgregarCampo("h**o",
                                'T',
                                150,
                                350,
                                0,
                                0,
                                size=70,
                                rotate=45,
                                foreground=0x808080,
                                priority=-1,
                                text="HOMOLOGACION")
        papel = "A4"  #o "letter" para carta, "legal" para oficio
        orientacion = "portrait"  #o landscape(apaisado)
        ok = pyfpdf.CrearPlantilla(papel, orientacion)
        num_copias = int(
            LeerIni(clave='num_copias',
                    key='FACTURA'))  #original, duplicado y triplicado
        lineas_max = 24  #cantidad de linas de items porp�gina
        qty_pos = "izq"  #(cantidad a la izquierda de la descripci�n del art�culo)
        #Proceso la plantilla
        ok = pyfpdf.ProcesarPlantilla(num_copias, lineas_max, qty_pos)

        if not os.path.isdir('facturas'):
            os.mkdir('facturas')
        #Genero el PDF de salida seg�n la plantilla procesada
        salida = join(
            'facturas', "{}-{}.pdf".format(cabfact.tipocomp.nombre,
                                           cabfact.numero))
        ok = pyfpdf.GenerarPDF(salida)
        #Abro el visor de PDF y muestro lo generado
        #(es necesario tener instalado Acrobat Reader o similar)
        imprimir = False  #cambiar a True para que lo envie directo a laimpresora
        if mostrar:
            pyfpdf.MostrarPDF(salida, imprimir)

        self.facturaGenerada = salida
예제 #7
0
    def CreaFE(self, *args, **kwargs):
        ok = True
        self.ObtieneNumeroFactura()
        wsfev1 = FEv1()
        ta = wsfev1.Autenticar()
        #Setear tocken y sign de autorizacion(ticket de accesso, pasos previos)
        wsfev1.SetTicketAcceso(ta)
        wsfev1.Cuit = LeerIni(
            clave='cuit',
            key='WSFEv1')  #CUIT del emisor (debe estar registrado en la AFIP)
        #Conectar al Servicio Web de Facturacion
        #Produccion usar: *-- ok = WSFE.Conectar("", "https://servicios1.afip.gov.ar/wsfev1/service.asmx?WSDL") & & Producción
        if LeerIni(clave='h**o') == "S":
            ok = wsfev1.Conectar("")  #Homologacion
        else:
            cacert = LeerIni(clave='cacert', key='WSFEv1')
            ok = wsfev1.Conectar("",
                                 LeerIni(clave="url_prod", key="WSFEv1"),
                                 cacert=cacert)

        if self.view.checkBoxServicios.isChecked() \
            and self.view.checkBoxProductos.isChecked(): #si es productoso y servicios
            concepto = wsfev1.PRODUCTOYSERVICIOS
        elif self.view.checkBoxServicios.isChecked():
            concepto = wsfev1.SERVICIOS
        else:
            concepto = wsfev1.PRODUCTOS

        self.concepto = concepto
        if self.cliente.tiporesp.idtiporesp == 3:  #consumidor final
            if str(self.view.lineEditDocumento.text()).strip() in ['0', '']:
                tipo_doc = 99
            else:
                tipo_doc = 96
        else:
            tipo_doc = 80

        punto_vta = int(self.view.layoutFactura.lineEditPtoVta.value())
        tipo_cbte = self.tipo_cpte
        nro_doc = str(self.view.lineEditDocumento.text()).strip().replace(
            '-', '')
        cbt_desde = int(self.view.layoutFactura.lineEditNumero.value())
        cbt_hasta = cbt_desde
        imp_total = self.view.lineEditTotal.text()
        imp_tot_conc = "0.00"
        if int(LeerIni(clave='cat_iva',
                       key='WSFEv1')) == 1:  # si es Resp insc el contribuyente
            imp_neto = str(round(float(self.view.lineEditTotal.text()) - \
                float(self.view.lineEditTributos.text()) - \
                float(self.view.lineEditTotalIVA.text()), 2))
        else:
            imp_neto = str(round(float(self.view.lineEditTotal.text()), 2))
        imp_iva = str(round(float(self.view.lineEditTotalIVA.text()), 2))
        imp_trib = str(round(float(self.view.lineEditTributos.text()), 2))
        impto_liq_rni = "0.00"
        imp_op_ex = "0.00"
        fecha_cbte = self.view.lineEditFecha.getFechaSql()
        #Fechas del periodo del servicio facturado(solo siconcepto > 1)
        if concepto in [wsfev1.SERVICIOS, wsfev1.PRODUCTOYSERVICIOS]:
            fecha_serv_desde = self.view.fechaDesde.getFechaSql()
            fecha_serv_hasta = self.view.fechaHasta.getFechaSql()
            fecha_venc_pago = self.view.lineEditFecha.getFechaSql()
        else:
            fecha_serv_desde = ""
            fecha_serv_hasta = ""
            fecha_venc_pago = ""
        moneda_id = "PES"
        moneda_ctz = "1.000"

        if self.tipo_cpte in Constantes.COMPROBANTES_FCE:  #FCE
            fecha_venc_pago = self.view.lineEditFecha.getFechaSql()
        #Llamo al WebService de Autorizacion para obtener el CAE
        ok = wsfev1.CrearFactura(concepto, tipo_doc, nro_doc, tipo_cbte,
                                 punto_vta, cbt_desde, cbt_hasta, imp_total,
                                 imp_tot_conc, imp_neto, imp_iva, imp_trib,
                                 imp_op_ex, fecha_cbte, fecha_venc_pago,
                                 fecha_serv_desde, fecha_serv_hasta, moneda_id,
                                 moneda_ctz)

        # Agregar comprobantes asociados(si es una NC / ND):
        if self.tipo_cpte in [3, 8, 13]:
            # if str(self.view.cboComprobante.text()).find('credito'):
            tipo = tipo_cbte
            pto_vta = self.view.layoutCpbteRelacionado.lineEditPtoVta.text()
            nro = self.view.layoutCpbteRelacionado.lineEditNumero.text()
            wsfev1.AgregarCmpAsoc(tipo, pto_vta, nro)

        if self.tipo_cpte in Constantes.COMPROBANTES_FCE:
            #homologacion
            wsfev1.AgregarOpcional(2101, LeerIni("CBUFCE",
                                                 key='FACTURA'))  #CBU
            wsfev1.AgregarOpcional(2102, LeerIni("ALIASFCE",
                                                 key='FACTURA'))  # alias

            #cargo los remitos relacionados, por ahora cargo la fecha actual
            #habria q ver de hacer una tabla de remitos
            if self.view.layoutCpbteRelacionado.numero:
                tipo_cbte_rem = 91
                pto_vta_rem = self.view.layoutCpbteRelacionado.lineEditPtoVta.text(
                )
                nro_comp_rem = self.view.layoutCpbteRelacionado.lineEditNumero.text(
                )
                wsfev1.AgregarCmpAsoc(tipo_cbte_rem, pto_vta_rem, nro_comp_rem,
                                      LeerIni(clave='cat_iva', key='cuit'),
                                      FechaMysql())

        if round(float(self.view.lineEditTributos.text()), 3) != 0:
            idimp = wsfev1.ID_IMP_PCIAL
            detalle = self.cliente.percepcion.detalle
            base_imp = round(float(self.view.lineEditTotal.text()) - \
                float(self.view.lineEditTributos.text()) - \
                float(self.view.lineEditTotalIVA.text()),2)
            alicuota = self.cliente.percepcion.porcentaje
            importe = str(round(float(self.view.lineEditTributos.text()), 2))
            wsfev1.AgregarTributo(tributo_id=idimp,
                                  desc=detalle,
                                  base_imp=base_imp,
                                  alic=alicuota,
                                  importe=importe)

        if int(LeerIni(
                clave='cat_iva',
                key='WSFEv1')) == 1:  #◘unicamente si es RI se informa los IVA
            #agrego todos los iva
            for k, v in self.netos.items():
                if v != 0:
                    id = FEv1().TASA_IVA[str(float(k))]
                    base_imp = round(v, 2)
                    iva = round(k, 2)
                    importe = round(base_imp * iva / 100, 2)
                    ok = wsfev1.AgregarIva(id, base_imp, importe)

        #SolicitoCAE:
        cae = wsfev1.CAESolicitar()
        if wsfev1.ErrMsg:
            Ventanas.showAlert("Sistema",
                               "ERROR {}".format(DeCodifica(wsfev1.ErrMsg)))
            ok = False
        else:
            if wsfev1.Resultado == 'R':
                Ventanas.showAlert(
                    "Sistema",
                    "Motivo de rechazo {}".format(DeCodifica(wsfev1.Obs)))
                ok = False
            else:
                self.view.lineditCAE.setText(cae)
                self.view.lineEditResultado.setText(wsfev1.Resultado)
                self.view.fechaVencCAE.setFecha(wsfev1.Vencimiento,
                                                format="Ymd")
        return ok