Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

Suporte para extensões de Formas de Envio
#52623
O problema já te adianto que não é problema no módulo e sim nas configurações que você informou no módulo, produto, unidade de peso ou unidade de medida na administração da loja. Tire um print screen do cadastro do produto onde tem o peso e as dimensões e também da unidades de medida e unidade de peso desse produto.
#52638
Como eu te falei o problema e com configuração, se não tiver configurado corretamente a unidade de pesos e unidade de medidas o opencart vai converter esses dados incorretamente para mais ou para menos, você tem um produto com 900 milímetro de comprimento e 100 gramas se não tiver configurado corretamente a unidade Grama e Milímetro vai aumentar muito o peso. Verifique em Sistema->Localização->Unidade de Medidas e Sistema->Localização->Unidade de Pesos.
#52656
Analisei as telas postadas e não encontrei nada relevante, a única coisa que achei estranho é porque o peso e as medidas informadas no produto não estão obedecendo a unidade de peso e unidade de medida, você por acaso editou a tabela do banco de dados referente a essas informações ou esta utilizando alguma mascara para esses campos?; Olhe abaixo como deveria tá as informações no cadastro de produtos.

Dimensões (C x L x A) 900.00 x 7.00 x 2.30
Deveria ser
Dimensões (C x L x A) 900.00000000 x 7.00000000 x 2.30000000

Peso 20.00
Deveria ser
Peso 20.00000000

Outra coisa a maioria dos módulos foram feitos para trabalhar com Kg e Cm, aconselho você atualizar para esses padrões, talvez o erro não persista. Vlw
#52664
@maecar Uma possibilidade é que o próprio módulo do Correios pode não estar empacotando os volumes para cálculo corretamente, mas como assim empacotando?
Note que esse módulo para a versão 1.4.x é mais antigo que os disponibilizados para a versão 1.5.x, lembro-me que há algum tempo, o Júlio (autor do módulo), modificou a fórmula que o módulo utiliza para calcular vários itens do carrinho (empacotamento), justamente para corrigir a questão do preço exorbitante, pode ser que nas últimas atualizações para versão 1.5, ele não tenha feito a mesma correção para a versão 1.4.
#52674
Infelizmente houve muita mudança da versão 1.4 para versão 1.5, o que de certa forma torna o processo de atualização não muito seguro, principalmente pela incompatibilidade de temas e extensões entre as versões, o melhor caminho seria fazer uma loja do zero, mas quanto a migração do banco para não necessitar recadastra os produtos tem esse artigo (inglês):
http://forum.opencart.com/viewtopic.php?f=2&t=50292

Nesse caso, lembre de fazer essa atualização em uma cópia da loja (com o banco de dados) atual, para não ter problema de ficar com a loja fora do ar.

E lembre-se, os temas e extensões da versão 1.4 não são compatíveis com os da versão 1.5

Espero ter ajudado. :D
#58833
Tambem acontece comigo , o algoritmo de empacotamento , quando pega muitos produtos com medida retangulares diferente ele monta multiplas caixas e por isto o preço sobe. No meu caso estou disposto a travar "máximo = uma caixa dimensão maxima" e caso venha a necessitar de 2 caixas ai eu pagaria pelo frete da segunda. So que não estou conseguindo fazer isto. alguem teria alguma dica se seria possivel travar o incremental de caixas do algoritmo =1? copiei ele abaixo .
Sei dos riscos sobre esta açao, mas o perfil de compra dos meus clientes minimizam este risco.



muito obrigado!
Mauricio

// 'empacota' os produtos do carrinho em caixas com dimensões e peso dentro dos limites definidos pelos Correios
// algoritmo desenvolvido por: Thalles Cardoso <thallescard@gmail.com>
private function organizarEmCaixas($produtos) {

$caixas = array();

foreach ($produtos as $prod) {

$prod_copy = $prod;

// muda-se a quantidade do produto para incrementá-la em cada caixa
$prod_copy['quantity'] = 1;

// todas as dimensões da caixa serão em cm e kg
$prod_copy['width'] = $this->getDimensaoEmCm($prod_copy['length_class_id'], $prod_copy['width']);
$prod_copy['height']= $this->getDimensaoEmCm($prod_copy['length_class_id'], $prod_copy['height']);
$prod_copy['length']= $this->getDimensaoEmCm($prod_copy['length_class_id'], $prod_copy['length']);

// O peso do produto não é unitário como a dimensão. É multiplicado pela quantidade. Se quisermos o peso unitário, teremos que dividir pela quantidade.
$prod_copy['weight']= $this->getPesoEmKg($prod_copy['weight_class_id'], $prod_copy['weight'])/$prod['quantity'];

$prod_copy['length_class_id'] = $this->config->get('config_length_class_id');
$prod_copy['weight_class_id'] = $this->config->get('config_weight_class_id');

$cx_num = 0;

for ($i = 1; $i <= $prod['quantity']; $i++) {

// valida as dimensões do produto com as dos Correios
if ($this->validar($prod_copy)){

// cria-se a caixa caso ela não exista.
isset($caixas[$cx_num]['weight']) ? true : $caixas[$cx_num]['weight'] = 0;
isset($caixas[$cx_num]['height']) ? true : $caixas[$cx_num]['height'] = 0;
isset($caixas[$cx_num]['width']) ? true : $caixas[$cx_num]['width'] = 0;
isset($caixas[$cx_num]['length']) ? true : $caixas[$cx_num]['length'] = 0;

$new_width = $caixas[$cx_num]['width'] + $prod_copy['width'];
$new_height = $caixas[$cx_num]['height'] + $prod_copy['height'];
$new_length = $caixas[$cx_num]['length'] + $prod_copy['length'];
$new_weight = $caixas[$cx_num]['weight'] + $prod_copy['weight'];

$cabe_do_lado = ($new_width <= $this->largura_max) && $this->somaDimDentroLimite($caixas, $prod_copy, $cx_num, 'lado');

$cabe_no_fundo = ($new_length <= $this->comprimento_max) && $this->somaDimDentroLimite($caixas, $prod_copy, $cx_num, 'fundo');

$cabe_em_cima = ($new_height <= $this->altura_max) && $this->somaDimDentroLimite($caixas, $prod_copy, $cx_num, 'cima');

$peso_dentro_limite = ($new_weight <= $this->peso_max);

// o produto cabe na caixa
if (($cabe_do_lado || $cabe_no_fundo || $cabe_em_cima) && $peso_dentro_limite) {

// já existe o mesmo produto na caixa, assim incrementa-se a sua quantidade
if (isset($caixas[$cx_num]['produtos'][$prod_copy['key']])) {
$caixas[$cx_num]['produtos'][$prod_copy['key']]['quantity']++;
}
// adiciona o novo produto
else {
$caixas[$cx_num]['produtos'][$prod_copy['key']] = $prod_copy;
}

// aumenta-se o peso da caixa
$caixas[$cx_num]['weight'] += $prod_copy['weight'];

// ajusta-se as dimensões da nova caixa
if ($cabe_do_lado) {
$caixas[$cx_num]['width'] += $prod_copy['width'];

// a caixa vai ficar com a altura do maior produto que estiver nela
$caixas[$cx_num]['height'] = max($caixas[$cx_num]['height'], $prod_copy['height']);

// a caixa vai ficar com o comprimento do maior produto que estiver nela
$caixas[$cx_num]['length'] = max($caixas[$cx_num]['length'], $prod_copy['length']);
}
else if ($cabe_no_fundo) {
$caixas[$cx_num]['length'] += $prod_copy['length'];

// a caixa vai ficar com a altura do maior produto que estiver nela
$caixas[$cx_num]['height'] = max($caixas[$cx_num]['height'], $prod_copy['height']);

// a caixa vai ficar com a largura do maior produto que estiver nela
$caixas[$cx_num]['width'] = max($caixas[$cx_num]['width'], $prod_copy['width']);

}
else if ($cabe_em_cima) {
$caixas[$cx_num]['height'] += $prod_copy['height'];

//a caixa vai ficar com a altura do maior produto que estiver nela
$caixas[$cx_num]['width'] = max($caixas[$cx_num]['width'], $prod_copy['width']);

//a caixa vai ficar com a largura do maior produto que estiver nela
$caixas[$cx_num]['length'] = max($caixas[$cx_num]['length'], $prod_copy['length']);
}
}
// tenta adicionar o produto que não coube em uma nova caixa
else{
$cx_num++;
$i--;
}
}
// produto não tem as dimensões/peso válidos então abandona sem calcular o frete.
else {
$caixas = array();
break 2; // sai dos dois foreach
}
}
}
return $caixas;
}