Tem como no SC

(leandroauler) #1

Tenho uma tabela onde pego entrada e saida de funcionarios.

Queria exibir a data e hora de entrada e saida em um único campo da GRID, sendo que os registros sao diferentes…

Exemplo de como teria que ficar:

Matricula Nome Função Entrada / Saida Jornada
017895 Leandro Auler Analista 01/09/2010 08:05 08:55
01/09/2010 17:00

(Diogo Toscano) #2

Faça um select direto no select original para trazer 1 campo a mais ja.

Ou trabalhe com a hora de entrada e crie um campo padrao e de um select para pegar a hora de saida e atribua ao campo para exibir na mesma linha.

(leandroauler) #3

Uma subquery como fizemos outras vezes???

(Diogo Toscano) #4

Sim, pois como sao registros independentes … eles iriam ficar em outra linha obrigatoriamente.

Voce teria que via sql ja trazer apenas 1 registro. Voce pode fazer com join de 1 -1. Ia ficar um registro apenas. PRa ficar mais simples qdo vc faz essas querys, cria view pra ficar um sql simples e ai voce da manutenção apenas na view. Sem precisar modificando na aplicação.

(leandroauler) #5

Diogo,

Resolvi de outra maneira… Na tabela tem um campo Operacão onde 0 = entrada e 1 = saida…
Então fiz um select com Operacao = 1 e resolvi…

O sc só tem macro para calculo de data e não de horas???

(Eduardo Alves) #6

Então, reinterando estou com um problema com calculo de horas. Queria saber tb se o SC5 está com alguma macro para calculo de horas…

(leandroauler) #7

Eduardo qual o problema…

(Eduardo Alves) #8

Bom dia Leandro…

Eu consegui resolver ontem. Estava tentando fazer calculo de horas no SC, ai pesquisei e acabei usando o SQL para chegar ao resultado.

SELECT SUBTIME(adm_os.hora_final_ …)

Ai deu certinho…“eu estava tomando um pau pra transformar hora e minuto em decimal, colocar o calculo e depois transformar o decimal novamente em hora”…muito trabalho, mais pratico no Mysql…(aproveitando, gostei da sua planilha no outro topico que trabalha com horas tb), estou fazendo uma na mesma logica e modelo)

Um grande abraço Leandro, valeu !!!

(Eduardo Alves) #9

Estou com outro problema agora. Quando ele acha valor no lookup, tudo bem, quando o valor retorna NULO, ele dá ERRO Undefined offset: 0 por não estar retornando valor. Até ai, normal, mais gostaria de se, não retornar valor, eu mandasse para o banco “00:00:00”. Estou usando a sintaxe abaixo:

sc_lookup(HORAF, "SELECT SUBTIME(adm_os.hora_final_atendimento,adm_clientes.hora_final_atendimento_m) AS total_horas
FROM adm_os INNER JOIN adm_clientes ON (adm_os.id_cliente = adm_clientes.ClienteId) WHERE adm_os.id = ‘{id}’ AND (adm_os.id_unidade = ‘2’) AND (adm_os.tipo_contrato_m = ‘F’) AND (adm_clientes.qtde_contrato_m > ‘(NULL)’) ");

$TOTAL_HORAS = {HORAF[0][0]};

if(!empty($TOTAL_HORAS))
{ if ($TOTAL_HORAS > “00:00:00”) {
sc_exec_sql("Update adm_os set hora_adic_atendimento = ‘00:00:00’ where id = ‘{id}’ ");
}
else
{
sc_exec_sql("Update adm_os set hora_adic_atendimento =’$TOTAL_HORAS’ where id = ‘{id}’ ");
}
}

Alguem tem uma luz ??? !!!

(Cleyton Euler) #10

// lookup

sc_lookup(HORAF, "SELECT SUBTIME(adm_os.hora_final_atendimento,adm_clientes.hora_final_atendimento_m) AS total_horas
FROM adm_os INNER JOIN adm_clientes ON (adm_os.id_cliente = adm_clientes.ClienteId) WHERE adm_os.id = ‘{id}’ AND (adm_os.id_unidade = ‘2’) AND (adm_os.tipo_contrato_m = ‘F’) AND (adm_clientes.qtde_contrato_m > ‘(NULL)’) ");

// testando o lookup

if (empty({HORAF})) // se for vazio, manda gravar hora zerada e atualizar o registro{
$TOTAL_HORAS = “00:00:00”;
sc_exec_sql("Update adm_os set hora_adic_atendimento = ‘$TOTAL_HORAS’ where id = ‘{id}’ ");
}
else // se não for vazio, pega o retorno do lookup e atualiza o registro{
$TOTAL_HORAS = {HORAF[0][0]};
sc_exec_sql("Update adm_os set hora_adic_atendimento =’$TOTAL_HORAS’ where id = ‘{id}’ ");
}

Perceba que o erro é questão de lógica. Veja como vc fez:

sc_lookup(HORAF, "SELECT SUBTIME(adm_os.hora_final_atendimento,adm_clientes.hora_final_atendimento_m) AS total_horas
FROM adm_os INNER JOIN adm_clientes ON (adm_os.id_cliente = adm_clientes.ClienteId) WHERE adm_os.id = ‘{id}’ AND (adm_os.id_unidade = ‘2’) AND (adm_os.tipo_contrato_m = ‘F’) AND (adm_clientes.qtde_contrato_m > ‘(NULL)’) ");

$TOTAL_HORAS = {HORAF[0][0]}; // AQUI FICA DANDO ERRO DE VARIÁVEL NÃO DEFINDA PORQUE INDEPENDENTE DO RESULTADO DO DATASET VC ATRIBUI O RETORNO A VARIÁVEL.

if(!empty($TOTAL_HORAS)) // AQUI VC ESTÁ DIZENDO NÃO VAZIO, ENTÃO O CÓDIGO DO ELSE TERIA QUE ESTAR NO IF
{ if ($TOTAL_HORAS > “00:00:00”) {
sc_exec_sql("Update adm_os set hora_adic_atendimento = ‘00:00:00’ where id = ‘{id}’ ");
}
else
{
sc_exec_sql("Update adm_os set hora_adic_atendimento =’$TOTAL_HORAS’ where id = ‘{id}’ ");
}
}

(Eduardo Alves) #11

tem razão brother (to comendo bola)… agora matou… deu certinho…mais uma vez muito obrigado cara… um grande abraço pra voce…

(Cleyton Euler) #12

Tamo ai!!!