Jump to content
Fivewin Brasil

Ariston Santos

Membros
  • Posts

    500
  • Joined

  • Last visited

  • Days Won

    11

Everything posted by Ariston Santos

  1. Estou à procura de API par a Pix. Tentem com Matera mas está muito caro por operação. Você indica alguma que tenha custo zero ou que seja bem acessível por operação?
  2. Olá. Alguém consegue usar SQLRDD com Firebird 3? Se sim, qual é o segredo? Grato!
  3. Fou muito bom aprender sobre "deadlock" neste link: https://www.youtube.com/watch?v=HnB1e21tuvA
  4. O erro era porque não existia a coluna "observ" na tabela "sga_atendmento". O SQLRDD não informava isso, não aparecia nada relacionado no sqlerror.log. Só deu para descobrir executando a query no EMS QuickDesk. Obrigado por esclarecer que ASC é Default. Agora vou informar apenas DESC, e se precisar classificar no formado Z-A.
  5. Dá pra contornar. Desinstale o AnyDesk atual com IOBit Uninstaller (para remover resíduos do registro do windows) Instale uma versão mais antiga, e pronto! Para min assim ainda está funcionando.
  6. Valeu pela dica. Com isso descobri que o erro estava na estrutura da tabela. SQLRDD não mostrou isso.
  7. Olá. Aguém já passou por este erro? Sabe como resolver? Dynamic SQL Error - Native error code 335544569 Command : SELECT FIRST 1 a.cod_seq AS cod_seq, a.idunico AS idunico, a.cod_opr AS cod_opr, a.nom_opr AS nom_opr, a.nom_atd AS nom_atd, a.dtatend AS dtatend, a.hoatend AS hoatend, a.nrpront AS nrpront, a.iduprnt AS iduprnt, a.nome AS nome, a.end_rua AS end_rua, a.end_nro AS end_nro, a.end_bai AS end_bai, a.end_cep AS end_cep, a.end_cid AS end_cid, a.end_uf AS end_uf, a.end_zona AS end_zona, a.queixa AS queixa, a.observacao AS observacao, a.tipoatd AS tipoatd, a.tipocad AS tipocad, b.cod_atd AS codativ, b.idunico AS iduativ, b.descatd AS descatd, b.nomprof AS nomprof, b.observ AS obsativ, a.estcivi AS estcivi, a.dultmen AS dultmen, coalesce(a.qtgesta, 0) AS qtgesta, coalesce(a.qtpariu, 0) AS qtpariu, coalesce(a.qtabort, 0) AS qtabort, a.clrisco AS clrisco, coalesce(a.num_ord, 0) AS num_ord FROM sga_atend_atv b JOIN sga_atendimento a ON b.idunico = a.idunico WHERE a.cod_seq > 0 ORDER BY a.cod_seq ASC hStmt : Steatment handle : Connection handle : RetCode : -1 SR_FIREBIRD:RUNTIMEERR Linha : 859 SR_FIREBIRD:EXECUTE Linha : 618 SQLARRAY Linha : 81 ATDGETRECEP Linha : 931 ATDRECEPCAO Linha : 58 (b)SGAMAIN Linha : 168 TBTNBMP:CLICK Linha : 465 TBTNBMP:LBUTTONUP Linha : 656 TCONTROL:HANDLEEVENT Linha : 1690 TBTNBMP:HANDLEEVENT Linha : 1408 _FWH Linha : 3153 WINRUN Linha : 0 TWINDOW:ACTIVATE Linha : 980 SGAMAIN Linha : 226
  8. TiraAcentos() FUNCTION TiraAcentos(cStr) LOCAL cStrNew := "", nX, aAcento, aLetras aAcento := {"ã","Ã","Æ","Â"," ","µ","…","·","‚","","ˆ","Ò","¡","Ö","¢","à","ä","å","“","â","£","š","á","Á","à","À","é","É","ê","Ê","í","Í","ó","Ó","õ","Õ","ô","Ô","ú","Ú","ü","Ü","ù","ç","‡","Ç","€","§","¦","º","°","ª","ƒ"} aLetras := {"a","A","a","A","a","A","a","A","e","E","e","E","i","I","o","O","o","O","o","O","u","U","a","A","a","A","e","E","e","E","i","I","o","O","o","O","o","O","u","U","u","U"," ","c","c","C","C",".",".",".",".",".", ""} FOR nX := 1 TO LEN(aAcento) try cStrNew := STRTRAN(cStr,aAcento[nX],aLetras[nX]) cStr := cStrNew catch e end try NEXT IF EMPTY(cStrNew) ; cStrNew := cStr ; ENDIF RETURN(cStrNew) MyMsgRun() // Substitua por MsgRun() Filewrite() FUNCTION FileWrite(cFname, cStrig) *----------( Alternativa ao memowrit, para salver texto em arquivo )-----------* LOCAL _lOk := .f., nH, _nBt, nErrNr := 0 IF FILE(cFname) IF FERASE(cFname) = -1 nErrNr := FERROR() // pegar código de erro com FERROR() SysRefresh() ; MsgAlert("Não foi possível excluir o arquivo "+cFname, "Erro: ("+ALLTRIM(STR(nErrNr))+") "+DosErr2Str(nErrNr)) RETURN .F. ENDIF ENDIF nH := FCreate(cFname) // Se houver erro, retorna -1 IF nH >= 0 _nBt := FWrite(nH, cStrig) // Retorna a quantidade de bytes escritos FClose(nH) // Retorna .T. ou .F., pegar código de erro com FERROR() nErrNr := FERROR() IF nErrNr > 0 ; _lOk := .F. ; ELSE ; _lOk := .T. ; ENDIF // Se maior que zero, houve erro. Consulte FERROR() ENDIF IF ! _lOk SysRefresh() ; MsgAlert("Ocorreu um erro ao criar o arquivo "+cFname, "Erro: ("+ALLTRIM(STR(nErrNr))+") "+DosErr2Str(nErrNr)) ENDIF RETURN _lOk FUNCTION DosErr2Str(nErrNr) *-------------------( Retorna uma strig com o motivo do erro )-----------------* LOCAL c_Err := "" IF nErrNr = 02 ; c_Err := "Arquivo nao encontrado" ; ENDIF IF nErrNr = 03 ; c_Err := "Pasta não encontrada" ; ENDIF IF nErrNr = 04 ; c_Err := "Muitos arquivos abertos" ; ENDIF IF nErrNr = 05 ; c_Err := "Acesso negado" ; ENDIF IF nErrNr = 06 ; c_Err := "Handle inválido" ; ENDIF IF nErrNr = 08 ; c_Err := "Memória insuficiente" ; ENDIF IF nErrNr = 15 ; c_Err := "Especificado um drive inválido" ; ENDIF IF nErrNr = 19 ; c_Err := "Tentativa de gravar em disco protegido" ; ENDIF IF nErrNr = 21 ; c_Err := "Disco não pronto" ; ENDIF IF nErrNr = 23 ; c_Err := "Erro de CRC" ; ENDIF IF nErrNr = 29 ; c_Err := "Erro de gravação" ; ENDIF IF nErrNr = 30 ; c_Err := "Erro de leitura" ; ENDIF IF nErrNr = 32 ; c_Err := "Violação de compartilhamento" ; ENDIF IF nErrNr = 33 ; c_Err := "Violação de travamento" ; ENDIF RETURN( c_Err )
  9. Este exemplo obtém o JSON e baixa a imagem, mas o modo como faço o download está incorreto porque estou salvando o conteúdo como JPEG, mas a imagem baixada pode ter outras formatos. O que quero saber se se os senhores pode indicar um modo melhor de fazer o download. FUNCTION PrdBaixInfo(aBars, xInfo, cFimg) LOCAL xmlhttp_resultado := "", _xBar := "7896806700069" LOCAL _xNome := "", _xNcm := "", _Cest := "", _xEmbal := "", _xQtEmb := "", _xMarca := "", _xCateg := "", _xPeso := "", _xTrib := "" DEFAULT cFimg := "" _xBar := ALLTRIM(aBars[1,2]) IF EMPTY(_xBar) SysRefresh() ; MsgAlert("É preciso informar um código de barras no cadastro do produto", "Atenção!") return nil endif url := "http://www.eanpictures.com.br:9000/api/"+xInfo+"/"+_xBar // Ex: 7896806700069 (xInfo: desc=JSON, gtin=Imagem) CursorWait() try oUrl:=TUrl():New( url ) // From tip.lib oHttp := TipClientHttp():New( oUrl , .f. ) // From tip.lib catch oErr CursorArrow() SysRefresh() ; MsgAlert("Houve um erro: "+oErr:Description, "Atenção!") return nil end try Try oHttp:Open() _xRet := oHttp:ReadAll() // Baixa todo o conteúdo do site. Catch oErr CursorArrow() SysRefresh() ; MsgAlert("Houve um erro: "+oErr:Description, "Atenção!") return nil End oHttp:Close() DeleteUrlCacheEntry(url) // Lipar Cache IF EMPTY(_xRet) CursorArrow() SysRefresh() ; MsgAlert("Houve um erro na comunicação com o Webservice", "Atenção!") return nil ENDIF CursorArrow() IF '"Status":"404"' $ _xRet _xMsg := "" _xRet := "["+TiraAcentos(UnicodeToStr(_xRet, .f.))+"]" hJson := {} nLength := hb_JSONDecode( _xRet, @hJson ) for nInf := 1 to len(hJson) Li := hJson[nInf] if len(Li) > 0 try ; _xMsg := Alltrim(Li["Status_Desc"]) ; catch ; end try && Para republicavirtual endif next SysRefresh() ; MsgInfo(_xMsg, "Info") return nil ENDIF IF xInfo = "desc" // Obter um JSON com as informações do proudto IF '"Status":"200"' $ _xRet * SysRefresh() ; MsgInfo(_xRet, "Ok") _xRet := "["+TiraAcentos(UnicodeToStr(_xRet, .f.))+"]" hJson := {} nLength := hb_JSONDecode( _xRet, @hJson ) for nInf := 1 to len(hJson) Li := hJson[nInf] if len(Li) > 0 try ; _xNome := LEFT(UPPER(Li["Nome"])+SPACE(50),50) ; catch ; end try && Para republicavirtual try ; _xNcm := LEFT(UPPER(Li["Ncm"])+SPACE(50),50) ; catch ; end try try ; _Cest := LEFT(UPPER(Li["Cest_Codigo"])+SPACE(02),02) ; catch ; end try try ; _xEmbal := LEFT(UPPER(Li["Embalagem"])+SPACE(30),30) ; catch ; end try try ; _xQtEmb := LEFT(UPPER(Li["QuantidadeEmbalagem"])+SPACE(50),50) ; catch ; end try try ; _xMarca := LEFT(UPPER(Li["Marca"])+SPACE(50),50) ; catch ; end try try ; _xCateg := LEFT(UPPER(Li["Categoria"])+SPACE(30),30) ; catch ; end try try ; _xPeso := LEFT(UPPER(Li["Peso"])+SPACE(50),50) ; catch ; end try && Para republicavirtual try ; _xTrib := LEFT(UPPER(Li["tributacao"])+SPACE(50),50) ; catch ; end try && Para republicavirtual endif next c_Txt :="DESCRIÇÃO: "+ALLTRIM(_xNome )+CRLF+; "NCM......: "+ALLTRIM(_xNcm )+CRLF+; "CEST.....: "+ALLTRIM(_Cest )+CRLF+; "TIPO EMB.: "+ALLTRIM(_xEmbal)+CRLF+; "QT. EMB..: "+ALLTRIM(_xQtEmb)+CRLF+; "MARCA....: "+ALLTRIM(_xMarca)+CRLF+; "CATEGORIA: "+ALLTRIM(_xCateg)+CRLF+; "PESO.....: "+ALLTRIM(_xPeso )+CRLF+; "TRUBUT...: "+ALLTRIM(_xTrib ) IF FileWrite("eaninfo.txt", c_Txt) MyMsgRun("",,{||WAITRUN(GETENV("ComSpec")+" /C START NOTEPAD .\eaninfo.txt", 0 )}) ELSE SysRefresh() ; MsgAlert("Não foi possível criar o arquivo .txt!", "Aviso do sistema") ENDIF else SysRefresh() ; MsgInfo(_xRet, "Aviso") endif ELSE // Donwload da imagem do produto cFimg := GetCurDir()+"\tempdir\"+_xBar+".jpg" FileWrite(cFimg, _xRet) hIni := LEFT(TIME(),8) WHILE ! FILE(cFimg) SysWait(0.25) IF SECS(ELAPTIME(hIni, LEFT(TIME(),8))) > 10 ; EXIT ; ENDIF LOOP END SysWait(0.25) * WAITRUN(GETENV("ComSpec")+" /C START NOTEPAD .\"+cFimg, 0 ) ENDIF RETURN NIL
  10. Olá, senhores. Como faço para obter a imagem baixada deste exemplo via código? http://www.eanpictures.com.br:9000/api/gtin/7896806700069 Grato
  11. Você poderia enviar o link do site?
  12. Opa! Eu tinha entendido errado. Mas, desculpa minha ignorância, poderia me dizer por que precisa fazer isso?
  13. Será que os valores retornados na função abaixo server? //----------------------------------------------------------------------------// FUNCTION DLG_RESOLUCION( oDlg ) LOCAL aPor := {1,1},; nWidth := GetSysMetrics(0),; nHeight := GetSysMetrics(1) nTWid := WndWidth(FindWindow( 'Shell_TrayWnd',nil)) IF nTWid < nWidth // TrayBar position: Right or left nWidth -= nTWid ENDIF nThei := WndHeight(FindWindow( 'Shell_TrayWnd',nil)) IF nThei < nHeight // TrayBar position: Bottom or top nHeight -= nThei ENDIF nBwid := ((100/oDlg:nWidth)*nWidth)/100 nBhei := ((100/oDlg:nHeight)*nHeight)/100 aPor := {nBwid, nBhei} RETURN aPor
  14. Realmente JSON é mais simples. Mas como eu tive alguns problemas com a função hb_jsondecode() em outro caso, fiquei preocupado e parei de usar.
  15. Segue minha contribuição neste assunto * Função de busca de Endereço pelo CEP Utilizando WebService de CEP da republicavirtual.com.br function BuscaCEP( cep, _cUF, cCidade, cEnde, cBairro, cCompl, _oDlg ) LOCAL xmlhttp_resultado := "", cXML := "" DEFAULT cep := "", _cUF := "", cCidade := "", cEnde := "", cBairro := "", cCompl := "" if empty(cep) ; return .t. ; endif nOpc := Alert("Buscar CEP via", {"ViaCEP", "Rep.Virtual"}, "Escolha uma opção") IF nOpc = 1 cLink := "https://viacep.com.br/ws/"+ALLTRIM(cep)+"/xml/?callback=meu_callback" cXML := Emt_GetHtml( cLink ) DeleteUrlCacheEntry(cLink) // Lipar Cache IF Empty(cXML) ; RETURN .F. ; ENDIF IF "<erro>true</erro>" $ cXML SysRefresh() ; MsgAlert("CEP não encontrado.", "Atenção!") RETURN .F. ENDIF cCodMun := MySubstr(cXML, '<ibge>', '<') _cUF := MySubstr(cXML, '<uf>', '<') aCidUf := DTBGetCid(cCodMun) cCidade := aCidUf[1] cEnde := Upper(TiraAcentos(UnicodeToStr(MySubstr(cXML, '<logradouro>', '<'), .t.))) cCompl := LEFT(Upper(TiraAcentos(UnicodeToStr(MySubstr(cXML, '<complemento>', '<'), .t.)))+SPACE(255), 255) cBairro := LEFT(Upper(TiraAcentos(UnicodeToStr(MySubstr(cXML, '<bairro>', '<'), .t.)))+SPACE(30),30) ELSEIF nOpc = 2 url := "http://cep.republicavirtual.com.br/web_cep.php?cep="+ALLTRIM(cep)+"&formato=jsonp" // +"&formato=query_string" try oUrl:=TUrl():New( url ) // From tip.lib oHttp := TipClientHttp():New( oUrl , .f. ) // From tip.lib catch oErr SysRefresh() ; MsgAlert("Houve um erro: "+oErr:Description, "Atenção!") return .f. end try Try oHttp:Open() cXML := oHttp:ReadAll() // Baixa todo o conteúdo do site. Catch oErr SysRefresh() ; MsgAlert("Houve um erro: "+oErr:Description, "Atenção!") RETURN .f. End oHttp:Close() DeleteUrlCacheEntry(url) // Lipar Cache cXML := "["+TiraAcentos(UnicodeToStr(cXML, .f.))+"]" cRes := "" cResTxt := "" cTipo := "" hJson := {} nLength := hb_JSONDecode( cXML, @hJson ) for nCep := 1 to len(hJson) Li := hJson[nCep] if len(Li) > 0 try ; cRes := LEFT(UPPER(Li["resultado"])+SPACE(50),50) ; catch ; end try && Para republicavirtual try ; cResTxt := LEFT(UPPER(Li["resultado_txt"])+SPACE(50),50) ; catch ; end try try ; _cUF := LEFT(UPPER(Li["uf"])+SPACE(02),02) ; catch ; end try try ; cCidade := LEFT(UPPER(Li["cidade"])+SPACE(30),30) ; catch ; end try try ; cTipo := LEFT(UPPER(Li["tipo_logradouro"])+SPACE(50),50) ; catch ; end try try ; cEnde := LEFT(UPPER(Li["tipo_logradouro"]) + " " + UPPER(Li["logradouro"])+SPACE(50),50) ; catch ; end try try ; cBairro := LEFT(UPPER(Li["bairro"])+SPACE(30),30) ; catch ; end try endif next ENDIF if _oDlg == nil ; XBrowse(hJson,"Retorno") ; endif if _oDlg <> nil ; _oDlg:Update() ; endif return .t. FUNCTION MySubstr(cString, cStrtAt, cFnshAt) cRes := "" nIni := At(cStrtAt, cString) + LEN(cStrtAt) if nIni > 0 cSub := SubStr(cString, nIni) nFim := At(cFnshAt, cSub) - 1 if nFim > 0 cRes := SUBSTR(cSub, 1, nFim) endif endif RETURN cRes FUNCTION DTBGetCid(cCodMun) * Crie um script para obter o nome do municipio aqui RETURN "" FUNCTION UnicodeToStr(_cStr, lTiraAcento) LOCAL _cNewStr := _cStr LOCAL aConvert := {} AADD(aConvert, {"á", "\u00e1"}) AADD(aConvert, {"à", "\u00e0"}) AADD(aConvert, {"â", "\u00e2"}) AADD(aConvert, {"ã", "\u00e3"}) AADD(aConvert, {"ä", "\u00e4"}) AADD(aConvert, {"Á", "\u00c1"}) AADD(aConvert, {"À", "\u00c0"}) AADD(aConvert, {"Â", "\u00c2"}) AADD(aConvert, {"Ã", "\u00c3"}) AADD(aConvert, {"Ä", "\u00c4"}) AADD(aConvert, {"é", "\u00e9"}) AADD(aConvert, {"è", "\u00e8"}) AADD(aConvert, {"ê", "\u00ea"}) AADD(aConvert, {"ê", "\u00ea"}) AADD(aConvert, {"É", "\u00c9"}) AADD(aConvert, {"È", "\u00c8"}) AADD(aConvert, {"Ê", "\u00ca"}) AADD(aConvert, {"Ë", "\u00cb"}) AADD(aConvert, {"í", "\u00ed"}) AADD(aConvert, {"ì", "\u00ec"}) AADD(aConvert, {"î", "\u00ee"}) AADD(aConvert, {"ï", "\u00ef"}) AADD(aConvert, {"Í", "\u00cd"}) AADD(aConvert, {"Ì", "\u00cc"}) AADD(aConvert, {"Î", "\u00ce"}) AADD(aConvert, {"Ï", "\u00cf"}) AADD(aConvert, {"ó", "\u00f3"}) AADD(aConvert, {"ò", "\u00f2"}) AADD(aConvert, {"ô", "\u00f4"}) AADD(aConvert, {"õ", "\u00f5"}) AADD(aConvert, {"ö", "\u00f6"}) AADD(aConvert, {"Ó", "\u00d3"}) AADD(aConvert, {"Ò", "\u00d2"}) AADD(aConvert, {"Ô", "\u00d4"}) AADD(aConvert, {"Õ", "\u00d5"}) AADD(aConvert, {"Ö", "\u00d6"}) AADD(aConvert, {"ú", "\u00fa"}) AADD(aConvert, {"ù", "\u00f9"}) AADD(aConvert, {"û", "\u00fb"}) AADD(aConvert, {"ü", "\u00fc"}) AADD(aConvert, {"Ú", "\u00da"}) AADD(aConvert, {"Ù", "\u00d9"}) AADD(aConvert, {"Û", "\u00db"}) AADD(aConvert, {"ç", "\u00e7"}) AADD(aConvert, {"Ç", "\u00c7"}) AADD(aConvert, {"ñ", "\u00f1"}) AADD(aConvert, {"Ñ", "\u00d1"}) AADD(aConvert, {"&", "\u0026"}) AADD(aConvert, {"'", "\u0027"}) FOR nX := 1 TO LEN(aConvert) IF aConvert[nX,2] $ _cNewStr _cNewStr := STRTRAN(_cNewStr, aConvert[nX,2], aConvert[nX,1]) ENDIF NEXT RETURN(IIF(lTiraAcento,TiraAcentos(_cNewStr),_cNewStr)) FUNCTION TiraAcentos(cStr) LOCAL cStrNew := "", nX, aAcento, aLetras aAcento := {"ã","Ã","Æ","Â"," ","µ","…","·","‚","","ˆ","Ò","¡","Ö","¢","à","ä","å","“","â","£","š","á","Á","à","À","é","É","ê","Ê","í","Í","ó","Ó","õ","Õ","ô","Ô","ú","Ú","ü","Ü","ù","ç","‡","Ç","€","§","¦","º","°","ª","ƒ"} aLetras := {"a","A","a","A","a","A","a","A","e","E","e","E","i","I","o","O","o","O","o","O","u","U","a","A","a","A","e","E","e","E","i","I","o","O","o","O","o","O","u","U","u","U"," ","c","c","C","C",".",".",".",".",".", ""} FOR nX := 1 TO LEN(aAcento) cStrNew := STRTRAN(cStr,aAcento[nX],aLetras[nX]) cStr := cStrNew NEXT IF EMPTY(cStrNew) ; cStrNew := cStr ; ENDIF RETURN(cStrNew) * Clear browser cache DLL Function DeleteUrlCacheEntry(lpszUrlName AS STRING) AS LONG PASCAL FROM "DeleteUrlCacheEntryA" LIB "wininet.dll"
  16. Uso o TS da Microsoft mas, apesar das vantagens, ainda sinto falta de alguns recursos, como ler peso da balança conectada ao PC do usuário sendo que o programa está rodando no servidor TS. Se esta solução viabilizar a leitura de peso no PC do usuário, vai ser ótimo. Vou comprar.
  17. Então, por que eu tenho a 5.02? Segue o link: Borland Resource Workshop 5.02
  18. Estou usando o B4A (Basic For Android) . Até o momento supre minha necessidade.
  19. Olá amigo.

    Recebi seu e-mail mas não respondi, porque a resposta é a mesma que postei aqui.

    :)

  20. Não. Visto que não tem como testar em ambiente de homologação, desisti. Passei a sugerir o uso do SNGPC NET
  21. Sua pergunta está muito vaga. O que você realmente precisa? Criar uma API e precisa de exemplo?
  22. Não tenho a tTxtPrev, mas tenho esta rotina que está sendo útil no momento. FUNCTION MsgPrevew(cSpoolFile, nSkip) LOCAL lOk, aText, cText, nMaior, o_Txt, lExit := .F. PUBLIC nFont := 3, o_Fnt[9] DEFAULT nSkip := 6 lOk := .f. aText := {} cText := "" nMaior:=0 o_Txt := MEMOREAD( cSpoolFile ) nLinh := MLCOUNT(o_Txt) for n := 3 TO nLinh cLinh := SUBSTR(STRTRAN(MEMOLINE(o_Txt,254,n),"",""), nSkip, 254) cText += cLinh + CRLF nMaior := IIF(LEN(ALLTRIM(cLinh)) > nMaior, LEN(ALLTRIM(cLinh)), nMaior) IF n >= 350 cText += "--------------------" + CRLF cText += "Continua..." + CRLF EXIT ENDIF next DEFINE FONT o_Fnt[1] NAME "Courier New" SIZE 0, -09 DEFINE FONT o_Fnt[2] NAME "Courier New" SIZE 0, -10 DEFINE FONT o_Fnt[3] NAME "Courier New" SIZE 0, -11 DEFINE FONT o_Fnt[4] NAME "Courier New" SIZE 0, -12 DEFINE FONT o_Fnt[5] NAME "Courier New" SIZE 0, -13 DEFINE FONT o_Fnt[6] NAME "Courier New" SIZE 0, -14 DEFINE FONT o_Fnt[7] NAME "Courier New" SIZE 0, -15 DEFINE FONT o_Fnt[8] NAME "Courier New" SIZE 0, -16 DEFINE FONT o_Fnt[9] NAME "Courier New" SIZE 0, -17 DEFINE CURSOR oHand HAND SysRefresh() DEFINE WINDOW oVisu FROM 0,0 TO 35, 100 TITLE "Previsualização" ; STYLE nOr( WS_POPUP, WS_CAPTION, WS_BORDER, WS_SYSMENU, DS_SYSMODAL) DEFINE SBUTTONBAR oViBar SIZE 44, 33 OF oVisu 3DLOOK COLORS CLR_GRAY, nBtClr OFFICE oViBar:bRClicked := { |nRow, nCol| ( NIL ) } // Mouse direito oViBar:bLClicked := { |nRow, nCol| ( NIL ) } // Mouse Esquerdo DEFINE SBUTTON oSb1 OF oViBar FILE ".\bitmaps\printer.bmp" OFFICE ; MESSAGE "Imprimir" ; COLOR CLR_GRAY,{CLR_HGRAY,CLR_WHITE,3} ; MENU ACTION ImpSplMenu(oSb1, cSpoolFile) DEFINE SBUTTON oSb2 OF oViBar FILE ".\bitmaps\procbtn2.bmp" OFFICE ; MESSAGE "Aumentar tamanho da fonte" ; COLOR CLR_GRAY,{CLR_HGRAY,CLR_WHITE,3} ; ACTION MudaFonte(oGet1, "+") GROUP DEFINE SBUTTON oSb3 OF oViBar FILE ".\bitmaps\procbtn1.bmp" OFFICE ; MESSAGE "Diminuir tamanho da fonte" ; COLOR CLR_GRAY,{CLR_HGRAY,CLR_WHITE,3} ; ACTION MudaFonte(oGet1, "-") DEFINE SBUTTON oSb4 OF oViBar FILE ".\bitmaps\sair1.bmp" OFFICE ; MESSAGE "Sair da previsualização" ; COLOR CLR_GRAY,{CLR_HGRAY,CLR_WHITE,3} ; ACTION oVisu:End() GROUP AEval( oViBar:aControls, { | o | o:oCursor := oHand } ) DEFINE STATUSBAR OF oVisu PROMPT "Previsualização" CENTERED @25, 05 GET oGet1 VAR cText OF oVisu SIZE 35, 100 PIXEL MEMO FONT o_Fnt[nFont] HSCROLL READONLY WndCenter(oVisu:hWnd) ACTIVATE WINDOW oVisu ; ON INIT (oGet1:Move(35, 4, oVisu:GetCliRect():nRight - oVisu:GetCliRect():nLeft - 8, oVisu:GetCliRect():nBottom - oVisu:GetCliRect():nTop -70, .t.)) ; VALID (AEVAL(o_Fnt, {|o|o:End()}) ,; oHand:End() ,; oVisu := nil ,; lExit := .T. ,; .T.) StopUntil( {|| lExit} ) RELEASE nFont RETURN lOk STATIC FUNCTION MudaFonte(oGet1, cOp) *----------------------( Função MudaFonte de MsgPreview )---------------------* IF cOp = "+" nFont ++ IF nFont > 9 ; nFont := 9 ; MsgBeep(); ENDIF ELSEIF cOp = "-" nFont -- IF nFont < 1 ; nFont := 1 ; MsgBeep(); ENDIF ENDIF oGet1:SetFont(o_Fnt[nFont]) oGet1:Refresh() RETURN NIL STATIC FUNCTION ImpSplMenu(oBtn, cSpoolFile) LOCAL oMenu, aRect aRect := GetClientRect( oBtn:hWnd ) MENU oMenu POPUP 2007 MENUITEM "Papel Carta" ACTION ImpSpool(cSpoolFile, cDraftp) MENUITEM "Imp Térmica" ACTION ImpSpool(cSpoolFile, cICupom) ENDMENU ACTIVATE POPUP oMenu AT aRect[ 3 ] + 1, aRect[ 2 ] OF oBtn RETURN NIL
  23. Se você está obtendo o conteúdo da balança, tente fazer uma limpeza antes. Ex: cBuffer := strtran(cDados, chr(02), "") cBuffer := strtran(cBuffer, chr(03), "") cBuffer := strtran(cBuffer, chr(27), "") cvar := cBuffer if at(".", cvar) # 0 .or. at(",", cvar) # 0 if at(",", cvar) # 0 cvar := strtran(cvar, ",",".") endif xQtd := VAL(cVar) else xQtd := VAL(cVar) / 1000 endif ? xQtd
  24. Tem algum exemplo de CRUD em Fivewin para este Banco de Dados?
×
×
  • Create New...