Fórum OpenCart Brasil

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

Suporte para extensões de Formas de Envio
#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.
#52639
veteranodf escreveu: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.
veteranodf, como eu disse, eu já chequei e re-chequei as medidas e pesos que estavam no carrinho de compras, quando houve o erro. Segue abaixo as telas da configuração do sistema da loja, de pesos e medidas:

Imagem

Imagem
#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
#52657
veteranodf escreveu: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
veteranodf, não faço ideia porque a opencart não mostra mais casas decimais no peso e medida. Ela simplesmente preenche dessa forma... Não estou utilizando nenhuma máscara no campo... Talvez seja alguma configuração, em algum lugar, padronizando o uso com 2 casas decimais. Dei uma procurada, mas não encontrei essa definição em nenhum lugar no admin. Eu simplesmente preencho as dimensões com 900, 7 e 2.3 e a loja completa dessa forma ao salvar, é automático.

Vou fazer um teste trocando a medida desse carrinho de produtos específico, vamos ver no que dá. Porém, quero lembrar uma coisa: o problema só acontece quando o carrinho tem muitos itens. Quando são poucos dos mesmos itens, o valor do frete é calculado corretamente.
#52660
veteranodf, fiz os testes na loja virtual e passei alguns produtos do carrinho, que está dando frete caro, para centímetros e quilogramas. Não adiantou nada... O frete continua sendo calculado exorbitadamente. Enquanto a mesma encomenda calculada no site dos Correios, por PAC, custa R$ 40,00, na loja ela é calculada por mais de R$ 120,00. Não sei mais o que fazer! :-(
#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.
#52672
Manoel Vidal escreveu:@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.
Manoel, é possível fazer a atualização dessa loja opencart para a versão mais nova disponível, de forma segura, sem precisar recadastrar todos os produtos, configurar tudo do zero?
#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;
}

Gente preciso de ajuda urgente. Na migraç&a[…]

Caro @reds , muito obrigado pela resposta.

PHP 8+ incompatibilidade

Toda tradução para a versão 3[…]

Ola @alex3257 Se você precisa apenas ver […]