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á.
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.