Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jonatas Oliveira_26707

Formula para cubagem frete correis

Recommended Posts

Para quem não sabe a cubagem é dada por Largura x Comprimento x Altura = Peso cubagem.

Se o peso cubagem for maior que o Peso em kg do produto, vale o peso da cubagem.

 

Sabendo disso no meu sistema de frete me deparei com a seguinte situação:

 

Ao adicionar os itens no carrinho seus valores (altura, largura e comprimento) são enviados para fazer o calculo do frete.

Isso com apenas 1 produto, mas assim que adicionamos mais de 1 é preciso fazer um calculo para que a soma dos lados, largura e comprimento não fiquem exageradamente grandes, mas sim o valor correto.

 

Ex.:

2 produtos com 20x10x5 de comprimento, largura e altura respectivamente.

Eles tem a mesma área, mas o seria seria enviar os seguintes números para cubagem: 40x10x5 ou 20x20x5.

 

Acontece que para tanto é preciso de uma formula, pois são produtos de tamanhos muito variados.

Gostaria de saber se alguem pode me dar uma luz!!

 

Agradecido! Abraços!

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não existe uma fórmula... na realidade é mais uma lógica, o que eu faço é imaginar como empilharia tudo no mundo real, então começo pegando o produto que tem a maior largura e comprimento (que seria o pacote que fica na base de tudo), após isto somo todas as alturas, eu sempre faço assim, agora veja que existem dimensões máximas tb nos correios, então isto tem que ser levado em conta no momento de calcular o frete.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ESerra

 

Foi exatamente assim que comecei a escrever meu código, pensando nessa lógica.

Mas veja onde empaquei:

A soma dessas alturas não podem ultrapassar 105cm não é isso?

Então eu pensei no seguinte... Caso essa altura ultrapasse os 105cm, eu multiplicaria o valor total altura(maior que 105) pelo comprimento e largura. Daí eu teria a cubagem.

Por ex.: 106x20x18 = 38160 (comprimento x largura x altura respectivamente).

 

O que eu teria que achar agora seria um valor menor que 106 que juntamente com outros valores de altura e largura totalize os mesmo 38160 para poder calcular o frete, já que o importante é a multiplicação dos lados para o calculo da cubagem.

 

Gerando a formula: x*y*z = 38160

Uma solução poderia ser 100 * 21 * 18,17 = 38157

 

O valor não é o mesmo mas é bem aproximado. Seria uma diferença de poucas gramas na hora de calcular o frete.

 

Eu só acho que explicando meu problema acabei de achar a solução rsrs.

 

O que você acha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando isto acontece eu pego a segunda encomenda que tem a maior largura e comprimento e vou montando outro pacote com ela, diminuindo a altura do primeiro até ele ficar no máximo permitido pelos correios. Mas isso tudo não é exatamente preciso, porque "no mundo real" a pessoa que vai montar o pacote pode pensar eles de forma diferente e ai o cálculo vai ser outro, enfim, é uma coisa complicada, esse negócio de cubagem em si é meio inútil, a menos que a pessoa venda isopor pelos correios, 90% dos casos o que vai prevalecer é o peso mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É..

 

Realmente na hora de embalar não vai ficar exatamente igual, mas pelo menos dará uma aproximação mais correta, por que a minha preocupação é em não ficar muito caro o frete e espantar os clientes, e nem ter prejuizo depois que ele finalizar a compra., pois um dos produtos que ficarão a venda serão travesseiros, e eles ocupam bastante espaço, e são leves.

 

Mas acho que resolvi o problema, vou criar um algorítimo baseado no meu segundo post.

 

Vou testar aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse calculo funcionou perfeitamente pra mim:

 

Exemplificando com 02 Produtos na cesta de compras (AxLxP em cm):

01 unidade com 10 x 80 x 70
01 unidade com 15 x 90 x 40
Medidas Totais das 2 unidades: 25 x 170 x 110

  • Altura: Soma da altura de todos as unidades na cesta exemplo: Se tiver 2 unidades na cesta, um com 10 cm de altura e outro com 15cm de altura irá totalizar 25cm)

  • Largura: Soma da largura de todos as unidades da cesta dividido pela quantidade de unidades, exemplo:
    • Se tiver 2 unidades na cesta, um com 80cm de largura e outro com 90cm de altura irá totalizar 85cm)

  • Comprimento (profundidade): Soma do comprimento de todos as unidades da cesta dividido pela quantidade unidades, exemplo:

Se tiver 2 unidades na cesta, um com 70cm de largura e outro com 40cm de altura irá totalizar 55cm)


Resultado final:
Altura: 25cm
Largura: 85cm (170cm /2 unidades)
Comprimento: 55cm (110cm /2 unidades)

Resumo do cálculo das medidas quando a cubagem está habilitada:
Comprimento: Soma do comprimento de todos os produtos divididos pelo total de itens na cesta.
Largura: Somada largura de todos os produtos divididos pelo total de itens na cesta.
Altura: Soma da altura de todos os itens na cesta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz o seguinte:

 

1 - Calcula a cubagem de cada produto assim: altura x cumprimento x largura x peso.

 

2 - Soma toda a cubagem.

 

3 - Depois calcula o peso total de cada produto e soma todos.

 

4 - Já temos o valor de total_cubagem e o peso_total.

 

5 - Você vai calcular a raiz cubica da cubagem

 

6 - Agora vamos preparar os dados a enviar pro correios

 

7 - Cumprimento: O valor do cumprimento sera a seguinte, se a raiz cubica for menor que 16 você coloca 16 caso contrário será o valor do resultado da raiz cubica.

 

8 - Largura: O valor largura será a seguinte se a raiz cubica for menor que 11 o valor sera 11 caso contrario sera o valor da raiz cubica.

 

9 - Altura: Vai ser o calculo seguinte: (total_cubagem / (cumprimento x largura));

 

10 - Peso: Sera o peso total do seu carrinho.

 

Segue exemplo de código de pra você mandar pros correios:

if(!empty($this->cep)){

            $frete = array();
            
            $this->cep = preg_replace('#[^0-9]#','',$this->cep);

            $raiz_cubica = round(pow($this->total_cubagem,(1/3)));

            $frete['peso']	= $this->total_peso; // em kilos

            if($raiz_cubica < 16) $frete['cumprimento'] = floatval(16);
            else $frete['cumprimento'] = floatval($raiz_cubica); // em centimetros
            
            if($raiz_cubica < 11) $frete['largura'] = floatval(11);
            else 
                $frete['largura'] = floatval($raiz_cubica); // em centimetros
            
            $frete['altura'] = round($this->total_cubagem / ($frete['cumprimento']*$frete['largura'])); // em centimetros
            
            $this->frete = $frete;

}    

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.