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.
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.
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.
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:
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.
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.
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.
Excelente solução esta sua, mas e no caso se precisar de mais de uma caixa?
ResponderExcluirOlá 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.
ExcluirO link está indiponivel. Tem algum outr o link para download
ResponderExcluirOlá, obrigado pela correção. Realizei o upload no 4shared. segue o link: https://www.4shared.com/zip/CcpoCPjwei/calcBox.html
ExcluirEste comentário foi removido pelo autor.
ExcluirTbem achei essa class: https://github.com/dvdoug/BoxPacker
ResponderExcluirOlá, onde eu coloco a quantidade de itens ? por exemplo tenho 100 seringas...
ResponderExcluirOlá 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_ );
Excluirvocê já sabera o número de itens que foram calculados.
Boa tarde, o link esta indisponível, esse código ainda funciona? ou já temos algo mais atual?
ResponderExcluir