Estou mechendo com uma rotina MVC tentando incluir a funcao copia

image_2025_02_26T13_10_06_852Z
Mas deu o seguinte erro que não estou conseguindo identificar qual o problema realmente por de tras

1 curtida

Bom dia,
Voce poderia adicionar o trecho do método de incremento, ou você não faz esse tratamento no teu fonte?

@akumanodriver234 , bom dia.

Me passe onde vc está chamando o addincrementField e como está o seu menu chamando a cópia?

A Copia tem que está assim no menu.

ADD OPTION aRotina TITLE 'Copiar'		ACTION 'VIEWDEF.User_Function'		OPERATION 9 ACCESS 0

obrigada mas surgiu outro problema ta copiando mas os itens da promoção estão sendo duplicado tanto na original quanto da copia minha duvida é normal a funcao copia e duplicar itens ou nao

Boa tarde, compartilha o fonte pra ser mais preciso na ajuda.

User Function PROMDOMA()

Local oBrowse

//If !FWIsAdmin(__cUserID)
//	MsgAlert("Rotina Restrita à Administradores!", "Atenção")
//	Return()M410PVNF
//EndIf

Private cCadastro := OemToAnsi("Cadastro de Promoções - DOMA")
Private aRotina   := MenuSZH()

oBrowse := FWMBrowse():New()
oBrowse:SetAlias("SZH")
oBrowse:AddLegend("SZH->ZH_STATUS == '1'", "GREEN", "Em Vigêcia") // Legenda
oBrowse:AddLegend("SZH->ZH_STATUS == '2'", "RED"  , "Encerrada Automaticamente") // Legenda
oBrowse:AddLegend("SZH->ZH_STATUS == '3'", "RED"  , "Cancelada") // Legenda
oBrowse:AddLegend("SZH->ZH_STATUS == '4'", "RED"  , "Encerrada Manualmente") // Legenda
oBrowse:AddLegend("SZH->ZH_STATUS == '5'", "RED"  , "Encerrada por Dt Validade") // Legenda
oBrowse:SetDescription(cCadastro)
oBrowse:Activate()

Return()

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ ModelDef º Autor ³ Lucas Lott º Data ³ 15/10/2020 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Modelo º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ PROMDOMA º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/

Static Function ModelDef()

Local oModel   := Nil
Local oStPai   := FWFormStruct(1, "SZH")
Local oStFilho := FWFormStruct(1, "SZI")
Local aSZIRel  := {}

//Definições dos campos
oStPai:SetProperty("ZH_DATAINI"  , MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID , "U_DATAINI() .AND. U_VldCabZH()" )) //VALIDAÇÃO DO CAMPO
oStPai:SetProperty("ZH_DATAFIM"  , MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID , "U_DATAINI() .AND. U_VldCabZH()" )) //VALIDAÇÃO DO CAMPO
oStPai:SetProperty("ZH_TIPOPRO"  , MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID , "U_VldCabZH()"                   )) //VALIDAÇÃO DO CAMPO
oStPai:SetProperty("ZH_STATUS"   , MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID , "U_PROMOK()"                     )) //VALIDAÇÃO DO CAMPO

// validações para concatenar o nome da promoção
oStPai:SetProperty("ZH_TIPOPRO"  , MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID , "U_VldCabZH()")) //VALIDAÇÃO DO CAMPO
oStPai:SetProperty("ZH_TABPRC"   , MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID , "U_VldCabZH()")) //VALIDAÇÃO DO CAMPO
// fim das valições para concatenar nome da promoção

//oStPai:SetProperty("ZI_"   ,    MODEL_FIELD_VALID,  FwBuildFeature(STRUCT_FEATURE_VALID , "U_VldCabZH()")) //VALIDAÇÃO DO CAMPO
oStFilho:SetProperty("ZI_ITEM"   , MODEL_FIELD_INIT , FwBuildFeature(STRUCT_FEATURE_INIPAD, "U_INITEMZI()"))//inicializador padrão
//oStFilho:SetProperty("ZI_CODPROD", MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID , "U_EXTPROM(M->ZI_CODPROD, M->ZH_TABPRC)")) //VALIDAÇÃO DO CAMPO
oStFilho:SetProperty("ZI_CODPROD", MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID , "U_EXTPROM(M->ZI_CODPROD, M->ZH_TABPRC) .and. U_RetPr()")) //VALIDAÇÃO DO CAMPO
oStFilho:SetProperty("ZI_DTVALID", MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID , "U_DiasProm(.T.,,M->ZI_CODPROD,M->ZI_DTVALID)")) //VALIDAÇÃO DO CAMPO

// TudoOkZH static function chamada na validação total do formulário
oModel := MPFormModel():New("MODELSZH", , {|oModel| TudoOkZH(oModel)})
oModel:AddFields("SZHMASTER", , oStPai,,)
oModel:AddGrid("SZIDETAIL", "SZHMASTER", oStFilho,/*bLinePre*/, {|oModelGrid| LinOk(oModelGrid)}/*VALIDAÇÃO DA LINHA*/,,/*bPos - Grid Inteiro*/,/*bLoad - Carga do modelo manualmente*/)

//Fazendo relacionamento entre pai e filho
aAdd(aSZIRel, {"ZI_FILIAL" , "ZH_FILIAL"})
aAdd(aSZIRel, {"ZI_CODPROM", "ZH_CODIGO"})

oModel:SetRelation("SZIDETAIL", aSZIRel, SZI->(IndexKey(1)))
oModel:SetPrimaryKey({})

oModel:SetDescription("Cadastro de Promoções - DOMA")
oModel:GetModel("SZHMASTER"):SetDescription("Cadastro")
oModel:GetModel("SZIDETAIL"):SetDescription("Produtos")

Return(oModel)

*******************

User Function RetPr() // função para ser acionada após digitação do ZI_CODPROD
*******************

Local cDsc as character
Local oModel as object
Local cProd as character
Local oModelGrid as object

oModel:= FwModelActive()   // Define oModel
oModelGrid := oModel:getModel("SZIDETAIL") // Pega o modelo do grid com base no modelo ativo
cProd := oModelGrid:GetValue("ZI_CODPROD") // Pega o código digitado no grid

cDsc := RetTpProm(M->ZH_TIPOPRO, cProd) // chama a função para pegar a descrição

/If !Empty(DTOC(M->ZH_DATAINI))
cDsc += " - DE " + DTOC(M->ZH_DATAINI)
EndIf
/

If !Empty(DTOC(M->ZH_DATAINI)) .AND. DTOC(M->ZH_DATAINI) != " / / "
cDsc += " - DE " + DTOC(M->ZH_DATAINI)

If !Empty(M->ZH_DATAFIM) .AND. DTOC(M->ZH_DATAFIM) != " / /    "
    cDsc += " ATÉ " + DTOC(M->ZH_DATAFIM)
EndIf

Else
If !Empty(M->ZH_DATAFIM) .AND. DTOC(M->ZH_DATAFIM) != " / / "
cDsc := "DE " + DTOC(M->ZH_DATAINI)
EndIf
EndIf

oModel:SetValue(“SZHMASTER”, “ZH_DESCRI”, cDsc) // Atualiza ZH_DESCRI

return .T.

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ ViewDef º Autor ³ Lucas Lott º Data ³ 15/10/2020 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ View º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ PROMDOMA º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/

Static Function ViewDef()

Local oView    := Nil
Local oModel   := FWLoadModel("PROMDOMA")
Local oStPai   := FWFormStruct(2, "SZH")
Local oStFilho := FWFormStruct(2, "SZI")
Local aOpc     := {MODEL_OPERATION_INSERT,MODEL_OPERATION_UPDATE} //Array UniDimencional contendo em que tipo de op. o botão fica visivel

If !FWIsAdmin(__cUserID)
	MsgAlert("Rotina Restrita à Administradores!", "Atenção")
	Return()
EndIf

oView := FWFormView():New()
oView:AddUserButton("Importar Produtos"  , "MAGIC_BMP", {|oModelGrid| U_IMPPROD(oModelGrid)                     }, "Importar Produtos", , aOpc, .F.)
oView:AddUserButton("Calc. Margem"       , "MAGIC_BMP", {|oModelGrid| CALCMARG(oModelGrid, M->ZH_TABPRC)        }, "Calcular Margem"  , , aOpc, .T.)
oView:AddUserButton("Import. Marcas"     , "MAGIC_BMP", {|oModelGrid| ImportMarc(oModelGrid, M->ZH_TABPRC)      }, "Import. Marcas"   , , aOpc, .F.)
oView:AddUserButton("Import. Monit."     , "MAGIC_BMP", {|oModelGrid| ImportMont(oModelGrid)                    }, "Import. Monit."   , , aOpc, .F.)
oView:AddUserButton("Consulta Promoção"  , "MAGIC_BMP", {|oModelGrid| ConsultProm(M->ZH_TABPRC, oModelGrid)     }, "Consulta Promoção", ,     , .F.)
oView:AddUserButton("Cons. Item Promoção", "MAGIC_BMP", {|oModelGrid| ConsultProm(M->ZH_TABPRC, oModelGrid, .T.)}, "Consulta Promoção", ,     , .F.)
oView:AddUserButton("Exp. Grid", "MAGIC_BMP", {|oModelGrid| prencheGrid()}, "Exp. Grid", ,     , .F.)
oView:AddUserButton("Atulizar Valid. Dias", "MAGIC_BMP", {|oModelGrid| AttValDias()}, "Exp. Grid", ,     , .F.)
oView:SetModel(oModel)

oView:AddField("VIEW_SZH", oStPai  , "SZHMASTER")
oView:AddGrid("VIEW_SZI" , oStFilho, "SZIDETAIL")

oView:CreateHorizontalBox("CABEC", 25)
oView:CreateHorizontalBox("GRID" , 75)

oView:SetOwnerView("VIEW_SZH", "CABEC")
oView:SetOwnerView("VIEW_SZI", "GRID" )

Return(oView)

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ MenuSZH º Autor ³ Lucas Lott º Data ³ 15/10/2020 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Menu Funcional º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ PROMDOMA º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/

Static Function MenuSZH()

Private aRotina := {}

//Adicionando opções
ADD OPTION aRotina TITLE 'Visualizar'          ACTION 'VIEWDEF.PROMDOMA' OPERATION MODEL_OPERATION_VIEW   ACCESS 0 //OPERATION 1
ADD OPTION aRotina TITLE 'Incluir'             ACTION 'VIEWDEF.PROMDOMA' OPERATION MODEL_OPERATION_INSERT ACCESS 0 //OPERATION 3
ADD OPTION aRotina TITLE 'Alterar'             ACTION 'VIEWDEF.PROMDOMA' OPERATION MODEL_OPERATION_UPDATE ACCESS 0 //OPERATION 4
ADD OPTION aRotina TITLE 'Excluir'             ACTION 'VIEWDEF.PROMDOMA' OPERATION MODEL_OPERATION_DELETE ACCESS 0 //OPERATION 5
ADD OPTION aRotina TITLE 'Rel. Prom.'          ACTION 'U_RelProm()'      OPERATION MODEL_OPERATION_VIEW   ACCESS 0 //OPERATION 1
//ADD OPTION aRotina TITLE 'Rel. Analitico'      ACTION 'U_PromVend()'     OPERATION MODEL_OPERATION_VIEW   ACCESS 0 //OPERATION 1
ADD OPTION aRotina TITLE 'Result. da Promoção' ACTION 'U_CONSPRO("A")'   OPERATION MODEL_OPERATION_VIEW   ACCESS 0 //OPERATION 1
ADD OPTION aRotina TITLE 'Result. Geral Prom.' ACTION 'U_CONSPRO("B")'   OPERATION MODEL_OPERATION_VIEW   ACCESS 0 //OPERATION 1
ADD OPTION aRotina TITLE 'Exportar Excel.' ACTION 'U_EXPPROM()'   OPERATION MODEL_OPERATION_VIEW   ACCESS 0 //OPERATION 1

Return(aRotina)

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ CODSZH º Autor ³ Lucas Lott º Data ³ 15/10/2020 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Inicializador Padrão Código da Promoção º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ PROMDOMA º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/

User Function CODSZH()

Local aArea := GetArea()
Local cRet  := ""
Local cSQL  := ""

cSQL := " SELECT MAX(ZH_CODIGO) ZH_CODIGO "
cSQL += " FROM " + RetSqlName("SZH")

cSQL := ChangeQuery(cSQL)
TCQUERY cSQL NEW ALIAS "QRYSZH"

DbSelectArea("QRYSZH")
QRYSZH->(DbGoTop())

While !EOF()
	cRet := QRYSZH->ZH_CODIGO
	DbSkip()
EndDo
QRYSZH->(DbCloseArea())

If cRet == "      "
	cRet := "000001"
Else
	cRet := STRZERO(VAL(cRet) + 1, 6)
EndIf

RestArea(aArea)

Return(cRet)