Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

P712SQL - Montagem das instruções SQL de carga memória para o MRP

Linha de Produto:

Protheus

Segmento:

Manufatura

Módulo:

SIGAPCP - Planejamento e Controle da Produção

Parâmetro(s):

NomeTipoDescriçãoDefaultObrigatórioReferência
PARAMIXB[1]CaracterTabela que está sendo carregada
X
PARAMIXB[2]CaracterVariável texto contendo os campos da clausula SELECT da instrução SQL que será executada.
X
PARAMIXB[3]CaracterVariável texto contendo as tabelas e condições, cláusulas FROM e WHERE, da instrução SQL que será executada.
X
PARAMIXB[4]CaracterVariável texto contendo a ordenação da instrução SQL que será executada (cláusula ORDER BY)
X

Idiomas:

Todos

País(es):

Todos

Banco(s) de Dados:

Todos

Sistema(s) Operacional(is):

Todos

Ponto de Entrada

Descrição:
O ponto de entrada P712SQL é executado na montagem das instruções SQL quer irão realizar a carga dos dados na memória. O ponto de entrada é chamado nas seguintes cargas:
  • Produto e saldo (HWA e T4V)
  • Estrutura (T4N)
  • Versão da Produção (T4M)
  • Demandas (T4J)
  • Ordens de Produção (T4Q)
  • Empenhos (T4S)
  • Solicitação de Compras (T4T)
  • Pedido de Compras (T4U)
Localização:

Classe CargaMemoria - Responsável por realizar a execução das instruções SQL e o carregamento dos dados que serão processados pelo MRP para a memória.

Eventos:

Antes da execução de cada Query das tabelas citadas anteriormente.

Programa Fonte:MrpDados_Carga_Documentos.PRW, MrpDados_Carga_Engenharia.PRW, MRPDados_CargaMemoria.PRW

Sintaxe:

P712SQL (cTabela, cFields, cQueryCon, cOrder) --> aRetQuery

Retorno:

Array contendo as três instruções do SQL.

Na posição 01 do array, retornar os campos da cláusula SELECT (cFields).

Na posição 02 do array, retornar as informações das cláusulas FROM e WHERE (cQueryCon)

Na posição 03 do array, retornar as informações da cláusula ORDER BY (cOrder)

Observações:

O ponto de entrada precisa retornar, nas três posições do array, instruções SQL que sejam válidas, dentro do padrão ANSI SQL.

Bloco de código
languagec#
firstline1
titleExemplo
linenumberstrue
#INCLUDE "TOTVS.CH"

User Function PA145GERP712SQL()
    Local aRetorno cAliasQry  := GetNextAlias()
	{}
    Local cOrigemcTabela    := "PCPA144"Trim(PARAMIXB[1])
    Local cTicketcFields    := Trim(PARAMIXB[12]

	//
	//SC7 - Pedidos de Compra/Autorizações de Entrega
	//
	BeginSql Alias cAliasQry
	  SELECT C7_FILIAL, C7_NUM, C7_ITEM
		FROM %Table:SC7%
	   WHERE C7_SEQMRP = %Exp:cTicket%
		 AND %notDel%
	EndSql

	While (cAliasQry)->(!Eof())
		//Percorre todos os registros gerados no processamento
		Conout("SC7 - Documento: " + (cAliasQry)->C7_FILIAL + (cAliasQry)->C7_NUM + (cAliasQry)->C7_ITEM)
		(cAliasQry)->(dbSkip())
	End
	(cAliasQry)->(dbCloseArea())

	//
	//SC1 - Solicitações de Compra
	//
	BeginSql Alias cAliasQry
	  SELECT C1_FILIAL, C1_NUM, C1_ITEM
		FROM %Table:SC1%
	   WHERE C1_SEQMRP = %Exp:cTicket%
		 AND C1_ORIGEM = %Exp:cOrigem%
		 AND %notDel%
	EndSql

	While (cAliasQry)->(!Eof())
		//Percorre todos os registros gerados no processamento
		Conout("SC1 - Documento: " + (cAliasQry)->C1_FILIAL + (cAliasQry)->C1_NUM + (cAliasQry)->C1_ITEM)
		(cAliasQry)->(dbSkip())
	End
	(cAliasQry)->(dbCloseArea())

	//
	//SC2 - Ordens de Produção
	//
	BeginSql Alias cAliasQry
	  SELECT C2_FILIAL, C2_NUM, C2_ITEM, C2_SEQUEN
		FROM %Table:SC2%
	   WHERE C2_SEQMRP = %Exp:cTicket%
		 AND C2_BATROT = %Exp:cOrigem%
		 AND %notDel%
	EndSql

	While (cAliasQry)->(!Eof())
		//Percorre todos os registros gerados no processamento
		Conout("SC2 - Documento: " + (cAliasQry)->C2_FILIAL + (cAliasQry)->C2_NUM + (cAliasQry)->C2_ITEM + (cAliasQry)->C2_SEQUEN)
		(cAliasQry)->(dbSkip())
	End
	(cAliasQry)->(dbCloseArea())

	//
	//SD4 - Empenhos
	//
	BeginSql Alias cAliasQry
	  SELECT SD4.D4_FILIAL, SD4.D4_OP, SD4.D4_COD
		FROM %Table:SD4% SD4
	   INNER JOIN %Table:SC2% SC2
		  ON SD4.D4_FILIAL = SC2.C2_FILIAL
		 AND SD4.D4_OP     = CASE SC2.C2_OP WHEN ' ' THEN
		                        SC2.C2_NUM + SC2.C2_ITEM + SC2.C2_SEQUEN + SC2.C2_ITEMGRD //Operador de concatenação de string do banco pode ser diferente
							 ELSE
							    SC2.C2_OP
							 END
	   WHERE SD4.%notDel%
	     AND SC2.%notDel%
	     AND SC2.C2_SEQMRP = %Exp:cTicket%
	EndSql

	While (cAliasQry)->(!Eof())
		//Percorre todos os registros gerados no processamento
		Conout("SD4 - Documento: " + (cAliasQry)->D4_FILIAL + (cAliasQry)->D4_OP + (cAliasQry)->D4_COD)
		(cAliasQry)->(dbSkip())
	End
	(cAliasQry)->(dbCloseArea())

Return

)
    Local cQueryCon  := Trim(PARAMIXB[3])
    Local cOrder     := Trim(PARAMIXB[4])
	Local lBeginSql2 := .F.
	Local lBeginSql3 := .F.
	Local lBeginSql4 := .F.
	Local lAlterou   := .T.

	//Tratamento BeginSQL
	If Right(cFields, 1) == '%'
		cFields    := StrTran(cFields, "%", "")
		lBeginSql2 := .T.
	EndIf
	If Right(cQueryCon, 1) == '%'
		cQueryCon  := StrTran(cQueryCon, "%", "")
		lBeginSql3 := .T.
	EndIf
	If Right(cOrder, 1) == '%'
		cOrder     := StrTran(cOrder, "%", "")
		lBeginSql4 := .T.
	EndIf

    Conout("Query de carga da tabela " + cTabela + ":")
    Conout("SELECT " + cFields + " FROM " + cQueryCon + " ORDER BY " + cOrder)

	Do Case
		//Só consideraremos produtos com controle de Lote e Sublote
		Case cTabela == 'HWA'
			cQueryCon += " AND HWA_RASTRO <> 'N' "

		//Só consideraremos Pedidos de Compras com quantidade maior que 10
		Case cTabela == 'T4U'
			cQueryCon += " AND T4U_QTD > 10 "

		//Só consideraremos OPs com quantidade maior que 100
		Case cTabela == 'T4Q'
			cQueryCon += " AND T4Q_SALDO > 100 "

		//Trocaremos o armazém da demanda pelo armazém do produto
		Case cTabela == 'T4J'
			cFields := StrTran(cFields, " T4J.T4J_LOCAL", " HWA.HWA_LOCPAD As T4J_LOCAL")

		Otherwise
			lAlterou := .F.
	EndCase

	//Só precisa retornar o array aRetorno se realmente a query foi alterada
	If lAlterou
		Conout("A carga da tabela " + cTabela + " utilizara a query especifica:")
    	Conout("SELECT " + cFields + " FROM " + cQueryCon + " ORDER BY " + cOrder)

		//Tratamento BeginSQL
		If lBeginSql2
			cFields := "% " + cFields + "%"
		EndIf
		If lBeginSql3
			cQueryCon := "% " + cQueryCon + "%"
		EndIf
		If lBeginSql4
			cOrder := "% " + cOrder + "%"
		EndIf

		aAdd(aRetorno, cFields)
		aAdd(aRetorno, cQueryCon)
		aAdd(aRetorno, cOrder)
	Else
		Conout("A carga da tabela " + cTabela + " utilizara a query padrao do MRP.")
	EndIf

Return aRetorno