Amiguinhos,
Conheço um método bem complexo mas deve funcionar:
dData := CTOD("30/10/12")? "Esta data esta na semana: ", WEEK( dData )
O Padrão ISO 8601 define que uma semana começa no Domingo, portanto se o dia 1 do mês da consulta cair num sábado este mês possui 6 semanas. Em qualquer outro dia da semana define que o mês tem 5 semanas.
Então você podeusar a função BOM( StringDate ) Begining Of Month ou a função CDOW( CTOD( StringDate ) ) == "Saturday" poderá obter bom resultado.
Conceito de CRC (Cyclical Redundancy Check)
A sigla CRC (sigla da expressão inglesa Cyclical Redundancy Check e que em português é traduzida por Verificação de Redundância Cíclica) consiste num número criado por um cálculo matemático no computador fonte de um pacote de dados. Quando o pacote chega a seu destino, o cálculo é refeito. Se os resultados forem os mesmos, isso indica que os dados no pacote permaneceram estáveis. No caso do cálculo no destino diferir do cálculo na fonte, tal significa que os dados foram alterados durante a transmissão. Neste caso, a rotina CRC sinaliza o computador fonte para retransmitir os dados.
Fonte: http://knoow.net/ciencinformtelec/informatica/crc-cyclical-redundancy-check/
Amiguinhos,
emotta
Lembro do Joinner, mas se não me engano ele era compativel com o clipper summer. A partir do clipper 5.01 já não era, ou seja, macros e code blocks não se conseguia usar no Joinner... Estou certo Rochinha?
Isso mesmo. Apesar de gerar aplicativos para Windows ela ficou presa em um visual muito Windows 95. As peculiaridades das versões 5 em diante como permitir agregar Assembler e C não eram possíveis.
O fato é q o Fivewin mudou a vida dos programadores q a usam.
fladimir
Com certeza. A sua chegada suplantou a Clip4Win, que era a bola da vez na época e se não me engano tinha outra biblioteca, Vouch32, que tinha o mesmo nicho, mas Fivewin matou a pau.
Creio que se quisermos programar para outras plataformas, estilo android ao invés de lançar mão de pesados SDKs o que precisariamos é de um servidor web fivewin portado para estes sistemas. Assim como o Flamenco, HTSoft WinASP ou o próprio servidor do Harbour.
O problema é que queremos gerar EXEcutáveis rodáveis nestas plataformas, como se quiséssemos rodar aplicativos ERP num android. O equipamento não foi feito para isto, mas foi feito para ser um ponto de entrada.
Ariston Santos
Enfim, programador hoje tem que saber, não uma linguagem, mas PROGRAMAR!
Resta que idéias se tornem realidade.
Pois se o ADVPL (que ao meu ver é a mesma coisa do FW) tem suas particularidades assim como suas limitações parecidas com o FW, como é conhecida como a maior empresa de tecnologia da américa latina.
Não sei se estou desatualizado mas ao meu ver ela é a gigante usado uma linguagem semelhante a nossa.
E como disse o Ariston..."
Enfim, programador hoje tem que saber, não uma linguagem, mas PROGRAMAR!
É verdade. Hoje a pergunta "em que linguagem você programa?" está quase sem sentido. Eu, por exemplo:
- Para desktop uso Fivewin / xHarbour / Bcc / Workshop / ACBrMonitorPLUS / Inno Setup.
- Para web uso Html / Html5 / Php / CSS / Javascript.
- Para Mobile uso Basic 4 Andriod.
- Como banco de dados uso DBFCDX / MySQL / SQLLite / Firebird (e em breve MariaDB).
- Ainda tem os que não são linguagem programação, mas estruturas para transporte de dados na web, como XML e JSON.
Creio que a maioria dos colegas aqui também conhecem e usam essas e ainda outras linguagens.
Enfim, programador hoje tem que saber, não uma linguagem, mas PROGRAMAR!
Quero participar mas não vou poder ir.
Já pensaram na ideia de fazer a transmissão online? Talvez disponibilizando uma página onde apenas os cadastrados mediante o pagamento de uma taxa possam acessar e assistir ao evento?
#ficaadica
// Verificar erros de marcação
USE PONTO EXCLUSIVE NEW
IF ! NETERR()
OrdListClear()
OrdListAdd("PONTO", "PntoCODI", "PntoNOME", "PntoDATA", "PntoNDAT")
PONTO->(DBGOTOP())
IF ChecaErro(OrdCount()) .OR. PONTO->(RECCOUNT()) = 0 .OR. PONTO->(EOF()) = .T.
INDEX ON CODIGO TAG PntoCODI TO PONTO
INDEX ON ITEM02 TAG PntoNOME TO PONTO
INDEX ON ITEM05 TAG PntoDATA TO PONTO
INDEX ON INDICE TAG PntoNDAT TO PONTO
ENDIF
ENDIF
CLOSE ALL
//-> Verifica a Integridade do indice
FUNCTION ChecaErro(nKeys)
LOCAL lErr := .F.
c_Alias := ALIAS()
FOR Key := 1 TO nKeys
&(c_Alias)->(DBSETORDER(Key))
IF nKeys != LEN(&(c_Alias)->(GetOrdNames())) // .OR. ORDKEYCOUNT() # RECCOUNT()
lErr := .T.
MsgStop( "ATENÇÃO !..."+CRLF+CRLF+;
"O sistema detectou que um dos índices do arquivo: " +ALIAS()+ ".DBF"+CRLF+ ;
"está corrompido ou desatualizado. Isto ocorre às vezes por queda"+CRLF+ ;
"de energia, vírus ou desligamento incorreto do computador. Será preciso"+CRLF+ ;
"corrigir o problema para evitar erros na operação do Sistema."+CRLF+ ;
"O arquivo corrompido será excluído e o Programa será encerrado. Execute"+CRLF+ ;
"o programa novamente para que seja feia a correção. Tecle Enter...",;
"Erro de índece: Correção obrigatória" )
ENDIF
SysRefresh()
NEXT
RETURN(lErr)
Testei novamente e baixou sem problema. A bronca deve ser somente no PC de quem não está conseguindo baixar. Tentem outro navegador, ou até mesmo copiando e colando o link na barra de endereços.
http://www.arsoft-ap.com.br/fd456406745d816a45cae554c788e754/08dc2d813326fd8ac79eb734d96b56ff/sisponto_completo.zip
Obrigado pelos esclarecimentos Ariston, vou acessar o site e pesquisar mais sobre o ACBr, como já programei um pouco com Delphi alguns anos atrás, vou tentar fazer o módulo da NFCe usando o Lazarus, instalando os componentes, nesse vídeo mostra como instalar :
https://www.youtube.com/watch?v=lUe2Om19QhU&t=2s
Abraços
Amiguinhos,
Isto é muito fácil de resolver, e não tem que ficar configurando VPN, TCP-IP do servidor, DDNS ou NoIP.
Você precisará apenas criar um pequeno aplicativo que seja instalado nesta máquina do depósito e que leia o conteúdo de uma pasta e quando encontrar um arquivo especificado por você então processa a impressão.
No servidor seu sistema mandará o arquivo para uma pasta especifica, ou seja:
Crie a pasta c:\intranet\envios no servidor.
Crie a pasta c:\intranet\recebidos no cliente distante.
Crie uma conta no Mega Sync, Instale o [url=https://megasync.br.uptodown.com/windows]MegaSync Desktop[/url] nas duas máquinas e configure
no servidor para ler em c:\intranet\envios e no cliente distante para ler em c:\intranet\recebidos.
Deixe os serviços rodarem e jogue arquivos nas pasta para ver o que acontece.
Se gostou, dê um "LIKE" e ajude nosso canalforum.
1 - De que se trata o inventário? Seria o estoque da farmácia no banco de dados do SNGPC?
R- Sim é o cadastro de produtos controlados contendo quantidade, codigo de barras , numero do lote , numero da Anvisa do medicamento, etc...
2 - Os medicamentos e insumos movimentados (enviados) são incluídos e baixados do inventário?
R- Sim devem ser incluidos as quantidades e numeros de lote de tudo que é comprado. E tudo que se vende tambem deve ser baixado. Sendo assim , na Anvisa fica uma cópia do estoque da farmacia. Os envios diarios dos xmls que atualizam o estoque na Anvisa. Diariamente é transmitido um xml com o resumo de tudo que entrou e saiu dos medic e insumos controlados,
3 - Quais as limitações ou requisitos para envio de inventários?
R- Nao me lembro bem, mas acredito que o inventario deva ser entregue no inicio das operacoes da farmacia. Ou com a troca do responsavel , ou para acerto de estoque. Tem diversos motivos pra isso. No site do SNGPC tem um item "Finalizar Inventario" e lá mostra a lista de motivos existentes.
Nesse segundo exemplo, vamos enviar o arquivo XML para ANVISA. Note que no XML as tags < e > devem ser trocadas por & l t ; e & g t ;.
Claro que esse hash calculado deve ser gravado em algum lugar para depois testar se o arquivo foi recebido, se está com erros, etc. Vamos ver o uso desse código no próximo exemplo.
#define CR_LF chr(13) + chr(10)
***************
FUNCTION MAIN()
***************
if !InternetOK()
Alert("Sem conexão com a Internet. Verifique...")
return .F.
endif
//
// ABERTURA DAS FUNCOES PARA WEBSERVICE DO XHARBOUR - OBJETO HTTP
//
try
http := CreateObject( "MSXML2.XMLHTTP" )
catch
try
http := CreateObject( "MSXML2.XMLHTTP" )
catch
Alert("Erro na criação do objeto MSXML2.XMLHTTP : " + Ole2TxtError())
end
end
//
// CRIA OBJETO XML
//
try
doc := CreateObject( "MSXML2.DOMDocument" )
catch
try
doc := CreateObject( "MSXML2.DOMDocument" )
catch
Alert("Erro na criacao do objeto MSXML2.DOMDocument : " + Ole2TxtError())
Olá,
Depois de muito tempo gerando o XML e usando o próprio site do SNGPC para enviar meus arquivos, decidi que já era hora de enviar esses arquivos do meu sistema.
Criei os tres serviços oficiais do SNGPC ( validar usuário, enviar arquivo XML e testar arquivo enviado ) mais a importação do inventário direto da ANVISA.
Essa primeira rotina, valida um email/senha para ver se esta cadastrado no SNGPC da ANVISA. No código estão os endereços de homologação e produção.
//
// WebService com xHarbour
//
// Nesse exemplo estamos testando se o email/senha do usuario
// esta cadastrado no SNGPC da ANVISA.
//
// Existem ainda mais 2 servicos :
//
// a) enviar arquivo XML.
// b) verificar se arquivo XML enviado foi validado.
//
// Manoel Angeiras
//
#define CR_LF chr(13) + chr(10)
***************
FUNCTION MAIN()
***************
if !InternetOK()
Alert("Conexao com a internet falhou !")
else
Alert("Conexao OK")
endif
//
// Abertura das funcoes para WebService do xHarbour
//
try
doc := CreateObject( "MSXML2.DOMDocument" )
catch
try
doc := CreateObject( "MSXML2.DOMDocument" )
catch
Alert("Erro na criacao do objeto MSXML2.DOMDocument : " + Ole2TxtError())
return NIL
end
end
try
http := CreateObject( "MSXML2.XMLHTTP" )
catch
try
http := CreateObject( "MSXML2.XMLHTTP" )
catch
Alert("Erro na criacao do objeto MSXML2.XMLHTTP : " + Ole2TxtError())
end
end
//
// Criar o XML request
//
cXml := ""
cXml += '<?xml version="1.0" encoding="utf-8"?>' + CR_LF
cXml += '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">' + CR_LF
cXml += ' <soapenv:Header/>' + CR_LF
cXml += ' <soapenv:Body>' + CR_LF
cXml += ' <tem:ValidarUsuario>' + CR_LF
cXml += ' <tem:Email>seu_email_aqui</tem:Email>' + CR_LF // SEU EMAIL AQUI
cXml += ' <tem:Senha>sua_senha_aqui</tem:Senha>' + CR_LF // SUA SENHA AQUI
cXml += ' </tem:ValidarUsuario>' + CR_LF
cXml += ' </soapenv:Body> ' + CR_LF
cXml += '</soapenv:Envelope>' + CR_LF
//
// ENDERECO DE HOMOLOGACAO
//
http:Open( "POST", "http://homologacao.anvisa.gov.br/sngpc/webservice/sngpc.asmx?WSDL HTTP/1.1", .F. )
http:SetRequestHeader( "Content-Type" , "text/xml;charset=UTF-8" )
http:SetRequestHeader( "SOAPAction" , "http://tempuri.org/ValidarUsuario" )
http:SetRequestHeader( "Host" , "homologacao.anvisa.gov.br" )
//
// ENDERECO DE PRODUCAO
//
// http:Open( "POST", "http://sngpc.anvisa.gov.br/webservice/sngpc.asmx?WSDL HTTP/1.1", .F. )
// http:SetRequestHeader( "Content-Type" , "text/xml;charset=UTF-8" )
// http:SetRequestHeader( "SOAPAction" , "http://tempuri.org/ConsultaDadosArquivoSNGPC" )
// http:SetRequestHeader( "Host" , "sngpc.anvisa.gov.br" )
Alert("Carrega o request...")
doc:LoadXML( cXml ) // Carrega o request de string
Alert("Envia o xml...")
http:send( doc:xml ) // Envia o request
Alert("Ler a resposta...")
response := http:responseText // Recebe a resposta
Alert("Apresentando a resposta")
oXmlDoc := TXmlDocument():new()
oXMlDoc:read( response )
oXmlNode := oXmlDoc:findFirst( "ValidarUsuarioResult" )
Alert(oXmlNode:cName + " = " + oXmlNode:cData )
RETURN NIL
*********************
FUNCTION InternetOK()
*********************
local aHosts, cName, cAddress := "www.google.com.br"
InetInit()
aHosts := InetGetHosts( cAddress )
if aHosts == NIL .or. len(aHosts) == 0
InetCleanup()
return .F.
endif
InetCleanup()
RETURN .T.