Jump to content
Fivewin Brasil

Yury

Membros
  • Posts

    873
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by Yury

  1. olá João o sysrefresh() e o exit / eof() não alteraram em nada o comportamento do programa ou seja, a lentidão quando ocorre acesso simultâneo permanece obrigado Yury xHarbour 1.0 / FW 08.1 / SQLLIB
  2. olá pessoal, boa tarde creio q esse assunto já foi abordado aqui no fórum, mas pesquisei todos os links e não encontrei uma solução vou descrever o "problema": uma determinada estação da rede (chamarei de terminal A) chama um programa que lê um arquivo DBF indexado (CDX) por um campo tipo DATA, utilizando DBSEEK, e demora 20 segundos para finalizar a leitura do arquivo no intervalo solicitado agora outra estação (chamarei de terminal A chama o mesmo programa, sendo que a primeira estação que chamou (terminal A) ainda está executando o programa ; o tempo de execução do programa no terminal B até finalizar a leitura dos registros agora é de 1 minuto se o terminal A chamar novamente o programa, sem que o terminal B abandone, o tempo para finalizar também é de 1 minuto, ou seja, demora nas duas estações o mesmo tempo de 1 minuto quando o acesso ao programa é simultâneo quando 1 dos terminais abandona o programa, o terminal que permanece executando volta a obter o resultado em 20 segundos já isolei os trechos do programa e constatei que: - a "abertura dos arquivos" com DBUSEAREA mantém a mesma velocidade acessando por 1 terminal ou pelos 2 terminais - o "fechamento dos arquivos" com CLOSE mantém a mesma velocidade acessando por 1 terminal ou pelos 2 terminais - a velocidade de leitura no while acessando por um terminal é muito mais rápida do que quando está acessando pelos 2 terminais portanto é o LOOP que está sendo afetado pelo acesso simultâneo, perdendo desempenho informações sobre o ambiente onde foi testado isso: - servidor com Windows Server 2012 Standart - terminais com Windows 7 Professional nas pesquisas que fiz sobre o assunto me deparei com inúmeras dicas falando sobre o cabeamento da rede, placa de rede, anti-vírus, etc... mas posso lhes adiantar que a rede está funcionando ok e as estações em que foi testado este comportamento estão com anti-vírus desabilitado e firewall do windows liberando arquivos DBF, CDX, FPT, etc... (testamos em várias estações) inclusive em um cliente que reclamou dessa situação o comportamento é o mesmo, testamos em várias estações também para comprovar a rotina q estamos utilizando para testar é muito simples: //----------------------------------------------------------------------------- #include 'FiveWin.ch' Function Teste() cTime:=TIME() Select 1 Use "M:\TESTE.DBF" Alias "NF" Shared Set index to "M:\TESTE.CDX" dDataIni := CTOD("01/01/2013") dDataFim := DATE() nContador := 0 NF->(DBSETORDER(1)) NF->(DBSEEK(DTOS(dDataIni),.T.)) WHILE !NF->(EOF()) .and. NF->NFDATA <= dDataFim nContador++ NF->(DBSKIP()) ENDDO ? 'Tempo da leitura dos registros: ' + CRLF +; ElapTime(cTime,TIME()) + CRLF +; NETNAME() + CRLF +; ALLTRIM(STR(nContador))+' registros lidos' // permanecer com esta mensagem em exibição e chamar o programa de outro // terminal CLOSE ALL RETURN //----------------------------------------------------------------------------- este comportamento não me parece normal , se alguém tiver alguma sugestão ou idéia eu agradeço obrigado Yury
  3. bom dia Geraldo a SQLLIB q uso é a versão comercial e na verdade o erro não está ocorrendo na gravação dos dados ; é que na saída de todos os programas eu uso um DBCOMMITALL para encerrar eventuais transações não finalizadas imagino q o DBCOMMITALL da SQLLIB execute internamente um COMMIT no BD MySql e um número considerável de vezes ocorre este erro, em um determinado cliente obrigado pela resposta, vou continuar pesquisando para ver se descubro Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
  4. boa tarde o erro é : MySQL RDD: Lost connection to MySQL server during query ele está ocorrendo após executar a função dbcommitall() SQL_ERROR, na linha : 165 DBCOMMITALL, na linha : 0 no log da sqllib (sqllog.txt) não fica registrada a query que provocou o erro no servidor mysql não é erro por timeout ; o erro ocorre especificamente ao executar o DBCOMMITALL no programa creio q é algo interno da sqllib, porém é difícil saber oq é... se alguém tiver alguma idéia agadeço desde já Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
  5. boa tarde o erro é : MySQL RDD: Lost connection to MySQL server during query ele está ocorrendo após executar a função dbcommitall() SQL_ERROR, na linha : 165 DBCOMMITALL, na linha : 0 no log da sqllib (sqllog.txt) não fica registrada a query que provocou o erro no servidor mysql não é erro por timeout ; o erro ocorre especificamente ao executar o DBCOMMITALL no programa creio q é algo interno da sqllib, porém é difícil saber oq é... se alguém tiver alguma idéia agadeço desde já Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
  6. em algum momento está abrindo uma área com um determinado alias() e não está fechando, ao tentar abrir de novo dá o erro teste com aGetWorkAreas() local cAlias:=ALIAS() IF "CNTMP" $ aGetWorkAreas() CLOSE CNTMP ENDIF USE SQL cSQL ALIAS "CNTMP" VIA "MySQL" NEW IF !EMPTY(cAlias) SELECT &cAlias ENDIF id=code>id=code>Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
  7. // listbox declarado com NOME,ENDEREÇO,APELIDO E CIDADE @ 1,1 LISTBOX oLBX FIELDS CLI->NOME ,; CLI->ENDE ,; CLI->APEL ,; CLI->CITY ; HEADERS "Nome do Cliente" ,; "Endereço" ,; "Apelido" ,; "Cidade" ; SIZE 200,150 OF oDLG function Altera_Listbox() // aqui mudará para NOME,ENDEREÇO,APELIDO E DT.NASCIMENTO oLBX:bLine:={|| { CLI->NOME ,; CLI->ENDE ,; CLI->APEL ,; DTOC(CLI->DATA) }} oLBX:aHeaders[1]="Nome do Cliente" oLBX:aHeaders[2]="Endereço" oLBX:aHeaders[3]="Apelido" oLBX:aHeaders[4]="Data de Nascimento" CLI->(DBGOTOP()) oLBX:Refresh() RETURN id=code>id=code>Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
  8. citação:Fala Yury. Bom, se a TMail não resolver, será que usando o comando mailto dá certo ? mailto:juninho.luisao@gmail.com&cc=vimansca@vimansca.com.br&cco=yury030575@yahoo.com.br &subject=Teste&body=Yury, não fui trabalhar sábado. Pesquisei um pouco e vi uma opção &atachment='file.ext' mas aqui não funcionou. Luis Fernando Jr. (Luisão) "Death smiles at us all. All a man can do is smile back" FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY + [Ghost/Java]Script + GMaps E-Mail: juninho.luisao@gmail.com MSN: juninho_luisao@hotmail.com id=quote>id=quote>mailto não permite anexar arquivos Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
  9. olá pessoal, a classe TMail está apresentando um erro: 'Não foi possível encontrar o objeto' este erro ocorre quando o Microsoft Outlook está definido como software padrão para email se o Outlook Express for definido como padrão, o erro não ocorre e a caixa de email é exibida e a mensagem é enviada o problema é que os usuários querem continuar utilizando o Microsoft Outlook como padrão como eu poderia continuar utilizando a classe TMail mesmo como o Microsoft Outlook sendo o software padrão para email ? grato pela atenção PS: para testar e reproduzir o erro é necessário ter o Microsoft Outlook do pacote Office instalado na máquina e que o mesmo seja setado como padrão, caso contrário o erro não ocorre Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 8.1 Editado por - Yury on 17/07/2010 11:13:04
  10. olá pessoal, a classe TMail está apresentando um erro: 'Não foi possível encontrar o objeto' este erro ocorre quando o Microsoft Outlook está definido como software padrão para email se o Outlook Express for definido como padrão, o erro não ocorre e a caixa de email é exibida e a mensagem é enviada o problema é que os usuários querem continuar utilizando o Microsoft Outlook como padrão como eu poderia continuar utilizando a classe TMail mesmo como o Microsoft Outlook sendo o software padrão para email ? grato pela atenção PS: para testar e reproduzir o erro é necessário ter o Microsoft Outlook do pacote Office instalado na máquina e que o mesmo seja setado como padrão, caso contrário o erro não ocorre Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 8.1 Editado por - Yury on 17/07/2010 11:13:04
  11. Modelos de boleto suportados pelo Cobrebem 'Padrao' 'PadraoHTML' 'PadraoReciboPersonalizadoHTML' 'Invertido' 'CarnetReciboLateralDireita' 'CarnetReciboLateralEsquerda' 'PadraoReciboPersonalizado' 'InvertidoReciboPersonalizado' 'CarnetReciboLateralDireitaPersonalizado' 'CarnetReciboLateralEsquerdaPersonalizado' 'ReciboLateralEsquerda' 'PadraoEnderecadoVerso' 'InvertidoEnderecadoVerso' 'PadraoEnderecadoVersoReciboPersonalizado' 'InvertidoEnderecadoVersoReciboPersonalizado' 'PadraoVersoPersonalizado' 'InvertidoVersoPersonalizado' 'PadraoVersoPersonalizadoReciboPersonalizado' 'InvertidoVersoPersonalizadoReciboPersonalizado' 'CarnetReciboTopo' 'CarnetReciboTopoPersonalizado' 'ReciboLateralEsquerdaPersonalizado' oComponente:PadroesBoleto:PadroesBoletoImpresso:LayoutBoleto = id=code>id=code>imagino q seja algum destes tipos de 'Carnet', passe o modelo desejado para a propriedade do componente Cobrebem abraço Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
  12. olá, um pequeno exemplo, não é oq vc quer, mas pode lhe ajudar, veja as classes TFile() e TTxtfile(), principalmente o método Seek() #include "FiveWin.ch" Function Main() cFile = cGetFile("*.TXT",'Selecione o arquivo:') if !file(cFile) return endif while .t. cText = SPACE(30) if !msgget('Informe o texto:','',@cText) return endif cText = alltrim(cText) oFile = TTxtFile():New( cFile ) lRet = oFile:Seek( cText , 0, 0 ) if lRet msginfo('Texto encontrado !','OK') else msginfo('Texto não encontrado !','ERRO') endif enddo return id=code>id=code>Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
  13. deve estar faltando endpage() ou podem ser as fontes q vc definiu... de toda forma, sem ver o código fica difícil crie um exemplo onde aconteça o problema e poste aqui Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
  14. parabens pela sua iniciativa e pelo ótimo trabalho ! abraços Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
  15. '+ CRLF + ; ' 'src=3D"'+cImagem+'"=20'+ CRLF + ; 'width=3D140 border=3D0> '+ CRLF + ; '"teste de imagem no corpo do email"=20'+ CRLF + ; ''+ CRLF + ; ''+ CRLF + ; '
  16. '+ CRLF + ; ' 'src=3D"'+cImagem+'"=20'+ CRLF + ; 'width=3D140 border=3D0> '+ CRLF + ; '"teste de imagem no corpo do email"=20'+ CRLF + ; ''+ CRLF + ; ''+ CRLF + ; '
  17. João, meu querido... oque postei foi um exemplo de como utilizar, meu rei... na verdade basta vc fazer o seguinte: no seu programa, após vc selecionar a impressora, teste o seguinte: aPaper = PrnGetPaper( oPrinter ) if !aPaper[3] = 'A4' MSGALERT('Coloque papel A4 meu filho !','ATENÇÃO') RETURN endif id=code>id=code>se não entender, poste o trecho inicial dum relatório seu que utilize a TPrinter que eu mostro para vc como fazer... abraço Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
  18. #include 'FiveWin.ch' //--------------------------------------------------- Function Main() oPrinter = TPrinter():New( 'Meu Documento' , .T., .T., NIL, .T. ) IF oPrinter:hDc = 0 RETURN ENDIF aPaper = PrnGetPaper( oPrinter ) ? 'Nome do Papel da Impressora selecionada:' , aPaper[3] oPrinter:End() return .t. //--------------------------------------------------- //---------------------------------------------------- Function PrnGetPaper( oPrn ) local aPoint := PrnGetSize( oPrn:hDc ) local aRecmm := {} local nW := 0 local nH := 0 local wx := 0 local aPapers:={{"DMPAPER_LETTER " , 1 , "Letter " , {216,279} },; {"DMPAPER_LETTERSMALL " , 2 , "Letter Small " , {216,279} },; {"DMPAPER_TABLOID " , 3 , "Tabloid " , {280,432} },; {"DMPAPER_LEDGER " , 4 , "Ledger " , {432,280} },; {"DMPAPER_LEGAL " , 5 , "Legal " , {216,356} },; {"DMPAPER_STATEMENT " , 6 , "Statement " , {140,216} },; {"DMPAPER_EXECUTIVE " , 7 , "Executive " , {184,257} },; {"DMPAPER_A3 " , 8 , "A3 " , {297,420} },; {"DMPAPER_A4 " , 9 , "A4 " , {210,297} },; {"DMPAPER_A4SMALL " , 10 , "A4 Small " , {210,297} },; {"DMPAPER_A5 " , 11 , "A5 " , {148,210} },; {"DMPAPER_B4 " , 12 , "B4 " , {250,354} },; {"DMPAPER_B5 " , 13 , "B5 " , {182,257} },; {"DMPAPER_FOLIO " , 14 , "Folio " , {216,330} },; {"DMPAPER_QUARTO " , 15 , "Quarto " , {215,275} },; {"DMPAPER_10X14 " , 16 , "10x14 in " , {254,356} },; {"DMPAPER_11X17 " , 17 , "11x17 in " , {280,432} },; {"DMPAPER_NOTE " , 18 , "Note " , {216,279} },; {"DMPAPER_ENV_9 " , 19 , "Envelope #9 " , {098,225} },; {"DMPAPER_ENV_10 " , 20 , "Envelope #10 " , {105,241} },; {"DMPAPER_ENV_11 " , 21 , "Envelope #11 " , {114,264} },; {"DMPAPER_ENV_12 " , 22 , "Envelope #12 " , {109,279} },; {"DMPAPER_ENV_14 " , 23 , "Envelope #14 " , {127,292} },; {"DMPAPER_ENV_DL " , 27 , "Envelope DL " , {110,220} },; {"DMPAPER_ENV_C5 " , 28 , "Envelope C5 " , {162,229} },; {"DMPAPER_ENV_C3 " , 29 , "Envelope C3 " , {324,458} },; {"DMPAPER_ENV_C4 " , 30 , "Envelope C4 " , {229,324} },; {"DMPAPER_ENV_C6 " , 31 , "Envelope C6 " , {114,162} },; {"DMPAPER_ENV_C65 " , 32 , "Envelope C65 " , {114,229} },; {"DMPAPER_ENV_B4 " , 33 , "Envelope B4 " , {250,353} },; {"DMPAPER_ENV_B5 " , 34 , "Envelope B5 " , {176,250} },; {"DMPAPER_ENV_B6 " , 35 , "Envelope B6 " , {176,125} },; {"DMPAPER_ENV_ITALY " , 36 , "Envelope " , {110,230} },; {"DMPAPER_ENV_MONARCH " , 37 , "Envelope Monarch " , {098,191} },; {"DMPAPER_ENV_PERSONAL " , 38 , "6 3/4 Envelope " , {092,165} },; {"DMPAPER_FANFOLD_US " , 39 , "US Std Fanfold " , {378,279} },; {"DMPAPER_FANFOLD_STD_GERMAN" , 40 , "German Std Fanfold " , {216,305} },; {"DMPAPER_FANFOLD_LGL_GERMAN" , 41 , "German Legal Fanfold" , {216,330} } } aRecmm = oPrn:Pix2Mmtr(aPoint[1], aPoint[2]) nW = ROUND(aRecmm[1],0) nH = ROUND(aRecmm[2],0) for wx=1 to len(aPapers) if aPapers[wx,4,1] = nW .AND. aPapers[wx,4,2] = nH return {aPapers[wx,1],aPapers[wx,2],aPapers[wx,3]} endif next return {"",0,""} *------------------------------------------------------------------------------------------------------------------------- id=code>id=code>Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say Editado por - yury on 20/08/2009 15:40:31
  19. olá João, fiz esta função ha um tempo atras, é meio gambiarra mas para oq precisei na época resolveu: passe como parâmetro o obj da TPrinter *------------------------------------------------------------------------------------------------------------------------- Function PrnGetPaper( oPrn ) local aPoint := PrnGetSize( oPrn:hDc ) local aRecmm := {} local nW := 0 local nH := 0 local wx := 0 local aPapers:={{"DMPAPER_LETTER " , 1 , "Letter " , {216,279} },; {"DMPAPER_LETTERSMALL " , 2 , "Letter Small " , {216,279} },; {"DMPAPER_TABLOID " , 3 , "Tabloid " , {280,432} },; {"DMPAPER_LEDGER " , 4 , "Ledger " , {432,280} },; {"DMPAPER_LEGAL " , 5 , "Legal " , {216,356} },; {"DMPAPER_STATEMENT " , 6 , "Statement " , {140,216} },; {"DMPAPER_EXECUTIVE " , 7 , "Executive " , {184,257} },; {"DMPAPER_A3 " , 8 , "A3 " , {297,420} },; {"DMPAPER_A4 " , 9 , "A4 " , {210,297} },; {"DMPAPER_A4SMALL " , 10 , "A4 Small " , {210,297} },; {"DMPAPER_A5 " , 11 , "A5 " , {148,210} },; {"DMPAPER_B4 " , 12 , "B4 " , {250,354} },; {"DMPAPER_B5 " , 13 , "B5 " , {182,257} },; {"DMPAPER_FOLIO " , 14 , "Folio " , {216,330} },; {"DMPAPER_QUARTO " , 15 , "Quarto " , {215,275} },; {"DMPAPER_10X14 " , 16 , "10x14 in " , {254,356} },; {"DMPAPER_11X17 " , 17 , "11x17 in " , {280,432} },; {"DMPAPER_NOTE " , 18 , "Note " , {216,279} },; {"DMPAPER_ENV_9 " , 19 , "Envelope #9 " , {098,225} },; {"DMPAPER_ENV_10 " , 20 , "Envelope #10 " , {105,241} },; {"DMPAPER_ENV_11 " , 21 , "Envelope #11 " , {114,264} },; {"DMPAPER_ENV_12 " , 22 , "Envelope #12 " , {109,279} },; {"DMPAPER_ENV_14 " , 23 , "Envelope #14 " , {127,292} },; {"DMPAPER_ENV_DL " , 27 , "Envelope DL " , {110,220} },; {"DMPAPER_ENV_C5 " , 28 , "Envelope C5 " , {162,229} },; {"DMPAPER_ENV_C3 " , 29 , "Envelope C3 " , {324,458} },; {"DMPAPER_ENV_C4 " , 30 , "Envelope C4 " , {229,324} },; {"DMPAPER_ENV_C6 " , 31 , "Envelope C6 " , {114,162} },; {"DMPAPER_ENV_C65 " , 32 , "Envelope C65 " , {114,229} },; {"DMPAPER_ENV_B4 " , 33 , "Envelope B4 " , {250,353} },; {"DMPAPER_ENV_B5 " , 34 , "Envelope B5 " , {176,250} },; {"DMPAPER_ENV_B6 " , 35 , "Envelope B6 " , {176,125} },; {"DMPAPER_ENV_ITALY " , 36 , "Envelope " , {110,230} },; {"DMPAPER_ENV_MONARCH " , 37 , "Envelope Monarch " , {098,191} },; {"DMPAPER_ENV_PERSONAL " , 38 , "6 3/4 Envelope " , {092,165} },; {"DMPAPER_FANFOLD_US " , 39 , "US Std Fanfold " , {378,279} },; {"DMPAPER_FANFOLD_STD_GERMAN" , 40 , "German Std Fanfold " , {216,305} },; {"DMPAPER_FANFOLD_LGL_GERMAN" , 41 , "German Legal Fanfold" , {216,330} } } aRecmm = oPrn:Pix2Mmtr(aPoint[1], aPoint[2]) nW = ROUND(aRecmm[1],0) nH = ROUND(aRecmm[2],0) for wx=1 to len(aPapers) if aPapers[wx,4,1] = nW .AND. aPapers[wx,4,2] = nH return {aPapers[wx,1],aPapers[wx,2],aPapers[wx,3]} endif next return {"",0,""} *------------------------------------------------------------------------------------------------------------------------- id=code>id=code>se houver mais modelos de papéis é somente adicionar na tabela, mas o correto mesmo seria obter uma forma de carregar esta tabela de papéis do driver da impressora abraço Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say Editado por - yury on 19/08/2009 19:16:40
  20. olá, uma opnião: trabalhe com a lógica contrária, ou seja, atualize primeiro um BD temporário na estação local e imediatamente após esta atualização na estação local que está fazendo a venda vc tenta atualizar no servidor, se conseguir, marque uma flag como ENVIADO na sua transação, se não conseguir, marque como NÃO ENVIADO faça uma rotina de uma forma que após cada transação realizada na estação de vendas sejam lidas as transações que estão como NÃO ENVIADO e tente enviar para o servior as transações não enviadas ficarão em uma fila de transações NÃO ENVIADAS por estação de venda, que poderão ser atualizadas quando o servidor voltar utilize um timer para varrer o BD temporário de tempo em tempo para verificar se há transações não enviadas e se consegue atualizar abraço Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
  21. segue mais um exemplo: #include 'FiveWin.ch' //-------------------------------------- Function Main() Recebe_Retorno(X2513X89000X62) return //-------------------------------------- //-------------------------------------- Function Recebe_Retorno( nCNPJ ) LOCAL hOldDll LOCAL hDll LOCAL oCBX LOCAL oLista LOCAL uValo LOCAL nCDPA := 0 LOCAL cDiretorio := '' LOCAL cNomenc := '' LOCAL cArquivo := '' LOCAL nOcorrencias := 0 LOCAL nCont := 0 LOCAL ny := 0 LOCAL cProp := '' LOCAL cLayout := '' LOCAL aLayout := {} LOCAL nLenBoleto := 0 LOCAL cArqLicenca := '' LOCAL cCNPJ := STRZERO(nCNPJ,14) LOCAL cDll := 'C:\VSIS\MTB\COBREBEM\DLL\CobreBemX.dll' LOCAL lAtualiza := .F. LOCAL aMotivos := {} if .not.file(cDll) MsgStop('A DLL '+cDll+' não foi encontrada. Não é possível processar arquivo de retorno...','ATENÇÃO') RETURN endif hOldDll = GetResources() hDll = LoadLib32(cDll) if hDll <= 32 MsgStop('Não foi possível inicializar a DLL '+cDll+' . Não é possível processar arquivo de retorno...','ATENÇÃO') FreeLib32( hDll ) SetResources(hOldDll) RETURN endif // banco do brasil carteira 17SIMPLES-7 nNRBC = 001 cCART = '17SIMPLES-7' cDir = 'C:\VSIS\MTB\COBREBEM\Licenca\' cArqLicenca = cDir + cCNPJ + '-' + STRZERO(nNRBC,3) + '-' + ALLTRIM(cCART)+'.conf' IF .NOT.FILE(cArqLicenca) MSGALERT("Arquivo de Licença para a carteira não encontrada !","ATENÇÃO") RETURN ENDIF oCBX = NIL oCBX = TOleAuto():New('CobreBemX.ContaCorrente') IF .NOT.VALTYPE(oCBX) = 'O' MSGINFO('Erro ao tentar inicializar componente para processamento do arquivo de retorno...','ATENÇÃO') RETURN ENDIF oCBX:ArquivoLicenca = cArqLicenca IF Erro_Msg(oCBX,.T.,3) RETURN ENDIF IF oCBX:LayoutsArquivoRetorno:Count < 1 MSGALERT('Este parâmetro bancário não possui nenhum layout disponível para retorno bancário...','ATENÇÃO') RETURN ENDIF FOR nCont=0 TO (oCBX:LayoutsArquivoRetorno:Count-1) AADD(aLayout,oCBX:LayoutsArquivoRetorno[nCont] ) NEXT IF ASCAN(aLayout,'FEBRABAN240') > 0 cLayout = 'FEBRABAN240' ELSEIF ASCAN(aLayout,'CNAB400') > 0 cLayout = 'CNAB400' ELSE cLayout = aLayout[1] ENDIF cArquivo = cGetFile("*.*","Selecione o arquivo de retorno:") IF .NOT.FILE(cArquivo) MSGALERT('Arquivo de retorno não encontrado','ATENÇÃO') RETURN ENDIF oCBX:ArquivoRetorno:Layout = cLayout oCBX:ArquivoRetorno:Diretorio = cFilePath(cArquivo) oCBX:ArquivoRetorno:Arquivo = cFileName(cArquivo) IF Erro_Msg(oCbx,.T.,3) RETURN ENDIF oCBX:CarregaArquivosRetorno() IF Erro_Msg(oCbx,.T.,3) RETURN ENDIF aRegistros={} FOR nCont=0 to ( oCbx:OcorrenciasCobranca:Count-1 ) AADD(aRegistros,oCbx:OcorrenciasCobranca[nCont]) NEXT FOR nCont=1 to len(aRegistros) oReg = aRegistros[nCont] ? 'Nosso Numero ',oReg:NossoNumero ? 'Ocorrencia ',oReg:CodigoOcorrencia ? 'Data Ocorrencia ',oReg:DataOcorrencia ? 'Pagamento ',oReg:Pagamento ? 'Data Credito ',oReg:DataCredito ? 'Valor Pago ',oReg:ValorPago ? 'Multa Paga ',oReg:ValorMultaPaga ? 'ValorJurosPago ',oReg:ValorJurosPago ? 'ValorTaxaCobranca ',oReg:ValorTaxaCobranca ? 'ValorCredito ',oReg:ValorCredito ? 'NumeroDocumento ',oReg:NumeroDocumento ? 'ValorDesconto ',oReg:ValorDesconto ? 'Banco ',oReg:Banco ? 'Carteira ',oReg:Carteira ? 'Agencia ',oReg:Agencia ? 'ContaCorrente ',oReg:ContaCorrente ? 'CodigoCedente ',oReg:CodigoCedente ? 'NumeroControle ',oReg:NumeroControle ? 'ValorOutrosAcrescimos',oReg:ValorOutrosAcrescimos ? 'MotivosOcorrencia ',oReg:MotivosOcorrencia NEXT IF LEN(aRegistros)=0 MSGSTOP('Arquivo de retorno não contém registros !') ENDIF RETURN //-------------------------------------- //-------------------------------------- Function Erro_Msg( obj ) local cMsg:=ALLTRIM(obj:UltimaMensagemErro()) if empty( cMsg ) return .f. endif msgstop( cMsg , 'ERRO' ) return .t. //-------------------------------------- id=code>id=code>veja a árvore de componentes em: http://www.cobrebem.com.br/IContaCorrente.html Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
  22. olá, muito importante entender o conceito: oq está em tela no seu array está na MEMÓRIA, não está no BANCO DE DADOS, vc simplesmente carregou as informações e está exibindo... portanto para obter as informações alteradas no banco, vc tem que solicitar novamente , fazendo um novo sqlArray e depois jogando no browse com setarray.. aTabela=sqlArray('SELECT cpoNOME from tbCL ORDER BY cpoNOME') BROWSE oBRW... oBRW:SetArray(aTabela) @ 01,01 button 'Atualizar Registros' function Atualiza() function Atualiza() aTabela=sqlArray('SELECT cpoNOME from tbCL ORDER BY cpoNOME') oBRW:SetArray(aTabela) oBRW:GoTop() oBRW:Refresh() oBRW:SetFocus() return id=code>id=code>abraço Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say Editado por - yury on 27/07/2009 16:51:57
  23. cArquivo = '3410220090727.RET' aRegistros = {} oCBX = TOleAuto():New('CobreBemX.ContaCorrente') IF !VALTYPE(oCBX) = 'O' MSGINFO('Erro ao tentar inicializar componente para processamento do arquivo de retorno...','ATENÇÃO') RETURN ENDIF oCBX:ArquivoRetorno:Diretorio = cFilePath(cArquivo) oCBX:ArquivoRetorno:Arquivo = cFileName(cArquivo) oCBX:CarregaArquivosRetorno() IF !EMPTY(oCBX:UltimaMensagemErro()) MSGINFO('Erro ao ler arquivo '+cArquivo,'ATENÇÃO') RETURN ENDIF FOR nCont=0 to (oCBX:OcorrenciasCobranca:Count-1) AADD(aRegistros,oCBX:OcorrenciasCobranca[nCont]) NEXT FOR nCont=1 TO LEN( aRegistros ) oREG = aRegistros[nCont] ? oREG:NossoNumero ? oREG:CodigoOcorrencia ? oREG:DataOcorrencia ? oREG:Pagamento ? oREG:DataCredito ? oREG:ValorPago ? oREG:ValorMultaPaga ? oREG:ValorJurosPago ? oREG:ValorTaxaCobranca ? oREG:ValorCredito ? oREG:NumeroDocumento ? oREG:ValorDesconto ? oREG:Banco ? oREG:Carteira ? oREG:Agencia ? oREG:ContaCorrente ? oREG:CodigoCedente ? oREG:NumeroControle ? oREG:ValorOutrosAcrescimos ? oREG:MotivosOcorrencia NEXT id=code>id=code>Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
  24. olá Marcelo, eu utilizo rastreamento de 1 objeto por vez e exibindo o resultado na página do browser, somente para consulta da forma que vc quer fazer só funcionará se o correio disponibilizar um retorno por arquivo xml, por exemplo, num esquema webservice outra forma é vc ler o conteúdo da página que o correio retorna, mas aí fica meio na gambiarra. Veja o código abaixo, com xHarbour console não sei se vai funcionar: cLink='http://websro.correios.com.br/sro_bin/txect01$.QueryList?P_LINGUA=001&P_TIPO=001&P_COD_UNI=' cObjRastrear='SX437285721BR' oPg = CreateObject("Microsoft.XMLHTTP") oPg:Open("GET",cLink + cObjRastrear,.F.) oPg:Send() cRET = oPg:ResponseBody ? cRET id=code>id=code>Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
  25. Daniel, obrigado pela sua atenção em responder as questões abraço Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say
×
×
  • Create New...