NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!
UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI
Objetivo:
O objetivo deste tutorial é habilitar o cálculo de frete para exportações, direto no seu website. Utilizamos uma tabela oficial dos Correios com os valores de envio, atualizados até novembro de 2013.
Pré-requisito:
Para você poder acompanhar o desenvolvimento deste tutorial, será necessário ter conhecimento mínimo de lógica de programação e programação ASP clássica (estruturada).
Nota:
Para baixar os arquivos deste tutorial, clique aqui.
Para começar, verifique o arquivo index.asp. Nele é criada a conexão com o banco CorreiosInternacional.mdb, e feita uma query para buscar os países, como abaixo:
<%Set conn = server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("\intranet\dados\CorreiosInternacional.mdb")
Set Rs = conn.Execute("SELECT * FROM paises ORDER BY pais")
%>
Depois iniciamos o formulário que vai chamar o nosso include de cálculo. Note que existe, dentro do formulário, um campo hidden chamado "p", simplesmente. Ele traz o peso do produto via GET, POST, ou um valor fixo, se preferir. A mesma coisa com o formulário, se desejar usar POST ou manter o GET:
<form action="" method="get" name="frete">
<input type="hidden" name="p" value="<%= request("p") %>">
Agora faremos a listagem dos países disponíveis através do campo <select>:
<select name="pais" size="1" onChange="this.form.submit();">
Utilizando um loop while dentro deste <select>, traremos os países com suas respectivas siglas (3 caracteres):
<%
While NOT Rs.EOF
%>
<option value="<%= Rs("sigla") %>"><%= Rs("pais") %></option>
<%
Rs.MoveNext
Wend
%>
* Note que o <select> possui um valor onchange, ou seja, quando um valor for escolhido, o formulário será submetido.
Agora faremos a verificação de se o formulário foi ou não enviado, usando o if:
<% if request("pais") <> "" then %>
Se for verdadeiro, ele trará o seguinte include:
<!--#INCLUDE VIRTUAL="/includes/ws_correios_exterior.asp"-->
* Lembre de modificar o caminho do seu include, prefira utilizar o VIRTUAL ao FILE, pois ele pode trazer problemas e arrancamento de cabelos desnecessários.
Agora, vamos chamar a função Exportar(sigla,peso):
<%= Exportar(request("pais"),request("p")) %>
Veja que estou usando somente request() e não request.querystring ou request.form. Assim não há problemas caso você mude o protocolo de envio do formulário.
* Se desejar, você pode adicionar uma validação, mas dentro da função já faremos isto.
O arquivo ws_correios_exterior.asp, que contém a função Exportar(sigla,peso):
<% Session.LCID = 1046 Session.Timeout = 1400 response.buffer = true
Function Exportar(cnt,wgt) Dim margem : margem = 15 'porcentagem do lojista (por segurança, pois o cálculo é estimado) - 0 para não calcular Dim porc : porc = 1 'porcentagem a adicionar caso o peso seja maior que 5kg Dim peso : peso = replace(wgt,",",".") 'pega o peso vindo da página, se tiver formato BR troca vírgula por ponto Dim sigla : sigla = replace(left(cnt,3),"'","") 'substr pra garantir que só pegue 3 caracteres, e invalida injection
'arredonda o peso por causa dos envios (tenta até 5kg; acima disso, adiciona % ao total) if peso < "0.5" then peso = "0.5" elseif peso > "0.5" and peso < "1" then peso = 1 elseif peso > "1.1" and peso < "2" then peso = 2 elseif peso > "2.1" and peso < "3" then peso = 3 elseif peso > "3.1" and peso < "4" then peso = 4 elseif peso > "4.1" and peso < "5" then peso = 5 end if
'pega os dados do país de acordo com a sigla internacional trazida (3 letras) Set Rs = conn.Execute("SELECT * FROM paises WHERE sigla = '"&sigla&"'")
'passa pelos modos de envio e verifica quais podem ser usados
Set Val = conn.Execute("SELECT * FROM valores WHERE
(grupo = "&Rs("grupo_ems")&" AND tipo_envio = 'EMS') OR (grupo = "&Rs("grupo_leve")&" AND tipo_envio = 'LEVE') OR (grupo = "&Rs("grupo_econ")&" AND tipo_envio = 'ECON')")
response.write "<p>Valor do frete de "&peso&"kg para: <b>"&Rs("pais")&"</b>, capital:</p>" response.write "<table align=center width='93%' border=0 cellspacing=5 cellpadding=5>" response.write "<tr>" While NOT Val.EOF pp = Val("valor_"&replace(peso,".","")) 'se for peso quebrado, tira a pontuação pra = Val("prazo_envio") tip = Val("tipo_envio")
'se o peso estiver fora do arredondamento acima, adiciona o % ao total if peso > 5 then pp = pp + (porc/100) * pp end if
'se o valor for real, exibe o modo if pp <> 0 then 'se tiver margem do lojista, adiciona ao total if margem <> 0 then pp = pp + (margem/100)*pp end if
%><td align="center" width="33%"><p>Via <b><%= tip %>:</b><br><%= FormatCurrency(pp) %><br>(<a title="Prazo estimado!" style="cursor:help"><%= pra %> dias úteis</a>)<br><input type="radio" name="frete" onClick="window.location='carrinho.asp?frete=<%= tip %>|<%= pp %>|<%= pra %>';"></p></td> <%
end if Val.MoveNext Wend response.write "</tr>" response.write "</table>" End Function %>
Este tutorial é um básico sistema de cálculo de frete para o exterior. Ele utiliza valores pré-definidos em um banco de dados Access, e com certeza pode ser melhorado. Espero que sirva de início para um código que pode ser bastante difundido. Bons estudos e até o próximo, onde explicarei como fazer o cálculo de frete dinâmico para dentro do país, usando seu CEP.
Autor: Dimas Pante
Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434
Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208
Todos os direitos reservados, Júlio Battisti 2001-2025 ®
LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO
DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI