Sc_select dentro de um laço

Olá, bom dia!

Gostaria de saber se é possível usar sc_select dentro um um laço while que percorre os registros de outro sc_select?

Estou tentando fazer isso, porém o sc_select mais interno sempre me retorna nulo, mesmo eu sabendo que há registos para a consulta utilizada.

Quem souber de alguma coisa e puder falar aqui, agradeço muito!

a macro já é própria para isso, dê uma olhada no web-help.

apenas utilize a variável resultset de nome diferente.

agora se o select interno retorna apenas um registro use sc_lookup.

cole seu código aqui, para vermos o que estsá fazendo.

Obrigado por responder, Haroldo.

Já estou fazendo isso que você sugeriu.

Segue a imagem com o código.

OBS.: Seja qual for a consulta desse método, o resultado é sempre nulo.

Eu não usaria uma macro do sc como parâmetro de um array ou função.
Uma macro Scriptcase pode gerar várias linhas de código php. Uma macro não é um método.

Não colei parte do código que identifiquei isso porque você enviou uma imagem em vez do código em formato texto.

Sugestão: envio o texto do código entre [code]seu código[/code]

Não enviei, porque o código está dividido em métodos.

[code]$dt = $ds->fields[‘data’];
$ttdia = 0;

while ((!$ds->EOF) && ($ds->fields[‘data’]==$dt)){

	$dtemp = date_format(date_create($ds->fields['data']), 'd/m/Y');	
	$nrsernf = $ds->fields['nr_fiscal'];

	if (!empty($ds->fields['numero_serie'])) {
		$nrsernf .= '/' . $ds->fields['numero_serie'];
	}	

	if ($ds->fields['tp_emp'] == 'O')      $tpemp = 'Ordinário';
	else if ($ds->fields['tp_emp'] == 'E') $tpemp = 'Estimado';
	else if ($ds->fields['tp_emp'] == 'G') $tpemp = 'Global';

	imprimir_linha([
				  $ds->fields['nr_liq'] . '<br/>'. $ds->fields['class_orc'],
				  $dtemp . '<br/>' . $ds->fields['nr_preemp'],
				  $ds->fields['nr_proc'],
				  substr(lib_funcoes_remove_acentos($ds->fields['nm_forn']),0,40), 
				  $ds->fields['nr_cpf_gestor'] . '<br/>' . $ds->fields['nr_oc'],
				  $tpemp . '<br/>' . $ds->fields['nr_liq'],
				  $ds->fields['valor'] > 0 ? number_format($ds->fields['valor'], 2) : number_format(0,2)
				 ],
				 $larguras, $alinhamento, false, false, false);

	getNotasFiscais($ds);

	$idLiq = $ds->fields['id_liq'];

	getRetencoes($idLiq);	
	getPagamentos($idLiq);

	$ttdia += $ds->fields['valor'];

	[linha]++;
	
	$ds->MoveNext();

}
[/code]

Essa é a primeira parte. A segunda parte está no método getPagamentos:

[code]$larguras = [15, 15, 40, 15, 15]; //100
$alinhamento = [‘left’, ‘left’, ‘left’, ‘left’, ‘right’];

imprimir_linha([‘Pagamento’, ‘Data Emissão’, ‘Credor’, ‘Conta a Débito’, ‘Valor’], $larguras, $alinhamento, false, false, true);

$sqlPg = "
SELECT
b.id_liq,
b.id_bxemp,
b.dt_pg,
b.cd_forn,
f.nm_forn,
b.nr_conta_credor,
b.vl_pg
FROM bxemp b
LEFT JOIN forn f ON f.cd_forn = b.cd_forn
WHERE b.flag_desconto = 0
AND b.id_liq = ‘$idLiq’
";
sc_select(dsPaga, $sqlPg);

var_dump($dsPaga);

if ($dsPaga != FALSE) {

while (!$dsPaga->EOF) {
	imprimir_linha([
		  $dsPaga->fields['id_bxemp'],
		  sc_date_conv($dsPaga->fields['dt_pg'], "aaaa-mm-dd", "dd/mm/aaaa"),
		  $dsPaga->fields['nm_forn'],
		  $dsPaga->fields['nr_conta_credor'],
		  $dsPaga->fields['vl_pg'] > 0 ? number_format($dsPaga->fields['vl_pg'], 2) : number_format(0,2)	  
		 ],
		 $larguras, $alinhamento, false, false, false);


	$dsPaga->MoveNext();
}

$dsPaga->Close();

} [/code]

while (!$dsPaga->EOF) {
        $dataPag = sc_date_conv($dsPaga->fields['dt_pg'], "aaaa-mm-dd", "dd/mm/aaaa");
        $valorPag = $dsPaga->fields['vl_pg'] > 0 ? number_format($dsPaga->fields['vl_pg'], 2) : number_format(0,2);	
	imprimir_linha([
		  $dsPaga->fields['id_bxemp'],
		  $dataPag,
		  $dsPaga->fields['nm_forn'],
		  $dsPaga->fields['nr_conta_credor'],
		  $valorPag 
		 ],
...

Deixe seu código mais didático e observe o dito aqui:

Obrigado mais um vez, Haroldo.

Fiz o que você sugeriu, mas o problema ainda persiste.

O resultado desse sc_select do método getPagamentos sempre é nulo. Qualquer consulta nesse sc_select retorna nulo.

Quando mudo para sc_lookup funciona normalmente, mas não pretendo usar essa macro, pois ela pode gerar uma sobrecarga no servidor.

Se tiver mais alguma dica, agradeço grandemente.

Teria que funcionar…

Mas não funcionou… :neutral_face:

tem algo no seu código em específico que esstá interrompendo do funcionamento, pois eu utilizo e não tenho problema.

Tente trocar dsPaga para dspaga.

Não lembro qual exatamente o problema que ocorria mas tivemos que alterar rsFrmArq para rsfrmarq:

sc_select(rsfrmarq…

while (!$rsfrmarq->EOF){…