Olá pessoal,
Tenho um problema na minha tela MVC modelo X, onde tenho 4 grids... Acontece que quando vou salvar os registros ao (INCLUIR) os registros não aparecem quando vou visualizar.
Em (Alteração) também não....fazendo alguns testes, percebi que ele está salvando em cada grid um de cada vez. então ele salva na primeira grid, faço qualquer alteração na tela independente de qual grid, ele salva a segunda, e assim por diante. Toda vez que confirmo a alteração ele vai salvando as alterações ...
Alguém poderia me dizer se é algum problema no ModelDef, algo que cause esse erro em salvar registros em MVC.
/ REGRAS DE NEGÓCIO
Static Function ModelDef()
// INSTANCIA O MODELO
Local oModel := MPFormModel():New("ProAmbM",,,,)
// INSTANCIA OS SUBMODELOS
Local oStruZZG := FwFormStruct(1, "ZZG")//GRUPO CONTROLADORIA
Local oStruZZH := FwFormStruct(1, "ZZH")//EMPRESA/FILIAL
Local oStruZZI := FwFormStruct(1, "ZZI")//NCM
Local oStruZZJ := FwFormStruct(1, "ZZJ")//CFOP
Local oStruZZK := FwFormStruct(1, "ZZK")//CST
Local oStruZZL := FwFormStruct(1, "ZZL")//TES
//ARRAYS DOS GATILHOS CAMPOS DUPLICADA TES E ESTOQUE TES.
//Local aAux := {}
//Local aEst := {}
// DEFINE SE OS SUBMODELOS SERÃO FIELD OU GRID
oModel:AddFields("ZZGMASTER", NIL, oStruZZG)//GRUPO CONTROLADORIA
oModel:AddGrid("ZZHDETAIL", "ZZGMASTER", oStruZZH)//EMPRESA/FILIAL
oModel:AddGrid("ZZIDETAIL", "ZZHDETAIL", oStruZZI)//NCM
oModel:AddGrid("ZZJDETAIL", "ZZIDETAIL", oStruZZJ)//CFOP
oModel:AddGrid("ZZKDETAIL", "ZZJDETAIL", oStruZZK)//CST
oModel:AddGrid("ZZLDETAIL", "ZZKDETAIL", oStruZZL)//TES
//DEFINIÇÕES DOS CAMPOS
oStruZZG:SetProperty('ZZG_GRUPO', MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID, 'ExistChav("ZZG", M->ZZG_GRUPO)')) //Validação de Campo, não deixa repetir Grupo Contro já cadastrado.
oStruZZH:SetProperty('ZZH_CODEMP', MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID, 'u_zEMP()'))
oStruZZI:SetProperty('ZZI_NCM', MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID, 'u_zNCM()'))
oStruZZJ:SetProperty('ZZJ_CFOP', MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID, 'u_zCfop()'))
oStruZZK:SetProperty('ZZK_CSTICM', MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID, 'u_zCst()'))
oStruZZL:SetProperty('ZZL_TES', MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID, 'u_zTES()'))
oStruZZL:SetProperty('ZZL_CF', MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID, 'u_zCfopT()'))
//oStruZZL:SetProperty('ZZL_DESTES', MODEL_FIELD_INIT, FwBuildFeature(STRUCT_FEATURE_INIPAD, 'U_iTST()'))//Ini Padrão
//CAMPO CHECKBOX STATUS
oStruZZH:AddField('STATUS','','STATUS','L',1,0,,,{},.F.,FWBuildFeature(STRUCT_FEATURE_INIPAD,".F."))
oStruZZI:AddField('STATUS','','STATUS','L',1,0,,,{},.F.,FWBuildFeature(STRUCT_FEATURE_INIPAD,".F."))
oStruZZJ:AddField('STATUS','','STATUS','L',1,0,,,{},.F.,FWBuildFeature(STRUCT_FEATURE_INIPAD,".F."))
oStruZZK:AddField('STATUS','','STATUS','L',1,0,,,{},.F.,FWBuildFeature(STRUCT_FEATURE_INIPAD,".F."))
oStruZZL:AddField('STATUS','','STATUS','L',1,0,,,{},.F.,FWBuildFeature(STRUCT_FEATURE_INIPAD,".F."))
//ADICIONA CAMPOS DA TES, DUPLICADA E ESTOQUE.
oStruZZL:AddField( 'X_DUP' , 'X_DUP' , 'X_DUP' , 'C' ,1,0,,,{},.F.,FWBuildFeature(STRUCT_FEATURE_INIPAD,'IIF(!INCLUI,POSICIONE("SF4",1,XFILIAL("SF4")+ZZL->ZZL_TES,"F4_DUPLIC"),"")'))//Ini Padrão
oStruZZL:AddField( 'X_EST' , 'X_EST' , 'X_EST' , 'C' ,1,0,,,{},.F.,FWBuildFeature(STRUCT_FEATURE_INIPAD,'IIF(INCLUI,"",POSICIONE("SF4",1,FwXFilial("SF4")+ZZL->ZZL_TES,"F4_ESTOQUE"))'))//Ini Padrão
//GATILHO DO CAMPO DUPLICADA TES.
aAux := FwStruTrigger(;
'ZZL_TES' ,; //Campo Origem
'X_DUP' ,; //Campo Destino
'SF4->F4_DUPLIC',; //Regra de Preenchimento
.T.,; //Irá Posicionar?
'SF4' ,; //Alias de Posicionamento
1,; //Índice de Posicionamento
'FwXFilial("SF4")+M->ZZL_TES',; //Chave de Posicionamento
NIL,; //Condição para execução do gatilho
"003"); //Sequência do gatilho
oStruZZL:AddTrigger( ;
aAux[1] , ; // [01] identificador (ID) do campo de origem
aAux[2] , ; // [02] identificador (ID) do campo de destino
aAux[3] , ; // [03] Bloco de código de validação da execução do gatilho
aAux[4] ) // [04] Bloco de código de execução do gatilho
//GATILHO DO CAMPO ESTOQUE TES.
aEst := FwStruTrigger(;
'ZZL_TES' ,; //Campo Origem
'X_EST' ,; //Campo Destino
'SF4->F4_ESTOQUE',; //Regra de Preenchimento
.T.,; //Irá Posicionar?
'SF4' ,; //Alias de Posicionamento
1,; //Índice de Posicionamento
'FwXFilial("SF4")+M->ZZL_TES',; //Chave de Posicionamento
NIL,; //Condição para execução do gatilho
"004"); //Sequência do gatilho
oStruZZL:AddTrigger( ;
aEst[1] , ; // [01] identificador (ID) do campo de origem
aEst[2] , ; // [02] identificador (ID) do campo de destino
aEst[3] , ; // [03] Bloco de código de validação da execução do gatilho
aEst[4] ) // [04] Bloco de código de execução do gatilho
//DEFININDO A RELAÇÃO ENTRE OS MODELOS
oModel:SetPrimaryKey({'ZZG_FILIAL','ZZG_GRUPO','ZZG_ESPECI'})//Setando Primary Key
oModel:SetRelation("ZZHDETAIL",{{"ZZH_FILIAL", "FwXFilial('ZZH')"}, {"ZZH_GRUPO", "ZZG_GRUPO"},{"ZZH_ESPECI","ZZG_ESPECI"}}, ZZH->(IndexKey(1)))
oModel:GetModel('ZZHDETAIL'):SetUniqueLine({'ZZH_FILIAL','ZZH_GRUPO','ZZH_ESPECI','ZZH_CODEMP','ZZH_CRPISC'})
oModel:SetRelation("ZZIDETAIL",{{"ZZI_FILIAL", "FwXFilial('ZZI')"}, {"ZZI_GRUPO", "ZZH_GRUPO"},{"ZZI_ESPECI", "ZZH_ESPECI"},{"ZZI_CODEMP","ZZH_CODEMP"},{"ZZI_CRPISC","ZZH_CRPISC"}}, ZZI->(IndexKey(1)))
oModel:GetModel('ZZIDETAIL'):SetUniqueLine({'ZZI_FILIAL','ZZI_GRUPO','ZZI_ESPECI','ZZI_CODEMP','ZZI_CRPISC','ZZI_NCM'})
oModel:SetRelation("ZZJDETAIL",{{"ZZJ_FILIAL", "FwXFilial('ZZJ')"}, {"ZZJ_GRUPO", "ZZI_GRUPO"},{"ZZJ_ESPECI", "ZZI_ESPECI"},{"ZZJ_CODEMP","ZZI_CODEMP"},{"ZZJ_CRPISC","ZZI_CRPISC"},{"ZZJ_NCM","ZZI_NCM"}}, ZZJ->(IndexKey(1)))
oModel:GetModel('ZZJDETAIL'):SetUniqueLine({'ZZJ_FILIAL','ZZJ_GRUPO','ZZJ_ESPECI','ZZJ_CODEMP','ZZJ_CRPISC','ZZJ_NCM','ZZJ_CFOP'})
oModel:SetRelation("ZZKDETAIL",{{"ZZK_FILIAL", "FwXFilial('ZZK')"}, {"ZZK_GRUPO", "ZZJ_GRUPO"},{"ZZK_ESPECI", "ZZJ_ESPECI"},{"ZZK_CODEMP","ZZJ_CODEMP"},{"ZZK_CRPISC","ZZJ_CRPISC"},{"ZZK_NCM","ZZJ_NCM"},{"ZZK_CFOP","ZZJ_CFOP"}}, ZZK->(IndexKey(1)))
oModel:GetModel('ZZKDETAIL'):SetUniqueLine({'ZZK_FILIAL','ZZK_GRUPO','ZZK_ESPECI','ZZK_CODEMP','ZZK_CRPISC','ZZK_NCM','ZZK_CFOP','ZZK_CSTICM'})
oModel:SetRelation("ZZLDETAIL",{{"ZZL_FILIAL", "FwXFilial('ZZL')"}, {"ZZL_GRUPO", "ZZK_GRUPO"},{"ZZL_ESPECI", "ZZK_ESPECI"},{"ZZL_CODEMP","ZZK_CODEMP"},{"ZZL_CRPISC","ZZK_CRPISC"},{"ZZL_NCM","ZZK_NCM"},{"ZZL_CFOP","ZZK_CFOP"},{"ZZL_CSTICM","ZZK_CSTICM"}}, ZZL->(IndexKey(1)))
oModel:GetModel('ZZLDETAIL'):SetUniqueLine({'ZZL_FILIAL','ZZL_GRUPO','ZZL_ESPECI','ZZL_CODEMP','ZZL_CRPISC','ZZL_NCM','ZZL_CFOP','ZZL_CSTICM','ZZL_TES'})
//DESCRIÇÃO DO MODELO
oModel:SetDescription("Controle de Produtos")
//DESCRIÇÃO DOS SUBMODELOS
oModel:GetModel("ZZGMASTER"):SetDescription("Grupo de Controladoria")
oModel:GetModel("ZZHDETAIL"):SetDescription("Empresa/Filial")
oModel:GetModel("ZZIDETAIL"):SetDescription("NCM")
oModel:GetModel("ZZJDETAIL"):SetDescription("CFOP")
oModel:GetModel("ZZKDETAIL"):SetDescription("CST")
oModel:GetModel("ZZLDETAIL"):SetDescription("TES")
Return (oModel)
Eduarda, me desculpe, mas não compreendi bem, você consegue colocar umas imagens demostrando, o código fonte, algo assim, por favor.
— Daniel Mendes 09 de Jun de 2022Olá Daniel. editei e coloquei as imagens...acredito que ele não salva as informações das tabelas de uma vez.. parece que ele entra em uma tabela faz a gravação e depois vai para a seguinte. por que se eu alterar incluindo registros nas grids que faltam, ele salva porem uma por vez.
— Eduarda Menezes 10 de Jun de 2022