Sc_action_enable, disable

boa tarde tenho uma consulta assim com os campo tipo e botoes de texto na barra de acoes barra de acoes :
tipo botao texto 1 , botão texto 2
set tipo = 0 , deixo botão texto 1 como enable e o dois como disable
se tipo = 1, deixo botão texto 1 como disable e o dois como enable
no evento on record coloquei esse if , porem na consulta cointinua aparecendo os dois botoes ativos

algum pode me ajudar nisso
desde ja agradeço

Por favor, cole o código do envento onRecord aqui.

if ({Mebi} == 0) {
sc_actionbar_desable(“actbtn_Media”);
} else {
sc_actionbar_enable(“actbtn_Media”);
}

if ({Mebi} == 0) {
sc_actionbar_disable(“actbtn_Media”);
} else {
sc_actionbar_enable(“actbtn_Media”);
}

tente ao contrário:

if ({Mebi} != 0) {
    sc_actionbar_enable("actbtn_Media");
} else {
    sc_actionbar_disable("actbtn_Media");
}

[quote=“InfinitusWeb, post:5, topic:35281”]

if ({Mebi} != 0) {
    sc_actionbar_enable("actbtn_Media");
} else {
    sc_actionbar_disable("actbtn_Media");
}

nado deu certo Haroldo, mesmo assim agradeço

Então parece que a macro não esta atuando.

Confirma o nome certinho do botão.

Sugiro entrar em contato com bugs@scriptcase.com.br

ok obrigado mais uma vez pela atenção

João, não sei se vc ainda está com esse problema na aplicação, mas entendo que o resultado que vc procura é algo assim…

Assim como o Haroldo sugeriu, reveja o nome dos campos, ou até mesmo o conteúdo recebido em “{Mebi}”, pois utilizo um código semelhante e funciona. Veja:

[CODE]
//trata cor do campo ‘FlagDesemb’ e desabilita botão na barra de ações
if ({FlagDesemb} == ‘N’) {
sc_field_color (“FlagDesemb”, “#7486ad”);
sc_actionbar_disable(“despacho”);
} else {
sc_field_color (“FlagDesemb”, “”);
sc_actionbar_enable(“despacho”);
}
//

[CODE]

Abraço.

obrigado , vou tentat

Boa tarde.
Caro, já passei por casos parecidos a esse e a conclusão que cheguei depois de romper a cabeça é que assume 0-False e 1-True, por isso sempre a comparativa eu faço da seguinte forma e nunca usando o zero:

if (!{Mebi} == 1) { 
   // aqui seria falso
} else {
   // aqui verdadeiro
};

Por que? pois:
True == True ==> True; equivale a dizer True == 1 ==> True
True == False ==> False; equivale a dizer True == 0 ==> False

True e False são booleanos e tem valor binário diferente de 1 e 0 que são números.

=== True ou False
== 1 ou 2

$flag = 0;

If ($flag == 0) // não significa que $flag é False.

If ($flag !== False) // resulta em verdadeiro

1 Curtida

Pois, Haroldo a verdade que assim como estou a indicar funciona, alem disso, por exemplo eu uso em controle CheckBox nas aplicações de SC e os valores que dou sempre independentemente que o tipo de dato do banco (Postgres) é Boolean nestas aplicações dou 1 para True e 0 para False, nunca uso de forma explicita TRUE ou FALSE e quando grava ou salva SC converte a True ou False.

Veja, eu era programador de Delphi com MS SQL há muito tempo atrás, e antigamente e hoje em MSSQL não existe o tipo de dato Boolean, neste caso se usa o tipo Bit (0 ou 1) de aqui quando comecei a usar SC tomei estes valores para Boolean e funcionou faz já 10 anos.

De aqui fiz a dedução de que os controle e variaveis Boolean com zero asume o sistema que é False e que 1 toma verdadeiro. Podes experimentar e verás que a funcionalidade é a mesma segundo o contexto.

Se comparas uma variável numérica com 1 se comporta como um numero e se comparas um Boolean com 1 se comporta como True. Assim é PHP…

Veja a referência que da Copilot de MS.

Não é possível imprimir FALSE e TRUE, por isso no echo o PHP converte.

image

No MySQL/MariaDB o FALSE e TRUE são salvos em seu modo binário.

Como diz a IA.

O PHP converte, ou seja ele
muda o valor na hora da impressão de binário para um valor ASCII imprimível.

Mas nas comparações ele usa o binário, por isso temos que usar === (três iguais) na comparação com booleano.

Já que gosta de consultar IA, vai aí uma consulta de maneira mais completa.
image

image

Caro, a minha intenção é esclarecer a questão desde o ponto de vista meu, minha experiência e o que vi em Internet, na IA, google e no manual de PHP, eu sou desenvolvedor ou programador empírico, nada mais.
Nunca usei MySQL nem MariaDB, falei de Microsoft SQL Server (MSSQL) e Postgres que sim tenho alguma experiencia nestes SGBD, MSSQL não tem tipo de dato Boolean, só Bit (0 e 1) e SC trata a ele como Booleam, já Postgres sim, entretanto reafirmo o que diz antes.
Em PHP se a variavel é Boolean e comparas com um valor 0 ou 1, neste contesto se converte o 1 em True e 0 em False, senão confirma para que veja, eu não tenho nada mais que aportar.

Por isso em esta condição

if ({Mebi} != 0) {
    sc_actionbar_enable("actbtn_Media");
} else {
    sc_actionbar_disable("actbtn_Media");
}

seria equivalente a dizer se {Mebi} = TRUE,

TRUE == TRUE  ou também TRUE == 1;    aqui devolve TRUE porque são equivalentes
TRUE == FALSE ou também TRUE == 0;    aqui devolve FALSO porque não são equivalentes

Depende se está usando == ou ===

1 Curtida

Olha que interessante o que achei no manual:
image

1 Curtida

È o que tentei explicar, mas…

Como técnico, tenho que saber exatamente como funciona a linguagem que trabalho.

E a própria IA aconselha o mesmo:

1 Curtida

🚀 O Scriptcase 9.12 já está disponível! Veja as novidades aqui 👉🚀 Na próxima segunda (24/02), o Scriptcase 9.12 será lançado! Veja as novidades antes de todo mundo 👉