Mestre / Detalhe - Inserindo registro duplicado

Olá,

Estou fazendo uma aplicação de vendas onde tenho um campo no formulário principal que faz a leitura do código de barras (TAG) e após ler faço um INSERT no formulário DETALHE que é onde ficam os itens

Fiz um evento ajax onChange para quando o foco sair do campo TAG ele execute o comando abaixo

---- EVENTO AJAX ONCHANGE ----

sc_lookup(busca_tag, “SELECT
refbas,
ref_item,
desc_item,
desc_cor,
tam,
tag
FROM
tab_tag t
WHERE
(tag = '”.{tag}."’)");

sc_lookup(busca_preco, “SELECT
preco
FROM
tabela_preco_itens p
WHERE
(refbas = '”.{busca_tag[0][0]}."’) AND
(ref_item = ‘".{busca_tag[0][1]}."’)");

if(isset({busca_tag[0][0]})){

	$sql_insert = "INSERT INTO vendas_itens(qtde, refbas, ref_item, desc_ref, tam, cor, valor_unit, valor_total, tag, vendas_idvendas)

	VALUES ('1', '".{busca_tag[0][0]}."', '".{busca_tag[0][1]}."', '".{busca_tag[0][2]}."', '".{busca_tag[0][4]}."', '".{busca_tag[0][3]}."', '".{busca_preco[0][0]}."', '".{busca_preco[0][0]}."', '".{busca_tag[0][5]}."', '".{idvendas}."')";

sc_exec_sql($sql_insert);

{tag} = “”;
sc_set_focus(‘tag’);
sc_ajax_javascript (‘refresh_itens1’);

}else{
sc_set_focus(‘tag’);
sc_alert(“TAG não encontrada”);
}

O problema é que quando faço isso ele insere duas vezes o registro na aplicação de itens

Alguém sabe o que pode ser?

Veja na ajuda do SC.
Eventos Ajax não estão nas listas.

Escopo da Macro
Aplicação Calendário Aplicação Formulário Aplicação Controle

Então,

Em aplicação formulário tem os eventos abaixo, e o que estou usando é o Onchange (que só tem ele nos Eventos Ajax)

ajaxFieldonBlur
Onchange
OnClick
OnFocus
onAfterDelete
onAfterDeleteAll
onAfterInsert
onAfterInsertAll
onAfterUpdate
onAfterUpdateAll
onBeforeDelete
onBeforeDeleteAll
onBeforeInsert
onBeforeInsertAll
onBeforeUpdate
onBeforeUpdateAll
onClick
onScriptInit
onLoad
onNavigate
onLoadRecord
onRefresh
onValidate
onValidateSuccess

Estava olhando na Ajuda do SC e no tópico macros -> Macros x Aplicações x Eventos

E na aplicação formulário no evento OnChange suportas as macros abaixo

sc_ajax_javascript
sc_ajax_message
sc_begin_trans
sc_calc_dv
sc_commit_trans
sc_connection_edit
sc_connection_new
sc_date_conv
sc_date_dif
sc_date_dif_2
sc_date_empty
sc_decode
sc_encode
sc_error_exit
sc_error_message
sc_exec_sql
sc_field_display
sc_field_readonly
sc_format_num
sc_format_num_region
sc_get_language
sc_get_regional
sc_get_theme
sc_include
sc_include_library
sc_label
sc_lookup
sc_reset_connection_edit
sc_reset_connection_new
sc_reset_global
sc_rollback_trans
sc_select
sc_set_fetchmode
sc_set_global
sc_sql_injection
sc_time_diff
sc_trunc_num
sc_url_library
sc_warning
sc_webservice
Variables - Database

Consegui resolver,

Na verdade o fato de inserir duas vezes não sei o real motivo, mas fiz uma condição dentro do script para ele checar se aquele item já está no formulário de itens, se tiver ele não faz nada, com isso agora ele está inserindo apenas uma vez.

Abaixo está como ficou o script agora


sc_set_fetchmode(1);

sc_select(busca_tag, “SELECT
refbas,
ref_item,
desc_item,
desc_cor,
tam,
tag
FROM
tab_tag t
WHERE
(tag = '”.{tag}."’)");

sc_select(busca_preco, “SELECT
preco
FROM
tabela_preco_itens p
WHERE
(refbas = '”.$busca_tag->fields[0]."’) AND
(ref_item = ‘".$busca_tag->fields[1]."’)");

while(!$busca_tag->EOF){

sc_lookup(busca_tag_itens, "SELECT
			
		   tag
		FROM
			vendas_itens
		WHERE 
			(tag = '".{tag}."')");

if(isset({busca_tag_itens[0][0]})){
	break;
	
	}
else{

$sql_insert = "INSERT INTO vendas_itens(qtde, refbas, ref_item, desc_ref, tam, cor, valor_unit, valor_total, tag, vendas_idvendas)

				VALUES ('1', '".$busca_tag->fields[0]."', '".$busca_tag->fields[1]."', '".$busca_tag->fields[2]."', '".$busca_tag->fields[4]."', '".$busca_tag->fields[3]."', '".$busca_preco->fields[0]."', '".$busca_preco->fields[0]."', '".$busca_tag->fields[5]."', '".{idvendas}."')";


sc_exec_sql($sql_insert);

$busca_tag->MoveNext();
$busca_preco->MoveNext();
$busca_tag->Close();
$busca_preco->Close();
	


}

}

{tag} = '';
sc_set_focus('tag');
sc_ajax_javascript ('refresh_itens1');

Mas se alguém souber o motivo de ao inserir duplicado no formulário de itens (chamada através do METRE/DETALHE), favor postar.