Jump to content
Fivewin Brasil

alex2002

Membros
  • Posts

    1,229
  • Joined

  • Last visited

  • Days Won

    24

Posts posted by alex2002

  1. Olá amigo, 

    Vou postar aqui a função que uso no caixa dos bancos que são meus clientes:

     

     
    ////////////////////////////DADOS DA FUNCAO//////////////////////////////////
    // NOME       : DigitaConta                                               ///
    // FINALIDADE : Digitação Manual da Linha Digitável das Contas            ///
    // PARAMETROS : cDados (passar por referencia)                            ///
    // RETORNO    : lOk                                                       ///
    /////////////////////////////////////////////////////////////////////////////
    function DigitaConta( cDadosDoc )
     
    local aBlocos, aoGetBloc
    local lSair := .f., lOk := .t.
    local oIco, oDlg, oBtn01, oBtn10
    local nVezes := 1
     
    aBlocos   := { space(13), space(13), space(13), space(13) }
    aoGetBloc := array( len( aBlocos ) )
    set confirm off
     
    DEFINE DIALOG oDlg RESOURCE 'DIGITACONTA' 
    oDlg:lHelpIcon := .f.
                                                                        
    redefine get aoGetBloc[1] VAR aBlocos[1] ID 101 of oDlg picture '@K 99999999999-9'     
    redefine get aoGetBloc[2] VAR aBlocos[2] ID 102 of oDlg picture '@K 99999999999-9'   
    redefine get aoGetBloc[3] VAR aBlocos[3] ID 103 of oDlg picture '@K 99999999999-9' 
    redefine get aoGetBloc[4] VAR aBlocos[4] ID 104 of oDlg picture '@K 99999999999-9' 
     
    redefine buttonBMP obtn01     bitmap "ok16"    ID 501 of oDlg TEXTRIGHT ACTION if( ProcessaConta( aBlocos, @cDadosDoc )(lSair := .t., lOk := .t.oDlg:End() )xSetFocus(aoGetBloc[1]) ) 
    redefine buttonBMP obtn10     bitmap "sai16"   ID 510 of oDlg TEXTRIGHT ACTION ( lSair := .t., lOk := .f., oDlg:End() ) CANCEL
    ACTIVATE DIALOG oDlg CENTERED valid lSair 
     
    return lOk
     
    ////////////////////////////////////////////////////
    static function ProcessaConta( aBlocos, cDadosDoc )
    local cDigErro := ''
    local lOk := .t.
    local x
     
    cDadosDoc := substr( aBlocos[1],1, 11 )
    cDadosDoc += substr( aBlocos[2],1, 11 )
    cDadosDoc += substr( aBlocos[3],1, 11 )
    cDadosDoc += substr( aBlocos[4],1, 11 )
     
    for x=1 to 4
       if substr( aBlocos[x], 13,1 ) <> Modulo10( substr( aBlocos[x],1, 11 ) ) .and. substr( aBlocos[x], 13,1 ) <> Modulo11( substr( aBlocos[x],1, 11 ) ) .and. substr( aBlocos[x], 13,1 ) <> Modulo11Old( substr( aBlocos[x],1, 11 ) )
          cDigErro += str(x,1)+' '
       endif
    next
     
    if !empty( cDigErro )
     MsgStop( 'Dígito(s) do(s) bloco(s) '+cDigErro+' não confere(m)', 'Verique.' )
     cDadosDoc := 'ERRO'
     lOk       := .f.
    endif
     
    return lOk
     
     
    ////////////////////////////DADOS DA FUNCAO//////////////////////////////////
    // NOME       : modulo10                                                  ///
    // FINALIDADE : calcular o digito verificador no modulo resto 10          ///
    // PARAMETROS : <1> numero a ser calculado                                ///
    // RETORNO    : digito verificador  em string                             ///
    /////////////////////////////////////////////////////////////////////////////
    function Modulo10(xNumero, cSeq)
     
    local cNumero, cDV
    local nLen, nTotal:=0, x, nResto, nResultado
     
    DEFAULT cSeq:='121212121212'
     
    cNumero:=iif( valtype(xNumero)='N',alltrim( str(xNumero,12) ),xNumero )
    nLen:=len(cNumero)
    cSeq:=right(cSeq,nLen)
    for x=1 to nLen
            nResultado:=val( substr(cNumero,x,1) )*val( substr(cSeq,x,1) )
            nTotal+=( val( substr( str(nResultado,2),1,1 ) )+val( substr( str(nResultado,2),2,1 ) ) )
    next
    nResto:=nTotal%10
    cDV:=substr( str(10-nResto,2),2,1 )
     
    return cDV

     
    //////////////////////////DADOS DA FUNCAO////////////////////////////////////
    // NOME       : modulo11Old                                               ///
    // FINALIDADE : calcular o digito verificador no modulo 11                ///
    // PARAMETROS : <1> numero/string contendo os algarismos para calculo     ///
    //              [2] aSequencia de conferência (vetor com 12 elementos)    ///
    // RETORNO    : string contendo o digito verificador                      ///
    /////////////////////////////////////////////////////////////////////////////
    function Modulo11Old( xNumero, aSeq )
     
    local cNumero, nLen:=51, nTotal:=0, x, cDV
     
    DEFAULT aSeq:={ 4,3,2,9,8,7,6,5,4,3,2,9,8,7,6,5,4,3,2,9,8,7,6,5,4,3,2,9,8,7,6,5,4,3,2,9,8,7,6,5,4,3,2,9,8,7,6,5,4,3,2 }
     
    cNumero:=iif( valtype(xNumero)='N'padl( alltrim( str(xNumero,nLen) ), nLen )padl( xNumero, nLen ) )
    for x=1 to nLen
            nTotal+=val( substr(cNumero,x,1) )*aSeq[x]
    next
     
    cDV := if(nTotal % 11 < 2"0"str(11-(nTotal%11), 1 ))
     
    return cDV
     


     
  2. Olá

    Troque a HB_Atokens por aToken()

    atoken(oFile:ReadLine(), ';' )

    Veja se resolve.

    Um abraço

     

    //////////////////////////////////////
    Function atoken(cStr, cStr1, lVazio )
    //////////////////////////////////////

    LOCAL nNum, nNum1, aArr := {}
    LOCAL aArr1 := {}
    LOCAL nNum2, nNum3

    Default lVazio := .f.

    if cstr1 = NIL
      cStr1 := " "
    endif

    nNum2 := len(cStr1)
    for nNum1 := 1 to nNum2
       aadd(aArr1, substr(cStr1, nNum1, 1))
    next

    do while .T.
       nNum := 0
       for nNum3 := 1 to nNum2
           nNum1 := AT(aArr1[nNum3], cStr)
           nNum := MIN(IF(nNum == 0, LEN(cStr) + 1, nNum), IF(nNum1 == 0, ;
               nNum, nNum1))

       next

       if nNum = 0
          exit
       endif

       if nNum > 1
          aadd( aArr, left( cStr, nNum - 1))
       elseif nNum = 1 .and. lVazio
          aadd( aArr, '' )
        endif

       cStr := substr(cStr, nNum + 1)

    enddo

    if len(cStr) > 0
       aadd( aArr, cStr)
    endif

    return aArr

  3. Olá pessoal, 

    Queria saber se é possível mudar o alias em runtime. Possuo um executor de instruções SQL que retorna o resultado e eu jogo isso pra um alias. Acontece que pode mudar o tempo todo o resultado com colunas diferentes, daí eu queria apresentar isso. Atualmente no LISTBOX funciona de boa, mas no xBrowse ainda não consegui por pra rodar.

    Alguém tem uma solução?

     

    Um abraço,

    Alexandre Pereira

  4. Olá pessoal,

    Alguém usa o Fast sem a edição na mão do relatório? 

    Tenho uma pancada de relatório em RPV que são gerados dinamicamente e estou querendo passar tudo pra Fast. Mas quero mudar apenas o meu gerador de relatório para não atrapalhar os mais de 1.000 prgs que possuo hoje.

    Se alguém usa, por favor, passa a senha rsrsrsrsrs

    Um abraço,

    Alexandre Pereira

     

  5. Obrigado a todos, na verdade o problema não era o Json e sim o HASH() que de fato é ordenado. 
     

    A função hb_jsonencode() não muda a ordenação. 

    De fato para o server que vai receber o arquivo json tanto faz a ordem, mas como eu estava atrasado (ainda estou rsrsrsrs) fiz a geração na unha mesmo.

    Obrigado aos amigos.

    Jão, tudo tranquilo por aqui, e como estão as coisas por aí?

  6. OIá pessoal, alguém sabe me informar qual parametro uso para que na codificação do Json (hb_jsonencode()) não ordene as tags e sim deixe na ordem da criação das mesmas?

    Ex:

     

    /////////////////////////////////////////////////////////////////////////

    hJson                         := hash()
    hJson['campo3']           := 'teste 3'
    hJson['campo1']           := 'teste 1'
    hJson['campo2']           := 'teste 2'

    cJson := hb_jsonencode( hJson, .t. )

    ? cJson

    resultado:

    {
      "campo1" : "teste 1",
      "campo2" : "teste 2",
      "campo3" : "teste 3"
    }

    Sendo que eu queria que ocorresse assim: 

    {
      "campo3" : "teste 3",
      "campo1" : "teste 1",
      "campo2" : "teste 2"
    }

    Ou seja, na sequência que eu inseri

     

    tem mais algum parametro na função hb_jsonencode() ? Não achei a documentação da mesma nem a pau

  7. 12 horas atrás, mkyx disse:

    Pode fazer assim:

    Local aCoors := GetCoors( FindWindow("Shell_TrayWnd","") )
    DEFINE DIALOG oDlg  FROM 0,0 TO aCoors[1]-30, aCoors[4]-7 PIXEL TITLE "TODA LA PANTALLA"
     

    ou assim:

     

    nCol:=GetSysMetrics(0)
    nLin:=GetSysMetrics(1)

    DEFINE DIALOG oDlg FROM 0,0 TO nLin-20,nCol-30 title "Título do diálogo" PIXEL


     

    Obrigado amigo,

    Mas a solução não seria apenas redimensionar a dialog mas sim todo o conteúdo dentro. Exatamente a solução que o João postou (não testei ainda nos meus fontes, mas vi que é exatamente isso pelo que observei do exemplo). 

    O que tem acontecido é que hoje as resoluções são cada vez melhores e os monitores maiores, isso faz com que o GET, SAY, BUTTON... por exemplo fiquem nanico nestas telas e chega a ficar feio. Para podermos aumentar tudo fica complicado, teríamos que mexer em tamanho das fontes além de redimensionar tudo. 

    A solução que o João postou faz exatamente isso, ela redimensiona fazendo um relacionamento entre o que foi desenhado e a resolução atual. Assim que testar eu posto o parecer aqui.

    Um abraço,

    Alexandre Pereira

     

  8. Olá pessoal,

    Tenho notado que nos micros mais novos, as dialogs estão ficando muito pequenas. Sei que no fórum aqui houve uma solução pra isso. Alguém lembra ou usa a solução?

    Quero aumentar o tamanho da dialog de acordo com a resolução do windows, assim consigo fazer ficar bacana o sistema. 

    Mas não me lembro nem a pau onde está essa solução.

    Um abraço,

    Alexandre Pereira

×
×
  • Create New...