Autor Tópico: (RESOLVIDO)Pegar varios registros de uma tabela e gravar em outra  (Lida 1488 vezes)

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
(RESOLVIDO)Pegar varios registros de uma tabela e gravar em outra
« Online: Outubro 06, 2012, 08:53:37 pm »
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);
« Última modificação: Outubro 08, 2012, 09:44:32 pm por Jean Matos »
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

leandroauler

  • Avançado
  • ****
  • Mensagens: 381
Re:Pegar varios registros de uma tabela e gravar em outra
« Responder #1 Online: Outubro 08, 2012, 09:06:32 pm »
Jean,

teste esse comando SQL:
Código: [Selecionar]
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

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Pegar varios registros de uma tabela e gravar em outra
« Responder #2 Online: Outubro 08, 2012, 09:43:08 pm »
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..
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775