Árvore de páginas


CONTEÚDO

  1. Visão Geral
  2. Descrição
  3. Informações Técnicas
  4. Exemplo

01. VISÃO GERAL

Linha de Produto:Microsiga Protheus®
Segmento:Serviços
Módulo:SIGAPON
Função:PONA080 - Tabela de Horário Padrão
Abrangências:Microsiga Protheus 12
Versões:Microsiga Protheus 12
Sistemas Operacionais:Todos
Compatível com as Bases de Dados:Todos
Nível de Acesso:Nível 1 (Acesso Clientes)
Idiomas:Todos

02. DESCRIÇÃO

Função utilizada para inclusão, alteração ou exclusão de uma tabela de horário padrão via rotina automática (ExecAuto).

Cada chamada da rotina automática permite manipular uma sequência da tabela de horário, seja para inclusão, alteração ou exclusão.

03. INFORMAÇÕES TÉCNICAS

nOpcAuto

Operação

3 - Inclusão
4 - Alteração
5 - Exclusão

aTurno

Array com informações do turno que será vinculada com o tabela de horário padrão criada via execauto

aTurno[1] Filial
aTurno[2] Turno
aTurno[3] Sequência 

Caso a sequência não seja informada e for uma inclusão o sistema irá realizar o cadastro na próxima sequência

aItens

Array com as informações do dia da semana da tabela de horário padrão.

O array deve seguir o padrão exigido pela MsGetDAuto
Sendo um array multi dimensional onde cada posição do array aItens correspondente a uma linha da grid.

As informações devem ser passadas seguindo a estrutura:
[nX][1] Nome do campo
[nX][2] Conteúdo do campo
[nX][3] Nil

OBS: A rotina permite manipular apenas uma sequência da tabela por vez, com isso o tamanho máximo do aItens é 7, sendo uma posição para cada dia da semana, enviar mais de 7 registros pode gerar o erro de chave duplicada.


04. EXEMPLOS

Na inclusão, caso o campo SPJ_SEMANA não seja passado no array de cabeçalho, aTurno neste exemplo, será criada uma nova sequência.

Exemplo de Inclusão
#INCLUDE "PROTHEUS.CH"
#INCLUDE "TBICONN.CH"

User Function fExecauto()
	
	Local aTurno := {}
	Local aItens := {}
	Local nOpcAuto := 0
	Local nI := 0
	Local cTipoDia
	Local cCodHe
	Local cCodHeNot
	
	Private lMsErroAuto := .F.
	
	PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01" MODULO "GPE"
	
	ConOut("Inicio: " + Time())
	ConOut(PadC("Rotina Automática Tabela de Horário Padrão", 80))
	
	aAdd(aTurno, {"PJ_FILIAL", xFilial("SPJ", "D MG 01"), Nil}) // Código da Filial
	aAdd(aTurno, {"PJ_TURNO" , "001", Nil}) 					// Código do Turno
	
	// For para facilitar o preenchimento dos campos
	For nI := 1 To 7 // Máximo de 7 Itens, sendo um para cada dia da semana
		aAdd( aItens,{})
		
		If nI == 1
			cTipoDia := "D" // DSR
			cCodHe := "2"
			cCodHeNot := "6"
		ElseIf nI == 7
			cTipoDia := "C" // Compensado
			cCodHe := "3"
			cCodHeNot := "7"
		Else
			cTipoDia := "S"	// Trabalhado
			cCodHe := "1"
			cCodHeNot := "5"
		EndIf
		
		// Abaixo tem alguns campos, os demais campos da tabela podem ser adicionados conforme necessidade
		aAdd(aItens[nI], {"PJ_DIA"    , nI, Nil }) 			// Dia da Semana 1 = Domingo, 2 = Segunda... 7 = Sábado
		aAdd(aItens[nI], {"PJ_TPDIA"  , cTipoDia, Nil }) 	// Tipo Dia
		aAdd(aItens[nI], {"PJ_HORMENO", 05.00, Nil }) 		// Limite Inferior
		aAdd(aItens[nI], {"PJ_ENTRA1" , 09.00, Nil }) 		// 1a Entrada
		aAdd(aItens[nI], {"PJ_SAIDA1" , 12.00, Nil }) 		// 1a Saida
		aAdd(aItens[nI], {"PJ_ENTRA2" , 13.00, Nil }) 		// 2a Entrada
		aAdd(aItens[nI], {"PJ_SAIDA2" , 18.00, Nil }) 		// 2a Saida
		aAdd(aItens[nI], {"PJ_HORMAIS", 05.00, Nil }) 		// Limite Superior
		aAdd(aItens[nI], {"PJ_CODREF" , "", Nil }) 			// Codigo Refeicao
		aAdd(aItens[nI], {"PJ_TPEXT"  , cCodHe, Nil }) 		// Tipo Hora Extra Normal
		aAdd(aItens[nI], {"PJ_TPEXTN" , cCodHeNot, Nil }) 	// Tipo Hora Extra Noturna
		aAdd(aItens[nI], {"PJ_NONAHOR", "N", Nil }) 		// Nona Hora
		aAdd(aItens[nI], {"PJ_INTERV1", "S", Nil }) 		// 1a Saída Intervalo
	Next
	
	// Identifica que será uma inclusão
	nOpcAuto := 3
	
	//Chamada do ExecAuto
	MSExecAuto( {|x, y, z| PONA080(x, y, z)}, aTurno, aItens, nOpcAuto )
	
	If !lMsErroAuto
		ConOut(PadC("Cadastro realizado!", 80))
	Else
		ConOut(PadC("Erro no cadastro!", 80))
	EndIf
	
	ConOut("Fim : " + Time())
	
	RESET ENVIRONMENT
	
Return NIL


Para realizar uma edição é necessário posicionar no registro que será alterado, para isso utilizamos o LINPOS 

Exemplo de Alteração
#INCLUDE "PROTHEUS.CH"
#INCLUDE "TBICONN.CH"

User Function fExecAlt()
	
	Local aTurno := {}
	Local aItens := {}
	Local aAux	 := {}
	Local nOpcAuto := 0
	
	Private lMsErroAuto := .F.
	
	PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01" MODULO "GPE"
	
	ConOut("Inicio: " + Time())
	ConOut(PadC("Rotina Automatica Tabela de Horário Padrão", 80))
	
	aAdd(aTurno, {"PJ_FILIAL", "D MG 01 ", Nil}) 	// Código da Filial
	aAdd(aTurno, {"PJ_TURNO" , 		"001", Nil}) 	// Código do Turno
	aAdd(aTurno, {"PJ_SEMANA", 		 "01", Nil}) 	// Sequência
	
	// Utilizar o campo Dia para posicionar dentro da linha desejada de cada sequência
	// Deve informar o dia por extenso e sem acentos (Domingo, Segunda, Terca... Sabado)
	aAdd(aAux, {"LINPOS", "PJ_DIA", "Segunda" }) // Posiciona na linha
	
	// Adiciona os campos que serão alterados
	aAdd(aAux, {"PJ_ENTRA1" , 09.00, Nil }) // 1a Entrada
	aAdd(aAux, {"PJ_SAIDA1" , 12.00, Nil }) // 1a Saida
	aAdd(aAux, {"PJ_ENTRA2" , 13.00, Nil }) // 2a Entrada
	aAdd(aAux, {"PJ_SAIDA2" , 18.00, Nil }) // 2a Saida
	
	Aadd(aItens, aAux)
	
	// Indica que será uma alteração
	nOpcAuto := 4
	
	//Chamada do ExecAuto
	MSExecAuto( {|x, y, z| PONA080(x, y, z)}, aTurno, aItens, nOpcAuto )
	
	If !lMsErroAuto
		ConOut(PadC("Cadastro realizado!", 80))
	Else
		ConOut(PadC("Erro no cadastro!", 80))
	EndIf
	
	ConOut("Fim : " + Time())
	
	RESET ENVIRONMENT
	
Return NIL


Utilizando a operação 5 - Exclusão é possível excluir todos os registros de uma mesma sequência, não sendo necessário enviar o aItens
Ao executar uma exclusão o sistema irá validar se a tabela de horário está vinculada com alguma outra tabela, se existir relacionamento a exclusão não será realizada.

Exemplo de Exclusão
#INCLUDE "PROTHEUS.CH"
#INCLUDE "TBICONN.CH"

User Function fExecauto()
    
    Local aTurno := {}
    Local aItens := {{}} // Será enviado vazio
    Local nOpcAuto := 0
    
    Private lMsErroAuto := .F.
    
    PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01" MODULO "GPE"
    
    ConOut("Inicio: " + Time())
    ConOut(PadC("Rotina Automatica Tabela de Horário Padrão", 80))
    
    aAdd(aTurno, {"PJ_FILIAL", "D MG 01 ", Nil})	// Código da Filial
    aAdd(aTurno, {"PJ_TURNO" , 		"001", Nil})	// Código do Turno
    aAdd(aTurno, {"PJ_SEMANA", 		 "01", Nil})	// Sequência
    
    // Identifica que será uma Exclusão
    nOpcAuto := 5
    
    //Chamada do ExecAuto
    MSExecAuto( {|x, y, z| PONA080(x, y, z)}, aTurno, aItens, nOpcAuto )
    
    If !lMsErroAuto
        ConOut(PadC("Cadastro realizado!", 80))
    Else
        ConOut(PadC("Erro no cadastro!", 80))
    EndIf
    
    ConOut("Fim : " + Time())
    
    RESET ENVIRONMENT
    
Return NIL