[RESOLVIDO]O if retorna valor irregular

Olá,

Alguém sabe informar porque o if abaixo está trazendo o segundo valor (else):
O primeiro - if (({pg_rc} == ‘P’) corresponde ao tipo de conta - P (pagar) e o segundo if ({tipo_pgto} == ‘T’) corresponde ao tipo de pagto T (Total) e no momento de fazer a insert em outra tabela traz o segundo histórico.

if (({pg_rc} == ‘P’) && ({tipo_pgto} == ‘T’)) {
$_historico = ‘Pagto valor total - doc. num. ‘.{documento}.’ de ‘.{parceiros}.’.’;
} else {
$_historico = ‘Pagto valor parcial - doc. num. ‘.{documento}.’ de ‘.{parceiros}.’, -> Saldo de ‘.$_saldo_restante.’.’;
}

Agradeço a colaboração.

Para entrar no “if”, é preciso que {pg_rc} seja igual a P e {tipo_pgto} seja igual a T.
Quando o valor destes campos ao executar a aplicação:?

Nesta lógica, está trazendo o segundo pois o registro avaliado não possui os dois status simultaneamente, ou o {pg_rc} é ‘P’ ou {tipo_pgto} é ‘T’… isto de acordo com sua lógica usada.

Olá,

Ele insiste em trazer parcial no histórico mesmo selecionado T de Total e ainda não insere dois campos que vejo na aplicação Controle. Vejo também o P de Pagamento.

Olá Joelton,

Ele insiste em trazer parcial no histórico mesmo selecionado T de Total e ainda não insere dois campos que vejo na aplicação Controle. Vejo também o P de Pagamento.

Olá,

Dessa forma dá certo, mas …

No banco fica certo:

voce colocando o && os dois tem que estarem selecionados, se selecionar apenas um vai fazer a segunda instrução
{pg_rc} = ‘P’;
{tipo_pgto} = ‘T’;

if (({pg_rc} == ‘P’) && ({tipo_pgto} == ‘T’))
{
$_historico = ‘Total / pagamento"; // pega que atende o IF
}
else
{
$_historico = ‘Parcial’; //Não pega que não atende o IF
}

{pg_rc} = ‘P’;
{tipo_pgto} = ‘’;

if (({pg_rc} == ‘P’) && ({tipo_pgto} == ‘T’))
{
$_historico = ‘Total / pagamento"; // não pega que não atende o if
}
else
{
$_historico = ‘Parcial’; //Pega este que o T esta em branco
}

Nã duvida coloca echo nas variáveis e exit; para interromper, só para ter certeza que esta recebendo informações nas variáveis

Olá Jair,

Pesquisei no Forum e não visualizei nada sobre o echo para saber se está preenchendo, poderia me mostrar onde no SC faço isso.

Grato!

coloca na sua aplicação mesmo, antes do if , ai ele vai mostrar o conteúdo que recebe e o exit interrompe antes de acessar o if, ex;

echo "
PG_RC = ".{pg_rc};
echo “
TIPO_PGTO =”. {tipo_pgto};
exit;
if (({pg_rc} == ‘P’) && ({tipo_pgto} == ‘T’)) {
$_historico = ‘Pagto valor total - doc. num. ‘.{documento}.’ de ‘.{parceiros}.’.’;
} else {
$_historico = ‘Pagto valor parcial - doc. num. ‘.{documento}.’ de ‘.{parceiros}.’, -> Saldo de ‘.$_saldo_restante.’.’;
}

1 Curtida

Olá Jair,

Executo e depois de informar um Id de lançamento ocorre o seguinte:

Parse error: syntax error, unexpected ‘’$this->ctacorrente’’ (T_CONSTANT_ENCAPSED_STRING), expecting ‘,’ or ‘;’ in C:\Program Files\NetMake\v9\wwwroot\scriptcase\app\MeuFinanceiro\ctlctos_bx_form\ctlctos_bx_form_apl.php on line 4329

echo "
PG_RC = ".{pg_rc};
echo "
TIPO_PGTO = ”.{tipo_pgto};
exit;

// Lançamento do pagamento do documento

$_saldo_restante = {saldo} - {valor_pago};
sc_format_num($_saldo_restante, ‘.’, ‘,’, 2, ‘S’, ‘1’, ‘R$’);

if (({pg_rc} == ‘P’) && ({tipo_pgto} == ‘T’)) {
$_historico = ‘Pagto do valor total - doc. num. ‘.{documento}.’ de ‘.{parceiros}.’.’;
} else {
$_historico = ‘Pagto do valor parcial - doc. num. ‘.{documento}.’ de ‘.{parceiros}.’, -> Saldo de ‘.$_saldo_restante.’.’;
}

$insert_table = ‘mov_ccorrente’;
$insert_fields = array(
‘cc_id’ => “’{ctacorrente}’”,
‘data’ => “’{data_pgto}’”,
‘cta_contab_D’ => “’{cta_debito}’”, // Fornecedor
‘cta_contab_C’ => “’{cta_credito}’”, // Conta Corrente
‘valor’ => “’{valor_pago}’”,
‘documento’ => “’{documento}’”,
‘historico’ => “’ $_historico '”,
‘tipomov_id’ => “’{tipo_mov_saida}’”,
‘empresa_id’ => “’{empresa_id}’”,
);
// Insert record
$insert_sql = ‘INSERT INTO ’ . $insert_table
. ’ (’ . implode(’, ‘, array_keys($insert_fields)) . ‘)’
. ’ VALUES (’ . implode(’, ', array_values($insert_fields)) . ‘)’;

sc_exec_sql($insert_sql);

pode ser a aspa que aparece diferente, tente assim

echo "<br>PG_RC = ".{pg_rc};
echo "<br>TIPO_PGTO = ".{tipo_pgto};
exit;
1 Curtida

Img

E o que retorna é isso mesmo.

Mas se o campo estiver marcado Desabilitado (como estava):

Img1

Ok, então esta recebendo as variaveis…

agora muda e coloca:

// note que removi o parenteses dentro das condições deixando apenas o do if
if({pg_rc} == 'P' && {tipo_pgto} == 'T')  
{
	echo "Pagto Total";
}
else 
{
	echo "Pagto Parcial";
}
exit;
1 Curtida

Carreguei outro campo para o Pg_Rc e habilitei para poder carregar o tipo.

Valeu,

Obrigado!!!

as vezes um detalhe simples perdemos horas, eu ainda acho que a melhor forma de debug é de colocar echo / exit , assim vai passando pela aplicação e sabendo o que esta acontecendo

Manual do PHP - https://www.php.net/manual/en/control-structures.if.php

An other way for controls is the ternary operator (see Comparison Operators) that can be used as follows:

<?php $v = 1; $r = (1 == $v) ? 'Yes' : 'No'; // $r is set to 'Yes' $r = (3 == $v) ? 'Yes' : 'No'; // $r is set to 'No' echo (1 == $v) ? 'Yes' : 'No'; // 'Yes' will be printed // and since PHP 5.3 $v = 'My Value'; $r = ($v) ?: 'No Value'; // $r is set to 'My Value' because $v is evaluated to TRUE $v = ''; echo ($v) ?: 'No Value'; // 'No Value' will be printed because $v is evaluated to FALSE ?>

Parentheses can be left out in all examples above.