Campos com mascaras não integram

Pessoal, tenho esse script(em anexo) ao qual salvo os dados do meu formulário no Protheus.

Tenho 5 campos de valor na qual tive que colocar mascaras para os usuários não informarem errado, porém quando está com a mascara não consigo salvar no Protheus, se eu retiro funciona.

Um dos campos é este: var CF_B1_CONV = hAPI.getCardValue("cB1_CONV"); com a seguinte mascara (mask="9.999,999")

Tentei fazer essa fução porém não deu certo: CF_B1_CONV = CF_B1_CONV .split(".").join(""); CF_B1_CONV = CF_B1_CONV .split(",").join("");

Ao fazer isso ele me retorna o campo vazio

1 curtida

@Quemuel,

Cria uma função assim:


function convertStringFloat(valor){
    valor = String(valor);
    if (valor.indexOf(',') == -1) {
    } else {
        valor = valor.split(".").join("").replace(",",".");
    }
    valor = parseFloat(valor).toFixed(3);

    return valor;
}

Dai chama ela na sua variável:


var CF_B1_CONV = hAPI.getCardValue("cB1_CONV");
CF_B1_CONV = convertStringFloat(CF_B1_CONV);

@Gabriel, coloquei um log, e o valor foi retornado (NaN). O Script é o que está em anexo. Abs

Anexa o script atualizado pra vermos como está.

Adicionei novamente

Atualizei o código. Você tem que pegar o valor primeiro utilizando o hAPI.getCardValue();

Deu certo agora @Quemuel?

@Gabriel, deu não! Ainda retornando NaN

Se você colocar isso no começo do script de serviço:


log.info("#### TESTE ####");
log.info(hAPI.getCardValue("cB1_CONV"));

Veja se aparece algo no log.

Agora testa assim:


log.info("#### TESTE ####");
log.info(hAPI.getCardValue("cB1_CONV"));
log.info(convertStringFloat(hAPI.getCardValue("cB1_CONV")));

#### TESTE #### 1.234,567 1234.567 @Gabriel, retirar a (,)funcionou faltou o ponto.

Se retirar o ponto, vai dar problema nos valores. O ponto é o separador decimal. O Protheus somente aceita nesse formato “999999.99”

@Gabriel, no configurador do Protheus esse campo está configurado com formato: @E 9,999.999, tamanho: 8, decimal: 3.
Fiz um teste aqui colocando: var CF_B1_CONV = hAPI.getCardValue(“cB1_CONV”).substring(0,4); dessa forma ele gravou, já se eu coloco var CF_B1_CONV = hAPI.getCardValue(“cB1_CONV”).substring(0,5); ele já me dá erro. Achei estranho porque o tamanho do campo é 8

Altere a função pra isso:


function convertStringFloat(valor){
    valor = String(valor);
    if (valor.indexOf(',') == -1) {
    } else {
        valor = valor.split(".").join("").replace(",",".");
    }
    valor = parseFloat(valor).toFixed(3);

    return valor;
}

@Gabriel, se eu coloco o valor fixo no sript: var CF_B1_CONV = “9999.123”; ele grava ok no Protheus, de outro jeito não vai!

Você está passando o valor como string?

Como você está recebendo esse campo no método updprod do WS do Protheus?

WsData cf_B1_CONV As Float

Você está passando dessa forma?

 var CF_B1_CONV = "9999.123";

Está passando como string, muito estranho.

Estou tentando adicionar meu método do Protheus aqui, porém está dando erro ao adicionar anexo.