Árvore de páginas

GFEXFB10 - Definir Novo Agrupamento Para os Cálculos do Romaneio de Carga

Características do Requisito

Linha de Produto:

Microsiga Protheus

Segmento:

Supply Chain - Logística

Módulo:

SIGAGFE

Ponto de Entrada:GFEXFB10

Descrição:

Possibilidade de definir um novo agrupamento para os cálculos do romaneio de carga.

Localização:

Chamado ao ser definido o número de agrupamento dos cálculos;

Programa Fonte:

GFEXFUNB - Funções Genéricas do Cálculo

Parâmetros:

NomeTipoDescriçãoObrigatório
PARAMIXB[1] CaractereEmissor do documento de cargaSim
PARAMIXB[2] CaractereSérie do documento de cargaSim
PARAMIXB[3] CaractereNúmero do documento de cargaSim
PARAMIXB[4] Caractere Código do tipo do Documento Sim
PARAMIXB[5] CaractereNúmero do romaneio do documento de cargaSim

Retorno:

NomeTipoDescriçãoObrigatório
cNumGrupCaractereNúmero do grupo do cálculoNão
Exemplo: GFEXFB10
#INCLUDE "PROTHEUS.CH"
User Function GFEXFB10
Local cEmisDc  := PARAMIXB[1] //GFEXFB_5CMP(lTabTemp, cTRBDOC, @aDocCarg, 1,"EMISDC"),;
Local cSerDc   := PARAMIXB[2] //GFEXFB_5CMP(lTabTemp, cTRBDOC, @aDocCarg, 1,"SERDC"), ;
Local cNrDc    := PARAMIXB[3] //GFEXFB_5CMP(lTabTemp, cTRBDOC, @aDocCarg, 1,"NRDC"),  ;
Local cCdTpDc  := PARAMIXB[4] //GFEXFB_5CMP(lTabTemp, cTRBDOC, @aDocCarg, 1,"CDTPDC")
Local cNrRom   := PARAMIXB[5] //GFEXFB_5CMP(lTabTemp, cTRBDOC, @aDocCarg, 1,"NRAGRU") || gwn_nrrom
Local cNumGrup := ""
Local cQuery   := ""
Local cAliasQry:= ""
Local nNumGrup := 0
local nX       := 0
Local aNumGrup := {}
	
	//Busca todas os documentos do romaneio cNrRom
	cQuery := " SELECT GW1_CDTPDC,GW1_EMISDC,GW1_SERDC,GW1_NRDC,GW1_CDREM,GW1_CDDEST,GW1_ENTNRC,GW1_ENTBAI,GW1_ENTEND"
	cQuery += "   FROM "+RetSqlName('GW1')"
	cQuery += "  WHERE GW1_FILIAL = '"+xFilial('GW1')+"'"
	cQuery += "    AND GW1_NRROM  = '"+cNrRom+"'" 
	cQuery += "    AND D_E_L_E_T_ = ' '"
	cQuery := ChangeQuery(cQuery)
	cAliasQry := GetNextAlias()
	dbUseArea(.T.,'TOPCONN',TCGENQRY(,,cQuery),cAliasQry,.F.,.T.)
	While (cAliasQry)->(!Eof())
		//Insere os documentos em um array, junto com a nova numeração para o número do grupo
		If  (nX := aScan(aNumGrup,{|x| x[2] == (cAliasQry)->(GW1_EMISDC+GW1_CDREM+GW1_CDDEST+GW1_ENTNRC+GW1_ENTBAI+GW1_ENTEND)})) == 0
			nNumGrup++
			aAdd(aNumGrup,{StrZero(nNumGrup,06),(cAliasQry)->(GW1_EMISDC+GW1_CDREM+GW1_CDDEST+GW1_ENTNRC+GW1_ENTBAI+GW1_ENTEND),{}})
			nX := Len(aNumGrup)
		EndIf
		aAdd(aNumGrup[nX][3], (cAliasQry)->(GW1_CDTPDC+GW1_EMISDC+GW1_SERDC+GW1_NRDC))
		(cAliasQry)->(dbSkip())
	EndDo
	(cAliasQry)->(dbCloseArea())
	
	//Busca no array o documento passado por parâmetro e atribui o número do grupo que será retornado para gravar o cálculo
	For nX := 1 To Len(aNumGrup)
		If (aScan(aNumGrup[nX][3], {|x| x == cCdTpDc+cEmisDc+cSerDc+cNrDc})) > 0
			cNumGrup := aNumGrup[nX][1]
		EndIf
	Next nX
Return cNumGrup