Jump to content
Fivewin Brasil

Rogerio Figueira

Membros
  • Posts

    180
  • Joined

  • Last visited

  • Days Won

    16

Everything posted by Rogerio Figueira

  1. Salve a todos! Eu completo 67 daqui a 2 meses, trabalho nessa área desde 1990, nunca fui empregado, preferi ganhar menos mas ser independente. Ainda nem penso em parar. Em 1998 vim para o interior, morar num sítio, no começo foi pauleira tinha que ir em Sampa vários dias por semana, depois com o avanço da internet fui deixando de ir. Hoje faço todo atendimento via whatsapp a internet está bem distribuida no BR. Ano passado viajei por 4 meses por boa parte do BR, trabalhando on-line, eu minha esposa e duas cachorrinhas. Aposentar para que ? Esta atividade eu gosto, mantenho os neurônios em dia. Atualmente estou convertendo um sistema para PHP para rodar na web, o banco de dados já é MariaDB, então me sinto motivado a continuar trabalhando. Meu projeto para os próximos anos, terminar um carro mais apropriado, instalar uma StarLink e viajar mais, trabalhando todo dia um pouco. Saludos!
  2. Boa tarde Uso uma dica que foi postada aqui no fórum faz tempo, o sndmail.dll Mas não uso contas de gmail como origem, crio contas para os usuários em nosso servidor num domínio próprio para isso. Gmail é zica.
  3. Breno, eu já não lembro mais qual era o bug da classe da versão em uso, mas teve comentários lá no fórum e eu passei a utilizar esta que funcionou e funciona até hoje. Tbm uso BUTTONBAR sem problemas. Segue a classe. COMBOBOX.PRG
  4. Breno, se a sua versão do FW é a 13.07 provavelmente é bug da classe combobox, na época quando atualizei o meu FW (ainda estou no 14.02) tive que passar a usar a classe combobox anterior e até hoje continuo assim, infelizmente não deu ainda para atualizar o FW. Saludos.
  5. Boa tarde. O Pelles salva o .rc O arquivo .res é criado automaticamente no processo de compilação. Uso um arquivo .mak como o exemplo a seguir: # --------------------------------------------------------------------------- VERSION = BCB.01 # --------------------------------------------------------------------------- !ifndef BCB BCB = $(MAKEDIR)\.. !endif !ifndef BHC BHC = E:\xHarbour !endif !ifndef FWH FWH=E:\FWH !endif # --------------------------------------------------------------------------- PROJECT = 3189001.EXE OBJFILES = 3189001.obj CFILES = 3189001.c RESFILES = faz.RES RESDEPEN = $(RESFILES) LIBFILES = E:\FWH\lib\FiveHX.lib \ E:\FWH\lib\FiveHC.lib \ E:\xHarbour\lib\rtl.lib \ E:\xHarbour\lib\vm.lib \ E:\xHarbour\lib\gtgui.lib \ E:\xHarbour\lib\lang.lib \ E:\xHarbour\lib\macro.lib \ E:\xHarbour\lib\rdd.lib \ E:\xHarbour\lib\dbfntx.lib \ E:\xHarbour\lib\dbfcdx.lib \ E:\XHARBOUR\LIB\HBSIX.LIB \ E:\XHARBOUR\LIB\DBFFPT.LIB \ E:\XHARBOUR\LIB\PCREPOS.LIB \ E:\XHARBOUR13\LIB\DBFFPT.LIB \ E:\xHarbour\lib\common.lib \ E:\xHarbour\lib\pp.lib \ E:\BORLAND\bcc55\lib\cw32.lib \ E:\BORLAND\bcc55\lib\import32.lib \ E:\BORLAND\bcc55\lib\PSDK\odbc32.lib \ E:\BORLAND\bcc55\lib\wininet.lib DEFFILE = # --------------------------------------------------------------------------- CFLAG1 = -O2 $(CFLAGS) -d -L$(BHC)\lib\b32 -c -M CFLAG2 = -I$(BHC)\include;$(FWH)\include;$(BCB)\include;$(BCB)\include\vcl PFLAGS = RFLAGS = LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(BHC)\lib;$(BHC)\lib\b32 -Gn -aa -Tpe -s IFLAGS = LINKER = ilink32 # --------------------------------------------------------------------------- ALLOBJ = c0w32.obj $(OBJFILES) ALLRES = $(RESFILES) ALLLIB = $(LIBFILES) # --------------------------------------------------------------------------- .autodepend $(PROJECT): $(CFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE) $(BCB)\BIN\$(LINKER) @&&! $(LFLAGS) + $(ALLOBJ), + $(PROJECT),, + $(ALLLIB), + $(DEFFILE), + $(ALLRES) ! .cpp.obj: $(BCB)\BIN\bcc32 $(CFLAG1) $(CFLAG2) -o$* $* .c.obj: $(BCB)\BIN\bcc32 -I$(BHC)\include $(CFLAG1) $(CFLAG2) -o$* $** .prg.c: $(BHC)\bin\harbour /m/n/a/q -I$(FWH)\include;$(BHC)\include -o$* $** .rc.res: $(BCB)\BIN\brcc32 -w32 $(RFLAGS) $< #-----------------------------------------------------------------------------
  6. Bom dia. Salve o XML e outros arquivos da nfe em um campo do SQL no servidor. Campo do tipo mediumblob é suficiente. Sds.
  7. Boa tarde. Você deve instalar o pacote da Flexdocs e REGISTRAR a DLL. O aviso deve ser por falta do registro da DLL.
  8. Bom dia. Se você tem um painel cPanel, acesse MySQL remoto e entre o IP que você quer permitir o acesso ou %.%.%.% para todos. Caso não tenha o cPanel, use um terminal para acessar e editar o arquivo my.cnf que pode estar em /etc/mysql/my.cnf ou /etc/my.cnf ou /usr/local/etc/my.cnf Comente o comando bind-address = 127.0.0.1 e adicione bind-address = 0.0.0.0 para todos ou especifique um IP. []´s
  9. Bom dia. Uso o campo DTPICKER definido no RC CONTROL "", 4002, "SysDateTimePick32", WS_TABSTOP, 40, 56, 60, 14 e no PRG: REDEFINE DTPicker oPmatriz[7] VAR Pmatriz[7] ID 4002 of oT270 UPDATE //emissao []´s
  10. Boa tarde. Não sei se é o caso, mas eu já tive problemas com botões radio definidos como BS_AUTORADIOBUTTON no arquivo .RC Alterei para BS_RADIOBUTTON e funcionou normal. Sds.
  11. Boa tarde. Se você tem o Fivewin atualizado, melhor seria usar o FWMaria nativo dele. Tem gente que já migrou do tDolphin para o FWMaria, dizem compensar. Eu ainda não fiz isso por motivo de custos, vou esperar passar a pandemia e os negócios melhorarem. Usar o tDolphin é simples, para mim a migração foi muito fácil. Você precisa baixar as libs e fazer uns testes . Depois disso mãos a obra. https://bitbucket.org/danielgarciagil/tdolphin/downloads/ Na pasta samples tem vários exemplos. Qualquer dúvida, pode perguntar.
  12. Bom dia Edu. Eu não sei se existe vantagem em usar o SQLRDD. Eu fiz minha migração usando o tDolphin, estou contente com a solução mas agora existe uma opção melhor que é a solução nativa do FiveWin nas últimas versões. No caso dos pedidos: pode continuar usando dbf local e depois salvar a partir dele no SqL, mas pode ser diferente: Eu faço assim: quando salva o pedido, já cria o registro no SQL e depois vai inserindo os itens do pedido direto no sql a cada inclusão de item. Uso matrizes para guardar os dados de cada item. Quando o usuário clica Salvar o item, o sistema monta o comando SQL a partir dos valores da matriz. No caso, existe uma tabela para os dados gerais do pedido e uma tabela com todos os itens de todos os pedidos. Exemplo parcial: cQry := 'INSERT INTO `itpedi` SET ' cQry += 'codite = "'+ xi+'",' cQry += 'codped = "'+ matriz[1]+'",' cQry += 'codped_id = "'+ alltrim(str(matriz[45]))+'",' cQry += 'produt_id = "'+ alltrim(str(matriz[43]))+'",' cQry += 'fornec_id = "'+ alltrim(str(matriz[44]))+'",' cQry += 'qtd_ped = "'+ alltrim(str(matriz[2]))+'",' cQry += 'qtd_ent = "'+ alltrim(str(matriz[18]))+'",' cQry += 'aentre = "'+ alltrim(str(matriz[19]))+'",' cQry += 'codpro = "'+ matriz[3]+'",' cQry += 'codfor = "'+ matriz[6]+'",' cQry += 'preco_unit = "'+ alltrim(str(matriz[4]))+'",' cQry += 'preco_tot = "'+ alltrim(str(matriz[8]))+'",' cQry += 'status = "'+ matriz[5]+'",' cQry += 'pdesc = "'+ alltrim(str(matriz[9]))+'"' sysrefresh() oQry2 := oServer:sqlQuery( cQry) sysrefresh() []´s
  13. Olá Colegas Procuro parceria para desenvolvimento de solução para Frente de Caixa . Preferencialmente quem já tenha sistema desenvolvido e pronto em funcionamento. Necessário que seja utilizado banco de dados MariaDB/mySQL . Contatos por e-mail rogerio@softservice.com ou whats 11 999 060 075
  14. Olá Edu, Eu já fiz alguns estudos de implantação de coletores para clientes, mas meus clientes são tão miseráveis que nunca quiseram investir em coletores, que são caros. O que eu vi sobre eles, é que geram um arquivo TXT delimitado. A sua aplicação só precisa ler esse TXT e processar conforme a necessidade. É bem simples a implantação. Veja com seu cliente se ele já tem o coletor e veja com o fornecedor como é a geração dos dados. []´s
  15. Bom dia. Eu uso assim, não seria isso: novocampo := oemtoansi(CLIENT_->nome) Nesse caso, o dbf CLLIENT_ ainda estava sendo usado numa aplicação Clipper, convertendo para windows. []´s
  16. Valdir, Os arquivos .rc são txt puro, muito fáceis de editar com o editor de texto, posso copiar colar qualquer diálogo de um sistema para outro. Acho que os .res não dão essa facilidade, ou estou errado?
  17. Pessoal, eu uso faz tempo o Pelles 8.00. Tem funcionado bem, exceto por dois pequenos problemas que não consegui resolver até agora . Se em algum diálogo eu tiver uma pergunta com ? quando salvo pelo Pelles ele acrescenta uma barra invertida \ , ficando então \? que gera erro na compilação. 11: Invalid escape sequence O que tenho feito é abrir o arquivo .rc e substituir os \? por ? , mas tenho que fazer sempre que salvo algo no Pelles. Outro erro: Tenho este diálogo para o uso do calendário auxiliar: CALENDAR DIALOGEX DISCARDABLE 6, 18, 138, 122 STYLE DS_SHELLFONT|WS_POPUP|DS_3DLOOK|WS_CAPTION|WS_SYSMENU|WS_VISIBLE FONT 9, "Arial" { CONTROL "", 2001, "SysMonthCal32", WS_TABSTOP, 4, 4, 132, 100 CONTROL "OK", 103, "Button", WS_TABSTOP, 51, 104, 35, 14 } Sempre que salvo o arquivo .rc com o Pelles ele altera esse diálogo alterando a linha FONT 9, "Arial", 0, 0, 1 e então na compilação é gerado o erro 24: Expecting BEGIN Nesse caso também tenho que editar o código e remover o , 0, 0, 1 Pergunto aos colegas: alguém já passou por isso usando o Pelles? Tem alguma idéia do motivo dessas substituições e como resolver? []´s
  18. Desde o velho Clipper (RIP) como constava no manual, o uso de variáveis definidas como matrizes consome menos memória. Então eu sempre que possível uso matrizes para todas as variáveis. Também facilita bastante a programação. IF oQry:nRecCount >0 cmatriz[10] := oQry:cheques cmatriz[11] := oQry:autcartao1 cmatriz[12] := oQry:valorcartao1 cmatriz[13] := oQry:venc_cartao1 cmatriz[14] := oQry:autcartao2 cmatriz[15] := oQry:valorcartao2 cmatriz[16] := oQry:venc_cartao2 cmatriz[17] := oQry:autdebito cmatriz[18] := oQry:valordebito cmatriz[19] := oQry:dinheiro cmatriz[20] := oQry:data for xx=10 to 20 ocmatriz[xx]:refresh() next END []´s
  19. Augusto, Sabendo de problemas que podem ocorrer pelo uso de aspas simples ou duplas no conteúdo de campos, eu adotei uma solução radical. Sempre antes de qualquer INSERT ou UPDATE, eu limpo o conteúdo digitado pelo cliente, assim: cQry += 'endereco = "'+ ClearChar(cmatriz[4], {"'",'"'} )+'",' Function ClearChar(cString,aChar) Aeval(aChar, {|cChar| cString:=StrTran(cString,cChar,"")}) Return(cString) []´s
  20. Bom dia Luiz, O que faço é o seguinte: Quando é gerado um error.log o programa sempre aborta. Então tenho uma rotina que na inicialização do programa, ele verifica se existe um arquivo error.log . Existindo o arquivo é enviado por e-mail para mim, para uma conta exclusiva para receber os erros. Em seguida o error.log é excluido. Isso ajuda na correção de erros, no suporte e no pega-pirata. Sds.
  21. Como o Marcio falou acima, no seu caso o Terminal Server seria a solução imediata. É a solução que tenho recomendado aos clientes que querem continuar com o sistema antigo. Funciona bem, inclusive permite rodar nossos aplicativos em tablets Android. Mas a solução definitiva é mudares para SQL. Parece um bixo complicado, mas assim que começares vais ver que é muiiiiito mais fácil de trabalhar com SQL do que com DBFs.
  22. Aguiar, faz tempo que não lido com isso. O último ajuste foi em 2015, estava funcionando ao menos até 2017. Segue o código que tenho aqui: //*----------------------------------------------------------------------------* // // M., Ronaldo: Boleto Bancario em Harbour // // Method Banco_033() Class MR_Boleto // //*----------------------------------------------------------------------------* Method Banco_033() Class MR_Boleto ::Banco_Dv_____ := "7" ::Banco_Nome___ := "Banco Santander" IF EMPTY( ::Prefixo______ ) ::Prefixo______ := ::Conta________ ::Conta________ := '' ::Prefixo_DV___ := ::Conta_DV_____ ::Conta_DV_____ := '' ENDIF ::Prefixo______ := PADL( ALLTRIM( Left( ::Prefixo______, 6 ) ), 6, '0' ) ::Prefixo_DV___ := PADL( ALLTRIM( Left( ::Prefixo_DV___, 1 ) ), 1, '0' ) ::NossoNumero__ := PADL( ALLTRIM( Left( ::NossoNumero__, 12 ) ), 12, '0' ) ::NossoNumer_DV := ::DC_Mod11( ::Banco________, 9, .F., ::NossoNumero__, .F. ) digNossoNumero := ::DC_Mod11( ::Banco________, 9, .F., ::NossoNumero__, .F. ) ::NossoNumero_z := ::NossoNumero__ + " " + ::NossoNumer_DV ::Ag_Cod_Cedent := TRAN( ::Banco_Agencia + '/' + ::Prefixo______ + '-' + ::Prefixo_DV___, "@!") ::Campo_Livre__ := '9' + ::Prefixo______ + ::Prefixo_DV___ + ::NossoNumero__ + + ::NossoNumer_DV + '0'+ ::Carteira_____ Return NIL Sds.
  23. Edu, provavelmente o e-mail vai formatado em html. Nesse caso, basta inserir a imagem relativa ao endereço onde ela está no dominio/site do cliente. Se o cliente não tem dominio/site, crie uma pasta no seu próprio dominio para armazenar os logos dos clientes, que é o que eu faço. No caso o comando a ser usado no corpo da msg seria este: <IMG SRC="'+logo+'" ALT="Logotipo" BORDER=0> no caso, logo carrega o endereço do logo do cliente, p. ex. logo := "http://servidor.net/pasta/logo.jpg" []´s
  24. Pessoal, quero agradecer a colaboração de todos e postar aqui a solução baseada na dica do Rochinha e outra que descobri na documentação do MySQL. Desta forma eu pego o IP do cliente da última conexão ao banco MySQL, isto é, conecto ao banco de dados e logo a seguir executo esta verificação: TRY CONNECT bServer HOST alltrim(host) ; USER alltrim(usuario) ; PASSWORD alltrim(senha) ; PORT nPort ; FLAGS nFlags; DATABASE "information_schema" CATCH oErr MsgInfo( oErr:Description ) RETURN NIL END oQry:= bServer:Query("SELECT host FROM information_schema.processlist WHERE ID = connection_id( ) LIMIT 0 , 10") userIP := oQry:host bServer:end() //========================================= Aqui usando a dica do Rochinha a partir do código do PINGA: #include "dll.ch" static xdll CLASS TdWebService DATA hOpen DATA sbuffer HIDDEN DATA xDLL HIDDEN METHOD New(buffersize) CONSTRUCTOR METHOD OpenWS(url) METHOD End() ENDCLASS METHOD New(conexion,buffersize) CLASS TdWebService DEFAULT buffersize:=64000 ::sbuffer:=buffersize xDll:=LoadLib32("wininet.dll") ::hOpen = InternetOpen("TdWebService", 1,,, 0) RETURN Self METHOD OpenWS(url) CLASS TdWebService local hFile,ret,xml hFile = InternetOpenUrl(::hOpen, url,"",0,,0) xml:=space(::sbuffer) InternetReadFile(hFile, @xml, ::sbuffer, @Ret) return alltrim(xml) //return subst(alltrim(xml),1,len(alltrim(xml))-5) METHOD End() CLASS TdWebService FreeLib32(xDll) return nil Dll32 FUNCTION InternetOpenUrl(hInternetSession As 7, lpszUrl As 8, lpszHeaders As 8, dwHeadersLength As 7, dwFlags As 7, dwContext As 7) As 7 FROM "InternetOpenUrlA" PASCAL Lib xDll Dll32 FUNCTION InternetReadFile(hFile As 7, @sBuffer As 8, lNumBytesToRead As 7, @lNumberOfBytesRead As 7) As 7 PASCAL Lib xDll //========================== function getIPExtern( _site_ ) local _IPExtern_ ws:=TdWebService():new() _IPExtern_ := ws:OpenWS(_site_) ws:end() msginfo(_IPExtern_) return //=========================== getIPExtern("http://representantes.info/meuip.php") //========================= Conforme a dica do Sistem acima, o código do arquivo meuip.php é este: <?php $ip = getenv("REMOTE_ADDR");echo "$ip" ?> //============================= Sds.
×
×
  • Create New...