Jump to content
Fivewin Brasil

giovanyvecchi

Membros
  • Posts

    793
  • Joined

  • Last visited

  • Days Won

    13

Everything posted by giovanyvecchi

  1. Sim, pelas exigências governamentais os documentos originais tem que ser armazenados em uma pasta segura e manter a integridade da assinatura. Então faço melhor, compacto os pdfs com senha e gravo no campo Binario da tabela. Isto porque uso Dicionario de dados do ADS com tabelas ADT.
  2. Assim que eu chegar em casa envio pra você. A respeito de varias assinaturas em um único arquivo, creio que funciona sim. Não testei porque para mim não há exigências de varias assinaturas. Sei que funciona também em certificado A3, mais isto em um cartório fica inviável ja que o certificado A3 tem que estar ligado ao computador. Com certificado A1 eu salvei o PFX em um campo BLOB no banco de dados. Quando vai assinar os documentos, o PFX é extraído para o computador local e com a senha e o serial do certificado eu assino os documentos sem precisar de instalar o certificado no repositorio do windows.
  3. Tem o chilkat https://www.chilkatsoft.com/ que tem um custo de +- 2500 reais Eu tive que adquirir ele porque tenho sistema de cartórios e a demanda de assinaturas digitais em um pequeno cartório passa de 200 documentos hoje em dia. Este componente tem muitas outras funções uteis, e estou usando somente a assinatura de documentos. Se quiser testar o DEMO dele eu passo a classe que faz as assinaturas.
  4. Eu fiz usando apenas certificado A1 com Chilkat Tentei com OpenSsl e não consegui. Qualquer duvida meu skype giovany.vecchi
  5. Eu fiz uma função ja faz tempo. nem estou usando. mais deve servir FUNCTION TXT_CAPITALIZE(f_cTexto) Local lc_cTextoReturn := "", lc_aTmpTokenTxt := {} Local lc_cTmpPalavra := "", lc_cTmpCap := "" Local lc_iFor := 0 lc_aTmpTokenTxt := hb_aTokens(f_cTexto) For lc_iFor := 1 To Len(lc_aTmpTokenTxt) lc_cTmpPalavra := lc_aTmpTokenTxt[lc_iFor] lc_cTmpCap := Lower(lc_cTmpPalavra) If Len(lc_cTmpPalavra) > 2 If !(lc_cTmpCap $ "das dos") lc_cTmpCap := Upper(SubStr(lc_cTmpCap,1,1))+SubStr(lc_cTmpCap,2) EndIf EndIf lc_cTextoReturn += lc_cTmpCap + " " Next lc_cTextoReturn := rTrim(lc_cTextoReturn) RETURN lc_cTextoReturn
  6. Voce ta usando sistema remoto ? SET SERVER REMOTE Para entrar com este parâmetro voce tem que instalar o Advantage Database Server no servidor ou no computador que esta as tabelas. Se voce instalou o Sistema Remoto, as dlls CLIENT tem que ser da mesma versão do sistema Server. Se voce não instalou entra com SET SERVER LOCAL Que desta maneira voce acessa com as DLLs Ace32.dll e AdsLoc32.dll que devem ficar na mesma pastade seu executavel. Se voce quiser ir adiante com ads e usar sistema com object Table system (DataSet) usando tabelas ADT com dicionario de dados, isto possibilita voce trabalhar com sql junto com comandos RDD. Veja abaixo o link de tAds https://github.com/giovanyvecchi/tAdsGit Qualquer duvida pode perguntar.
  7. Oficio de altura tem 35 Cm Oficio 2 tem 33 Cm Seria: DMPAPER_FOLIO ou DMPAPER_FANFOLD_LGL_GERMAN
  8. Inclua a função #pragma BEGINDUMP #include <hbapi.h> #include <windows.h> #include <ShellApi.h> #include <ShlObj.h> ///#include "hbapi.h" typedef LONG ( * PDLLREGISTERSERVER ) ( void ); HB_FUNC( HB_BASE64ENCODE ) { ULONG len = hb_parclen( 1 ); if( len <= INT_MAX ) /* TOFIX */ { const char * s = hb_parcx( 1 ); char * t, * p; t = p = ( char * ) hb_xgrab( ( 4 * ( ( len + 2 ) / 3 ) + 1 ) * sizeof( *t ) ); while( len-- > 0 ) { static const char s_b64chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; int x, y; x = *s++; *p++ = s_b64chars[ ( x >> 2 ) & 0x3F ]; if( len-- <= 0 ) { *p++ = s_b64chars[ ( x << 4 ) & 0x3F ]; *p++ = '='; *p++ = '='; break; } y = *s++; *p++ = s_b64chars[ ( ( x << 4 ) | ( ( y >> 4 ) & 0x0F ) ) & 0x3F ]; if( len-- <= 0 ) { *p++ = s_b64chars[ ( y << 2 ) & 0x3F ]; *p++ = '='; break; } x = *s++; *p++ = s_b64chars[ ( ( y << 2 ) | ( ( x >> 6 ) & 3 ) ) & 0x3F ]; *p++ = s_b64chars[ x & 0x3F ]; } *p = '\0'; hb_retc_buffer( t ); } else hb_retc_null(); } #pragma ENDDUMP
  9. Uso Ads com dicionario de dados em tabelas ADT. E sempre funcionou desta maneira, Aproveitando os registros excluídos, Tive que mudar algumas rotinas que aproveitava a sequencia de gravação por causa deste recurso.
  10. Bom, tente criar um objeto xml assim oDocXml := CreateObject( "MSXML2.DOMDocument") oDocXml:LoadXML(cXml) ///Depois envie pelo objeto xml oServer:Send(oDocXml:xml) Tente tambem converter o xml oServer:Send(hb_StrToUTF8( oDocXml:xml))
  11. Mude a linha do header oServer:SetRequestHeader( "Content-Type", "text/xml;charset=ISO-8859-1" )
  12. Qual é o tipo de autorização do esquema do e-social ? Seria basic? Tipo assim: oHttpWeb:SetRequestHeader( "Authorization","Basic "+hb_base64Encode(cUserLogin+":"+cSenha) )
  13. Tenta saber qual versão da dll ACE32.DLL e ADSLOC32.DLL que estava antes Este erro é incompatibilidade de indices O collation faz a ordenação conforme o tipo de idioma Outra. apague os arquivos de indices .ADI e abra o programa novamente
  14. Primeiramente algumas perguntas: 1- Tem dicionario de dados ou não ? Para saber certifique se tem um arquivo com a extensão .ADD e .AI 2- As tabelas tem extensões .DBF ou .ADT ?
  15. Entendi, faz assim oFastRep:PrintOptions:SetPageNumbers("1")
  16. ::oFastRep:SetProperty("PDFExport", "ShowDialog", .f.) ::oFastRep:SetProperty("PDFExport", "FileName", cFilePdfTmp) ::oFastRep:SetProperty("PDFExport", "ShowProgress", .T. ) ::oFastRep:SetProperty("PDFExport", "Compressed", .T. ) ::oFastRep:SetProperty("PDFExport", "EmbeddedFonts", .F. ) ::oFastRep:SetProperty("PDFExport", "PrintOptimized", .T. ) ::oFastRep:SetProperty("PDFExport", "Author", "Seu nome" ) ::oFastRep:SetProperty("PDFExport", "Subject", ::cPdfSubject ) ::oFastRep:SetProperty("PDFExport", "Background", .F. ) ::oFastRep:SetProperty("PDFExport", "Creator","Nome da empresa" ) ::oFastRep:SetProperty("PDFExport", "HTMLTags", .T. ) ::oFastRep:PrepareReport() ::oFastRep:DoExport("PDFExport") ::oFastRep:DestroyFR() É só incluir isto no final do report
  17. Ta faltando apenas uma propriedade ai bEditValue oLbx:aCols[3]:bStrData := {|| Transform(aDados[oLbx:nArrayAt,7],"@E 9,999.99") } oLbx:aCols[3]:bEditValue := {|| aDados[oLbx:nArrayAt,7]}
  18. Faça o mesmo teste compilando os prgs separados com as funções separadas com a opção /n e depois execute o programa.
  19. Não tem problemas se você colocar 300, 2000 PRGs. O problema é a quantidade de variáveis publicas e privadas que são carregadas ao executar o programa. Para resolver este problema você deve usar variáveis STATIC e LOCAL e compilar o programa com /n /w1 (eu uso /w2). Desta forma o sistema não carregará todos os módulos já que eles não possuem vinculo de variáveis para carregar. Você pode tratar as variáveis ambiguas compilando com /a, só que você deve tomar cuidado que se voce tem uma variavel tipo assim cNomecli e ela for criada sem declaração em vários pontos do programa, o compilador vai entender que esta variável é apenas uma e não trabalhara do ponto que foi criado para os prgs antes do ponto de criação. As variáveis publicas são as piores para consumir memória e atolar o gerenciamento de pilha do programa. Sem falar que as variáveis publicas pode evitar o descarregamento de um modulo do programa após voce sair ou fechar o procedimento. Para saber como seu sistema esta compile com as opções /n /w1 e poste o resultado aqui. Se voce ja faz assim o problema pode estar no sistema de recursos. Tente usar somente variáveis LOCAL E STATIC
  20. Se tirar o X voce tira tambem a borda e o titulo. Melhor usar a clausa VALID para impedir que seja fechado pelo X
  21. Eu acho que o melhor não é ver se o arquivo esta na pasta, logo porque o sistema windows pode demorar um pouquinho para disponibilizar o arquivo em lista. Vai direto no assunto, Acesse o arquivo diretamente e ja verifique se o acbr liberou ele. Local nHandleFile, lOpenFile := .F., nQtaTentativas := 0 DO WHILE .T. nHandleFile := Fopen("C:\PASTA\ARQUIVO.TXT",16) //FO_EXCLUSIVE If nHandleFile == -1 nQtaTentativas ++ hb_idleSleep( 0.2 ) SysRefresh() else lOpenFile := .T. Exit EndIf If nQtaTentativas > 50 // 50 x .2 = 10 Segundos Exit EndIf ENDDO IF !lOpenFile ? "ERRO" ELSE fClose(nHandleFile) // fecha o arquivo se quiser ENDIF
  22. Tenta assim: Do While PathFileExists("c:\blabla\qqfoi.txt") = 0 SysWait(.3) EndDo DLL32 FUNCTION PathFileExists(cPathFileName AS STRING) AS LONG PASCAL ; FROM "PathFileExistsA" LIB "shlwapi.dll"
  23. Experimente a função hb_FileExists()
  24. Por volta de 2010 eu usava skin do codejock Se alguem estiver interessado posso passar. Funciona com activex. Vou passar algumas telas.
×
×
  • Create New...