lunes, 19 de julio de 2021

DRAG AND DROP

  // EN LA VENTANA
TABLE_Fortaleza..DndTarget = dndInactive
TABLE_Fortaleza..DndSource = dndProgram
TABLE_FichaFortaleza..DndTarget = dndProgram
TABLE_FichaFortaleza..DndSource = dndInactive

DnDEvent("Fortaleza_Suelta", "Table_FichaFortaleza", dndDragLeave)
DnDEvent("Fortaleza_Toma", "Table_Fortaleza", dndBeginDrag)
 
 // PROCEDIMIENTOS LOCALES
PROCEDURE Fortaleza_Toma()
gxFortalezaID = TABLE_Fortaleza.COL_FortalezaID
RETURN

PROCEDURE Fortaleza_Suelta()
HReset(FichaFortaleza)
FichaFortaleza.IdFicha = gsIdFicha
FichaFortaleza.FortalezaID = gxFortalezaID
HAdd(FichaFortaleza)
TableDisplay(TABLE_FichaFortaleza)
RETURN

 

lunes, 12 de julio de 2021

Lee XML



FOR EACH RowNode OF gMiCFDI.Comprobante.Conceptos ON Concepto // where RowNode:Importe.Value < "0"
    Info(RowNode:Cantidad, RowNode:ValorUnitario)
    gstUnConcepto.sClaveProdServ   = RowNode:ClaveProdServ
    gstUnConcepto.cyValorUnitario     = RowNode:ValorUnitario
    gstUnConcepto.nCantidad             = RowNode:Cantidad
    Add(garrConcepto,gstUnConcepto)
END
/////////////////////////**************************

LeeXML              ROUTINE
DATA
rtn:filtro  cstring(256)
rtn:numeroCfdi      SHORT
rtn:respuesta       SHORT
rtn:nombreArchivo   cstring(256)
rtn:bandera         BYTE
rtn:UUID            cstring(32)
rtn:FechaTimbrado   cstring(32)
CODE
    if RIGHT(LOC:NombreDirectorio, 1) <> '\' then
        rtn:filtro = LOC:NombreDirectorio & '\*.xml'
    else
        rtn:filtro = LOC:NombreDirectorio & '*.xml'
    end  
    MESSAGE(rtn:filtro)
    DIRECTORY(QArchivos,rtn:filtro,ff_:NORMAL)  
    rtn:numeroCfdi = RECORDS(QArchivos)
    
    LOOP i# = rtn:numeroCfdi TO 1 BY -1
        GET(QArchivos,i#)
        MESSAGE(QArchivos:name)
        if RIGHT(LOC:NombreDirectorio, 1) <> '\' then
            rtn:nombreArchivo = LOC:NombreDirectorio & '\' & QArchivos:name
        else
            rtn:nombreArchivo = LOC:NombreDirectorio & QArchivos:name
        end  
        !!!!!!!!!!!!!!!!!!!!!!!!!!*****!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      
        LOC:UUID        = ''
        rtn:respuesta   = XML:LoadFromFile(rtn:nombreArchivo)  
        Xml:GotoTop()   ! Sets the pointer to ('tfd:TimbreFiscalDigital','UUID')
        If NOT Xml:FindNextNode('tfd:TimbreFiscalDigital','UUID')
            IF NOT XML:ReadCurrentData(LOC:UUID)
            rtn:bandera = true
            END
        End
        
        if rtn:bandera = true
            clear(cfdi:record)
            cfdi:UUID = LOC:UUID
            if access:cfdi.fetch(cfdi:PKUUID) = Level:Benign
                MESSAGE('El CFDI ya está grabado')
            else
                clear(cfdi:record)
                cfdi:UUID = LOC:UUID
                Xml:GotoTop()  ! Sets the pointer to ('tfd:TimbreFiscalDigital','FechaTimbrado')
                If NOT Xml:FindNextNode('tfd:TimbreFiscalDigital','FechaTimbrado')
                    IF NOT XML:ReadCurrentData(cfdi:FechaTimbrado)
                    !!MESSAGE('Fecha de Timbrado es: ' & LOC:FechaTimbrado)
                    END
                End
                Xml:GotoTop()  
                If NOT Xml:FindNextNode('cfdi:Comprobante','Fecha')
                    XML:ReadCurrentData(cfdi:Fecha)
                End
                 Xml:GotoTop()  
                If NOT Xml:FindNextNode('cfdi:Comprobante','Serie')
                    XML:ReadCurrentData(cfdi:Serie)
                End
                 Xml:GotoTop()  
                If NOT Xml:FindNextNode('cfdi:Comprobante','Folio')
                    XML:ReadCurrentData(cfdi:Folio)
                End
                 Xml:GotoTop()  
                If NOT Xml:FindNextNode('cfdi:Comprobante','SubTotal')
                    XML:ReadCurrentData(cfdi:Subtotal)
                End
                Xml:GotoTop()  
                If NOT Xml:FindNextNode('cfdi:Comprobante','Total')
                    XML:ReadCurrentData(cfdi:Total)
                End
                Xml:GotoTop()  
                If NOT Xml:FindNextNode('cfdi:Emisor','Rfc')
                    XML:ReadCurrentData(cfdi:EmisorRFC)
                End
                 Xml:GotoTop()  
                If NOT Xml:FindNextNode('cfdi:Emisor','Nombre')
                    XML:ReadCurrentData(cfdi:EmisorNombre)
                End
                 Xml:GotoTop()  
                If NOT Xml:FindNextNode('cfdi:Receptor','Rfc')
                    XML:ReadCurrentData(cfdi:ReceptorRFC)
                End
                 Xml:GotoTop()  
                If NOT Xml:FindNextNode('cfdi:Receptor','Nombre')
                    XML:ReadCurrentData(cfdi:ReceptorNombre)
                End
                access:cfdi.insert()
                
                !!! Ahora leo los conceptos
                free(QConceptos)  
                Xml:GotoTop()
                If NOT xml:FindNextNode('cfdi:Conceptos','cfdi:Concepto')
                    XML:AutoRootSet()
                    rtn:respuesta = Xml:loadQueue(QConceptos,False, False)
                    LOOP Q# = 1 TO RECORDS(QConceptos) BY 1;GET(QConceptos,Q#)
                        clear(cfde)
                        cfde:ClaveProdServ  = QCo:ClaveProdServ
                        cfde:ClaveUnidad    = QCo:ClaveUnidad
                        cfde:NoIdentificacion = QCo:NoIdentificacion
                        cfde:Cantidad       = QCo:Cantidad
                        cfde:Unidad         = QCo:Unidad
                        cfde:Descripcion    = QCo:Descripcion
                        cfde:ValorUnitario  = QCo:ValorUnitario
                        cfde:Importe        = QCo:Importe
                        cfde:Descuento      = QCo:Descuento
                        cfde:UUID           = cfdi:UUID
                        cfde:IdCfde         = s_dameIdentificador()
                        access:cfde.insert()
                END
                end !!! if NOT xml:FindNextNode('cfdi:Conceptos','cfdi:Concepto')
                
            end ! else
        end !if rtn:bandera = true  
         !!*************************************************************************
        XML:Free()    
      
       
        DELETE(QArchivos)                        !Get rid of all other entries   
        
    END  !!!!  LOOP i# = rtn:numeroCfdi TO 1 BY -1
 
    
    

    EXIT

Usuario NetworkUser en Windev

 gsUsuario is string
gbAcceso is boolean = False
gsTipo is string
gsArea is string
gsNombre is string
gsClave is string
gnNivel is int


gsIdDB_Alumno is string
gsIdDB_Area is string



//(gsUsuario,gsArea,gsTipo, gbAcceso) = Open(WIN_Acceso)
//INFO(gsUsuario,gsArea,gsTipo)
bValida is boolean
gsUsuario = NetworkUser()
//gsUsuario = "FVALENCIA"
HReadSeekFirst(DB_Alumno,Clave,gsUsuario,hGeneric)
IF HFound(DB_Alumno) = False THEN
    Error("Alumno  no encontrado")
    bValida  = False
    gbAcceso = False
    gsTipo   = ""
    gsArea   = ""
ELSE
    gnNivel            = DB_Alumno.Nivel
    gsTipo             = DB_Alumno.IdTipo
    gsNombre         = DB_Alumno.Nombre
    gsIdDB_Alumno     = DB_Alumno.IdDB_Alumno
    HReadSeekFirst(DB_Area,IdDB_Area,DB_Alumno.IdDB_Area)
    IF HFound(DB_Area) =True THEN
        gsArea         = DB_Area.Nombre
        gsIdDB_Area = DB_Area.IdDB_Area
    END
    bValida  = True
    gbAcceso = True
    
END


WIN_Menu.SBC_Usuario = "Usuario: " + gsUsuario
WIN_Menu.SBC_Nombre  = "Nombre: " + gsNombre
//WIN_MENU.SBC_Area    = "Área: "    + gsArea
/////////////////////////////////////////////////

IF gbAcceso = False THEN
    EndProgram()
    
END


//OPT_Sistemas..Visible = False

IF gnNivel = 0 THEN
    OPT_Sistemas..Visible = False
//    MENUFILE_Catalogos..Visible = False    
//    MENUFILE_Calendario.OPT_NuevaObligacion..Visible = False
//    MENUFILE_Utilerías..Visible = False
//ELSE
//    MENUFILE_Catalogos..Visible = True
END


miércoles, 7 de julio de 2021

Windows - Excel

 

Una guía paso a paso para los perplejos:

  1. Presione la tecla de Windows
  2. Escribe " intl.cpl " y presiona Enter.
  3. Haga clic en " Configuración adicional ".
  4. Vaya a la pestaña " Números ":
  5. Cambia el símbolo decimal a un punto .
  6. Cambie el " Símbolo de agrupación de dígitos " a un espacio .
  7. Cambie el " Separador de lista " a una coma .
  8. Vaya a la pestaña " Moneda ":
  9. Cambia el símbolo decimal a un punto .
  10. Cambie el " Símbolo de agrupación de dígitos " a un espacio .

martes, 6 de julio de 2021

Ejemplo de campo tipo fórmula

 CONCAT(TO_CHAR(db_con_catalogo.Cta1,'0999'), CHAR(45),
TRIM(TO_CHAR(db_con_catalogo.Cta2,'09')), CHAR(45),
TRIM(TO_CHAR(db_con_catalogo.Cta3,'09')), CHAR(45),
TRIM(TO_CHAR(db_con_catalogo.Cta4,'09')), CHAR(45),
TRIM(TO_CHAR(db_con_catalogo.Cta5,'09')))

Try catch end

 // -------------------------------------------------- // Procedure principal que executa uma query com tratamento de exceção // -----------...