Olá senhores, nesse post vou compartilhar o PE CRM980MDef que permite a inclusão de novas funcionalidades em Ações Relacionadas no browse do cadastro de cliente, lembrando que esse PE é do CRMA980 o cadastro de cliente do CRM em MVC.
#INCLUDE 'FWMVCDEF.CH'
#include 'topconn.ch'
#Include 'Protheus.ch'
#Include 'RwMake.ch'
#Include 'TbiConn.ch'
#include 'TbiCode.ch'
/*/{Protheus.doc} User Function CRM980MDef
(Adiciona novas funcionalidades em Ações Relacionadas no browse)
@type Function
@author Leandro Lemos
@since 01/07/2020
@version version
@param
@return aRotina
@example
(examples)
@see
(https://tdn.totvs.com/pages/releaseview.action?pageId=285649735
https://tdn.totvs.com/pages/releaseview.action?pageId=6085622
https://tdn.totvs.com/pages/releaseview.action?pageId=463824753
https://tdn.totvs.com/display/public/PROT/DT+Novo+Fonte+de+Cadastro+de+Clientes+em+MVC)
/*/
User Function CRM980MDef()
Local aRotina := {}
//----------------------------------------------------------------------------------------------------------
// [n][1] - Nome da Funcionalidade
// [n][2] - Função de Usuário
// [n][3] - Operação (1-Pesquisa; 2-Visualização; 3-Inclusão; 4-Alteração; 5-Exclusão)
// [n][4] - Acesso relacionado a rotina, se esta posição não for informada nenhum acesso será validado
//----------------------------------------------------------------------------------------------------------
aAdd(aRotina,{"Gerar Fornecedor","u_myMata020()",MODEL_OPERATION_VIEW,0})
Return( aRotina )
User Function myMata020()
Local nOpc := 3
Local oModel := Nil
Local cCodigo := ""
Local cLoja := "01"
Local cCGC := SA1->A1_CGC
Local aError := {}
IF (MSGYESNO( "Deseja criar um Fornecedor a partir do cliente: "+SA1->A1_NOME, "Deseja proceguir?" ))
//Validando os dados de endereço
if EMPTY(SA1->A1_END) .OR. EMPTY(SA1->A1_BAIRRO) .OR. EMPTY(SA1->A1_COD_MUN) .OR. EMPTY(SA1->A1_MUN)
MSGALERT( "Dados de endereço invalidos, favor validar antes de criar o fornecedor", "Endereço Invalido" )
RETURN
endif
cQuery := " SELECT max(trim(A2_COD)) A2_COD"
cQuery += " FROM "+ RetSqlName("SA2") +" SA2 "
cQuery += " where len(A2_COD) = '6' "
cQuery += " and D_E_L_E_T_ = '' "
TCQUERY cQuery NEW ALIAS "QRY"
QRY->(DBGotop())
IF (!EOF())
cCodigo := QRY->A2_COD
cCodigo := SOMA1(cCodigo)
else
MSGALERT( "Erro ao obter a seguencia", "Erro" )
//RETURN
EndIF
QRY->(dbclosearea())
//Caso já exista fornecedor com o mesmo CNPJ utilizo o mesmo código avançando o numero da Filial/Loja
//Durante o Execauto o usuario será perguntando se deseja criar um novo fornecedor com mesmo CNPJ
DBSELECTAREA('SA2')
SA2->(DBSETORDER(3)) //Filial + CGC/CPF
IF (DBSEEK(xFilial("SA2")+cCGC))
while (!EOF() .and. SA2->A2_CGC == cCGC)
cCodigo := SA2->A2_COD
cLoja := soma1(cLoja)
DBSKIP()
end
EndIF
DBSELECTAREA('SA1')
oModel := FWLoadModel('MATA020')
oModel:SetOperation(nOpc)
oModel:Activate()
//Se os dados de endereço forem inválidos não prossegue
oModel:SetValue('SA2MASTER','A2_COD' ,cCodigo)
oModel:SetValue('SA2MASTER','A2_LOJA' ,cLoja)
oModel:SetValue('SA2MASTER','A2_NOME' ,SA1->A1_NOME)
oModel:SetValue('SA2MASTER','A2_NREDUZ' ,SA1->A1_NREDUZ)
oModel:SetValue('SA2MASTER','A2_END' ,CVALTOCHAR( Trim(SA1->A1_END) ))
oModel:SetValue('SA2MASTER','A2_BAIRRO' ,SA1->A1_BAIRRO)
oModel:SetValue('SA2MASTER','A2_EST' ,SA1->A1_EST)
oModel:SetValue('SA2MASTER','A2_COD_MUN',SA1->A1_COD_MUN)
oModel:SetValue('SA2MASTER','A2_MUN' ,SA1->A1_MUN)
oModel:SetValue('SA2MASTER','A2_TIPO' ,SA1->A1_TIPO)
oModel:SetValue('SA2MASTER','A2_CGC' ,cCGC)
If oModel:VldData()
oModel:CommitData()
MSGINFO( "Fornecedor: "+cCodigo+"/"+cLoja+' - '+SUBSTR(SA1->A1_NOME,1,40)+" Cadastrado com sucesso", "Fim" )
Else
aError := oModel:GetErrorMessage()
MSGALERT( aError[6], "Processo não finalizado" )
Endif
oModel:DeActivate()
oModel:Destroy()
EndIF
Return