Magento: Table Rate Shipping ou Frete por Taxas de Tabela
10 de julho de 2009Olá.. Não sei se vou ajudar alguém com este post mas, pelo que me consta, existe uma certa dificuldade em fazer o Table Rate funcionar no Magento. Sendo assim, vou contar essa aventura de +ou- 6 horas de busca incansável pelas poucas linhas de código que resolveriam meus problemas. Enfim, tive essa necessidade com um cliente aqui da Indexa, que precisava enviar seus produtos através de uma transportadora. Recebi as informações de cobrança em uma colorida e extensa (literal e lateralmente) planilha do Excel, que, depois de muitos ctrl+c ctrl+v, se tornou um resultado típico de uma SQL, depois transformado no formato CSV, que é o que o Magento lê, a seguir:
“País”,”Estado”,”CEP”,”Peso (e acima)”,”Valor do frete”
“BR”,”RJ”,”*”,”0.25″,”11.71″
“BR”,”RJ”,”*”,”0.5″,”12.39″
“BR”,”RJ”,”*”,”0.75″,”13.07″
…
Sendo assim, para qualquer CEP do estado RJ com produtos pesando até 250 gramas o preço de envio fica R$ 11,71, de 251 gramas até 500 gramas custa R$ 12,39, e assim por diante, com uma regra pra cada estado. Porém, como problemática típica, pra cada estado existem 2 valores: um para capital, e outro para interior. Nesse caso, apesar de existirem extensões para tabelas múltiplas, como nos links a seguir:
http://www.magentocommerce.com/extension/306/pickup-at-event–multiple-flatrates
http://www.magentocommerce.com/extension/1357/product-matrix-shipping
http://www.magentocommerce.com/extension/728/multiple-tablerates
…acabei optando por cadastrar Regions diferentes (como “São Paulo – Interior” e “São Paulo – Capital”), o que agradou mais esse cliente em específico, por já facilitar a diferenciação da taxa a ser utilizada através de uma simples olhada no endereço do cliente.
Refiz então o CSV para essa nova situação, usando siglas como “RJI” para o interior do “Rio de Janeiro – Interior” e “RJC” para “Rio de Janeiro – Capital”, modificando isso tudo lá nas tabelas de Regions do MySQL do Magento… Mas, ao fazer o upload do CSV pela tela de configuração (ver imagem mais abaixo no post) um erro de “undefined index” me foi mostrado. Não sei se há um jeito melhor de resolver isso, porque todos os índices estavam corretos e etc, mas tive de fazer a seguinte alteração no core pro arquivo conseguir ser processado corretamente. Me pareceu um pequeno bugfix:
/www/app/code/core/Mage/Shipping/Model/Mysql4/Carrier/Tablerate.php

Certo, na linha 202 adicionei aquele if checando se o índice existe antes de indexá-lo e tudo pareceu correr bem a partir de então… Fiz mais 2 mudanças no core para o Tablerate funcionar corretamente pro meu caso:
/www/app/code/core/Mage/Shipping/Model/Mysql4/Carrier/Tablerate.php

As condições dessa query são bem importantes pra definir como o Magento traz os resultados da Tablerate e o relaciona com os produtos e o peso. No print acima está como as minhas condições acabaram ficando. Na próxima e última alteração, fiz com que a listagem de estados lá do frontend viesse em ordem alfabética. Para isso, criei uma função que ordena o array das regiões do Brasil, sem modificar seus índices:
/www/app/code/Mage/Directory/Helper/Data.php

Bom, partindo para a configuração final, logo abaixo segue a tela com as opções que selecionei lá nas configurações do admin e que deixou tudo funcionando no checkout… Pra chegar até esta tela clique em Sistema->Configurações e selecione Taxas de Tabela, e lembre-se de selecionar o website pra essas opções aparecerem!

E agora um print do resultado dessa brincadeira no frontend:

Valeu pessoal, espero ajudar aí e até a próxima!
Tags: Frete, Magento, Module, Módulo, Shipping, Table Rate, Table Rates, Taxas de Tabela


7 de agosto de 2009 às 4:41 pm
Olá Alisson Oldoniestou montando uma loja virtual usando a plataforma Magento, e não etou conseguindo implantar o calculo de frete.
Gostaria de saber se você presta algum tipo de consultoria.
Aguardo retorno. Atenciosamente,
7 de agosto de 2009 às 4:52 pm
Olá Higor,
Sim, aqui na Indexa Internet prestamos consultoria específica de Magento. Como já lhe falei por email, encaminhei seu pedido ao nosso dpto. comercial que entrará em contato com você. Obrigado por visitar meu blog, e pena o post não ter sido suficiente para ajudá-lo!
5 de dezembro de 2009 às 5:28 pm
Olá, gostaria de saber como faço para colocar frete gratis por região,minha lojá tem plataforma magento,
aguardo contato
obrigado
7 de dezembro de 2009 às 8:44 am
Olá, imaginamos, por cima, possíveis soluções utilizando a promoção (por região/estado) ou usando o próprio frete por tabela (por faixa de cep).
14 de dezembro de 2009 às 2:27 am
ok como faço para criar a regra de frete grpatis por região e habilitar
14 de dezembro de 2009 às 2:50 am
Alisson, eu achei onde fica a faixa de cep, mais não estou conseguindo concluir o serviço, por favor me ajude, gostaria que me passe passo a passo
12 de janeiro de 2010 às 9:08 am
Muito interessante trabalhar desta forma, terei um pouco de dificuldade com certeza porém a dica já está dada, muito obrigado mesmo Alisson! Espero que este ano sejamos amigos diferente dos impasses do ano passado ~.~
Outra boa dica também seria sobre alteração do carrinho de compras, deixando mais com a cara da loja. Isso tem fóruns lá de sobra, mas bem explicado igual aqui não.
Flz 2010 para todos!
2 de fevereiro de 2010 às 2:23 pm
Olá Alisson, joia ! Estou montando uma loja, e como o sistema de PAC dos correios nao esta funcional e nao tenho um modulo adaptado para calcular volume, pois pelo que sei essa é a nova exigencia do novo sistema, estou usando o modulo de calculos de frete que é instalado com o modulo de pagamento pagseguro, pois bem, funciona bem a nao ser pelo fato de que o calculo de frete do PS é baseado no serviço de contrato com os correios, entao é mais barato, 3 reais pra ser exato, entao gostaria de saber como eu poderia modificar para q eu pudesse adicionar este valor ao valor final do frete do pagseguro no proprio calculo de cotação !!! aguardo seu auxilio !
2 de fevereiro de 2010 às 5:34 pm
Olá Charles.
Nós já temos o módulo de Correios adaptado para calcular volume. Entre em contato com comercial@indexainternet.com.br para maiores informações. Quanto ao seu módulo do Pagseguro infelizmente não vou poder ajudar só com estas informações… Tente procurar as classes dentro do diretório Model/Carrier do seu módulo. Lá se encontra o arquivo que faz o cálculo e talvez adicionando 3 ao valor retornado pelo Pagseguro possa ajudar. Vale lembra que, mesmo assim, o cálculo continuará retornando um valor diferente do praticado no balcão, é impossível um valor mais aproximado sem um cálculo correto do peso cúbico que utiliza a largura, altura e comprimento.
Obrigado pela visita!
12 de fevereiro de 2010 às 11:30 pm
A Indexa domina…ta loco..não existe a frase “não dá pra fazer isso ou aquilo”! Parabéns!
28 de outubro de 2010 às 12:13 pm
Tem como usar o table rates para apenas uma cidade?
Do cep 18000-001 a 18109-999…
Vlw
31 de dezembro de 2010 às 12:30 pm
achei na net – Modulo Cadastral para clientes do Brasil – magento
esse modulo de cadastro de clientes permite a escolha entre pessoas físicas e jurídicas, endereço preenchimdo automáticamente ao colocar o CEP, validação e ocultação de campos.
versoes:
versão 1.4.0.1 do Magento Ecommerce.
versão 1.4.1.1 do Magento Ecommerce.
versão 1.4.2.0 do Magento Ecommerce.
- nao sei de quem é o credito
LINKS:
http://www.megaupload.com/?d=7GZH2OCG
http://www.easy-share.com/1913435033/modulo.cad.clientes.magento.1.0.pt.br.rar
10 de fevereiro de 2011 às 8:24 am
Tem como por exemplo calcular o GRIS com Table Rates?
14 de outubro de 2011 às 8:55 pm
Pessoal reinstalei o magento no servidor da UOLHost, quando eu finalizo a compra sem calcular o frete no carrinho de compras funciona normalmente até da o valor do frete sedex e pac tudo normal, só que quando mando calcular o cep no carrinho de compras da o seguinte erro (An internal server error occurred. Please try again later.) e o site fica fora do ar um tempão.
Alguém sabe o que pode ser, estou usando um tema, mais creio que o problema possa estar no arquivo do carrinho de compras, alguém já teve este problema,
Agradeço a todos e obrigado
2 de janeiro de 2012 às 10:18 am
Ola,
Estou tentando configurar o table rates conforme vc explicou, mas não esta dando certo…quando chego na tela de carrinho de compras(o ultimo print seu do post) não aparece o metodo de entrefa configurado, e também não da erros na tela nem no log. Qual a versão que você usou? eu estou usando a 1.6.
Você sabe se existe algum bug para esta vesão?
Att,
Eneias