Kapi,
Baixei a lib do link que vc enviou mas deu outro erro.
Executando: ILINK32 @B32.BC
Turbo Incremental Link 6.70 Copyright (c) 1997-2014 Embarcadero Technologies, Inc.
Error: 'LIB\HBCURL.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
Bom dia!
Gostei da API! E é de graça!
Tá na mão:
********************************************
Function GetDadosCNPJ()
* retorna dados de um CNPJ
* retorno no formato JSON
* site que oferece o servico: https://www.receitaws.com.br
Local oServerWS, cUrl, aArray, oCnpj:= SPACE(14)
MsgGet("ReceitaWS", "Informe o CNPJ:", @oCnpj)
cUrl:= "https://www.receitaws.com.br/v1/cnpj/"+Alltrim(oCnpj)
Try
oServerWS := CreateObject( 'MSXML2.ServerXMLHTTP.6.0' )
Catch e
? e:Description
return nil
End
oServerWS:open('GET', cUrl, .f.)
oServerWS:setRequestHeader('Content-Type' , 'text/xml; charset=utf-8') // Obtém ou define o valor de cabeçalho de Content-type HTTP.
oServerWS:send()
* Verifica o status do request. Exibe erro se houver
IF oServerWS:Status != 200 // OK
MsgStop( Alltrim(STR(oServerWS:Status)) +" - "+ oServerWS:StatusText , "Erro")
RETURN NIL
ENDIF
WHILE oServerWS:readyState != 4
oServerWS:waitForResponse(1000)
END
* decodifica o arquivo json e transforma em um array multidimensional
x := hb_jsondecode( oServerWS:responseText, @aArray )
if aArray == nil
MsgStop("Erro ao retornar os dados. Tente novamente.")
return nil
endif
if aArray['status'] != 'OK' // exibe erros
MsgStop(aArray['message'], 'Erro')
return nil
endif
Vivendo e aprendendo:
https://vivaclipper.wordpress.com/2014/02/08/tokenupper/
#include "FiveWin.ch"
FUNCTION Main()
//Examples
? TokenUpper( "Hello, world, here I am!" )
// "Hello, World, Here I Am!"
? TokenUpper( "Hello, world, here I am!",, 3 )
// "Hello, World, Here I am!"
? TokenUpper( "Hello, world, here I am!", ",", 3 )
// "Hello, world, here I am!"
? TokenUpper( "Hello, world, here I am!", " w" )
// "Hello, wOrld, Here I Am!"
? TokenUpper( Lower( "HELLO, WORLD, HERE I AM LOWER!" ) )
//Tests
? TokenUpper( "Hello, world, here I am!" ) == "Hello, World, Here I Am!"
? TokenUpper( "Hello, world, here I am!",, 3 ) == "Hello, World, Here I am!"
? TokenUpper( "Hello, world, here I am!", ",", 3 ) == "Hello, world, here I am!"
? TokenUpper( "Hello, world, here I am!", " w" ) == "Hello, wOrld, Here I Am!"
RETURN NIL
Bom dia!
Evertonlb, acho que desse jeito não funciona porque ou você trabalha com DB ou array. Se você adicionar mais um elemento vai dar erro em tempo de execução pois o array interno do xbrowse : aCols, terá seu tamanho alterado.
rubensma, a princípio eu não queria fazer isso não pois não sei se vai dar tempo, mas em último caso...
Deixa eu tentar explicar:
São 4 bitmaps. Por exemplo: A, B, C, D.
Pode haver as situações A, A+B, A+C, A+D, B, B+C, B+D, C, C+D, D.
TOTAL = 10.
Em todo caso estou começando a considerar esta hipótese, pois tentei fazer com botões e ficou muito grande a qtde. de objs na tela e esteticamente ficou devendo um pouco. Estou dando preferência a xBrowse.
#include "FiveWin.ch"
FUNCTION Main()
LOCAL oWnd, oSay[3], oFont[2]
DEFINE FONT oFont[1] NAME "ARIAL" SIZE 0,20 BOLD NESCAPEMENT 900
DEFINE WINDOW oWnd ;//FROM 1,5 TO 20,65 ;
TITLE "Testing SAY With Design"
@ 180, 30 say osay[2] prompt "" of ownd color 0 size 80,200 font oFont[1] design update pixel
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON INIT oSay[2]:SAY(180,30,"THIS DONT SHOW",CLR_BLACK,CLR_YELLOW,oFont[1],.t.,) ;
ON PAINT osay[2]:SAY(180,30,"THIS DONT SHOW",CLR_BLACK,CLR_YELLOW,oFont[1],.t.,)
RETURN NIL
// GET de pesquisa
REDEFINE GET opesquisa VAR var_pesquisa ID 40 OF oDlg UPDATE ;
ON CHANGE( ::Assign(), SetPosXbr(var_pesquisa,2,oLbx1) )
********************************************************************************
FUNCTION SetPosXbr(Digitado, xPos, oLbx1)
* Funcao de pesquisa sensitiva no xBrowse com Array
LOCAL nPalavra:= UPPER(ALLTRIM(Digitado))
Amigos, fiz esta funcao que poderá ser melhorada, mas me atende bem. Caso alguem queira incrementar postem para os amigos.
Trata-se de uma função simples de envio de informaçoes aos uaurios.
Exemplo de uso Imaginem ao enviar uma Nota Fiscal
Temos que ver se o Endereço está Preenchido, se o bairro nao é branco, se tem CPF, se o produto esta com NCM, etc... etc..
Imagina ficar dando MSGSTOP() Em cada um delas.
Pensando nisso Fiz esta funcao que voce valida e depois mostra tudo em um Browse ao usuario.
Vejam Exemplo de uma Pre Validação de NF.
*-------------------------------------------------------------------------------
* Data da Criação.: 30-07-2016
* Caida Por.......: Marcio Eduardo (32)99104-0562
* Função que serve para mostrar informaçoes ao usuario (tipo inconsistencia, erro)
* Parametros
*
* v_aRRAY_Inconsistencia = É o array com 08 colunas para as msg
* v_TITULO_DIALOG = Titulos da da Dialogo que será Exibida
* v_Cabecalho = Passa-se os Cabecalhos Separados do PIPE
*-------------------------------------------------------------------------------
FUNCTION MOSTRAR_INCONSISTENCIA(v_aRRAY_Inconsistencia,v_TITULO_DIALOG,v_Cabecalho)
LOCAL N_ERROS, N_AVISOS, N_INFORMACAO, N_OUTROS, T_TXT_ERROS, T_TXT_AVISOS, T_TXT_INFORMACAO, T_TXT_OUTROS
N_ERROS := 0
N_AVISOS := 0
N_INFORMACAO := 0
N_OUTROS := 0
IF EMPTY(v_aRRAY_Inconsistencia)
MsgStop('Não Foi Passado as Informações das Inconsistências !'+CHR(13)+ ProcName(),SISTEMA)
return .F.
ENDIF
IF EMPTY(v_TITULO_DIALOG)
v_TITULO_DIALOG := SISTEMA
ENDIF
IF EMPTY(v_Cabecalho)
MsgStop('Não Foi Passado o Cabeçalho das Inconsistências !'+CHR(13)+ ProcName(),SISTEMA)
return .F.
ENDIF
a_Cabecalho := hb_atokens(v_Cabecalho,"|")
FOR I := 1 TO LEN(a_Cabecalho)
v_Cabecalho_01 := alltrim(a_Cabecalho[1])
v_Cabecalho_02 := alltrim(a_Cabecalho[2])
v_Cabecalho_03 := alltrim(a_Cabecalho[3])
v_Cabecalho_04 := alltrim(a_Cabecalho[4])
v_Cabecalho_05 := alltrim(a_Cabecalho[5])
v_Cabecalho_06 := alltrim(a_Cabecalho[6])
v_Cabecalho_07 := alltrim(a_Cabecalho[7])
v_Cabecalho_08 := alltrim(a_Cabecalho[8])
NEXT
FOR nTipos := 1 TO LEN(v_aRRAY_Inconsistencia)
IF v_aRRAY_Inconsistencia[nTipos,1] $ 'EAI'
IF v_aRRAY_Inconsistencia[nTipos,1] = 'E'
N_ERROS := N_ERROS + 1
ENDIF
IF v_aRRAY_Inconsistencia[nTipos,1] = 'A'
N_AVISOS := N_AVISOS + 1
ENDIF
IF v_aRRAY_Inconsistencia[nTipos,1] = 'I'
N_INFORMACAO := N_INFORMACAO + 1
ENDIF
ELSE
N_OUTROS := N_OUTROS + 1
ENDIF
NEXT
T_TXT_ERROS := ALLTRIM(STR(N_ERROS,06,0)) + ' Erro(s)'
T_TXT_AVISOS := ALLTRIM(STR(N_AVISOS,06,0)) + ' Alerta(s)'
T_TXT_INFORMACAO := ALLTRIM(STR(N_INFORMACAO,06,0)) + ' Informaçoe(s)'
T_TXT_OUTROS := ALLTRIM(STR(N_OUTROS,06,0)) + ' Outro(s)'
*-------------------------------------------------------------------------
Asort( (v_aRRAY_Inconsistencia),,, {|x,y| (x[ 02 ] ) > (y[ 02 ]) } )
*-------------------------------------------------------------------------
DEFINE DIALOG oDlg_INCONSISTENCIA RESOURCE "BROWSE_INCONSISTENCIA" TITLE '...:: '+ ALLTRIM(v_TITULO_DIALOG) + ' ::...' Font O_F_DLG
oDlg_INCONSISTENCIA:lHelpIcon:=.F.
T_TXT_DIALOGO := ' ' + ALLTRIM(v_TITULO_DIALOG)
REDEFINE SAY oT_TXT_DIALOGO var T_TXT_DIALOGO ID 4043 OF oDlg_INCONSISTENCIA FONT O_F_GET COLOR CLR_LWHITE,CLR_BFOOT Update
*----------------------------------------------------------------------------
oDB_INCONSISTENCIA := TXBrowse():New( oDlg_INCONSISTENCIA )
oDB_INCONSISTENCIA : CreateFromResource( 4049 )
oDB_INCONSISTENCIA:bClrRowFocus := { || { CLR_BLACK, RGB(185,220,255) } }
oDB_INCONSISTENCIA: SetArray( (v_aRRAY_Inconsistencia), .t., 1, { 1,2,3,4,5,6,7,8 } )
oDB_INCONSISTENCIA:bClrStd := {|| { COR_LETRAS_GRID, IIF((oDB_INCONSISTENCIA:KeyNo())%2==0, COR_1_bClrStd , COR_2_bClrStd ) } }
oDB_INCONSISTENCIA:bClrSelFocus := {|| { M->COR_1_bClrSelFocus, M->COR_2_bClrSelFocus } }
oDB_INCONSISTENCIA:bClrRowFocus := {|| { M->COR_1_bClrRowFocus, M->COR_2_bClrRowFocus } }
oDB_INCONSISTENCIA:lColDividerComplete := .F.
oDB_INCONSISTENCIA:lFooter := .T.
oDB_INCONSISTENCIA:lRecordSelector := .T.
oDB_INCONSISTENCIA:nHeaderLines := 2.0
oDB_INCONSISTENCIA:nDataLines := 1.5
oDB_INCONSISTENCIA:nColDividerStyle := 4
oDB_INCONSISTENCIA:nRowDividerStyle := 4
oDB_INCONSISTENCIA:nMarqueeStyle := 4
oDB_INCONSISTENCIA:nFooterLines := 1
oDB_INCONSISTENCIA:lAllowColSwapping := .T. // Click no header (.f.)Trava
oDB_INCONSISTENCIA:lAllowRowSizing := .T. // Nao move as Linhas (nao sei)
oDB_INCONSISTENCIA:l2007 := M->ESTILO_l2007
oDB_INCONSISTENCIA:lAllowRowSizing := .T.
oDB_INCONSISTENCIA:nFreeze := 1 // congelar a coluna
oDB_INCONSISTENCIA:nStretchCol := 2
oDB_INCONSISTENCIA:nColSel := 2
oDB_INCONSISTENCIA:nDataType := 2
oDB_INCONSISTENCIA:nRowHeight := 35
oDB_INCONSISTENCIA:aCols[02]:SetOrder()
*-------------------------------------------------------------------------
oDB_INCONSISTENCIA:aCols[01]:nWidth := 035
oDB_INCONSISTENCIA:aCols[01]:cHeader := (v_Cabecalho_01)
oDB_INCONSISTENCIA:aCols[01]:nHeadStrAlign := AL_CENTER
oDB_INCONSISTENCIA:aCols[01]:nDataStrAlign := AL_RIGHT
oDB_INCONSISTENCIA:aCols[01]:AddResource( "#8204" ) ////Erro
oDB_INCONSISTENCIA:aCols[01]:AddResource( "#8205" ) ////Alerta
oDB_INCONSISTENCIA:aCols[01]:AddResource( "#8206" ) ////Informação
oDB_INCONSISTENCIA:aCols[01]:AddResource( "#8207" ) ////Questionemento
oDB_INCONSISTENCIA:aCols[01]:bBmpData := 2
oDB_INCONSISTENCIA:aCols[01]:bBmpData := { || iif(len( (v_aRRAY_Inconsistencia))>0, IF((v_aRRAY_Inconsistencia[oDB_INCONSISTENCIA:nArrayAt][01])="E",1,IF((v_aRRAY_Inconsistencia[oDB_INCONSISTENCIA:nArrayAt][01])="A",2,IF((v_aRRAY_Inconsistencia[oDB_INCONSISTENCIA:nArrayAt][01])="I",3, 4 ))),nil) }
oDB_INCONSISTENCIA:aCols[01]:bStrData := { || NIL }
oDB_INCONSISTENCIA:aCols[01]:cToolTip := {ALLTRIM((v_Cabecalho_01))+ CRTLF +T_TXT_DIALOGO,"Ajuda","", }
*-------------------------------------------------------------------------
oDB_INCONSISTENCIA:aCols[02]:bstrData := {|| iif(len( (v_aRRAY_Inconsistencia))>0,(v_aRRAY_Inconsistencia)[oDB_INCONSISTENCIA:nArrayAt,02],nil) }
oDB_INCONSISTENCIA:aCols[02]:cHeader := (v_Cabecalho_02)
oDB_INCONSISTENCIA:aCols[02]:nDataStrAlign := AL_LEFT
oDB_INCONSISTENCIA:aCols[02]:nHeadStrAlign := AL_LEFT
oDB_INCONSISTENCIA:aCols[02]:cToolTip := {ALLTRIM((v_Cabecalho_02)),"Ajuda","", }
oDB_INCONSISTENCIA:aCols[02]:nFootStrAlign := AL_RIGHT
*-------------------------------------------------------------------------
oDB_INCONSISTENCIA:aCols[03]:bstrData := {|| iif(len((v_aRRAY_Inconsistencia))>0,(v_aRRAY_Inconsistencia)[oDB_INCONSISTENCIA:nArrayAt,03],nil) }
oDB_INCONSISTENCIA:aCols[03]:cHeader := (v_Cabecalho_03)
oDB_INCONSISTENCIA:aCols[03]:nDataStrAlign := AL_LEFT
oDB_INCONSISTENCIA:aCols[03]:nHeadStrAlign := AL_LEFT
oDB_INCONSISTENCIA:aCols[03]:cToolTip := {ALLTRIM((v_Cabecalho_03)),"Ajuda","", }
oDB_INCONSISTENCIA:aCols[03]:nFootStrAlign := AL_RIGHT
*-------------------------------------------------------------------------
oDB_INCONSISTENCIA:aCols[04]:bstrData := {|| iif(len((v_aRRAY_Inconsistencia))>0,(v_aRRAY_Inconsistencia)[oDB_INCONSISTENCIA:nArrayAt,04],nil) }
oDB_INCONSISTENCIA:aCols[04]:cHeader := (v_Cabecalho_04)
oDB_INCONSISTENCIA:aCols[04]:nDataStrAlign := AL_LEFT
oDB_INCONSISTENCIA:aCols[04]:nHeadStrAlign := AL_LEFT
oDB_INCONSISTENCIA:aCols[04]:cToolTip := {ALLTRIM((v_Cabecalho_04)),"Ajuda","", }
*-------------------------------------------------------------------------
oDB_INCONSISTENCIA:aCols[05]:bstrData := {|| iif(len((v_aRRAY_Inconsistencia))>0,(v_aRRAY_Inconsistencia)[oDB_INCONSISTENCIA:nArrayAt,05],nil) }
oDB_INCONSISTENCIA:aCols[05]:cHeader := (v_Cabecalho_05)
oDB_INCONSISTENCIA:aCols[05]:nDataStrAlign := AL_LEFT
oDB_INCONSISTENCIA:aCols[05]:nHeadStrAlign := AL_LEFT
oDB_INCONSISTENCIA:aCols[05]:cToolTip := {ALLTRIM((v_Cabecalho_05)),"Ajuda","", }
*-------------------------------------------------------------------------
oDB_INCONSISTENCIA:aCols[06]:bstrData := {|| iif(len((v_aRRAY_Inconsistencia))>0,(v_aRRAY_Inconsistencia)[oDB_INCONSISTENCIA:nArrayAt,06],nil) }
oDB_INCONSISTENCIA:aCols[06]:cHeader := (v_Cabecalho_06)
oDB_INCONSISTENCIA:aCols[06]:nDataStrAlign := AL_LEFT
oDB_INCONSISTENCIA:aCols[06]:nHeadStrAlign := AL_LEFT
oDB_INCONSISTENCIA:aCols[06]:cToolTip := {ALLTRIM((v_Cabecalho_06)),"Ajuda","", }
oDB_INCONSISTENCIA:aCols[06]:nFootStrAlign := AL_RIGHT
*-------------------------------------------------------------------------
oDB_INCONSISTENCIA:aCols[07]:bstrData := {|| iif(len((v_aRRAY_Inconsistencia))>0,(v_aRRAY_Inconsistencia)[oDB_INCONSISTENCIA:nArrayAt,07],nil) }
oDB_INCONSISTENCIA:aCols[07]:cHeader := (v_Cabecalho_07)
oDB_INCONSISTENCIA:aCols[07]:nDataStrAlign := AL_LEFT
oDB_INCONSISTENCIA:aCols[07]:nHeadStrAlign := AL_LEFT
oDB_INCONSISTENCIA:aCols[07]:cToolTip := {ALLTRIM((v_Cabecalho_07)),"Ajuda","", }
*-------------------------------------------------------------------------
oDB_INCONSISTENCIA:aCols[08]:bstrData := {|| iif(len((v_aRRAY_Inconsistencia))>0,(v_aRRAY_Inconsistencia)[oDB_INCONSISTENCIA:nArrayAt,08],nil) }
oDB_INCONSISTENCIA:aCols[08]:cHeader := (v_Cabecalho_08)
oDB_INCONSISTENCIA:aCols[08]:nDataStrAlign := AL_LEFT
oDB_INCONSISTENCIA:aCols[08]:nHeadStrAlign := AL_LEFT
oDB_INCONSISTENCIA:aCols[08]:cToolTip := {ALLTRIM((v_Cabecalho_08)),"Ajuda","", }
*-------------------------------------------------------------------------
REDEFINE BUTTONBMP oExp_Excel_Inconsistencia ID 4002 OF oDlg_INCONSISTENCIA ACTION ( oDB_INCONSISTENCIA:ToExcel() ) BITMAP (M->BTN_EXPORTA_EXCEL) PROMPT "E&xportar Para Excel" TEXTRIGHT
REDEFINE BUTTONBMP oSair_Inconsistencia ID 4003 OF oDlg_INCONSISTENCIA ACTION ( oDlg_INCONSISTENCIA:end() ) BITMAP (M->BTN_SAIR_REGISTRO) PROMPT "&Fechar" TEXTRIGHT
*-------------------------------------------------------------------------
REDEFINE SAY oT_TXT_ERROS VAR T_TXT_ERROS ID 4006 OF oDlg_INCONSISTENCIA
REDEFINE SAY oT_TXT_AVISOS VAR T_TXT_AVISOS ID 4007 OF oDlg_INCONSISTENCIA
REDEFINE SAY oT_TXT_INFORMACAO VAR T_TXT_INFORMACAO ID 4010 OF oDlg_INCONSISTENCIA
REDEFINE SAY oT_TXT_OUTROS VAR T_TXT_OUTROS ID 4011 OF oDlg_INCONSISTENCIA
*-------------------------------------------------------------------------
oExp_Excel_Inconsistencia : cToolTip := {"Exportar Para o Excel","Ajuda","", }
oSair_Inconsistencia : cToolTip := {"Fechar/Sair","Ajuda","", }
*-------------------------------------------------------------------------
ACTIVATE DIALOG oDlg_INCONSISTENCIA CENTERED ON INIT (oDB_INCONSISTENCIA:GoTop(),BuildControls( oDlg_INCONSISTENCIA ))
RETURN .T.
*-------------------------------------------------------------------------------
*-------------------------------------------------------------------------------
static func BuildControls( oDlg )
local oMenu, oBar
MENU oMenu 2007
MENUITEM "&Opções"
MENU
MENUITEM "&Exportar Para Excel" RESOURCE (M->BTN_EXPORTA_EXCEL) ACTION ( oDB_INCONSISTENCIA:ToExcel() ) MESSAGE "Exportar Dados Para o Excel"
SEPARATOR
MENUITEM "&Fechar" RESOURCE (M->BTN_SAIR_REGISTRO) ACTION(oDlg:End()) MESSAGE "Fechar Esta Tela"
ENDMENU
ENDMENU
oDlg:SetMenu( oMenu )
*-------------------------------------------------------------------------------
* caso queira colocar botoes
*-------------------------------------------------------------------------------
*DEFINE BUTTONBAR oBar OF oDlg 3D
*DEFINE BUTTON OF oBar PROMPT " Info " ACTION MsgAbout() FONT oDlg:oFont NOBORDER
*DEFINE BUTTON OF oBar PROMPT " Sair " ACTION oDlg:End() FONT oDlg:oFont NOBORDER
DEFINE MESSAGE OF oDlg PROMPT ('Em Caso de Dúvidas Ligar para o Suporte ' + SUPORTE)
DEFINE MSGITEM OF oDlg:oMsgBar;
BITMAP IF(T_IP_SERVER = "localhost","#8021","FUNCIONA_REDE");
TOOLTIP {"Nome da Estação "+CRLF+ upper(netname()) + CRLF+ + 'Ip Servidor.:'+ TRIM(T_IP_SERVER),"Ajuda","", }
return( Nil )
Imagem do Tela no PELLES, basta fazer uma com os mesmos ID, do PRG acima
Exemplo de como Usar a função.
*---------------------------------------------------------------------------------
* Gravar Cadastro de Produtos
*---------------------------------------------------------------------------------
FUNCTION GRAVA_CADASTRO_PRODUTOS()
aInconsistencias :={}
ERROS_INCONSISTENCIA := 0
T_QUANTIDADE_REG_SQL := 0
*----------------------------------------------------------------------------
IF T_FATOR_MULTIPLICACAO = 0
T_FATOR_MULTIPLICACAO := 1
ENDIF
*----------------------------------------------------------------------------
IF EMPTY(T_NOME_PRODUTOS)
ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1
aAdd( aInconsistencias, { 'E',;
ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),;
'Nome Ou Descrição está Em branco ou Sem Informações',;
'O Campo Nome no Cadastro de Produtos Deverá ser Preenchido',;
'O Sistema Irá Varificar a Existência do Nome, Não Permitindo Repetir',;
'.',;
'.',;
'.'} )
ENDIF
*----------------------------------------------------------------------------
IF T_CODI_GRUPOS_PR == 0
ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1
aAdd( aInconsistencias, { 'E',;
ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),;
'Código do Grupo Inválido ou Zerado',;
'Informe o Código do Grupo Válido Maior que Zero',;
'Caso Nao Seja Informado Não Será Possivel Gravar',;
'.',;
'.',;
'.'} )
ENDIF
*----------------------------------------------------------------------------
IF empty(SUBSTR(ALLTRIM(T_COD_ALIQUOTA_PRODUTOS),01,02) )
ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1
aAdd( aInconsistencias, { 'E',;
ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),;
'Escolha Uma Alíquota de Saída ICMS',;
'Informe no Campo Aliquota de ICMS de Saida Um Valor Válido',;
'Caso Nao Seja Informado Não Será Possivel Gravar',;
'.',;
'.',;
'.'} )
ENDIF
*----------------------------------------------------------------------------
IF EMPTY(ALLTRIM(T_CODI_TRIBUTARIO))
ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1
aAdd( aInconsistencias, { 'E',;
ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),;
'Código Nacionalidade',;
'Informe o Código da Nacionalidade',;
'Caso Nao Seja Informado Não Será Possivel Gravar',;
'.',;
'.',;
'.'} )
ENDIF
*----------------------------------------------------------------------------
IF EMPTY(ALLTRIM(T_CODI_ICMS))
ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1
aAdd( aInconsistencias, { 'E',;
ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),;
'Código Tributário Inválido (ICMS)',;
'Informe no Campo Código Tributário (Situação Tributária) Um Valor Válido',;
'Caso Nao Seja Informado Não Será Possivel Gravar',;
'.',;
'.',;
'.'} )
ENDIF
*----------------------------------------------------------------------------
IF val(str(T_VALOR_VENDA,18,2)) < 0
ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1
aAdd( aInconsistencias, { 'E',;
ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),;
'Valor de Venda da Tabela 1 Inválido',;
'Informe Um Valor de Venda Válido para a Tabela 1',;
'Sempre Informar um Valor Maior ou Igual a Zero',;
'.',;
'.',;
'.'} )
ENDIF
*----------------------------------------------------------------------------
IF val(str(T_VALOR_VENDA2,18,2)) < 0
ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1
aAdd( aInconsistencias, { 'E',;
ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),;
'Valor de Venda da Tabela 1 Inválido',;
'Informe Um Valor de Venda Válido para a Tabela 2',;
'Sempre Informar um Valor Maior ou Igual a Zero',;
'.',;
'.',;
'.'} )
ENDIF
IF val(str(T_VALOR_VENDA3,18,2)) < 0
ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1
aAdd( aInconsistencias, { 'E',;
ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),;
'Valor de Venda da Tabela 1 Inválido',;
'Informe Um Valor de Venda Válido para a Tabela 3',;
'Sempre Informar um Valor Maior ou Igual a Zero',;
'.',;
'.',;
'.'} )
ENDIF
IF val(str(T_VALOR_PROMOCAO,18,2)) < 0
ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1
aAdd( aInconsistencias, { 'E',;
ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),;
'Valor de Venda da Promoção Inválido',;
'Informe Um Valor de Venda Válido para a Tabela 3',;
'Sempre Informar um Valor Maior ou Igual a Zero',;
'.',;
'.',;
'.'} )
ENDIF
*----------------------------------------------------------------------------
IF T_CLASSIFICACAO_PRODUTO_MATERIA_PRIMA = '09' &&&& SE FOR SERVIÇO
IF VAL(STR( (T_ESTOQUE_PRODUTOS + T_SALDO_NF),18,3)) > VAL(STR(0,18,3))
ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1
aAdd( aInconsistencias, { 'E',;
ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),;
'O Item Cadastrado como Sendo Serviço Não deverá Ter Saldo !',;
'O Item Cadastrado Não Poderá Ter Saldo',;
'Sempre Informar Igual a Zero',;
'.',;
'.',;
'.'} )
ENDIF
ENDIF
*----------------------------------------------------------------------------
FOR nI = 1 to Len( aArray_itens_ordem_producao )
IF T_CODI_PRODUTOS != 0
IF val(aArray_itens_ordem_producao[nI,2]) == T_CODI_PRODUTOS
ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1
aAdd( aInconsistencias, { 'E',;
ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),;
'O Produto Não é válido '+ alltrim(alltrim(aArray_itens_ordem_producao[nI,2])) +' => '+STR(T_CODI_PRODUTOS,07,0)+' '+ alltrim(aArray_itens_ordem_producao[nI,3]) +', Não Poderá Compor Ele Mesmo',;
'Voce Informou no Cadastro de Composição o Mesmo Produto',;
'Sempre Informar Produtos Diferentes deste Código '+STR(T_CODI_PRODUTOS,07,0),;
'.',;
'.',;
'.'} )
ENDIF
ENDIF
NEXT
*----------------------------------------------------------------------------
IF T_OPERACAO_PRODUTOS == "I"
IF EMPTY(alltrim(T_COD_BARRAS_PRODUTOS))
IF SELECT("produtos") != 0
produtos->(DbCloseArea())
ENDIF
cQuery:= 'SELECT * FROM produtos ORDER BY CODPRO DESC '
use sql cQuery alias "produtos" new via 'MYSQL'
produtos->( DbGoTop())
T_CODI_PRODUTOS := produtos->CODPRO + 1
ENDIF
*-------------------------------------------------------------------------
IF SELECT("produtos") != 0
produtos->(DbCloseArea())
ENDIF
cQuery:= 'SELECT CODPRO, NOMPRO, C_BARRAS FROM produtos WHERE C_BARRAS = ' + TRANSFORMA_SQL(IF(EMPTY(alltrim(T_COD_BARRAS_PRODUTOS)),STRZERO(T_CODI_PRODUTOS,13,0),T_COD_BARRAS_PRODUTOS),"T",14,0)
use sql cQuery alias "produtos" new via 'MYSQL'
produtos->( DbGoTop())
IF produtos->CODPRO != 0
ERROS_INCONSISTENCIA := ERROS_INCONSISTENCIA + 1
aAdd( aInconsistencias, { 'E',;
ALLTRIM(STRZERO(ERROS_INCONSISTENCIA,06,0)),;
'Código de Barras Já Cadastrado',;
'Cód.: ' + str(produtos->CODPRO,07,0) + ' '+ ALLTRIM(produtos->NOMPRO),;
'',;
'.',;
'.',;
'.'} )
ENDIF
ENDIF
IF T_PESO_PADRAO = 0
T_PESO_PADRAO := 1
ENDIF
IF T_OPERACAO_PRODUTOS == "I"
IF SELECT("produtos") != 0
produtos->(DbCloseArea())
ENDIF
cQuery:= 'SELECT * FROM produtos ORDER BY CODPRO DESC '
use sql cQuery alias "produtos" new via 'MYSQL'
produtos->( DbGoTop())
T_CODI_PRODUTOS := produtos->CODPRO + 1
ENDIF
IF ERROS_INCONSISTENCIA == 0
* GRAVO O CADASTRO DE PRODUTOS
ELSE
MOSTRAR_INCONSISTENCIA(aInconsistencias,'Inconsistências No Cadastro de Produtos','Tipo|Num|Descricao|Informação|Complemento|*|*|*')
ENDIF
Muito Bom!!
É isso mesmo! Só pra complementar, li sobre o assunto no Wikipedia, que descreve bem como funciona:
HTTP Daemon is a software program that runs in the background of a web server and waits for the incoming server requests. The daemon answers the request automatically and serves the hypertext and multimedia documents over the internet using HTTP.
Link: https://en.wikipedia.org/wiki/Httpd
/*Open An Table With Table Class */
DEFINE TABLE oTable FILE tsttable NEW
/*Adding an Index to This Table */
DEFINE ORDER ON KEY "nome" TAG _1 IN oTable
/* Force the index Creating*/
oTable:Reindex()
WHILE x <= 100
oTable:ReadBlank()
oTable:name := Str( x, 20 )
oTable:street := Str( x + 1, 20 )
oTable:city := Str( x + 2, 20 )
oTable:code := x
oTable:today := Date()
oTable:pay := ( x % 2 ) == 0
oTable:Append()
oTable:Write()
x ++
ENDDO
USE
RETURN
PROCEDURE dodata()
LOCAL oTable
IF !FILE( 'tsttable.dbf' )
/* Criar uma Tabela usando Table Classe Syntax */
/* Create An Table using Table Classe Syntax */
CREATE DATABASE oTable FILE tsttable.dbf
FIELD NAME name TYPE CHARACTER LEN 40 DEC 0 OF oTable
FIELD NAME street TYPE CHARACTER LEN 40 DEC 0 OF oTable
FIELD NAME city TYPE CHARACTER LEN 40 DEC 0 OF oTable
FIELD NAME code TYPE NUMERIC LEN 5 DEC 0 OF oTable
FIELD NAME today TYPE DATE LEN 8 DEC 0 OF oTable
FIELD NAME pay TYPE LOGICAL LEN 1 DEC 0 OF oTable