(RESOLVIDO)Pegar varios registros de uma tabela e gravar em outra

Prezados, falha na massa cinzenta… estou apanhando para pegar os dados de uma tabela e gravar em outra…
se tiro o laço ele pega os dados e mas grava apenas a primeira linha…

como resolvo isso ?

{vencimento}= sc_date_conv({vencimento},“dd/mm/aaaa”,“db_format”);

sc_lookup(dataset,“SELECT
contrato_trabalho.idfunc,
contrato_trabalho.s_base,
contrato_trabalho.gratificacao,
contrato_trabalho.inss,
contrato_trabalho.ir,
contrato_trabalho.s_familia,
alocacao.idobra
FROM
dbo.contrato_trabalho INNER JOIN dbo.alocacao ON contrato_trabalho.idcontrato = alocacao.idcontrato
WHERE
alocacao.motivo = ‘5’ AND
alocacao.idobra = ‘{centro_custo}’”);

if({dataset}===false){
echo “Erro de acesso. Mensagem=” .{dataset};
}elseif(empty({dataset})){
echo “Comando Select não retornou dados”;
}else{
$conta=count({dataset});

       for($x=0;$x<$conta;$x++)
		   
		$ds_func 	= {dataset[$x][0]};
		$ds_base	= {dataset[$x][1]};
		$ds_grat	= {dataset[$x][2]};
		$ds_inss	= {dataset[$x][3]};
		$ds_ir		= {dataset[$x][4]};
		$ds_familia	= {dataset[$x][5]};
		$ds_obra	= {dataset[$x][6]};
	
}	 

/**

  • Insert a record on another table
    */
    $lancamento = Date(‘Ymd’);
    // SQL statement parameters
    $insert_table = ‘folha’; // Table name
    $insert_fields = array( // Field list, add as many as needed
    ‘tipo’ => “‘1’”,
    ‘lancamento’ => “’$lancamento’”,
    ‘vencimento’ => “’{vencimento}’”,
    ‘c_custo’ => “’{centro_custo}’”,
    ‘funcionario’ => “’$ds_func’”,
    ‘valor_bruto’ => “’$ds_base’”,
    ‘s_familia’ => “’$ds_familia’”,
    ‘inss’ => “’$ds_inss’”,
    ‘ir’ => “’$ds_ir’”,
    ‘gratificacao’ => “’$ds_grat’”,
    ‘banco’ => “’{banco}’”,
    ‘agencia’ => “’{agencia}’”,
    ‘tipo_conta’ => “’{tipo_conta}’”,
    ‘numero_conta’ => “’{conta}’”,
    );

// Insert record
$insert_sql = ‘INSERT INTO ’ . $insert_table
. ’ (’ . implode(’, ‘, array_keys($insert_fields)) . ‘)’
. ’ VALUES (’ . implode(’, ', array_values($insert_fields)) . ‘)’;

sc_exec_sql($insert_sql);

Jean,

teste esse comando SQL:

INSERT INTO folha ('{tipo}','$lancamento','{vencimento}','{centro_custo}','$ds_func','$ds_base','$ds_familia','$ds_inss','$ds_ir','$ds_grat','{banco}','{agencia}','{tipo_conta}','{conta}')
SELECT contrato_trabalho.idfunc,
   contrato_trabalho.s_base,
   contrato_trabalho.gratificacao,
   contrato_trabalho.inss,
   contrato_trabalho.ir,
   contrato_trabalho.s_familia,
   alocacao.idobra
FROM
   dbo.contrato_trabalho INNER JOIN dbo.alocacao ON contrato_trabalho.idcontrato = alocacao.idcontrato
WHERE 
   alocacao.motivo = '5' AND
   alocacao.idobra = '{centro_custo}'

Leandro Auler

Prezado, obrigado pela postagem. No entanto eu resolvi de outra forma…ainda não havia postado o resultado porque acabei de fazer os destes e liberar para produção.

Um detalhe é que esse código esta sendo utilizado em um form tipo controle que eu apenas escolho a data de vencimento, o centro de custo(obra) o banco, agencia, tipo de conta e numero da conta a debitar o valor… o resto o código pega no contrato de trabalho e pronto…

Resultado :

{vencimento}= sc_date_conv({vencimento},“dd/mm/aaaa”,“db_format”);
$lancamento = Date(‘Ymd’);

sc_lookup(dataset,“SELECT
contrato_trabalho.idfunc,
contrato_trabalho.s_base,
contrato_trabalho.gratificacao,
contrato_trabalho.inss,
contrato_trabalho.ir,
contrato_trabalho.s_familia,
contrato_trabalho.modo,
alocacao.idobra
FROM
dbo.contrato_trabalho INNER JOIN dbo.alocacao ON contrato_trabalho.idcontrato = alocacao.idcontrato
WHERE
alocacao.motivo = ‘5’ AND
alocacao.idobra = ‘{centro_custo}’”);

$conta = count({dataset});
for($x=0;$x<$conta;$x++)
{
sleep(1);
if({dataset}===false)
{
echo “Erro de acesso. Mensagem=” .{dataset};
}elseif(empty({dataset}))
{
echo “Comando Select não retornou dados”;
}else
{

				$ds_func 	          = {dataset[$x][0]};
				$ds_base     	  = {dataset[$x][1]};
				$ds_grati	          = {dataset[$x][2]};
				$ds_inss	          = {dataset[$x][3]};
				$ds_ir		  = {dataset[$x][4]};
				$ds_familia	  = {dataset[$x][5]};
				$ds_modo	  = {dataset[$x][6]};
				$ds_obra	          = {dataset[$x][7]};
				
				$numero_fl = strtoupper(substr(md5(time()),0,10));
			if($ds_modo=='1'){// ESSE IF AQUI É PARA ANALISAR UMA CONDIÇÃO ESPECIFICA NA MINHA REGRA DE NEGOCIO
				
				$liquido = ($ds_base + $ds_familia + $ds_grati) - ($ds_inss + $ds_ir);//AQUI É QUANDO PAGO TUDO NA CARTEIRA
				$insert_table  = 'folha'; 
				$insert_fields = array(
					'autorizacao'	=> "'$numero_fl'",
					'tipo' 			=> "'1'",// aqui estou informado se é salário ou extra
					'lancamento'	=> "'$lancamento'",
					'vencimento' 	=> "'{vencimento}'",
					'c_custo' 		=> "'{centro_custo}'",
					        'funcionario' 	=> "'$ds_func'",
					'valor_bruto' 	=> "'$ds_base'",
					's_familia' 	=> "'$ds_familia'",
					'inss' 			=> "'$ds_inss'",
					'ir' 			=> "'$ds_ir'",
					'gratificacao'	=> "'$ds_grati'", //PERCEBAM QUE AQUI TEM UMA GRATIFICAÇÃO
					'liquido' 		=> "'$liquido'",
					'banco' 		=> "'{banco}'",
					'agencia' 		=> "'{agencia}'",
					'tipo_conta' 	=> "'{tipo_conta}'",
					'numero_conta' 	=> "'{conta}'",
					'status' 	=> "'1'",);//aqui estou informando que o status é  "Em aberto".
					
				
			}else{
				$liquido = ($ds_base + $ds_familia ) - ($ds_inss + $ds_ir);//AQUI É QUANDO PAGA UMA GRATIFICAÇÃO FORA DA CARTEIRA
				$insert_table  = 'folha'; 
				$insert_fields = array(
					'autorizacao'	=> "'$numero_fl'",
					'tipo' 			=> "'1'",
					'lancamento'	=> "'$lancamento'",
					'vencimento' 	=> "'{vencimento}'",
					'c_custo' 		=> "'{centro_custo}'",
					         'funcionario' 	=> "'$ds_func'",
					'valor_bruto' 	=> "'$ds_base'",
					's_familia' 	=> "'$ds_familia'",
					'inss' 			=> "'$ds_inss'",
					'ir' 			=> "'$ds_ir'",//AQUI NAO TENHO A GRATIFICAÇÃO APOS O IR
					'liquido' 		=> "'$liquido'",
					'banco' 		=> "'{banco}'",
					'agencia' 		=> "'{agencia}'",
					'tipo_conta' 	=> "'{tipo_conta}'",
					'numero_conta' 	=> "'{conta}'",
					'status' 	=> "'1'",);
				}
	}
				$insert_sql = 'INSERT INTO ' . $insert_table . ' ('   . implode(', ', array_keys($insert_fields))   . ')'
							. ' VALUES ('    . implode(', ', array_values($insert_fields)) . ')';
			sc_exec_sql($insert_sql);
}

Agora é óbvio que essas condições atendem minhas regras de negócio…então depende de informações e validações específicas em outras tabelas… assim que desapertar postarei todo um sistema de gerar folha de pagamento baseado no contrato de trabalho firmado com o funcionário… Nesse contrato pode ser especificado se há uma gratificação além do salário base e se ainda essa gratificação será registrada ou não em carteira. Essa condição é necessária para calcular o IR e INSS e FGTS a recolher.

Grato…