Pular para o conteúdo principal

PHP - Dimensões Pacote Frete SEDEX/PAC Correios

Em resumo: o Artigo a seguir ensina como calcular as dimensões de uma caixa a ser enviada através do serviço de Frete dos correios (SEDEX ou PAC). 
Será criado um algoritmos em linguagem de programação PHP, que simula o recebimento de informações de produtos em um carrinho de compras, e realiza calculo das dimensões da caixa em que estes produtos devem ser remetidos. Ao final do Artigo, disponibiliza-se o link para download do código fonte.



Nota: Para ler esse mesmo artigo revisado e com melhor legibilidade, acesse o site Sooho e o artigo para Calcular as dimensões de caixas do Correios SEDEX/PAC.

Para quem desenvolve softwares, em particular ecommerces, volta e meia acaba por ter que utilizar-se da API dos correios para calcular preços e prazos no envio de Mercadorias, seja por SEDEX ou encomenda normal PAC. Essa ação é facilitada quando se utiliza serviços como o Pagseguro, uma vez que o calculo de Frete é realizado automaticamente, porém para os casos em que se desenvolve o próprio sistema de processamento dessas informações, a saída é utilizar-se do serviço disponível na empresa prestadora do serviço de Frete. 

A API oferecida pelos Correios para este calculo (acredito que todos conheçam), trata-se de uma função bastante simples e intuitiva em seu uso. Abaixo, segue exemplo da função escrita em PHP.



Esta API exige para o correto funcionamento, que o solicitante informe além dos dados do serviço que está sendo consultado, também, dados referentes ao Peso e as Dimensões da caixa em que será enviado a mercadoria.

As dimensões da caixa a ser enviada é de extrema importância pois, caso calculada de forma errada, alguém vai pagar a mais pelo frete, seja ele o cliente ou o vendedor! E em muitos casos, os consumidores acabam desistindo da compra, no momento de simular o Frete que por erro vem com um valor bem acima do habitual. Isso é um potencial problema que pode gerar prejuízos para o vendedor.

A simulação de Frete para apenas 1 item é um processo fácil, pois você conta apenas com 1 único item que terá uma altura, largura e comprimento. A dificuldade entretanto, aparece no momento em que você necessita calcular Altura, Largura e Comprimento, para o envio de vários itens em uma caixa.

Existem algumas regras que são exigidas pelos sistema dos Correios no que contempla as dimensões de uma caixa a ser enviada. Seguem na imagem abaixo.

























Bom, eu imagino que hajam outras soluções para resolver esse problema, não estou tentando propor algo engenhoso nem tão pouco a prova de falhas, é apenas uma solução que desenvolvi de forma rápida em poucas horas de trabalho apenas para solucionar o problema no momento. Sinta-se a vontade para obter uma cópia deste código que irei apresentar, e alterar ou melhorar conforme sua vontade, peço apenas que caso replique esse conteúdo ou esse código na internet, cite o autor.

CASO 01 - Calculo de dimensões para Apenas 1 item

Digamos que você deseja calcular as dimensões para o envio de de 1 Produto(1 livro). Esse produto tem:


  • Altura = 21 cm;
  • Largura = 16 cm;
  • Comprimento = 5 cm;

Para um caso assim não há necessidade de cálculos, uma vez que, você já tem em mãos as dimensões que precisa e podem ser enviadas ao sistema dos correios para devido processamento de prazo e frete.

Nota: caso o produto tivesse por exemplo, Largura inferior a 11 cm, seria necessário alterar esta informação para 11 cm que é o mínimo exigido pelo sistema dos correios.

CASO 02: Calcular dimensões de 2 Produtos, mesmo Modelo

Agora imagine que sua tarefa trata-se do envio de 2 livros ao invés de apenas 1!

Para esse caso em Especifico, quando há mais de um item a ser enviado, o procedimento mais prático é pensar como seres humanos fazem isso? e apenas depois transformar a solução em algoritmo.
Eu penso que a forma mais fácil de empacotar os 2 livros para envio por correios, é, de forma que eles fiquem compactos com o minimo de espaço dentro de uma caixa e de forma que a largura e o comprimento estejam alinhados. Não imagino que alguém colocaria livros em uma caixa de forma desorganizada, tal qual um em pé e o outro deitado, além do gasto extra de espaço dentro da caixa, e consequentemente dinheiro, corre-se o risco de o item estragar batendo de um lado para o outro da caixa durante o percurso.

CASO 03: Calculo de Itens de diferentes dimensões 

Nosso último caso, imagine um cenário onde devem ser enviados vários itens por correio, de tamanhos variados, larguras e comprimentos. Livros, roupas, perfumes, aparelhos celulares, tudo deve ser enviado numa única caixa.
Dentro de uma caixa, os itens não diferenciam quanto a altura, largura ou comprimento, em outras palavras, não importa a posição em que eles serão condicionados, a altura de uma garrafa de Vinho de 27cm pode se tornar o comprimento dentro da caixa para transporte se for condicionado na posição horizontal, logo:

Passo 1 - Por convenção acredito que o melhor a principio é que as dimensões de todos os produto sejam convertidas de forma que o maior valor se torne Comprimento, o menor valor se torne Largura e o valor intermediário Altura.
Essa convenção vem de encontro a exigência do sistema dos correios, em que o menor valor deve ser :
Comprimento 16 cm;
Largura 11 cm;
Altura 2 cm;

Passo 2 - Uma vez que todos os produtos estão organizados, de forma que a Altura seja igual a menor dimensão, Comprimento igual a maior dimensão e Largura dimensão intermediária, o próximo passo é organizar os produtos calculando sua Largura por seu Comprimento, isso é necessário para que o produto com maior dimensão quadrada seja colocado no fundo da caixa e o produto com menor dimensão, no topo.

Passo 3 - Por fim, os produtos devem ser alocados na caixa e alinhados à esquerda de forma que caso 2 produtos caibam lado a lado, os 2 devem ser assim colocados, somando apenas a altura que venha a se sobrepor.

Para elucidar o que foi supracitado, acabei por implementar também no algoritmo um meio simples de gerar uma imagem visual dinâmica de como cada produto será alocado no pacote para envio, segue abaixo 4 exemplos simulados:







Abaixo segue algoritmo em linguagem de programação PHP. 

A utilização é bem simples, como poderá ser observado ao abrir o arquivo calcBox.php . Para calculo de dimensões basta criar um Array com dados de cada produto e suas devidas dimensões individualmente, e enviar esse array para a função calcBox, como na imagem abaixo. Será então retornado um array contendo informações sobre as dimensões da caixa de Frete. 
Note que, existem casos de produtos que devem ser enviados com um espaço para inclusão de Isopor, plastico Bolha ou algum material para absorção de impacto. Logo, cabe ao programador decidir se deseja incluir alguns centímetros a mais ao resultado final.




















Comentários

  1. Excelente solução esta sua, mas e no caso se precisar de mais de uma caixa?

    ResponderExcluir
    Respostas
    1. Olá Luis, bom, são bem raros os casos em que mais de uma caixa é utilizada para o envio de uma única encomenda., mas caso isso aconteça, o script pode ser alterado sem muita dificuldade, para que ao atingir o limite de altura que é estipulado pelos correios, as mercadorias remanescentes sejam estocadas numa nova caixa (PS. Não lembro se inseri alguma exceção para esses casos). Mas como falei isso é algo bem raro de acontecer, e mesmo que aconteça as medidas não vão ter grande impacto no calculo do preço final visto que mesmo que sejam mais de uma caixa o volume é o peso acabam sendo o mesmo.

      Excluir
  2. O link está indiponivel. Tem algum outr o link para download

    ResponderExcluir
    Respostas
    1. Olá, obrigado pela correção. Realizei o upload no 4shared. segue o link: https://www.4shared.com/zip/CcpoCPjwei/calcBox.html

      Excluir
    2. Este comentário foi removido pelo autor.

      Excluir
  3. Tbem achei essa class: https://github.com/dvdoug/BoxPacker

    ResponderExcluir
  4. Olá, onde eu coloco a quantidade de itens ? por exemplo tenho 100 seringas...

    ResponderExcluir
    Respostas
    1. Olá Lucas, como todos os calculos são feitos a partir de uma array ($_cart_), então não é necessário o numero de itens. Se você usar: $__num_itens = count( $_cart_ );
      você já sabera o número de itens que foram calculados.

      Excluir
  5. Boa tarde, o link esta indisponível, esse código ainda funciona? ou já temos algo mais atual?

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Dicas para Iniciantes - Clash of Clans

Este post visa apenas expor algumas dicas e experiências vividas até o momento no jogo Crash of Clans, desenvolvido para aparelhos da Apple, é indicado para quem não conhece o game ainda ou para quem apenas quer ler algumas dicas e experiências (ao fim) .  Sou o membro Osians  integrante do Clan Unrated.

How to play Clash of Clans on PC

A few days ago I was looking for a way to play Clash of Clans on my Desktop PC, but I just found fakes and links to surveys. After some frustrations I discovered that Clash of Clans now is available for Google Android, so I think that an easy way to play this game is to install an Android emulator on PC. There's a lot of Android emulator over the internet and after testing a bunch of these last month I conclude that the best choise is BlueStacks .  (You can download it at  http://www.bluestacks.com/  ) Note that I'll not teach you how to install it because there's a lot of tutorials and how-to's over the internet. - After install the emulator just execute it;  - You need to set up this, the system will ask you about a google account( if you haven't, go ahead and do one ); - Finally, into the Android emulator go to the Google Shop, search for Clash of Clans and install it. If the tip above is not clear or if you have any doubt, please let me know.

Rastreamento de Pedidos : Correios - PHP , API + XML

RESUMO Esse documento visa ensinar como implantar o rastreamento de mercadorias dos correios em um Website utilizando para isso a linguagem de programação PHP. Caso você queira apenas rastrear um Objeto dos Correios, pode fazer isso através do site Sooho clicando aqui  ou através do site dos Correios . Nota importante: Mediante as alterações de 2017 nos serviços dos correios, eu recomendo fortemente que use o tutorial do seguinte link: http://sooho.com.br/2017/03/24/rastreamento-de-pedidos-correios-php-soap/   Ele lhe dará uma solução de rastreamento definitiva e valida a longo prazo.

Bolo gelado de Maracujá com cobertura de Marshmallow frio e geleia de Brilho

Hoje um amigo na acadêmia pediu-me uma receita de bolo de maracujá, então, para " não deixar esse blog muito monótono " vamos aprender uma receita de bolo gelado de maracujá. =] (Foto ilustrativa retirada do site Anamaria  http://mdemulher.abril.com.br/revistas/anamaria/  ) O Bolo ou Torta de Maracujá (chame-o como quiser) é o que pode ser visto na foto acima. MASSA 06 ovos separados 02 xícaras (chá) de açúcar 03 xícaras (chá) de farinha de trigo ½ xícara (chá) de água 01 xícara (chá) de suco de maracujá 01 colher (sopa) de fermento em pó RECHEIO 01 lata de creme de leite s/ soro gelado ½ lata de leite condensado gelado 1/3 lata de suco de maracujá 01 colher (sopa) de emulsificante ** polpa de Maracujá MARSHMALLOW FRIO 03 Claras 09 colheres (sopa) cheia de açúcar 01 colher (sopa) cheia de emulsificante ** essência de baunilha á gosto GELEIA  DE BRILHO ½ xícara (chá) de água ½ xícara

Delphi - Inserir valor Moeda no TEdit

Estive pesquisando meios de usar um TEdit no Delphi com formatação como a dos Bancos em Moeda, para um Projeto antigo meu. Porém, achei apenas uma postagem falando sobre o assunto. (Link segue nas fontes) Mas, apesar de fazer o que eu queria, o código era um tanto complicado, pois da forma que estava seria necessário refazer o mesmo para todos os TEdits que eu fosse usar para inserir valores monetários além de ter que usar 2 eventos de cada TEdit ( OnkeyPress e OnChange ). Então, baseado nesse código criei uma pequena Procedure para fazer essa formatação de maneira simples. Para isso, basta passar como parâmetro o TEdit que deve ser formatado e o Key do teclado que será passado ao mesmo. Segue código comentado abaixo.

Desbloqueando Nintendo Wii 4.3

Bem, este não é um tutorial de como destravar seu aparelho Wii, visto que existem uma gama imensa de tutoriais na web descrevendo isso em passos simples, este artigo apenas visa mostrar as minhas experiências no destravamento de um novo Nintendo Wii Preto 4.3e. Ao final deste post deixarei as fontes que utilizei para desbloqueio do mesmo. Em agosto de 2011 minha irmã foi à Europa e por lá encontrou um nintendo Wii novo Preto com Motion Plus  super barato que vem por padrão na versão 4.3e. O Grande problema é que ele é bloqueado para região Europeia. A principio eu não queria ficar a cargo de desbloquear o aparelho. E fui até uma loja especializada consultar o valor de desbloqueio, que ficava em R$200,00 ... um preço salgado visto que o aparelho não custa tudo isso. O jeito é tentar desbloquear por conta própria, então fui pesquisar como fazer isso através da internet. Infelizmente - e diferente de Sony e Microsoft - a Nintendo divide seus consoles por Regiões, sendo estas America(

AppCake no lugar do Installous ( Outdated Version )

Uma vez que o Installous foi descontinuado e vive a emitir a todo momento a mensagem " Installous - Outdated Version " , a solução mais simples e pratica é troca-lo por uma app com as mesmas características, no caso o AppCake . Podemos instalar o AppCake através do Cydia . Vou ser rápido quanto a instalação do mesmo neste post visto que a instalação é simples. vamos aos passos: 1 - abra o Cydia e acesse Manage ; 2 - acesse Source toque em Edit e em seguida toque em Add (no canto superior esquerdo da tela); 3 - escreva  http://cydia.iphonecake.com e clique em Add Source ; 4 - Apos a instalação da fonte, volte ao cydia acesse Search e digite AppCake , toque na Aplicação que aparece no resultado e em seguida toque em Install no canto superior direito da tela.

Rastreamento de Pedidos : Correios - PHP + SOAP

Nota Importante:  Olá, esse mesmo artigo encontra-se atualizado em um novo site de minha autoria, o  Sooho   http://sooho.com.br/2017/03/24/rastreamento-de-pedidos-correios-php-soap/ , dêem preferência ao conteúdo ali contido, visto futuramente este blog ficara obsoleto. Obrigado.  O Código que se segue, é uma alternativa para rastrear objetos do Correio através do PHP com a tecnologia SOAP . Uma vez que a API mais antiga dos correios - PHP + XML -, não tem funcionado corretamente, resolvi por publicar esse método simples que espero ser de alguma ajuda a quem necessite. Codígo melhorado no Github:   https://github.com/osians/rastreamento-de-pedidos/ Bom, eu não vou me ater a uma extensa explicação sobre os detalhes do código, apenas gostaria de frisar algumas notas importantes.    - Primeiro:  se você pretende utilizar a API dos correios, tire um tempo e vá até uma Agência e solicite sua senha e username para uso da mesma.   - Segundo: A documentação para compree