Jump to content
Fivewin Brasil

Eroni

Membros
  • Posts

    561
  • Joined

  • Last visited

  • Days Won

    6

Posts posted by Eroni

  1. Olá, Eroni.

    Dá para disponibilizar seus exemplos do usa dessa DLL?

    E a também, sem querer abusar.

    Consegui ativar o ECF (Emulador) mas a Leitura X não vai. Alguém pode dar uma ajudinha aí?

    *--------------------( ECF via ACBrFramework32.dll )---------------------------*
    
    FUNCTION TestACBrFrwrk()
       aModelo := ;
         {;
             "01. NaoFiscal",;
          	"02. Bematech",;
          	"03. Sweda",;
          	"04. Daruma",;
          	"05. Schalter",;
          	"06. Mecaf",;
          	"07. Yanco",;
          	"08. DataRegis",;
          	"09. Urano",;
          	"10. ICash",;
          	"11. Quattro",;
          	"12. FiscNET",;
          	"13. Epson",;
          	"14. NCR",;
          	"15. SwedaSTX";
          }
       cModelo := MsgSelect(aModelo, "02. Bematech", "Selecione o modelo", "&Ok", "Cancelar")
    
       cPorta := "COM4"
       IF ! MsgGet("Porta","Porta",@cPorta)
          RETURN NIL
       ENDIF
       
       xdll := LoadLibrary("ACBrFramework32.dll")
       nHandle := 0
    
       ? "Cria o Handle do ECF"
    
    	ret := ECFCreate(@nHandle)
       CheckResult(ret, nHandle)
    
       ? "Informa o modelo do ecf"
       nModelo := ALLTRIM(STR(VAL(LEFT(cModelo, 2))))
    	ret := ECFSetModelo(nHandle, nModelo)
       CheckResult(ret, nHandle)
    
       ? "Obtem o modelo configurado"
       buffer := ECFGetModelo(nHandle)
    	SysRefresh()
    	MsgAlert("Modelo: "+cValToChar(buffer))
    	
    	? "Define a porta de comunicação"
    	ret := ECFSetPorta(nHandle, cPorta)
       CheckResult(ret, nHandle)
    
    	? "Obtem a porta de comunicação definida"
       buff := SPACE(100)
       ret = ECFGetPorta(nHandle, @buff, 100)
       CheckResult(ret, nHandle)
    
       ? "Verivicar se ECF está ativo"
       ret := ECFGetAtivo(nHandle)
       CheckResult(ret, nHandle)
    
       ? "Avtivar o ECF"
       ECFAtivar(nHandle)
    
       ? "Verivicar se ECF está ativo"
    	ret := ECFGetAtivo(nHandle)
       CheckResult(ret, nHandle)
    
       ? "Emitir leitura X"
    	ret := ECFLeituraX(nHandle)
       CheckResult(ret, nHandle)
    
       ? "Desativar o ECF"
    	ret := ECFDestroy(@nHandle)
       CheckResult(ret, nHandle)
    
    	FreeLib32(xdll)
    RETURN NIL
    
    STATIC FUNCTION CheckResult(ret, nHandle)
       LOCAL buff := SPACE(100)
    *  ECFGetUltErro(nHandle, @buff, 100)
    	SysRefresh()
    	MsgInfo("Retorno: "+cValToChar(ret), "Aviso")
    RETURN NIL
    
    xdll:=LoadLibrary("ACBrFramework32.dll")
    DLL32 FUNCTION ECFCreate( @nHandle AS PTR ) AS 7 PASCAL FROM "ECF_Create" LIB xdll
    DLL32 FUNCTION ECFGetUltErro( ecfHandle AS PTR, @buffer AS 8, bufferLen AS STRING ) AS LONG PASCAL FROM "ECF_GetUltimoErro" LIB xdll
    DLL32 FUNCTION ECFSetModelo( nHandle AS PTR, cModelo AS STRING ) AS LONG PASCAL FROM "ECF_SetModelo" LIB xdll
    DLL32 FUNCTION ECFGetModelo( nHandle AS PTR ) AS LONG PASCAL FROM "ECF_GetModelo" LIB xdll
    DLL32 FUNCTION ECFGetModStr( nHandle AS PTR, @buffer AS STRING, bufferLen AS STRING ) AS LONG PASCAL FROM "ECF_GetModeloStr" LIB xdll
    DLL32 FUNCTION ECFSetPorta( nHandle AS PTR, porta AS STRING ) AS LONG PASCAL FROM "ECF_SetPorta" LIB xdll
    DLL32 FUNCTION ECFGetPorta( nHandle AS PTR, @buffer AS STRING, bufferLen AS STRING ) AS LONG PASCAL FROM "ECF_GetPorta" LIB xdll
    DLL32 FUNCTION ECFGetAtivo( nHandle AS PTR ) AS LONG PASCAL FROM "ECF_GetAtivo" LIB xdll
    DLL32 FUNCTION ECFAtivar( nHandle AS PTR ) AS LONG PASCAL FROM "ECF_Ativar" LIB xdll
    DLL32 FUNCTION ECFLeituraX( nHandle AS PTR ) AS 7 PASCAL FROM "ECF_LeituraX" LIB xdll
    DLL32 FUNCTION ECFDestroy( @nHandle AS PTR ) AS 7 PASCAL FROM "ECF_Destroy" LIB xdll
    freelibrary(xdll)
    
    
    *----------------------( Função MsgSelect )-----------------------------------*
    function MsgSelect( aItems, cValue, cTitle, cTitBt1, cTitBt2 )
       LOCAL oDlg, lOk, cDescr, nScan
       DEFAULT cTitle  := "Selecione"
       DEFAULT cTitBt1 := "&Ok"
       DEFAULT cTitBt2 := "Ca&ncelar"
       DEFAULT cValue := aItems[1]
       nScan  := 1
       cDescr := SPACE(40)
       lOk    := .F.
       aItems := ASORT(aItems)
       DEFINE DIALOG oDlg FROM 5,10 TO 27, 54 TITLE cTitle
       @ 01,02 GET cDescr SIZE 145,10 OF oDlg ;
               ON CHANGE ( ::Assign() ,;
                           cGet := SubStr( cDescr, 1, ::nPos - 1 ) ,;
                           AEVAL(aItems ,{|cData,nItem| IIF( LEFT(cData,LEN(cGet)) = cGet, nScan:=nItem, nScan:=nScan)}),;
                           oList:Select(nScan) )
       @ 02,02 LISTBOX oList VAR cValue ITEMS aItems SIZE 145, 100 OF oDlg
       @ 08,07 BUTTON cTitBt1 OF oDlg SIZE 40, 12 ACTION (lOk := .T., oDlg:End()) DEFAULT
       @ 08,16 BUTTON cTitBt2 OF oDlg SIZE 40, 12 ACTION (lOk := .F., oDlg:End()) CANCEL
       ACTIVATE DIALOG oDlg CENTERED
    RETURN cValue
    
    

    Boa tarde, posso disponibilizar um exemplo, me adicione no skype.

  2. Veja o exemplo em ..\samples\combos.prg do fivewin:

    // Showing the use of different styles of ComboBoxes controls

    #include "FiveWin.ch"
    #include "Combos.ch"

    //----------------------------------------------------------------------------//

    function Main()

    local oDlg, oSay
    local oCbx1, oCbx2, oCbx3
    local cItem1, cItem2 := "One", cItem3, cItem4 := "None"

    SET _3DLOOK ON

    // SkinButtons()

    DEFINE DIALOG oDlg RESOURCE "Combos"

    REDEFINE COMBOBOX oCbx1 VAR cItem1 ITEMS { "One", "Two", "Three" } ;
    ID ID_SIMPLE OF oDlg ;
    ON CHANGE ( cItem4 := cItem1, oSay:Refresh() ) ;
    VALID ( cItem4 := cItem1, oSay:Refresh(), .t. )

    REDEFINE COMBOBOX oCbx2 VAR cItem2 ITEMS { "One", "Two", "Three" } ;
    ID ID_DROPDOWN OF oDlg ;
    STYLE CBS_DROPDOWN ;
    ON CHANGE ( cItem4 := cItem2, oSay:Refresh() ) ;
    VALID ( If( ! oCbx2:Find( oCbx2:oGet:GetText() ),;
    oCbx2:Add( oCbx2:oGet:GetText() ),), .t. )

    oCbx2:oGet:bKeyDown = { | nKey | SearchItem( nKey, oCbx2 ) }

    REDEFINE COMBOBOX oCbx3 VAR cItem3 ITEMS { "One", "Two", "Three" } ;
    ID ID_DROPDOWNLIST OF oDlg ;
    ON CHANGE ( cItem4 := cItem3, oSay:Refresh() ) ;
    VALID ( cItem4 := cItem3, oSay:Refresh(), .t. )

    REDEFINE SAY oSay PROMPT cItem4 ID ID_SELECTION OF oDlg COLOR "R+/W"

    ACTIVATE DIALOG oDlg CENTERED

    return nil

    //----------------------------------------------------------------------------//

    function SearchItem( nKey, oCbx )

    local nAt

    if Len( AllTrim( oCbx:oGet:GetText() ) ) == 1
    if ( nAt := AScan( oCbx:aItems, { | c | Left( c, 1 ) == AllTrim( oCbx:oGet:GetText() ) } ) ) != 0
    oCbx:oGet:SetText( oCbx:aItems[ nAt ] )
    return 0
    endif
    endif

  3. Boa noite, acho que este ano, se tudo der certo, vou poder comparecer. Mas falando em ADS, apenas gostaria de dizer que não uso a sintaxe xBase para manipulação de banco de dados a uns 8 anos ou mais, decidi escrever algumas classes que manipulam banco de dados usando sql puro. Desta forma, trabalho com sistema acessando banco de dados na nuvem super tranquilo. Com estas classes, tenho formas automatizadas de criar cadastros, consultas e processos de forma extremamente otimizadas e de código enxuto. Vou tentar desta vez participar do encontro.

    Abraços.

  4. Boa tarde

    Use tabela alias tab new

    dbgotop()

    while !Eof()

    campo1 := campodbf1

    campo2 := campodbf2

    no postgree

    insert....

    cSql := "insert into tabelax set campo1 = '"+campo1+"', campo2 = '"+campo2+"', etc, etc, etc

    // execute o sql com a funcao especifica

    dbskip(1)

    end

    Att

    João Bosco

  5. Bom dia, a solução de visualizar o danfe e gerar um pdf da tela de visualização já está ok, a solução que eu preciso é que na hora de enviar o e-mail do xml ao cliente, já consiga gerar o pdf e enviar junto, ai neste ponto que eu preciso gerar um pdf sem a intervenção do usuário.

  6. Obrigado Kapiaba, na real eu uso hoje o CutePDF Writer para imprimir o danfe, pela classe do Gilmer, que por sua vez usa a tprinter. A solução que eu preciso é que não tenha que abrir a tela para que o usuário tenha que informar o arquivo. Uso a versão 1209 do fivewin. Você tem nfe e imprime Danfe?

  7. Ari, veja este: pdfMachine 14.18, simplesmente fantástico,

    http://www.baixaki.com.br/download/pdfmachine.htm

    em conjunto com este Foxit PDF Reader 4.3.1.0323,

    http://www.baixaki.com.br/download/foxit-pdf-reader.htm

    Estes dois juntos, dão um show.

    Abs,

    João Santos - São Paulo.

    kmt_karinha@pop.com.br

    joao@pleno.com.br

    Fone: (11) 3106-2832 / 8243-5632 - TIM

    FWH 2.7 - xHARBOUR WorkShop.Exe

    dentinho.jpg?rnd=0.830315402649066

    Ressucitando o assunto, este pdfMachine permite que vc gere o pdf sem abrir a tela solicitando o nome do arquivo pelo usuário?

    Abraços.

  8. Boa tarde, fui na pagina do harbour boleto ver se havia alguma atualização e me parece que está desativada, alguem mais confirma? Por coincidencia, vou precisar mexer para implementar o banco Banrisul que não tem. Pretendo dar uma revisada geral e implementar varias melhorias que estou pensando. O fonte que tenho aqui data de 2008, se tivesse uma atualização mais nova talvez as coisas que eu iria fazer ja existem.

  9. Boa tarde, Judson, esta base de dados é grande? Como você faz para incrementar o número do pedido/orçamento/vendas? No passado quando eu ainda usava dbf, quando a base começou a crescer, ocorria que a leitura e gravação ficava lenta e quando mais de um mandava gravar ao mesmo tempo ai dava muito problema, a solução na época foi criar uma tabela com um unico registro para controlar os ultimos numeros dos pedidos/orçamentos/vendas, etc. Desta forma, cada vez que eu ia gravar, eu pegava o ultimo numero nesta tabela de um unico registro e incrementava, depois gravava na tabela dos dados. Depois que implementei esta solução em todo meu sistema, nunca mais me incomodei, e tinha cliente que mais de 10 vendedores trabalhavam ao mesmo tempo. Quem sabe poderia ser uma solução.

  10. Manoel, estou na mesma que você, estudando o layout. Como fazer tem, porque já existe solução como a NFE que faz isso, o problema, como você mesmo citou, é a imensidão do projeto, que é enorme.

  11. Boa tarde, segue o meu fonte.

    // Quando o usuario clicar Ok para iniciar , com o browse marcado......

    For a := 1 to len( [ sua lista de tabelas, ou seu browse de tela ] )

    CASE [ linha do seu browse ] == "tabela abc"

    // Mensagem ao usuario tipo "aguarde, indexando a tabela abc..."

    SWCreateIndex( [ linha do seu browse ], [Nome do indice no banco ], [nome do campo ] )

    SWCreateIndex( [ linha do seu browse ], [Nome do indice no banco ], [nome do campo , nome do campo 2 ] )

    // e assim sucessivamente, para varios indices da mesma tabela

    next a // proxima tabela marcada

    // etc, finalizar.

    *******************************************************************************************
    *******************************************************************************************
    FUNCTION SWCreateIndex( cTable, cIndex, cKey )
    LOCAL cDropIndex := ""

    IF cTable = NIL .OR. cIndex == NIL .OR. cKey == NIL
    RETURN( .F. )
    ENDIF

    cDropIndex := "DROP INDEX " + Upper( AllTrim( cIndex ) )
    IF Upper( oSistema:cDbDriver_ ) == "MYSQL"
    cDropIndex := "DROP INDEX " + Upper( AllTrim( cIndex ) ) + " ON " + Upper( AllTrim( cTable ) )
    ENDIF

    TRY

    SWExecSql( cDropIndex,.F. )

    SWExecSql( "CREATE INDEX " + Upper( AllTrim( cIndex ) ) + " ON " + Upper( AllTrim( cTable ) ) + " (" + Upper( AllTrim( cKey ) ) + ")",.F. )

    CATCH

    SWExecSql( "CREATE INDEX " + Upper( AllTrim( cIndex ) ) + " ON " + Upper( AllTrim( cTable ) ) + " (" + Upper( AllTrim( cKey ) ) + ")",.F. )

    END

    RETURN( .T. )

    Desculpe se nao ta claro o suficiente, qualquer coisa é so pedir por email, ou skype.

    Abraço.

  12. Empresoft, tem que dar o drop antes sim. O banco não faz automatico. Em meu sistema tenho uma tela com um browse que permite as tabelas que seram criados os indices, isso para o caso de no decorrer do desenvolvimento você ir criando mais indices conforme achar necessário. Uma ideia é fazer uma função para automatizar a criação e já fazer o drop. Recomendo fortemente a rever suas tabelas e criar os indices o mais rapido possivel, porque tua aplicação vai decolar em termos de performance, principalmente se tiver base de dados grande. Se quiser posto o meu fonte de criação de indices.

    Abraço.

×
×
  • Create New...