-
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!
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
-
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.
-
Calcular quantos minutos o item foi lançado na comanda/pedido
Wellington Vieira replied to marcioe's topic in Programação
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; -
Calcular quantos minutos o item foi lançado na comanda/pedido
Wellington Vieira replied to marcioe's topic in Programação
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. -
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
-
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); ?>
-
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.
-
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.
-
https://developers.mercadolivre.com.br/pt_br/publicacao-de-produtos#
-
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.
-
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
-
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") )
-
Luiz Fernando reacted to a post in a topic: NFC-e para MG
-
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.
-
Luiz Fernando reacted to a post in a topic: NFC-e para MG
-
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.
-
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.
-
rochinha reacted to a post in a topic: Tabela Ncm com Aliq Icms
-
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