Perguntas Modelo 1 com Cabeçalho e Item

Mais
2 anos 1 mês atrás #33293 por Wanderson
Bom dia Pessoal,

Estou precisando de ajuda de voce para finalizar uma tela de cadastro onde tenho cabeçalho e item usando apenas uma tabela. O que está acontecendo é que quando uso a opção para alterar, na grid está vindo apenas um item e para o codigo da pesquisa ele possui mais de um item.

Segue abaixo o codigo caso alguem possa me ajuda a resolver este problema.
#Include 'Protheus.ch'
#Include 'FWMVCDef.ch'
#INCLUDE 'Topconn.ch'

//Variáveis Estáticas
Static cTitulo := "C.R.M. NEW"

User Function VSPFA30()
Local aArea := GetArea()
Local oBrowse
Private Ua9Img := ''

//Cria um browse para a 9AU
oBrowse := FWMBrowse():New()
oBrowse:SetAlias("UA9")
oBrowse:SetDescription(cTitulo)
oBrowse:SetFilterDefault("UA9_ZZITCO ='01'")

//Adicionando as Legendas
oBrowse:AddLegend( "Empty(UA9->UA9_NOME)" , "CLIENTE" , "Cliente Mandatario" )
oBrowse:AddLegend( "!Empty(UA9->UA9_NOME)", "DEPENDENTES", "Pendente do Cliente Mandatario" )

oBrowse:Activate()

RestArea(aArea)
Return Nil

Static Function MenuDef()
Local aRot := {}

//Adicionando opções
ADD OPTION aRot TITLE 'Visualizar' ACTION 'VIEWDEF.VSPFA30' OPERATION MODEL_OPERATION_VIEW ACCESS 0 //OPERATION 1
ADD OPTION aRot TITLE 'Incluir' ACTION 'VIEWDEF.VSPFA30' OPERATION MODEL_OPERATION_INSERT ACCESS 0 //OPERATION 3
ADD OPTION aRot TITLE 'Alterar' ACTION 'VIEWDEF.VSPFA30' OPERATION MODEL_OPERATION_UPDATE ACCESS 0 //OPERATION 4
ADD OPTION aRot TITLE 'Excluir' ACTION 'VIEWDEF.VSPFA30' OPERATION MODEL_OPERATION_DELETE ACCESS 0 //OPERATION 5
ADD OPTION aRot TITLE 'Exporta' ACTION 'u_FATODREL' OPERATION MODEL_OPERATION_DELETE ACCESS 0 //OPERATION 5
ADD OPTION aRot TITLE 'Importa' ACTION 'u_IMPFATOD' OPERATION MODEL_OPERATION_DELETE ACCESS 0 //OPERATION 5
ADD OPTION aRot TITLE 'Lista Aniverssario' ACTION 'U_VSPFATW1' OPERATION MODEL_OPERATION_DELETE ACCESS 0 //OPERATION 5
Return aRot

Static Function ModelDef()

Local oModel := NIL
Local oStruCab := FWFormStruct(1, 'UA9', {|cCampo| AllTRim(cCampo) $ "UA9_CLIENT;UA9_LOJA;UA9_NOME;UA9_ULTCMP;"})
Local oStruGrid := fModStruct()

//Monta o modelo de dados, e na Pós Validação, informa a função fValidGrid
oModel := MPFormModel():New('VSPFA30M', /*bPreValidacao*/, {|oModel| fValidGrid(oModel)}, /*bCommit*/, /*bCancel*/ )

//Agora, define no modelo de dados, que terá um Cabeçalho e uma Grid apontando para estruturas acima
oModel:AddFields('MdField9AU', NIL, oStruCab)
oModel:AddGrid('MdGrid9AU', 'MdField9AU', oStruGrid, , )

//Monta o relacionamento entre Grid e Cabeçalho, as expressões da Esquerda representam o campo da Grid e da direita do Cabeçalho
oModel:SetRelation('MdGrid9AU', {;
{'UA9_FILIAL', 'xFilial("UA9")'},;
{"UA9_CLIENT", "UA9_CLIENT"},;
{"UA9_LOJA", "UA9_LOJA"},;
{"UA9_NOME","UA9_NOME"},;
{"UA9_ULTCMP","UA9_ULTCMP"};
}, UA9->(IndexKey(1)))



//Mostra a Legenda na Grid
oStruGrid:AddField(AllTrim('') ,AllTrim('') ,'UA9_LEGEND' ,'C' , 50 ,0 ,NIL ,NIL ,NIL ,NIL ,{ || Iif(UA9->UA9_CARGO =='P',"CRDIMG16_OCEAN",Iif(UA9->UA9_CARGO=='C',"BMPGROUP",Iif(UA9->UA9_CARGO=='G',"CRITICA_OCEAN",Iif(UA9->UA9_CARGO=='A',"GPEIMG16_OCEAN",Iif(UA9->UA9_CARGO=='F',"BUDGETY",Iif(UA9->UA9_CARGO=='M',"GAVIMG32_MDI","BR_VERDE")))))) } , NIL ,NIL ,.T. )

//Definindo outras informações do Modelo e da Grid
oModel:GetModel("MdGrid9AU"):SetMaxLine(9999)
oModel:SetDescription("Atualização Controle de C.R.M.")
oModel:SetPrimaryKey({"UA9_FILIAL", "UA9_CLIENT", "UA9_LOJA","UA9_NOME"})

Return oModel

Static Function ViewDef()

Local oView := NIL
Local oModel := FWLoadModel('VSPFA30')
Local oStruCab := FWFormStruct(2, "UA9", {|cCampo| AllTRim(cCampo) $ "UA9_CLIENT;UA9_LOJA;UA9_NOME;"})
Local oStruGRID := fViewStruct()

//Define que no cabeçalho não terá separação de abas (SXA)
//oStruCab:SetNoFolder()

//Adiciona o cabeçalho da legenda Grid
oStruGrid:AddField( 'UA9_LEGEND',"00", AllTrim( ''),AllTrim( '' ), { 'Legenda' },'C','@BMP',NIL,'',.T.,NIL,NIL,NIL,NIL,NIL,.T.,NIL,NIL )

//Cria o View
oView:= FWFormView():New()
oView:SetModel(oModel)

//Cria uma área de Field vinculando a estrutura do cabeçalho com MDField9AU, e uma Grid vinculando com MdGrid9AU
oView:AddField('VIEW_9AU', oStruCab, 'MdField9AU')
oView:AddGrid ('GRID_9AU', oStruGRID, 'MdGrid9AU' )


//O cabeçalho (MAIN) terá 25% de tamanho, e o restante de 75% irá para a GRID
oView:CreateHorizontalBox("MAIN", 25)
oView:CreateHorizontalBox("GRID", 75)

//Vincula o MAIN com a VIEW_9AU e a GRID com a GRID_9AU
oView:SetOwnerView('VIEW_9AU', 'MAIN')
oView:SetOwnerView('GRID_9AU', 'GRID')
oView:EnableControlBar(.T.)

// Ordem de Apresentacao dos Campos no cabeçalho
oStruCab:SetProperty("UA9_CLIENT", MVC_VIEW_ORDEM, "01")
oStruCab:SetProperty("UA9_LOJA" , MVC_VIEW_ORDEM, "02")
oStruCab:SetProperty("UA9_NOME" , MVC_VIEW_ORDEM, "03")

// Ordem de Apresentação dos Campos na Grid
oStruGrid:SetProperty("UA9_ANIVER", MVC_VIEW_ORDEM, "01")
oStruGrid:SetProperty("UA9_CARGO" , MVC_VIEW_ORDEM, "02")
oStruGrid:SetProperty("UA9_EMAIL" , MVC_VIEW_ORDEM, "03")
// oStruGrid:SetProperty("UA9_NOMCLI" , MVC_VIEW_ORDEM, "04")
oStruGrid:SetProperty("UA9_TELCEL", MVC_VIEW_ORDEM, "04")
oStruGrid:SetProperty("UA9_TELFIX", MVC_VIEW_ORDEM, "05")
oStruGrid:SetProperty("UA9_ZZITCO", MVC_VIEW_ORDEM, "06")


//Setando as descrições
oModel:SetDescription("Cadastro de C.R.M.")
oModel:GetModel('MdField9AU'):SetDescription('Dados da Cliente')
oModel:GetModel('MdGrid9AU'):SetDescription('Informacoes de Contato')
//Define o campo incremental da grid como o 9AU_ITEM
//oView:AddIncrementField('GRID_9AU', 'UA9_ZZITCO')
Return oView

//Função chamada para montar o modelo de dados da Grid
Static Function fModStruct()
Local oStruct
oStruct := FWFormStruct(1, 'UA9')
Return oStruct

//Função chamada para montar a visualização de dados da Grid
Static Function fViewStruct()
Local cCampoCom := "UA9_CLIENT;UA9_LOJA;UA9_ILTCMP;UA9_NOMCLI;UA9_ULTCMP;UA9_NOME;UA9_ULTCMP"
Local oStruct

//Irá filtrar, e trazer todos os campos, menos os que tiverem na variável cCampoCom
oStruct := FWFormStruct(2, "UA9", {|cCampo| !(Alltrim(cCampo) $ cCampoCom)})
Return oStruct

//Função que faz a validação da grid
Static Function fValidGrid(oModel)
Local lRet := .T.
Local nDeletados := 0
Local nLinAtual :=0
Local oModelGRID := oModel:GetModel('MdGrid9AU')
// Local nValorGrid := 0
//Local cPictVlr := PesqPict('9AU', '9AU_VALOR')

//Percorrendo todos os itens da grid
For nLinAtual := 1 To oModelGRID:Length()
//Posiciona na linha
oModelGRID:GoLine(nLinAtual)

//Se a linha for excluida, incrementa a variável de deletados, senão irá incrementar o valor digitado em um campo na grid
If oModelGRID:IsDeleted()
nDeletados++
Else
// nValorGrid += NoRound(oModelGRID:GetValue("9AU_TCOMB"), 4)
EndIf
Next nLinAtual

//Se o tamanho da Grid for igual ao número de itens deletados, acusa uma falha
If oModelGRID:Length()==nDeletados
lRet :=.F.
Help( , , 'Dados Inválidos' , , 'A grid precisa ter pelo menos 1 linha sem ser excluida!', 1, 0, , , , , , {"Inclua uma linha válida!"})
EndIf

If lRet
//Se o valor digitado no cabeçalho (valor da NF), não bater com o valor de todos os abastecimentos digitados (valor dos itens da Grid), irá mostrar uma mensagem alertando, porém irá permitir salvar (do contrário, seria necessário alterar lRet para falso)
// If nValorMain != nValorGrid
//lRet := .F.
// MsgAlert("O valor do cabeçalho (" + Alltrim(Transform(nValorMain, cPictVlr)) + ") tem que ser igual o valor dos itens (" + Alltrim(Transform(nValorGrid, cPictVlr)) + ")!", "Atenção")
// EndIf
EndIf

Return lRet


O indice da Tabela esta da seguinte maneira: UA9_FILIAL+UA9_CLIENT+UA9_LOJA+UA9_ZZITCO

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.077 segundos
Joomla templates by a4joomla