Jump to content
Fivewin Brasil

Wellington Vieira

Membros
  • Posts

    424
  • Joined

  • Last visited

  • Days Won

    10

Wellington Vieira last won the day on March 11 2023

Wellington Vieira had the most liked content!

1 Follower

About Wellington Vieira

  • Birthday 07/10/1974

Contact Methods

  • Website URL
    http://www.wsiscom.com.br
  • Skype
    wellington_programador@hotmail.com

Profile Information

  • Gender
    Not Telling

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Wellington Vieira's Achievements

  1. Boa tarde, Já deu uma olhada em: https://tecnospeed.com.br/tecnopay/ Particularmente, aqui em nossa empresa já que teríamos que fazer os boletos on-line via API dos bancos, já incluímos no projeto o PIX para os bancos: Bradesco, Brasil, CEF, Santander, Sicoob, Itaú. O Suporte desses bancos é muito bom e nos auxiliou no desenvolvimento ao acesso a API deles tanto para os boletos on-line quanto para o PIX entre outras soluções que estas API fornecem. Assim que surge um novo banco, entramos em contato com o developer's que é encaminhado pelo gerente do cliente para este banco.
  2. Já no MYSQL, acredito que pode ser feito assim para os campos gravados na base. SELECT data_inicial_1, hora_inicial_1, data_inicial_2, hora_inicial_2, TIMESTAMPDIFF(MINUTE, CONCAT(data_inicial_1, ' ', hora_inicial_1), CONCAT(data_inicial_2, ' ', hora_inicial_2)) AS diferenca_em_minutos FROM sua_tabela where id = seu_id; Já em comparação a data e hora gravada na base com a data e hora do sistema operacional windows, acredito que possa ser assim. SELECT data_inicial_1, hora_inicial_1, NOW() AS data_hora_atual, TIMESTAMPDIFF(MINUTE, CONCAT(data_inicial_1, ' ', hora_inicial_1), NOW()) AS diferenca_em_minutos FROM sua_tabela where id = seu_id;
  3. SELECT data_lancamento, hora_lancamento, NOW() AS data_hora_atual, EXTRACT(EPOCH FROM (NOW()::timestamp - (data_lancamento + hora_lancamento::interval)))/60 AS diferenca_em_minutos FROM comandas_atendimento where id = numedo_do_id ; Lembrando que os campos data_lancamento é DATE como o seu e o campo hora_lancamento neste exemplo acima eu crio sempre como character(08) e é gravado a time(), ou seja 09:42:25 Este exemplo acima é a comparação entre uma data e hora gravada na base e a data e hora atual do sistema operacional windows em minutos a resposta. SELECT data_inicial_1, hora_inicial_1, data_inicial_2, hora_inicial_2, EXTRACT(EPOCH FROM (data_inicial_2 + hora_inicial_2::interval) - (data_inicial_1 + hora_inicial_1::interval))/60 AS diferenca_em_minutos FROM sua_tabela where id = seu_numero_de_id; Já este exemplo é a comparação entre datas e horas gravadas na base de dados em minutos a resposta. Os dois SELECT foram e são testados no POSTGRESQL.
  4. Boa tarde Vou precisar colocar dentro do meu software um editor de texto para a confecção de contratos e estes contratos serão digitados pelo cliente, e ele colocará insiders {} dentro do editor, ou seja um exemplo. CONTRATO DE COMPRA DE MOTO COMPRADOR: Nome: WSISCOM SOFTWARE, CNPJ: 99.999.999/0001-99, Endereço: Rua Qualquer coisa, Nº 537, Bairro: Industrial, Cidade: Contagem/MG, CEP: 99999-999. Telefone para contato: (31) 99999-9999 VENDEDOR: Nome: {NOME DO COMPRADOR},CPF: {CPF DO COMPRADOR}, RG: {RG DO COMPRADOR}, ENDEREÇO: {ENDERECO DO COMPRADOR} – BAIRRO: {BAIRRO DO COMPRADOR} – CIDADE: {CIDADE DO COMPRADOR} – ESTADO: {ESTADO DO COMPRADOR}– CEP: {CEP DO COMPRADOR} – TELEFONE CONTATO: {TELEFONE DO COMPRADOR} – E-MAIL: {E-MAIL DO COMPRADOR} e assim por diante. Ou seja um editor (simples) dentro do próprio programa, que consiga alterar fontes, negrito de palavras e o que estiver entre colchetes, será substituído pela informação da base de dados. Alguém já fez algo semelhante, ou saberia me informar um caminho para me nortear no desenvolvimento. Abraço
  5. Eu criei um PHP e o coloquei em um FTP, e envio o JSON para este PHP pelo método GET. Este PHP recebe o JSON, processa e retorna o que eu devo enviar para o BRADESCO já em "pkcs7" que é o JSON assinado em base64, que é o padrão que o BRADESCO necessita. O Certificado digital pode ser qualquer um no formato ".pfx". Segue o PHP <?php function ApagaDir($dir) { if($objs = glob($dir."/*")){ foreach($objs as $obj) { is_dir($obj)? ApagaDir($obj) : unlink($obj); } } } $nome_da_pasta="../public_html/data/tmp"; // PASTA PARA ARQUIVO TEMPORARIO ApagaDir($nome_da_pasta); $pfx = ""; // lOCAL E NOME DO CERTIFICADO NO FTP EX: CERTS/MEUCERTIFICADO.PFX $certPassword = ""; // SENHA DO CERTIFICADO $json_str = $_GET['json_str']; $certificado_pfx = file_get_contents($pfx); if (!openssl_pkcs12_read($certificado_pfx, $result, $certPassword)) { throw new Exception('Não foi possível ler o certificado .pfx'); } $path = sprintf('%s%sdata%stmp%s', realpath('.'), DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR); if (@mkdir($path, 0777, true) && !is_dir($path)) { throw new Exception('Falha ao criar diretórios. Entre em contato com o administrador'); } $jsonFile = $path . uniqid('jsonFile', true); $signedFile = $path . uniqid('signedFile', true); file_put_contents($jsonFile, $json_str); $certKey = openssl_x509_read($result['cert']); $privKey = openssl_pkey_get_private($result['pkey'], $certPassword); openssl_pkcs7_sign( $jsonFile, $signedFile, $certKey, $privKey, array(), PKCS7_BINARY | PKCS7_TEXT ); $signature = file_get_contents($signedFile); $parts = preg_split("#\n\s*\n#Uis", $signature); $mensagem_assinada_base64 = $parts[1]; print_r($mensagem_assinada_base64); ?>
  6. No caso de DATACENTER, você juntamente com a empresa entra em contato com o DATACENTER, verifica as opções de preços e configurações de WINDOWS ou LINUX para o seu servidor, verifica qual a melhor opção juntamente com o DATACENTER em questões de quantas máquinas acessaram simultaneamente o SERVIDOR na nuvem etc, eles lhe mostraram a opção dos preços por consumo em um mês e se fecha o negócio. Depois você terá um treinamento sobre como utilizar e configurar o servidor por técnicos do DATACENTER, que lhe explicaram todos os processos sobre o servidor que foi criado para você e tem toda uma estrutura de SUPORTE para lhe ajudar com as configurações, acessos e problemas que podem ocorrer. Já no caso de SERVIDOR PRÓPRIO, nós da WSISCOM temos uma parceria com uma empresa técnica especializada em SERVIDORES, que fazem a instalação, configuração do WINDOWS SERVER no servidor e deixa tudo prontinho de acordo coma as nossas especificações e as do cliente.
  7. Boa tarde, Alguns dos meus clientes tem SERVIDOR PRÓPRIO (Físico) em um LOCAL, instalado o WINDOWS SERVER(x) e fazem o ACESSO REMOTO via TS (Terminal service) o famoso "mtsc.exe" - Conexão de Área de Trabalho Remota. Todos utilizam no servidor um DNS dinâmico (DDNS ou Dynamic DNS) que é o método para atualização automática de um servidor de nomes no Sistema de nomes de domínio (DNS), seja o dyndns, ddns etc, e até o presente momento não tivemos problemas usando este tipo de conexão. É claro que tem que ter um "firewal", bem configurado por questões de segurança e um bom anti-vírus do tipo karpersky. Já outros utilizam utilizam DATACENTER como a SAVEINCLOUD, que criam um SERVIDOR não físico no DATACENTER, na nuvem e acessam via TS(Terminal service) o famoso "mtsc.exe" - Conexão de Área de Trabalho Remota. Em ambos os casos, não tivemos problemas até o presente momento.
  8. https://developers.mercadolivre.com.br/pt_br/publicacao-de-produtos#
  9. OBSERVAÇÃO.. NA CRIAÇÃO DO APLICATIVO NA PLATAFORMA, VOCÊ PODERÁ MARCAR A OPÇÃO "PIX", ALÉM DO BOLETO BANCÁRIO E UTILIZAR O ENVIO DO PIX VIA SISTEMA E AGUARDAR O RECEBIMENTO NA TELA DO SEU PDV.
  10. Para o desenvolvimento do boleto bancário SICOOB. 1º) - Acessar a plataforma developer's SICOOB. "https://developers.sicoob.com.br/portal/", assim que acessar a plataforma irá solicitar que você escolha um certificado digital que esteja instalado em sua máquina para que você possa criar uma conta, escolha o certificado digital para a empresa que você irá liberar a solução, ou seja toda vez que você for liberar a solução para algum cliente, sempre escolher o certificado digital pertencente a esse cliente. 2º) - Criar uma conta para este cliente que você deseja liberar a solução. Após criar a conta solicitar a recuperação de senha para criar uma senha para este cliente. 3º) - É preciso ter em mãos o arquivo do certificado digital no formato ".pfx" e a partir dele gerar os certificados no formato ".pem" e ".key", para isso utilize o "openssl.exe", que pode ser baixado em "https://www.openssl.org/" ou pode se utilizar o do "cygwin64", ou qualquer um que tenha o openssl que é uma implementação de código aberto dos protocolos SSL e TLS. Usa os comandos abaixo para criar o ".pem" e o ".key". openssl pkcs12 -in [arquivo.pfx] -nokeys -out [arquivo].pem openssl pkcs12 -in [arquivo].pfx -nocerts -out [arquivo].key 4º) - Na plataforma "https://developers.sicoob.com.br/portal/", você poderá criar o(s) aplicativos para cada um dos seus cliente(s), indo no menu "MEUS APLICATIVOS". O arquivo do certificado digital que deve-se subir na criação do aplicativo é o ".pem" que você gerou a partir do ".pfx". Após a criação do aplicativo no portal você poderá acessar o aplicativo no portal e pegar a informação do "CLIENT ID" para se usar nas solicitações do TOKEN e do envio do arquivo JSON para o boleto. ( Nesta criação do aplicativo, seguir as orientações solicitadas, pois será necessário a confirmação por um código enviado ao aplicativo do SICOOB no celular do cliente, então o mesmo deverá acompanhar a a criação). Na programação eu criei 02 arquivo em "PHP", um que irá solicitar o "token" e o outro que irá enviar o "json" para o SICOOB, você poderá faze-los via programação em fivewin, eu fiz assim pois acho mais fácil com estes pequenos em PHP e o restante em programação fivewin. SOLICITAÇÃO DO TOKEN EM PHP, que fica em um ftp meu e o meu software acessa este pequeno PHP. <?php $Client_ID_envia = $_GET['Client_ID_envia']; $Client_certificado_pem = $_GET['Client_certificado_pem']; $Client_certificado_key = $_GET['Client_certificado_key']; $Client_senha = $_GET['Client_senha']; $Client_scope = $_GET['Client_scope']; $url_path = "https://auth.sicoob.com.br/auth/realms/cooperado/protocol/openid-connect/token"; $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_URL => $url_path, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_SSLCERT => $Client_certificado_pem, CURLOPT_SSLKEY => $Client_certificado_key, CURLOPT_SSLKEYPASSWD => $Client_senha, CURLOPT_HTTPHEADER => array( "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"), CURLOPT_POSTFIELDS => "grant_type=client_credentials&client_id={$Client_ID_envia}&scope=cobranca_boletos_consultar%20cobranca_boletos_incluir%20cobranca_boletos_pagador%20cobranca_boletos_segunda_via%20cobranca_boletos_descontos%20cobranca_boletos_abatimentos%20cobranca_boletos_valor_nominal%20cobranca_boletos_seu_numero%20cobranca_boletos_especie_documento%20cobranca_boletos_baixa" )); $response = curl_exec($ch); $info =curl_errno($ch)>0 ? array("curl_error_".curl_errno($ch)=>curl_error($ch)) : curl_getinfo($ch); echo("<pre>"); print_r($info); curl_close($ch); echo $response; echo("</pre>"); ?> ENVIO DAS INFORMAÇÕES EM PHP, que fica em um ftp meu e o meu software acessa este pequeno PHP. <?php $Client_certificado_pem = $_GET['Client_certificado_pem']; $Client_certificado_key = $_GET['Client_certificado_key']; $Client_senha = $_GET['Client_senha']; $Cliente_Token = $_GET['Cliente_Token']; $Client_ID_envia = $_GET['Client_ID_envia']; $Cliente_Field = $_GET['Cliente_Field']; $Client_scope = $_GET['Client_scope']; $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_URL => 'https://api.sicoob.com.br/cobranca-bancaria/v2/boletos', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_SSLCERT => $Client_certificado_pem, CURLOPT_SSLKEY => $Client_certificado_key, CURLOPT_SSLKEYPASSWD => $Client_senha, CURLOPT_POSTFIELDS =>$Cliente_Field, CURLOPT_HTTPHEADER => array( "Content-Type: application/json", "Authorization: Bearer $Cliente_Token", "Accept: application/json", "client_id: $Client_ID_envia" ), )); $response = curl_exec($ch); $info =curl_errno($ch)>0 ? array("curl_error_".curl_errno($ch)=>curl_error($ch)) : curl_getinfo($ch); echo("<pre>"); print_r($info); curl_close($ch); echo $response; echo("</pre>"); ?> CÓDIGO DE PROGRAMAÇÃO EM FIVEWIN. if alltrim(xnbanco) = "756 - Sicoob Uberlandia" if empty(xnMclient_id) msgstop("ID do cliente para o Sicoob não informado.","Atenção") exit endif _Client_ID = alltrim(xnMclient_id) if empty(xnMnomecertif) msgstop("Nome do certificado para o Sicoob não informado.","Atenção") exit endif _Client_certificado_pem = alltrim(xnMnomecertif) + ".pem" _Client_certificado_key = alltrim(xnMnomecertif) + ".key" _Client_certificado_crt = alltrim(xnMnomecertif) + ".crt" if empty(xnMsenhacertif) msgstop("Senha do certificado para o Sicoob não informado.","Atenção") exit endif _Client_senha = alltrim(xnMsenhacertif) _Client_scope = "cobranca_boletos_incluir" cSignatureValue = "" nlocaliza_registro_1 = "" nlocaliza_registro_2 = "" _nret_access_token = "" _nArquivo_enviar = "http://www.wsiscom.com.br/sicoob/acess_token_sicoob.php?Client_ID_envia=" + _Client_ID +; "&Client_certificado_key=" + _Client_certificado_key +; "&Client_certificado_pem=" + _Client_certificado_pem +; "&Client_senha=" + _Client_senha +; "&Client_scope=" + _Client_scope try _oserver := CreateObject( "MSXML2.XMLHTTP" ) _oserver:Open( "GET",_nArquivo_enviar, .F. ) _oserver:SetRequestHeader("Content-Type","application/json") _oserver:Send(_nArquivo_enviar) WHILE _oserver:readyState != 4 _oserver:WaitForResponse( 500 ) end cSignatureValue = _oserver:responseText catch msgstop("1 - Erro na geração do arquivo para o sicoob.","Erro Atenção") exit end if empty(cSignatureValue) msgstop("2 - Sem resposta do acess_token_sicoob.php.","Erro Atenção") exit endif if cSignatureValue = nil msgstop("3- Sem resposta do acess_token_sicoob.php.","Erro Atenção") exit endif //lh := 00 //mdire = "json_token.txt" //oPrn := TDosPrn():New(mdire) //oPrn:StartPage() //oPrn:lZeraBuffer:=.T. //oPrn:Say(lh,000,cSignatureValue) //oPrn:EndPage() //oPrn:End() nlocaliza_registro_1 := At( '[http_code] =>', cSignatureValue ) if !empty(nlocaliza_registro_1) if substr(cSignatureValue,nlocaliza_registro_1,18) != "[http_code] => 200" msgstop(substr(cSignatureValue,nlocaliza_registro_1,18),"Erro") exit endif else msgstop("Não foi possível localizar o retorno do token","Atenção") exit endif nlocaliza_registro_1 := At( '{"access_token":"', cSignatureValue ) nlocaliza_registro_2 := At( '","expires_in":300', cSignatureValue ) if !empty(nlocaliza_registro_1) .or. !empty(nlocaliza_registro_2) _nret_access_token = substr(cSignatureValue,nlocaliza_registro_1,(nlocaliza_registro_2 - nlocaliza_registro_1)) _nret_access_token = substr(_nret_access_token,18,5000) else msgstop("Não foi possível localizar o registro (access_token) ","Atenção") exit endif narquivoJSON := '[' + CRLF narquivoJSON += '{' + CRLF narquivoJSON += '"numeroContrato": ' + alltrim(xnnumerocliente) + ',' + CRLF narquivoJSON += '"modalidade": 1,' + CRLF narquivoJSON += '"numeroContaCorrente": ' + alltrim(xnconta) + alltrim(xndconta) + ',' + CRLF narquivoJSON += '"especieDocumento": "DM",' + CRLF narquivoJSON += '"dataEmissao": "' + substr(dtos(ldate),1,4) + '-' + substr(dtos(ldate),5,2) + '-' + substr(dtos(ldate),7,2) narquivoJSON += 'T' + alltrim(time()) if zfathorariodeverao = 1 narquivoJSON += '-02:00",' else narquivoJSON += '-03:00",' + CRLF endif _nandup = "" for ttqq = 1 to len(andup) if substr(andup,ttqq,1) = "0" .or. substr(andup,ttqq,1) = "1" .or. substr(andup,ttqq,1) = "2" .or.; substr(andup,ttqq,1) = "3" .or. substr(andup,ttqq,1) = "4" .or. substr(andup,ttqq,1) = "5" .or.; substr(andup,ttqq,1) = "6" .or. substr(andup,ttqq,1) = "7" .or. substr(andup,ttqq,1) = "8" .or.; substr(andup,ttqq,1) = "9" _nandup = _nandup + substr(andup,ttqq,1) endif next narquivoJSON += '"seuNumero": "' + alltrim(andup) + '",' + CRLF narquivoJSON += '"identificacaoEmissaoBoleto": 1,' + CRLF narquivoJSON += '"identificacaoDistribuicaoBoleto": 1,' + CRLF _ntamanho = len(alltrim(str(int(avdup * 100)))) narquivoJSON += '"valor": ' + substr(alltrim(str(int(avdup * 100))),1,(_ntamanho - 2)) + '.' + substr(alltrim(str(int(avdup * 100))),((_ntamanho - 2) + 1),2) + ',' + CRLF narquivoJSON += '"dataVencimento": "' + substr(dtos(advenc),1,4) + '-' + substr(dtos(advenc),5,2) + '-' + substr(dtos(advenc),7,2) narquivoJSON += 'T' + alltrim(time()) if zfathorariodeverao = 1 narquivoJSON += '-02:00",' else narquivoJSON += '-03:00",' + CRLF endif advenc_1 = advenc + 1 narquivoJSON += '"tipoDesconto": 0,' + CRLF if !empty(zfinmultaatraso) narquivoJSON += '"tipoMulta": 2,' + CRLF narquivoJSON += '"dataMulta": "' + substr(dtos(advenc_1),1,4) + '-' + substr(dtos(advenc_1),5,2) + '-' + substr(dtos(advenc_1),7,2) narquivoJSON += 'T' + alltrim(time()) if zfathorariodeverao = 1 narquivoJSON += '-02:00",' else narquivoJSON += '-03:00",' + CRLF endif _ntamanho = len(alltrim(str(int(zfinmultaatraso * 100)))) narquivoJSON += '"valorMulta": ' + substr(alltrim(str(int(zfinmultaatraso * 100))),1,(_ntamanho - 2)) + '.' + substr(alltrim(str(int(zfinmultaatraso * 100))),((_ntamanho - 2) + 1),2) + ',' + CRLF //narquivoJSON += '"valorMulta": ' + alltrim(str(int(zfinmultaatraso))) + ',' + CRLF else narquivoJSON += '"tipoMulta": 0,' + CRLF endif if !empty(zfintaxajurosmensal) narquivoJSON += '"tipoJurosMora": 2,' + CRLF narquivoJSON += '"dataJurosMora": "' + substr(dtos(advenc_1),1,4) + '-' + substr(dtos(advenc_1),5,2) + '-' + substr(dtos(advenc_1),7,2) narquivoJSON += 'T' + alltrim(time()) if zfathorariodeverao = 1 narquivoJSON += '-02:00",' else narquivoJSON += '-03:00",' + CRLF endif zfintaxajurosdias = zfintaxajurosmensal if zfintaxajurosdias < 1 narquivoJSON += '"valorJurosMora": ' + '0.' + alltrim(str(int(zfintaxajurosdias * 100))) + ',' + CRLF else _ntamanho = len(alltrim(str(int(zfintaxajurosdias * 100)))) narquivoJSON += '"valorJurosMora": ' + substr(alltrim(str(int(zfintaxajurosdias * 100))),1,(_ntamanho - 2)) + '.' + substr(alltrim(str(int(zfintaxajurosdias * 100))),((_ntamanho - 2) + 1),2) + ',' + CRLF //narquivoJSON += '"valorJurosMora": ' + alltrim(str(int(zfintaxajurosdias))) + ',' + CRLF endif else narquivoJSON += '"tipoJurosMora": 3,' + CRLF endif // aqui .... narquivoJSON += '"numeroParcela": ' + alltrim(str(nsequenciatitulo)) + ',' + CRLF narquivoJSON += '"aceite": ' + iif(xnaceite = 'N','false','true') + ',' + CRLF narquivoJSON += '"codigoProtesto": 1,' + CRLF narquivoJSON += '"numeroDiasProtesto": 30,' + CRLF narquivoJSON += '"pagador": {' + CRLF narquivoJSON += '"numeroCpfCnpj": "' + alltrim(rcnpjcpf) + '",' + CRLF narquivoJSON += '"nome": "' + substr(alltrim(rrazaosocial),1,50) + '",' + CRLF narquivoJSON += '"endereco": "' + substr(alltrim(rendereco) + ' ' + alltrim(rnumero),1,40) + '",' + CRLF narquivoJSON += '"bairro": "' + substr(alltrim(rbairro),1,30) + '",' + CRLF narquivoJSON += '"cidade": "' + substr(alltrim(rcidade),1,40) + '",' + CRLF narquivoJSON += '"cep": "' + alltrim(rcep) + '",' + CRLF narquivoJSON += '"uf": "' + ruf if !empty(remail) narquivoJSON += '",' + CRLF narquivoJSON += '"email": [' + CRLF narquivoJSON += '"' + alltrim(remail) + '"' + CRLF narquivoJSON += ']' + CRLF else narquivoJSON += '"' + CRLF endif narquivoJSON += '},' + CRLF narquivoJSON += '"beneficiarioFinal": {' + CRLF narquivoJSON += '"numeroCpfCnpj": "' + aaloja + '",' + CRLF //zempresa //znumerodocumentonacional narquivoJSON += '"nome": "' + alltrim(substr(abloja,1,50)) + '"' + CRLF narquivoJSON += '},' + CRLF if !empty(zfinmultaatraso) .or. !empty(zfintaxajurosmensal) narquivoJSON += '"mensagensInstrucao": {' + CRLF narquivoJSON += '"tipoInstrucao": 1,' + CRLF narquivoJSON += '"mensagens": [' + CRLF if !empty(zfinmultaatraso) narquivoJSON += '"Multa por atraso de ' + alltrim(transform(zfinmultaatraso,"@e 99,99")) + ' porcento' if !empty(zfintaxajurosmensal) narquivoJSON += '",' + CRLF else narquivoJSON += '"' + CRLF endif endif if !empty(zfintaxajurosmensal) zfintaxajurosdias = zfintaxajurosmensal / val(pega_ultimo_dia_numero(advenc)) zvalordiaJuros = ((avdup * zfintaxajurosdias)/100) narquivoJSON += '"Juro de R$ ' + alltrim(transform(zvalordiaJuros,"@e 999,999.99")) + ' por dia de atraso."' + CRLF endif narquivoJSON += ']' + CRLF narquivoJSON += '},' + CRLF endif narquivoJSON += '"gerarPdf": true,' + CRLF narquivoJSON += '"codigoCadastrarPIX": 0' + CRLF narquivoJSON += '}' + CRLF narquivoJSON += ']' lh := 00 mdire = "json_envia.txt" oPrn := TDosPrn():New(mdire) oPrn:StartPage() oPrn:lZeraBuffer:=.T. oPrn:Say(lh,000,narquivoJSON) oPrn:EndPage() oPrn:End() cSignatureValue = "" _nArquivo_enviar = "http://www.wsiscom.com.br/sicoob/envia_boleto_sicoob.php?Client_certificado_pem=" + _Client_certificado_pem +; "&Client_certificado_key=" + _Client_certificado_key +; "&Client_senha=" + _Client_senha +; "&Cliente_Token=" + _nret_access_token +; "&Client_ID_envia=" + _Client_ID +; "&Cliente_Field=" + narquivoJSON+; "&Client_scope=" + _Client_scope //lh := 00 //mdire = "jsonEnviaboleto" + ".txt" //oPrn := TDosPrn():New(mdire) //oPrn:StartPage() //oPrn:lZeraBuffer:=.T. //oPrn:Say(lh,000,_nArquivo_enviar) //oPrn:EndPage() //oPrn:End() try _oserver := CreateObject( "MSXML2.XMLHTTP" ) _oserver:Open( "GET",_nArquivo_enviar, .F. ) _oserver:SetRequestHeader("Content-Type","application/json") _oserver:Send(_nArquivo_enviar) WHILE _oserver:readyState != 4 _oserver:WaitForResponse( 500 ) end cSignatureValue = _oserver:responseText catch msgstop("1 - Erro na geração do arquivo para o sicoob. www.wsiscom.com.br/sicoob/envia_boleto_sicoob.php","Erro Atenção") exit end if empty(cSignatureValue) msgstop("2 - Sem resposta do envia_boleto.php.","Erro Atenção") exit endif if cSignatureValue = nil msgstop("3- Sem resposta do envia_boleto.php.","Erro Atenção") exit endif lh := 00 mdire = "jsonretornoboleto.txt" oPrn := TDosPrn():New(mdire) oPrn:StartPage() oPrn:lZeraBuffer:=.T. oPrn:Say(lh,000,cSignatureValue) oPrn:EndPage() oPrn:End() //cSignatureValue := MemoRead("jsonretornoboleto.txt") nlocaliza_registro_1 := At( '{"resultado":[{"status":{"codigo":200}', cSignatureValue ) if !empty(nlocaliza_registro_1) if substr(cSignatureValue,nlocaliza_registro_1,38) != '{"resultado":[{"status":{"codigo":200}' msgstop(cSignatureValue,"Erro") exit endif else msgstop(cSignatureValue,"Erro") exit endif _nxgravarnumeroPego = "" _nxcodigodebarras = "" _nxgravarlinhadigitavel = "" nlocaliza_registro_1 := At( '"nossoNumero":', cSignatureValue ) nposicaocolunaInicia := nlocaliza_registro_1 + len('"nossoNumero":') for ttqq = nposicaocolunaInicia to (nposicaocolunaInicia + 100) if substr(cSignatureValue,nposicaocolunaInicia,1) = "0" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "1" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "2" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "3" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "4" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "5" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "6" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "7" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "8" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "9" _nxgravarnumeroPego = _nxgravarnumeroPego + substr(cSignatureValue,nposicaocolunaInicia,1) else exit endif ++nposicaocolunaInicia next nlocaliza_registro_1 := At( '"codigoBarras":"', cSignatureValue ) nposicaocolunaInicia := nlocaliza_registro_1 + len('"codigoBarras":"') for ttqq = nposicaocolunaInicia to (nposicaocolunaInicia + 100) if substr(cSignatureValue,nposicaocolunaInicia,1) = "0" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "1" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "2" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "3" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "4" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "5" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "6" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "7" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "8" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "9" _nxcodigodebarras = _nxcodigodebarras + substr(cSignatureValue,nposicaocolunaInicia,1) else exit endif ++nposicaocolunaInicia next nlocaliza_registro_1 := At( '"linhaDigitavel":"', cSignatureValue ) nposicaocolunaInicia := nlocaliza_registro_1 + len('"linhaDigitavel":"') for ttqq = nposicaocolunaInicia to (nposicaocolunaInicia + 100) if substr(cSignatureValue,nposicaocolunaInicia,1) = "0" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "1" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "2" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "3" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "4" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "5" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "6" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "7" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "8" .or.; substr(cSignatureValue,nposicaocolunaInicia,1) = "9" _nxgravarlinhadigitavel = _nxgravarlinhadigitavel + substr(cSignatureValue,nposicaocolunaInicia,1) else exit endif ++nposicaocolunaInicia next cData = "" nlocaliza_registro_1 = At( '"pdfBoleto":"', cSignatureValue ) + len('"pdfBoleto":"') nlocaliza_registro_2 = At( '"}}]}', cSignatureValue ) nlocaliza_registro_2 = nlocaliza_registro_2 - nlocaliza_registro_1 cData = substr(cSignatureValue,nlocaliza_registro_1,nlocaliza_registro_2) cBase64 := HB_base64Decode(cData) lh := 00 cFileSicoob = "" if objetboleto = "Nfe" cFileSicoob = cFileSic + "sicoob_ret_NFe_" + nNumerodocumento_sicoob + "_" + alltrim(rfantasia) + "_" + alltrim(str(nsequenciatitulo)) + ".pdf" elseif objetboleto = "Ped" cFileSicoob = cFileSic + "sicoob_ret_Ped_" + nNumerodocumento_sicoob + "_" + alltrim(rfantasia) + "_" + alltrim(str(nsequenciatitulo)) + ".pdf" endif oPrn := TDosPrn():New(cFileSicoob) oPrn:StartPage() oPrn:lZeraBuffer:=.T. oPrn:Say(lh,000,cBase64) oPrn:EndPage() oPrn:End() endif SEGUE ABAIXO OS LINK'S PARA OS MANUAIS PARA TIRAR DÚVIDAS E OS E-MAIL'S PARA SUPORTE. Manual: "https://documenter.getpostman.com/view/20565799/Uzs6yNhe#1bcf3134-afbd-4cf3-ba49-9cdf5ea2c224" SUPORTE. SICOOB BELO HORIZONTE (CECREMGE) samuel.lopes@cecremge.org.br gabriel.ferreira@cecremge.org.br BRASILIA. dev@sicoob.com.br
  11. Bom dia, Esse "PDV" não usa nem a LISTBOX e nem a XBROWSE, é uma dialog com "BTNBMP", e como brush a IMAGEM da tela. Listbox é só onde são apresentados os produtos comprados, logo abaixo de "Código de produto", onde aparece os Grupos e os Produtos, são BTNBMP que recebem as informações dos "Grupos" ou "Produtos" a medida que vai clicando nas setas de direção. Segue o código da DIALOG define dialog barRestaurante title "Bares e Restaurantes" from 000,000 to 720,1020 pixel brush obrushbar STYLE WS_POPUP transparent define cursor ohand hand // Variáveis para o atendimento em tela de bares e restaurantes................................................................................ nOperacaoAtendimento = 3 nOperacaoantesAtendimento = 3 ogrupo = {} oproduto = {} ngrupo = 5 nproduto = 15 lArrayProdutos = {} tseqProduto = 1 lArrayCategorias = {} tseqGrupo = 1 cquery := "select * from essubgrupo"+; " order by descricao asc;" oquery := oServer:Query(cquery) xseqsub = oquery:Fieldget(oquery:Fieldpos('seqsub')) if empty(xseqsub) oquery:destroy() return nil endif DO WHILE ! oquery:Eof() mseqsub = oquery:Fieldget(oquery:Fieldpos('seqsub')) mdescricao = oquery:Fieldget(oquery:Fieldpos('descricao')) mcaminhodaimagem = oquery:Fieldget(oquery:Fieldpos('caminhodaimagem')) aadd(lArrayCategorias,{mseqsub,mdescricao,mcaminhodaimagem}) oquery:Skip() END oquery:destroy() if (len(lArrayCategorias)/ ngrupo) != int((len(lArrayCategorias)/ ngrupo)) do while .t. if (len(lArrayCategorias)/ ngrupo) != int((len(lArrayCategorias)/ ngrupo)) aadd(lArrayCategorias,{"","",""}) else exit endif enddo endif mnomedotipodevenda = "" mgrupomarcado = 0 mprodutomarcado = 0 mnomegrupo01 = space(50) mnomegrupo02 = space(50) mnomegrupo03 = space(50) mnomegrupo04 = space(50) mnomegrupo05 = space(50) mnomeprodu01 = space(50) mnomeprodu02 = space(50) mnomeprodu03 = space(50) mnomeprodu04 = space(50) mnomeprodu05 = space(50) mnomeprodu06 = space(50) mnomeprodu07 = space(50) mnomeprodu08 = space(50) mnomeprodu09 = space(50) mnomeprodu10 = space(50) mnomeprodu11 = space(50) mnomeprodu12 = space(50) mnomeprodu13 = space(50) mnomeprodu14 = space(50) mnomeprodu15 = space(50) rproc_procura_consumidor(1) valid_pega_vendedor() /* mDescricao_0 = "Caixa:" + alltrim(mCfdescricaotipodecaixaA) mDescricao_1 = "A Vista:" + alltrim(mCfdescricaotipodecaixaA) mDescricao_2 = "A Prazo:" + alltrim(mCfdescricaotipodecaixaP) mDescricao_3 = "Conta:" + alltrim(mCfdescricaoplanodecontas) mDescricao_4 = iif(!empty(zusuario),"Usuário: " + alltrim(zusuario),space(25)) //mDescricao_5 = "" //mDescricao_5 = "Loja:" + mCfloja + " PDV:" + mCfnumerodocaixa nl = 328 if alltrim(mCfdescricaotipodecaixaA) = alltrim(mCfdescricaotipodecaixaP) @ nl,303 say oDescricao_0 var mDescricao_0 font mcourierMed size 140,10 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel oDescricao_0:lTransparent := .t. @ nl,408 say oDescricao_3 var mDescricao_3 font mcourierMed size 140,10 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel oDescricao_3:lTransparent := .t. nl = nl + 10 if !empty(mDescricao_4) @ nl,303 say oDescricao_4 var mDescricao_4 font mcourierMed size 140,10 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel oDescricao_4:lTransparent := .t. endif //nl = nl + 10 //@ nl,005 say oDescricao_5 var mDescricao_5 font mcourierMed size 140,10 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel //oDescricao_5:lTransparent := .t. else @ nl,303 say oDescricao_1 var mDescricao_1 font mcourierMed size 140,10 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel oDescricao_1:lTransparent := .t. @ nl,408 say oDescricao_3 var mDescricao_3 font mcourierMed size 140,10 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel oDescricao_3:lTransparent := .t. nl = nl + 10 @ nl,303 say oDescricao_2 var mDescricao_2 font mcourierMed size 140,10 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel oDescricao_2:lTransparent := .t. if !empty(mDescricao_4) @ nl,408 say oDescricao_4 var mDescricao_4 font mcourierMed size 140,10 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel oDescricao_4:lTransparent := .t. endif //nl = nl + 10 //@ nl,005 say oDescricao_5 var mDescricao_5 font mcourierMed size 140,10 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel //oDescricao_5:lTransparent := .t. endif */ mDescricao_0 = "Cx:" + substr(alltrim(mCfdescricaotipodecaixaA),1,1) + lower(substr(alltrim(mCfdescricaotipodecaixaA), 2,len(alltrim(mCfdescricaotipodecaixaA)))) mDescricao_1 = "Cx:" + substr(alltrim(mCfdescricaotipodecaixaA),1,1) + lower(substr(alltrim(mCfdescricaotipodecaixaA), 2,len(alltrim(mCfdescricaotipodecaixaA)))) mDescricao_2 = "Cx:" + substr(alltrim(mCfdescricaotipodecaixaP),1,1) + lower(substr(alltrim(mCfdescricaotipodecaixaP), 2,len(alltrim(mCfdescricaotipodecaixaP)))) mDescricao_3 = "Ct:" + substr(alltrim(mCfdescricaoplanodecontas),1,1) + lower(substr(alltrim(mCfdescricaoplanodecontas),2,len(alltrim(mCfdescricaoplanodecontas)))) _usuario = substr(alltrim(zusuario),1,1) + lower(substr(alltrim(zusuario),2,len(alltrim(zusuario)))) mDescricao_5 = iif(!empty(_usuario),"Us:" + alltrim(_usuario),space(25)) nl = 002 nc = 318 if alltrim(mCfdescricaotipodecaixaA) = alltrim(mCfdescricaotipodecaixaP) @ nl,nc say oDescricao_0 var mDescricao_0 font mtahomapequenaMin size 255,09 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel nl = nl + 6 @ nl,nc say oDescricao_3 var mDescricao_3 font mtahomapequenaMin size 255,09 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel nl = nl + 6 @ nl,nc say oDescricao_5 var mDescricao_5 font mtahomapequenaMin size 255,09 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel else @ nl,nc say oDescricao_1 var mDescricao_1 font mtahomapequenaMin size 255,09 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel nl = nl + 6 @ nl,nc say oDescricao_2 var mDescricao_2 font mtahomapequenaMin size 255,09 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel nl = nl + 6 @ nl,nc say oDescricao_3 var mDescricao_3 font mtahomapequenaMin size 255,09 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel nl = nl + 6 @ nl,nc say oDescricao_5 var mDescricao_5 font mtahomapequenaMin size 255,09 of barRestaurante color RGB(000,000,000),RGB(007,102,148) pixel endif @ 000,000 get oNadafaz var mNadafaz font mtahomapequena size 01,01 of barRestaurante color corfrtsayds,corfdogetnotafiscal pixel right no border @ 010,006 say oPnomedocliente var mPnomedocliente picture "@!" font mtahoma size 105,09 of barRestaurante color RGB(000,000,000),RGB(255,255,255) pixel @ 010,114 say oPvendedor var mPvendedor picture "@!" font mtahoma size 105,09 of barRestaurante color RGB(000,000,000),rgb(255,255,255) pixel @ 010,225 say onomedotipodevenda var mnomedotipodevenda font mtahomabold size 085,09 of barRestaurante color rgb(193,017,030),corfdosay pixel @ 004,355 say oestadopdv var mestadopdv font mtahomapequenaMin size 050,15 of barRestaurante color RGB(000,000,000),RGB(255,255,255) pixel //@ 012,355 get oPcodigoproduto var mPcodigoproduto picture "@!"font mtahoma size 090,09 of barRestaurante color rgb(031,068,087),rgb(255,255,255) pixel no border @ 012,355 get oPcodigoproduto var mPcodigoproduto picture "@!" valid ( iif(mestadopdv = " *** Exclui Item ***",rproc_cancela_item(objetpedido),rproc_produto_entradasaida(objetpedido,"P")) ); font mtahoma size 090,09 of barRestaurante color rgb(031,068,087),rgb(255,255,255) pixel no border @ 021,355 listbox obrzPEDpedido fields asamplzPEDpedido[obrzPEDpedido:nat,1]; headers ""; FIELDSIZES 455 on dblclick exclui_item_tablet(objetpedido); size 124,203 font mcourierSup0; pixel of barRestaurante color rgb(000,000,000),rgb(255,255,255) obrzPEDpedido:nClrPane := {|| iif(asamplzPEDpedido[obrzPEDpedido:nat,1] = space(58),rgb(255,255,255),; iif(substr(alltrim(asamplzPEDpedido[obrzPEDpedido:nat,1]),1,9) = "SUB-TOTAL",rgb(233,237,242),; iif(substr(alltrim(asamplzPEDpedido[obrzPEDpedido:nat,1]),1,8) = "DESCONTO" ,rgb(000,120,215),; iif(substr(alltrim(asamplzPEDpedido[obrzPEDpedido:nat,1]),1,5) = "TOTAL" ,rgb(193,017,030),rgb(233,237,242))))) } obrzPEDpedido:nClrText := {|| iif(localiza_und(substr(asamplzPEDpedido[obrzPEDpedido:nat,1],1,3)) = .t.,RGB(083,083,083),; iif(substr(alltrim(asamplzPEDpedido[obrzPEDpedido:nat,1]),1,9) = "SUB-TOTAL",rgb(000,000,000),; iif(substr(alltrim(asamplzPEDpedido[obrzPEDpedido:nat,1]),1,8) = "DESCONTO" ,rgb(255,255,255),; iif(substr(alltrim(asamplzPEDpedido[obrzPEDpedido:nat,1]),1,5) = "TOTAL" ,rgb(255,255,255),rgb(000,000,000))))) } //obrzPEDpedido:nClrPane := {|| iif((asamplzPEDpedido[obrzPEDpedido:nat,1]) = " ",RGB(204,204,204),corlstbxnormal) } obrzPEDpedido:aJustify := { .F.} obrzPEDpedido:nLineStyle := 6 obrzPEDpedido:lCellStyle = .f. obrzPEDpedido:lAutoSkip = .t. obrzPEDpedido:SetArray(asamplzPEDpedido) obrzPEDpedido:bGoTop = { || obrzPEDpedido:nat := 1 } obrzPEDpedido:bGoBottom = { || obrzPEDpedido:nat := Eval( obrzPEDpedido:bLogicLen ) } obrzPEDpedido:bSkip = { | nWant, nOld | nOld := obrzPEDpedido:nat, obrzPEDpedido:nat += nWant,; obrzPEDpedido:nat := Max( 1, Min( obrzPEDpedido:nat, Eval( obrzPEDpedido:bLogicLen ) ) ),; obrzPEDpedido:nat - nOld } obrzPEDpedido:bLogicLen = { || Len( asamplzPEDpedido ) } obrzPEDpedido:cAlias = "Array" obrzPEDpedido:nColAct := 1 //obrzPEDpedido:lMChange := .F. obrzPEDpedido:SetFocus() obrzPEDpedido:Refresh() obrzPEDpedido:bgotfocus = { || oPcodigoproduto:setfocus() } oNadafaz:bgotfocus = { || oPcodigoproduto:setfocus() } @ 071,007 say onomegrupo01 var mnomegrupo01 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 071,069 say onomegrupo02 var mnomegrupo02 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 071,131 say onomegrupo03 var mnomegrupo03 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 071,194 say onomegrupo04 var mnomegrupo04 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 071,256 say onomegrupo05 var mnomegrupo05 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel // 1º grupo de botões dos departamentos... @ 021,007 BTNBMP obotaogrupo01 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("G",1) ) @ 021,069 BTNBMP obotaogrupo02 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("G",2) ) @ 021,131 BTNBMP obotaogrupo03 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("G",3) ) @ 021,194 BTNBMP obotaogrupo04 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("G",4) ) @ 021,256 BTNBMP obotaogrupo05 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("G",5) ) obotaogrupo01:oCursor := ohand obotaogrupo02:oCursor := ohand obotaogrupo03:oCursor := ohand obotaogrupo04:oCursor := ohand obotaogrupo05:oCursor := ohand @ 147,007 say onomeprodu01 var mnomeprodu01 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 147,069 say onomeprodu02 var mnomeprodu02 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 147,131 say onomeprodu03 var mnomeprodu03 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 147,194 say onomeprodu04 var mnomeprodu04 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 147,256 say onomeprodu05 var mnomeprodu05 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel // 1º grupo de botões dos produtos... @ 096,007 BTNBMP obotaoprod01 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("P",1) ) @ 096,069 BTNBMP obotaoprod02 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("P",2) ) @ 096,131 BTNBMP obotaoprod03 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("P",3) ) @ 096,194 BTNBMP obotaoprod04 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("P",4) ) @ 096,256 BTNBMP obotaoprod05 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("P",5) ) obotaoprod01:oCursor := ohand obotaoprod02:oCursor := ohand obotaoprod03:oCursor := ohand obotaoprod04:oCursor := ohand obotaoprod05:oCursor := ohand @ 223,007 say onomeprodu06 var mnomeprodu06 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 223,069 say onomeprodu07 var mnomeprodu07 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 223,131 say onomeprodu08 var mnomeprodu08 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 223,194 say onomeprodu09 var mnomeprodu09 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 223,256 say onomeprodu10 var mnomeprodu10 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel //// 2º grupo de botões dos produtos... @ 172,007 BTNBMP obotaoprod06 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("P",6) ) @ 172,069 BTNBMP obotaoprod07 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("P",7) ) @ 172,131 BTNBMP obotaoprod08 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("P",8) ) @ 172,194 BTNBMP obotaoprod09 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("P",9) ) @ 172,256 BTNBMP obotaoprod10 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("P",10) ) obotaoprod06:oCursor := ohand obotaoprod07:oCursor := ohand obotaoprod08:oCursor := ohand obotaoprod09:oCursor := ohand obotaoprod10:oCursor := ohand @ 300,007 say onomeprodu11 var mnomeprodu11 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 300,069 say onomeprodu12 var mnomeprodu12 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 300,131 say onomeprodu13 var mnomeprodu13 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 300,194 say onomeprodu14 var mnomeprodu14 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel @ 300,256 say onomeprodu15 var mnomeprodu15 font mtahomafacpeq size 060,20 of barRestaurante color corfrtsay,corfdosay pixel //// 2º grupo de botões dos produtos... @ 249,007 BTNBMP obotaoprod11 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("P",11) ) @ 249,069 BTNBMP obotaoprod12 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("P",12) ) @ 249,131 BTNBMP obotaoprod13 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("P",13) ) @ 249,194 BTNBMP obotaoprod14 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("P",14) ) @ 249,256 BTNBMP obotaoprod15 center size 055,050 font obotaof noborder of barRestaurante pixel action( marcar_pintar_selecionar("P",15) ) obotaoprod11:oCursor := ohand obotaoprod12:oCursor := ohand obotaoprod13:oCursor := ohand obotaoprod14:oCursor := ohand obotaoprod15:oCursor := ohand // dois botões ao lado esquerdo dos itens vendidos... @ 242,366 BTNBMP obarbut01 left size 030,33 font obotaof noborder resource "bar_pt_acima" of barRestaurante action ( (obrzPEDpedido:SetFocus()),movimento_listbox_pdv("A") ) @ 242,402 BTNBMP obarbut02 left size 030,33 font obotaof noborder resource "bar_pt_abaixo" of barRestaurante action ( (obrzPEDpedido:SetFocus()),movimento_listbox_pdv("B") ) // Um botão abaixo dos itens vendidos. excluir item ... @ 242,438 BTNBMP obarbut10 left size 030,33 font obotaof noborder resource "bar_bt_sair_3" of barRestaurante action ( exclui_item_tablet(objetpedido) ) // dois botões ao lado direito dos sub-grupo de produtos. .. // 1º "A" do action significa que é um botão que pressiona para rolando para o inicio do array @ 024,320 BTNBMP obarbut03 left size 030,33 font obotaof noborder; resource "bar_bt_esquerda" of barRestaurante action( ver_dados_grupo("A") ) // 1º "B" do action significa que é um botão que pressiona para rolando para o final do array @ 060,320 BTNBMP obarbut04 left size 030,33 font obotaof noborder; resource "bar_bt_direita" of barRestaurante action( ver_dados_grupo("B") ) // dois botões um por unidade outro por quantidade @ 100,320 BTNBMP obarbut05 left size 030,33 font obotaof noborder resource "bar_bt_und" of barRestaurante action( pega_produto_base_de_dados("UND",objetpedido) ) @ 136,320 BTNBMP obarbut06 left size 030,33 font obotaof noborder resource "bar_bt_qtd" of barRestaurante action( pega_produto_base_de_dados("QTD",objetpedido) ) // dois botões ao lado direito dos produtos... @ 176,320 BTNBMP obarbut07 left size 030,33 font obotaof noborder resource "bar_pt_acima" of barRestaurante action( iif( mgrupomarcado > 0, ver_dados_produto("A",mgrupomarcado), ) ) @ 212,320 BTNBMP obarbut08 left size 030,33 font obotaof noborder resource "bar_pt_abaixo" of barRestaurante action( iif( mgrupomarcado > 0, ver_dados_produto("B",mgrupomarcado), ) ) // botão para o código comum ou código de barras... @ 252.5,320 BTNBMP obarbut09 left size 030,33 font obotaof noborder resource "bar_bt_barras" of barRestaurante action( oPcodigoproduto:setfocus() ) // botão para o vendedor @ 287.5,320 BTNBMP obarbut9a left size 030,33 font obotaof noborder resource "bar_bt_vendedor" of barRestaurante action( escolha_vendedor() ) obarbut01:lTransparent = .t. obarbut02:lTransparent = .t. obarbut03:lTransparent = .t. obarbut04:lTransparent = .t. obarbut05:lTransparent = .t. obarbut06:lTransparent = .t. obarbut07:lTransparent = .t. obarbut08:lTransparent = .t. obarbut09:lTransparent = .t. obarbut9a:lTransparent = .t. obarbut10:lTransparent = .t. // Quatro botões laterais a direita ( Mesas,Comandas,Balcão e Entregas) ... @ 019,485 buttonbmp obarbut11 bitmap "bar_bt_mesas.bmp" left size 020,67 font obotaof noborder of barRestaurante pixel action ( (nOperacaoantesAtendimento := nOperacaoAtendimento ),dados_comanda(1) ) @ 098,485 buttonbmp obarbut12 bitmap "bar_bt_comandas.bmp" left size 020,64 font obotaof noborder of barRestaurante pixel action ( (nOperacaoantesAtendimento := nOperacaoAtendimento ),dados_comanda(2) ) @ 175,485 buttonbmp obarbut13 bitmap "bar_bt_balcao.bmp" left size 020,64 font obotaof noborder of barRestaurante pixel action ( (nOperacaoantesAtendimento := nOperacaoAtendimento ),dados_comanda(3) ) @ 254,485 buttonbmp obarbut14 bitmap "bar_bt_entregas.bmp" left size 020,67 font obotaof noborder of barRestaurante pixel action ( (nOperacaoantesAtendimento := nOperacaoAtendimento ),dados_comanda(4) ) obarbut01:oCursor := ohand obarbut02:oCursor := ohand obarbut03:oCursor := ohand obarbut04:oCursor := ohand obarbut05:oCursor := ohand obarbut06:oCursor := ohand obarbut07:oCursor := ohand obarbut08:oCursor := ohand obarbut09:oCursor := ohand obarbut9a:oCursor := ohand obarbut10:oCursor := ohand obarbut11:oCursor := ohand obarbut12:oCursor := ohand obarbut13:oCursor := ohand obarbut14:oCursor := ohand @ 327,003 BTNBMP obarbut24 left size 030,33 font obotaof noborder of barRestaurante action( procura_geral_bar("Bar")) @ 327,038 BTNBMP obarbut25 left size 030,33 font obotaof noborder of barRestaurante action( consulta_produto_aleatorio(1) ) @ 327,073 BTNBMP obarbut26 left size 030,33 font obotaof noborder of barRestaurante action( iif(ver_senha("000552") = .t.,exclui_tablet(objetpedido),"") ) @ 327,108 BTNBMP obarbut27 left size 030,33 font obotaof noborder of barRestaurante action( menu_suspenso_sup() ) obarbut24:SetFile("bar_bt_client.bmp") obarbut25:SetFile("bar_bt_preco.bmp") obarbut26:SetFile("bar_bt_excluir_pedido.bmp") obarbut27:SetFile("bar_bt_menu.bmp") for ttxx = 24 to 27 mbut = "obarbut" + strzero(ttxx,2) &mbut:lTransparent = .t. &mbut:SetColor( corfrtsay,clr_fundo_branco ) &mbut:oCursor := ohand next @ 327,143 BTNBMP obarbut28 left size 030,33 font obotaof noborder of barRestaurante action ( rproc_desconto(objetpedido) ) @ 327,178 BTNBMP obarbut29 left size 030,33 font obotaof noborder of barRestaurante action ( rproc_recebimento(objetpedido) ) @ 327,213 BTNBMP obarbut30 left size 030,33 font obotaof noborder of barRestaurante action ( verifica_opcao(objetpedido,"E") ) @ 327,248 BTNBMP obarbut31 left size 030,33 font obotaof noborder of barRestaurante action ( ( saida_bar(),barRestaurante:end() ) ) obarbut28:SetFile("bar_bt_desconto.bmp") obarbut29:SetFile("bar_bt_receceb.bmp") obarbut30:SetFile("bar_bt_exclui_item.bmp") obarbut31:SetFile("bar_bt_sai.bmp") for ttxx = 28 to 31 mbut = "obarbut" + strzero(ttxx,2) &mbut:lTransparent = .t. &mbut:SetColor( corfrtsay,clr_fundo_branco ) &mbut:oCursor := ohand next //obarbut24:refresh() //obarbut25:refresh() //obarbut26:refresh() //obarbut27:refresh() //obarbut28:refresh() //obarbut29:refresh() //obarbut30:refresh() //obarbut31:refresh() @ 227,386 say oPtotaldeitens var mPtotaldeitens picture "@e 999,999" font mtahomagrande of barRestaurante size 090,13 color RGB(000,000,000),RGB(000,128,192) pixel right @ 278,368 say oPtotaldopedido var mPtotaldopedido picture "@e 999,999,999,999.99" font mtahomagrande of barRestaurante size 108,15 color rgb(193,017,030),corfdosay pixel right @ 294,368 say oPvalorrecebidosupermercado var mPvalorrecebidosupermercado picture "@e 999,999,999,999.99" font mtahomagrande of barRestaurante size 108,15 color RGB(031,068,087),rgb(255,255,255) pixel right @ 310,368 say oPtroco var mPtroco picture "@e 999,999,999,999.99" font mtahomagrande of barRestaurante size 108,15 color RGB(000,000,000),rgb(255,255,255) pixel right @ 340,285 say oObservacoes var mObservacoes picture "@!" font mtahomagrande size 218,15 of barRestaurante color rgb(000,000,000),rgb(255,255,255) pixel center barRestaurante:bKeyDown := {|nKey| iif( nKey == VK_F3 ,consulta_produto_aleatorio(1),0),; iif( nKey == VK_F4 ,iif(ver_senha("000552") = .t.,exclui_tablet(objetpedido),""),0),; iif( nKey == VK_F5 ,menu_suspenso_sup(),0),; iif( nKey == VK_F6 ,rproc_desconto(objetpedido),0),; iif( nKey == VK_F7 ,rproc_recebimento(objetpedido),0),; iif( nKey == VK_F8 ,verifica_opcao(objetpedido,"E"),0),; iif( nKey == VK_F9 ,( saida_bar(), barRestaurante:end() ),0)} activate dialog barRestaurante center valid lsair on init( zera_valores() , ver_dados_grupo("B"),dados_comanda(3),analise_geral_na_entrada(),pesquisa_comecadigitado("oPcodigoproduto","Bar") )
  12. Valeu!! Em MG, o que se alterou em relação a NFC-e das demais UF's foram apenas algumas URL'S que foi a partir do dia 06/03/2023 A URL de consulta a NFCe via QRCode e a URL de consulta por chave (Portal) foram alteradas em homologação e produção. A partir de 06/03/2023 só aceitaremos as url's abaixo: PRODUÇÃO Nova url de consulta via QRCode: https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml Nova url de consulta via Portal: https://portalsped.fazenda.mg.gov.br/portalnfce HOMOLOGAÇÃO Nova url de consulta via Portal: https://hportalsped.fazenda.mg.gov.br/portalnfce Nova url de consulta via QRCode: https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml Importante lembrar que as novas urls deverão ser utilizadas tanto no processo de consulta quanto de autorização. Caso sejam utilizadas as url's antigas o emitente poderá receber as rejeições: "878: Endereço do site da UF da Consulta por chave de acesso diverge do previsto" ou "395: Endereço do site da UF da Consulta via QR-Code diverge do previsto". Abraço.
  13. Boa tarde, Você pode usar a DLL da UNIMAKE ( É free - gratuita ) Acesse. https://wiki.unimake.com.br/index.php/Manuais:Unimake.DFe https://github.com/Unimake/DFe Neste na pasta EXEMPLOS - tem todos os exemples em xharbour. No youtube, tem todas as LIVE ensinando como programar com a DLL no xharbour, consequentemente em fivewin + xharbour https://www.youtube.com/results?search_query=dll+unimake+xharbour É só procurar as LIVE, são muitas.. Para baixar a DLL https://www.unimake.com.br/downloads TEM TAMBÉM OS FONTES DO SR. JOSE QUINTAS ( CLASSE) em fivewin + xharbour TOTALMENTE FUNCIONAL ( basta baixar zipado, todas os fontes estão lá, inclusive com exemplos) https://github.com/JoseQuintas/sefazclass Abraço.
  14. RESOLVI ASSIM. Fiz a abertura do site de MANIFESTAÇÃO DO DESTINATÁRIO DA SEFAZ/NACIONAL em uma dialog a partir do ACTIVEX e a partir desta tela eu salvo o HTML, para que eu possa localizar as NF-e pelo sua chave neste HTML e as recolho guardando em um ARRAY. Depois faço uma busca ao invés do ULTNSU, mas sim por CHAVE que havia recolhido e guardado no ARRAY. Sendo assim não necessito do ULTNSU, pois a consulta que faço é por chave da NF-e. ( ISSO me dá até 20 documentos a cada hora de consulta.), sendo que se alguém (contabilidade) faz a busca por NSU (ULTIMO), não atrapalha a minha consulta. Ele retorna. Leio o retorno e localizo o "doczip", assim utilizo os comandos... "hb_ZUncompress(HB_base64Decode())", para ter o XML e pode processar o mesmo na ENTRADA DA NF. Esta funcionando bem.
  15. No link abaixo tem um vídeo de como ficou simples a emissão de NF-e, usando os parâmetros acima. https://www.linkedin.com/posts/wsiscom-software-775b5ab4_veja-como-é-fácil-emitir-um-pedido-uma-nf-e-activity-6948603659240759296-Cn6S/?utm_source=share&utm_medium=member_desktop
×
×
  • Create New...