× Linguagem de Programação ADVPL

Perguntas FILIAL NÃO SALVA TABELAS FILHO

Mais
7 anos 7 meses atrás #31209 por FIOTAO
Prezados, boa tarde, sou novo nesse mundo ADVPL e estou sofrendo um pouco para conseguir salvar a filial nas tabelas filho. No dicionario de dados, a tabela está como exclusivo.

Quando consigo salvar os dados, na principal salva a filial e nas filhas não.

//Bibliotecas
#Include 'Protheus.ch'
#Include 'FWMVCDef.ch'

//Variáveis Estáticas
Static cTitulo := "CADASTRO DE ANALISES"

User Function zMVCMdX()
Local aArea := GetArea()
Local oBrowse
Private ANALISE := ""
Private FILIAL := ""

oBrowse := FWMBrowse():New()
oBrowse:SetAlias("ZA5")
oBrowse:SetDescription(cTitulo)
oBrowse:Activate()
RestArea(aArea)

Return Nil

Static Function MenuDef()
Local aRot := {}

//Adicionando opções
ADD OPTION aRot TITLE 'Visualizar' ACTION 'VIEWDEF.zMVCMdX' OPERATION MODEL_OPERATION_VIEW ACCESS 0 //OPERATION 1
//ADD OPTION aRot TITLE 'Legenda' ACTION 'u_zMVC01Leg' OPERATION 6 ACCESS 0 //OPERATION X
ADD OPTION aRot TITLE 'Incluir' ACTION 'VIEWDEF.zMVCMdX' OPERATION MODEL_OPERATION_INSERT ACCESS 0 //OPERATION 3
ADD OPTION aRot TITLE 'Alterar' ACTION 'VIEWDEF.zMVCMdX' OPERATION MODEL_OPERATION_UPDATE ACCESS 0 //OPERATION 4
ADD OPTION aRot TITLE 'Excluir' ACTION 'VIEWDEF.zMVCMdX' OPERATION MODEL_OPERATION_DELETE ACCESS 0 //OPERATION 5

Return aRot

/*
*
| Func: ModelDef |
| Autor: Daniel Atilio |
| Data: 17/08/2015 |
| Desc: Criação do modelo de dados MVC |
| Obs.: / |
*
*/

Static Function ModelDef()
Local oModel := Nil
Local oStPai := FWFormStruct(1, 'ZA5')
Local oStFilho := FWFormStruct(1, 'ZA6')
Local oStNeto := FWFormStruct(1, 'ZA7')
Local aZA6Rel := {}
Local aZA7Rel := {}

//Criando o modelo e os relacionamentos
//oModel := MPFormModel():New('zMVCMdXM', { |oModel|zMVCMdXI( oModel ) })
oModel := MPFormModel():New('zMVCMdXM', { |oModel|zMVCMdXU( oModel ) } , { |oModel|zMVCMdXV( oModel ) })
oModel:AddFields('ZA5MASTER',/*cOwner*/,oStPai,{|oModel|zMVCMdXT(oModel)},,)
oModel:AddGrid('ZA6DETAIL','ZA5MASTER',oStFilho,/*bLinePre*/, /*bLinePost*/,/*bPre - Grid Inteiro*/,/*bPos - Grid Inteiro*/,/*bLoad - Carga do modelo manualmente*/) //cOwner é para quem pertence
oModel:AddGrid('ZA7DETAIL','ZA6DETAIL',oStNeto,/*bLinePre*/, /*bLinePost*/,/*bPre - Grid Inteiro*/,/*bPos - Grid Inteiro*/,/*bLoad - Carga do modelo manualmente*/) //cOwner é para quem pertence

//Fazendo o relacionamento entre o Pai e Filho
aAdd(aZA6Rel, {'ZA6_FILIAL', 'xFilial( "ZA5" )'} )
aAdd(aZA6Rel, {'ZA6_ANALIS','ZA5_ANALIS'})

//Fazendo o relacionamento entre o Filho e Neto
aAdd(aZA7Rel, {'ZA7_FILIAL','xFilial( "ZA5" )'} )
aAdd(aZA7Rel, {'ZA7_ANALIS','ZA5_ANALIS'})

oModel:SetRelation('ZA6DETAIL', aZA6Rel, ZA6->(IndexKey(1))) //IndexKey -> quero a ordenação e depois filtrado
//oModel:GetModel('ZA6DETAIL'):SetUniqueLine({"ZA6_FILIAL","ZA6_ANALIS"}) //Não repetir informações ou combinações {"CAMPO1","CAMPO2","CAMPOX"}
oModel:SetPrimaryKey({"ZA6_FILIAL","ZA6_ANALIS"})

oModel:SetRelation('ZA7DETAIL', aZA7Rel, ZA7->(IndexKey(1))) //IndexKey -> quero a ordenação e depois filtrado
//oModel:GetModel('ZA7DETAIL'):SetUniqueLine({"ZA7_FILIAL","ZA7_ANALIS"}) //Não repetir informações ou combinações {"CAMPO1","CAMPO2","CAMPOX"}
oModel:SetPrimaryKey({"ZA7_FILIAL","ZA7_ANALIS"})

//Setando as descrições
oModel:SetDescription("CADASTRO DE ANALISE")
oModel:GetModel('ZA5MASTER'):SetDescription('ANALISE')
oModel:GetModel('ZA6DETAIL'):SetDescription('ANALISE FISICA')
oModel:GetModel('ZA7DETAIL'):SetDescription('ANALISE QUIMICA')

Return oModel

/*
*
| Func: ViewDef |
| Autor: Daniel Atilio |
| Data: 17/08/2015 |
| Desc: Criação da visão MVC |
| Obs.: / |
*
*/

Static Function ViewDef()
Local oView := Nil
Local oModel := FWLoadModel('zMVCMdX')
Local oStPai := FWFormStruct(2, 'ZA5')
Local oStFilho := FWFormStruct(2, 'ZA6')
Local oStNeto := FWFormStruct(2, 'ZA7')
//Estruturas das tabelas e campos a serem considerados
Local aStruZA5 := ZA5->(DbStruct())
Local aStruZA6 := ZA6->(DbStruct())
Local aStruZA7 := ZA7->(DbStruct())
Local cConsZA5 := "ZA5_ANALIS;ZA5_USUARI;ZA5_AMOSTR;ZA5_DATA "
Local cConsZA6 := "ZA6_MALHAS;ZA6_MATERI"
Local cConsZA7 := "ZA7_SUBSTA;ZA7_METODO;ZA7_RESULT;ZA7_ATENDE"
Local nAtual := 0

//Criando a View
oView := FWFormView():New()
oView:SetModel(oModel)

//Adicionando os campos do cabeçalho e o grid dos filhos
oView:AddField('VIEW_ZA5',oStPai,'ZA5MASTER')
oView:AddGrid('VIEW_ZA6',oStFilho,'ZA6DETAIL')
oView:AddGrid('VIEW_ZA7',oStNeto,'ZA7DETAIL')

//Setando o dimensionamento de tamanho
oView:CreateHorizontalBox('CABEC',20)
oView:CreateHorizontalBox('GRID',40)
oView:CreateHorizontalBox('GRID2',27)

//Amarrando a view com as box
oView:SetOwnerView('VIEW_ZA5','CABEC')
oView:SetOwnerView('VIEW_ZA6','GRID')
oView:SetOwnerView('VIEW_ZA7','GRID2')

//Habilitando título
oView:EnableTitleView('VIEW_ZA5','ANALISE')
oView:EnableTitleView('VIEW_ZA6','ANALISE FISICA')
oView:EnableTitleView('VIEW_ZA7','ANALISE QUIMICA')

//Percorrendo a estrutura da ZA5
For nAtual := 1 To Len(aStruZA5)
//Se o campo atual não estiver nos que forem considerados
If ! Alltrim(aStruZA5[nAtual][01]) $ cConsZA5
oStPai:RemoveField(aStruZA5[nAtual][01])
EndIf
Next

//Percorrendo a estrutura da ZA6
For nAtual := 1 To Len(aStruZA6)
//Se o campo atual não estiver nos que forem considerados
If ! Alltrim(aStruZA6[nAtual][01]) $ cConsZA6
oStFilho:RemoveField(aStruZA6[nAtual][01])
EndIf
Next

//Percorrendo a estrutura da ZA7
For nAtual := 1 To Len(aStruZA7)
//Se o campo atual não estiver nos que forem considerados
If ! Alltrim(aStruZA7[nAtual][01]) $ cConsZA7
oStNeto:RemoveField(aStruZA7[nAtual][01])
EndIf
Next
Return oView

Static Function zMVCMdXT( oModel )
Local lRet := .T.
Local oModelZA5 := oModel:GetModel( 'ZA5MASTER' )
ANALISE := ZA5->ZA5_ANALIS
FILIAL := ZA5->ZA5_FILIAL

Return(lRet)

//// CLICAR NO CONFIRMAR
Static Function zMVCMdXV( oModel )
Local lRet := .T.
Local oModelZA5 := oModel:GetModel( 'ZA5MASTER' )
Local oModelZA6 := oModel:GetModel( 'ZA6DETAIL' )
Local oModelZA7 := oModel:GetModel( 'ZA7DETAIL' )
Local nOpc := oModel:GetOperation()
//LOCAL aArea := GetArea()

ALERT(ANALISE)
if Empty(oModelZA6:GetValue('ZA6_ANALIS'))
oModelZA6:SetValue('ZA6_ANALIS',ANALISE)
oModelZA6:SetValue('ZA6_FILIAL',FILIAL)
Endif
if Empty(oModelZA7:GetValue('ZA7_ANALIS'))
oModelZA7:SetValue('ZA7_ANALIS',ANALISE)
oModelZA7:SetValue('ZA7_FILIAL',FILIAL)
Endif
Begin Transaction
if nOpc == MODEL_OPERATION_INSERT
ALERT(oModelZA7:GetValue('ZA7_FILIAL'))

dbSelectArea("ZA5")
ZA5->(dbSetOrder(1))
ZA5->(dbGoTop())
If(ZA5->(dbSeek(xFilial("ZA5")+Alltrim(oModelZA5:GetValue('ZA5_ANALIS')))))
SFCMsgErro("A chave "+Alltrim(oModelZA5:GetValue('ZA5_ANALIS'))+" ja foi informada!","fEXPMVC1")
lRet := .F.
Endif
Endif
ALERT(lRet)
if !lRet
DisarmTransaction()
Endif

End Transaction
//RestArea(aArea)
FwModelActive( oModel, .T. )
Return lRet

//// PRE VALIDACAO
Static Function zMVCMdXU( oModel )
Local lRet := .T.
Local oModelZA5 := oModel:GetModel( 'ZA5MASTER' )
Local oModelZA6 := oModel:GetModel( 'ZA6DETAIL' )
Local oModelZA7 := oModel:GetModel( 'ZA7DETAIL' )
Local nOpc := oModel:GetOperation()
Local aArea := GetArea()

if Empty(oModelZA6:GetValue('ZA6_ANALIS'))
oModelZA6:SetValue('ZA6_ANALIS',ALLTRIM(ANALISE))
oModelZA6:SetValue('ZA6_FILIAL',XFILIAL('ZA5'))
Endif
if Empty(oModelZA7:GetValue('ZA7_ANALIS'))
oModelZA7:SetValue('ZA7_ANALIS',ALLTRIM(ANALISE))
oModelZA7:SetValue('ZA7_FILIAL',XFILIAL('ZA5'))
Endif
RestArea(aArea)
FwModelActive( oModel, .T. )
Return lRet

Por favor Acessar ou Registrar para participar da conversa.

Mais
7 anos 7 meses atrás #31210 por kanaamlrr
Respondido por kanaamlrr no tópico FILIAL NÃO SALVA TABELAS FILHO
O xFilial deve ser sempre da tabela que você está gravando a informação, então você deveria usar por exemplo:
aAdd(aZA6Rel, {'ZA6_FILIAL', 'xFilial( "ZA6" )'} )

ao invés de
aAdd(aZA6Rel, {'ZA6_FILIAL', 'xFilial( "ZA5" )'} )

Abraço!

Por favor Acessar ou Registrar para participar da conversa.

Mais
7 anos 7 meses atrás #31211 por FIOTAO
Respondido por FIOTAO no tópico FILIAL NÃO SALVA TABELAS FILHO
Muito obrigado. Funcionou. Era mais simples que eu imaginei.

Por favor Acessar ou Registrar para participar da conversa.

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