Jump to content
Fivewin Brasil

oribeiro

Membros
  • Posts

    1,291
  • Joined

  • Last visited

  • Days Won

    35

Posts posted by oribeiro

  1. João,

    No exemplo citado no link eles criam uma função que exporta para o excel o conteúdo de uma matriz mas não faz a exportação do excel dos dados que estão no relatório como ele faz automaticamente com o REPORT.PRG.

    O exemplo que eles usam é esse:

    #include "fivewin.ch"
    
    //----------------------------------------------------------------------------//
    
    function Main()
    
       local oPrn, oFont, n, nRow
       local aData := { ;
          { "One",    "Two",      "Three"  }, ;
          { "Four",   "Five",     "Six"    }, ;
          { "Seven",  "Eight",    "Nine"   }, ;
          { "Ten",    "Eleven",   "Twelve" } }
    
    
       PRINT oPrn PREVIEW
    
       DEFINE FONT oFont NAME "ARIAL" SIZE 0,-15 OF oPrn
       oPrn:bToExcel  := { || ToExcel( aData ) }
    
       PAGE
    
          n     := 1
          nRow  := 1000
    
          do while n <= Len( aData )
    
             @ nRow, 1000 PRINT TO oPrn TEXT aData[ n, 1 ] FONT oFont
             @ nRow, 2000 PRINT TO oPrn TEXT aData[ n, 2 ] FONT oFont
             @ nRow, 3000 PRINT TO oPrn TEXT aData[ n, 3 ] FONT oFont
    
             nRow  += 200
             n++
          enddo
       ENDPAGE
       ENDPRINT
    
       RELEASE FONT oFont
    
    return nil
    
    //----------------------------------------------------------------------------//
    
    static function ToExcel( aData )
    
       local oExcel   := ExcelObj()
       local oBook    := oExcel:WorkBooks:Add()
       local oSheet   := oBook:ActiveSheet
       local oRange, n
    
       oExcel:ScreenUpdating   := .f.
       oRange   := oSheet:Range( oSheet:Columns( 1 ), oSheet:Columns( 3 ) )
       for n := 1 to Len( aData )
          oRange:Rows( n ):Value  := aData[ n ]
       next
    
       oExcel:ScreenUpdating   := .t.
       oExcel:Visible          := .t.
       ShowWindow( oExcel:hWnd, 3 )
    
    return nil
    
    //----------------------------------------------------------------------------//
    

     

     

     

  2. Não está dando certo.

    O código que sempre usei é esse:

    *********************************************
    Function BuscaNCM( cNumNCM, cDesNCM ) // Pega a Descrição da NCM na Internet //
    *********************************************
       Local   oPg, i
       Default cDesNCM := "OUTROS"
       cNumNCM := Alltrim(StrNum(cNumNCM,.F.))
       cBuf    := ""
       if isinternet()
          if !empty(cNumNCM)
             oPg:=CreateObject("Microsoft.XMLHTTP")
           //oPg:Open("GET","http://www4.receita.fazenda.gov.br/simulador/PesquisarNCM.jsp?codigo="+left(cNumNCM,4),.F.)
           //Exemplo: http://www4.receita.fazenda.gov.br/simulador/PesquisarNCM.jsp?codigo=732599&codigoCapitulo=73&codigoPosicao=7325&codigoSubPosicao1=73259&codigoSubPosicao2=732599#
             oPg:Open("GET","http://www4.receita.fazenda.gov.br/simulador/PesquisarNCM2.jsp?codigo="+left(cNumNCM,6)+;
                                                                                  "&codigoCapitulo="+left(cNumNCM,2)+;
                                                                                   "&codigoPosicao="+left(cNumNCM,4)+;
                                                                               "&codigoSubPosicao1="+left(cNumNCM,5)+;
                                                                               "&codigoSubPosicao2="+left(cNumNCM,6)+;
                                                                               "&button=Exibir+NCMs",.F.)
             ErroNET:=.f.
             Try
                oPg:Send()
                catch oError
                ErroNET:=.T.
             End Try
             if !ErroNET
                cBuf := oPg:responseBody
             end
          end
       end
       if !Empty(cBuf)
          xPOS1 := at('<div id="listaNCM">',cBUF)
          xPOS2 := at('</div>',cBUF)
          cBUF  := subs(cBUF,xPOS1,xPOS2-xPOS1)
          xPOSN := at(cNumNCM,cBUF)
          if xPOSN # 0
             cBUF    := right(cBUF,len(cBUF)-(xPOSN+21))
             for i=1 to Len(cBuf)
                if Subst(cBuf,i,1)$" -"
                   Loop
                endif
                cBuf:=Subst(cBuf,i,Len(cBuf))
                Exit
             next
             xPOSF   := at('</a> </font>',cBUF)
             cDesNCM := left(cBUF,xPOSF-1)
          end
       end
       cDesNCM := iif(Empty(cDesNCM), "OUTROS", cDesNCM)
    Return( cDesNCM )

     

  3. Pessoal, 

    Desenvolvi uma função para criar um Browse com gráfico.

    *********************************************************************************************
    Function xBrwChart(cTitu, aHead, aData) // BROWSE COM GRÁFICO (Oscar 16/08/2019)
    *********************************************************************************************
    // Exemplo:
    // cTitu := "Demonstratico de Compras x Vendas nos últimos 6 meses."
    // aHead := {"Descrição", "Jan/19", "Fev/19", "Mar/19", "Abr/19", "Mai/19", "Jun/19"}
    // aData := {{"Compras" ,     100 ,     200 ,     300 ,      50 ,     100 ,     400 },;
    //           {"Vendas"  ,       0 ,     100 ,     500 ,     150 ,     100 ,     400 }}
    // xBrwChart(cTitu, aHead, aData)
       Local oDlg, oBrw, oFont, i, aChart:={}
       Default cTitu := "Título"
       Default aHead := {} // Cabeçalho
       Default aData := {} // Dados
       DEFINE FONT oFont NAME "Segoe UI" SIZE 0,-16
       DEFINE DIALOG oDlg  SIZE 1200,580 PIXEL TRUEPIXEL FONT oFont TITLE cTitu TRANSPARENT STYLE nOr( WS_CAPTION, WS_THICKFRAME, WS_SYSMENU, WS_MAXIMIZEBOX )
       @ 75,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg DATASOURCE aData AUTOCOLS HEADERS aHead CELL LINES FOOTERS NOBORDER FASTEDIT
       For i=2 To Len(aHead)
          AAdd(aChart, aHead[i])                                                                          // Separa os valores para o gráfico a partir da segunda coluna
          oBrw:aCols[ i ]:cEditPicture := '@E 999,999,999.99'                                             // Formata os valores do gráfico com duas casas decimais
       Next
       WITH OBJECT oBrw:AddCol()                                                                          // Adiciona uma coluna com o gráfico
          :cHeader       := "CHART"
          :aChartCols    := aChart
          :nWidth        := 190
       END
       oBrw:bClrStd   := {|| {CLR_BLACK, iif(oBrw:Keyno()%2=0, CLR_WHITE, RGB(236,236,236)) } }           // Cores nas linhas (Par/Impar) ou (oBrw:cAlias)->(RecN())%2=0
       oBrw:nRowHeight := 50
       oBrw:CreateFromCode()
       @ 21, 20 BTNBMP PROMPT { || If( oBrw:Chart:cChartType == "LINE", "&Gráfico de Barras", "&Gráfico de Linhas" ) } ;
                SIZE 130,30 PIXEL OF oDlg FLAT ;
                ACTION ( oBrw:Chart:cChartType := If( oBrw:Chart:cChartType == "LINE", "BAR", "LINE" ), oBrw:Refresh(), oBrw:SetFocus() )
       @ 21,160 BTNBMP PROMPT "&Imprimir" ;
                SIZE 130,30 PIXEL OF oDlg FLAT ;
                WHEN oBrw:oRightCol == nil ACTION oBrw:Report()
       @ 21,300 BTNBMP PROMPT "&Fechar" ;
                SIZE 130,30 PIXEL OF oDlg FLAT ;
                ACTION oDlg:End() Cancel
       oDlg:bResized := {||(oBrw:nHeight:=oDlg:nHeight()-85,oBrw:nWidth:=oDlg:nWidth()-55,oBrw:Resize())} // Redimensiona o Browse conforme o tamanho do Dialog
       ACTIVATE DIALOG oDlg CENTERED
       RELEASE FONT oFont
    Return nil

     

  4. Percebi hoje esse mesmo problema na minha aplicação, o bKeyDown parou de funcionar para as teclas de função.

    Eu alterei alguma coisa dentro do meu sistema que o oLbx:bKeyDown parou de funcionar com as teclas de função e eu não sei o que foi. Funciona com INSERT, DELETE, ENTER, etc. mas com F1..F12 não funciona mais.

  5. Obrigado pelas dicas.

    Tentei dessa forma também, mas ele não copia os arquivos para a área de transferência (CTRL+C)

    Eu preciso que os arquivos vão para a área de transferência para que o usuário copie com (CTRL+V) para alguma pasta do seu disco local; isso porque ele está acessando o servidor através do Web RDP Guacamole onde o disco local não é compartilhado no servidor. Então, uma rotina dentro do sistema que copie os arquivos de uma pasta para outra não funcionará porque a pasta destino não está disponível no servidor, mas somente na máquina local.

    Alguém já conseguiu copiar arquivos de um diretório para a área de transferência?

    aFiles := xGetFiles("Todos (*.*)|*.*|", "Selecione o arquivo(x)", 1, "", .F. )
                // oClp:=TClipboard():New()
               //  oClp:Clear()
    
    define ClipBoard oClp of objetodasuajanela_ou_dialog
    for i=1 to len(aFiles)
       oClp:SetText( aFiles[1] )
    next

     

  6. Valdir,

    Cheguei no resultado com a ajuda do João.

    // CRIAR HashCSRT //
    wCSRT   := "G8063VRTNDMO886SFNK5LDUDEI24XJ22YIPO"
    wChave  := "41180678393592000146558900000006041028190697"
    codigo  := wCSRT + wChave
    codigo1 := hb_sha1(codigo, .T.)     
    codigo2 := HB_Base64encode(codigo1, Len(codigo1))
    Msginfo( codigo1+chr(13)+chr(13)+"Modelo: aWv6LeEM4X6u4+qBI2OYZ8grigw="+chr(13)+chr(13)+"Gerado: "+codigo2, "HB_base64encode() -> Tamanho: "+str(len(codigo2)) )

     

×
×
  • Create New...