Histórico da Página
Exemplo de rotina automática - Inclusão de contrato
A Rotina CNTA300 foi desenvolvida em MVC, portanto para realizar a inclusão, alteração e exclusão de um contrato, automaticamente, deve-se fazer uso do modelo de dados. A Seguir mostraremos um exemplo de como realizar a inclusão de um contrato utilizando o modelo de dados da rotina CNTA300.
Para mais detalhes sobre a utilização do MVC, consulte a pagina: http://tdn.totvs.com/display/public/mp/AdvPl+utilizando+MVC
Bloco de código | ||
---|---|---|
| ||
#Include 'Protheus.ch' #INCLUDE "FWMVCDEF.CH" User Function CN300AUTO() Local oModel := FWLoadModel("CNTA300") //Carrega o modelo oModel:SetOperation(MODEL_OPERATION_INSERT) // Seta operação de inclusão oModel:Activate() // Ativa o Modelo //Cabeçalho do contrato oModel:SetValue( 'CN9MASTER' , 'CN9_DTINIC' , Ctod("24/02/2017") ) oModel:SetValue( 'CN9MASTER' , 'CN9_NUMERO' , '000000000000069' ) oModel:SetValue( 'CN9MASTER' , 'CN9_UNVIGE' , '3' ) oModel:SetValue( 'CN9MASTER' , 'CN9_VIGE' , 1 ) oModel:SetValue( 'CN9MASTER' , 'CN9_MOEDA' , 1 ) oModel:SetValue( 'CN9MASTER' , 'CN9_CONDPG' , '001' ) oModel:SetValue( 'CN9MASTER' , 'CN9_TPCTO' , '001' ) oModel:SetValue( 'CN9MASTER' , 'CN9_FLGREJ' , '2' ) oModel:SetValue( 'CN9MASTER' , 'CN9_FLGCAU' , '2' ) oModel:SetValue( 'CN9MASTER' , 'CN9_ASSINA' , Ctod("24/02/2017") ) //Cliente/Fornecedor do Contrato oModel:SetValue( 'CNCDETAIL' , 'CNC_CODIGO' , '001 ' ) oModel:SetValue( 'CNCDETAIL' , 'CNC_LOJA' , '01' ) //Planilhas do Contrato oModel:LoadValue( 'CNADETAIL' , 'CNA_CONTRA' , '000000000000069' ) oModel:SetValue( 'CNADETAIL' , 'CNA_NUMERO' , '000001' ) oModel:SetValue( 'CNADETAIL' , 'CNA_FORNEC' , '001 ' ) oModel:SetValue( 'CNADETAIL' , 'CNA_LJFORN' , '01' ) oModel:SetValue( 'CNADETAIL' , 'CNA_TIPPLA' , '004' ) oModel:SetValue( 'CNADETAIL' , 'CNA_FLREAJ' , '2' ) //Itens da Planilha do Contrato oModel:SetValue( 'CNBDETAIL' , 'CNB_ITEM' , '001' ) oModel:SetValue( 'CNBDETAIL' , 'CNB_PRODUT' , '001 ' ) oModel:SetValue( 'CNBDETAIL' , 'CNB_QUANT' , 1 ) oModel:SetValue( 'CNBDETAIL' , 'CNB_VLUNIT' , 1000 ) oModel:SetValue( 'CNBDETAIL' , 'CNB_PEDTIT' , '1' ) //Cronograma Financeiro oModel:GetModel('CNFDETAIL'):SetNoInserLine(.F.) oModel:GetModel('CNFDETAIL'):SetNoUpdateLine(.F.) oModel:LoadValue( 'CNFDETAIL' , 'CNF_NUMERO' , '000071' ) oModel:SetValue( 'CNFDETAIL' , 'CNF_PARCEL' , '01' ) oModel:SetValue( 'CNFDETAIL' , 'CNF_COMPET' , '02/2017' ) oModel:SetValue( 'CNFDETAIL' , "CNF_VLPREV" , 500 ) oModel:SetValue( 'CNFDETAIL' , "CNF_VLREAL" , 0 ) oModel:SetValue( 'CNFDETAIL' , "CNF_SALDO" , 500 ) oModel:SetValue( 'CNFDETAIL' , 'CNF_PRUMED' , Ctod("24/02/2017") ) oModel:SetValue( 'CNFDETAIL' , 'CNF_DTVENC' , Ctod("24/02/2017") ) oModel:SetValue( 'CNFDETAIL' , 'CNF_TXMOED' , 1 ) oModel:GetModel('CNFDETAIL'):AddLine() oModel:LoadValue( 'CNFDETAIL' , 'CNF_NUMERO' , '000071' ) oModel:SetValue( 'CNFDETAIL' , 'CNF_PARCEL' , '02' ) oModel:SetValue( 'CNFDETAIL' , 'CNF_COMPET' , '02/2017' ) oModel:SetValue( 'CNFDETAIL' , "CNF_VLPREV" , 500 ) oModel:SetValue( 'CNFDETAIL' , "CNF_VLREAL" , 0 ) oModel:SetValue( 'CNFDETAIL' , "CNF_SALDO" , 500 ) oModel:SetValue( 'CNFDETAIL' , 'CNF_PRUMED' , Ctod("24/02/2017") ) oModel:SetValue( 'CNFDETAIL' , 'CNF_DTVENC' , Ctod("24/02/2017") ) oModel:SetValue( 'CNFDETAIL' , 'CNF_TXMOED' , 1 ) //Validação e Gravação do Modelo If oModel:VldData() oModel:CommitData() EndIf Return |
Exemplo de Rotina Automática CNTA300
Características do Requisito
Linha de Produto: | Microsiga Protheus | ||||
Segmento: | Serviços | ||||
Módulo: | Gestão de Contratos | ||||
Rotina: |
| ||||
País(es): | Todos | ||||
Banco(s) de Dados: | Todos | ||||
Sistema(s) Operacional(is): | Todos |
Informações | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||
|
Exemplo de rotina automática - Inclusão de contrato
A Rotina CNTA300 foi desenvolvida em MVC, portanto para realizar a inclusão, alteração e exclusão de um contrato, automaticamente, deve-se fazer uso do modelo de dados. A Seguir mostraremos um exemplo de como realizar a inclusão de um contrato utilizando o modelo de dados da rotina CNTA300.
Para mais detalhes sobre a utilização do MVC, consulte a pagina: http://tdn.totvs.com/display/public/mp/AdvPl+utilizando+MVC
Bloco de código | ||
---|---|---|
| ||
#Include 'Protheus.ch' #INCLUDE "FWMVCDEF.CH" User Function CN300AUTO() Local oModel := FWLoadModel("CNTA300") //Carrega o modelo oModel:SetOperation(MODEL_OPERATION_INSERT) // Seta operação de inclusão oModel:Activate() // Ativa o Modelo //Cabeçalho do contrato oModel:SetValue( 'CN9MASTER' , 'CN9_DTINIC' , Ctod("24/02/2017") ) oModel:SetValue( 'CN9MASTER' , 'CN9_NUMERO' , '000000000000069' ) oModel:SetValue( 'CN9MASTER' , 'CN9_UNVIGE' , '3' ) oModel:SetValue( 'CN9MASTER' , 'CN9_VIGE' , 1 ) oModel:SetValue( 'CN9MASTER' , 'CN9_MOEDA' , 1 ) oModel:SetValue( 'CN9MASTER' , 'CN9_CONDPG' , '001' ) oModel:SetValue( 'CN9MASTER' , 'CN9_TPCTO' , '001' ) oModel:SetValue( 'CN9MASTER' , 'CN9_FLGREJ' , '2' ) oModel:SetValue( 'CN9MASTER' , 'CN9_FLGCAU' , '2' ) oModel:SetValue( 'CN9MASTER' , 'CN9_ASSINA' , Ctod("24/02/2017") ) //Cliente/Fornecedor do Contrato oModel:SetValue( 'CNCDETAIL' , 'CNC_CODIGO' , '001 ' ) oModel:SetValue( 'CNCDETAIL' , 'CNC_LOJA' , '01' ) //Planilhas do Contrato oModel:LoadValue( 'CNADETAIL' , 'CNA_CONTRA' , '000000000000069' ) oModel:SetValue( 'CNADETAIL' , 'CNA_NUMERO' , '000001' ) oModel:SetValue( 'CNADETAIL' , 'CNA_FORNEC' , '001 ' ) oModel:SetValue( 'CNADETAIL' , 'CNA_LJFORN' , '01' ) oModel:SetValue( 'CNADETAIL' , 'CNA_TIPPLA' , '004' ) oModel:SetValue( 'CNADETAIL' , 'CNA_FLREAJ' , '2' ) //Itens da Planilha do Contrato oModel:SetValue( 'CNBDETAIL' , 'CNB_ITEM' , '001' ) oModel:SetValue( 'CNBDETAIL' , 'CNB_PRODUT' , '001 ' ) oModel:SetValue( 'CNBDETAIL' , 'CNB_QUANT' , 1 ) oModel:SetValue( 'CNBDETAIL' , 'CNB_VLUNIT' , 1000 ) oModel:SetValue( 'CNBDETAIL' , 'CNB_PEDTIT' , '1' ) //Cronograma Financeiro oModel:GetModel('CNFDETAIL'):SetNoInserLine(.F.) oModel:GetModel('CNFDETAIL'):SetNoUpdateLine(.F.) oModel:LoadValue( 'CNFDETAIL' , 'CNF_NUMERO' , '000071' ) oModel:SetValue( 'CNFDETAIL' , 'CNF_PARCEL' , '01' ) oModel:SetValue( 'CNFDETAIL' , 'CNF_COMPET' , '02/2017' ) oModel:SetValue( 'CNFDETAIL' , "CNF_VLPREV" , 500 ) oModel:SetValue( 'CNFDETAIL' , "CNF_VLREAL" , 0 ) oModel:SetValue( 'CNFDETAIL' , "CNF_SALDO" , 500 ) oModel:SetValue( 'CNFDETAIL' , 'CNF_PRUMED' , Ctod("24/02/2017") ) oModel:SetValue( 'CNFDETAIL' , 'CNF_DTVENC' , Ctod("24/02/2017") ) oModel:SetValue( 'CNFDETAIL' , 'CNF_TXMOED' , 1 ) oModel:GetModel('CNFDETAIL'):AddLine() oModel:LoadValue( 'CNFDETAIL' , 'CNF_NUMERO' , '000071' ) oModel:SetValue( 'CNFDETAIL' , 'CNF_PARCEL' , '02' ) oModel:SetValue( 'CNFDETAIL' , 'CNF_COMPET' , '02/2017' ) oModel:SetValue( 'CNFDETAIL' , "CNF_VLPREV" , 500 ) oModel:SetValue( 'CNFDETAIL' , "CNF_VLREAL" , 0 ) oModel:SetValue( 'CNFDETAIL' , "CNF_SALDO" , 500 ) oModel:SetValue( 'CNFDETAIL' , 'CNF_PRUMED' , Ctod("24/02/2017") ) oModel:SetValue( 'CNFDETAIL' , 'CNF_DTVENC' , Ctod("24/02/2017") ) oModel:SetValue( 'CNFDETAIL' , 'CNF_TXMOED' , 1 ) //Validação e Gravação do Modelo If oModel:VldData() oModel:CommitData() EndIf Return |
Exemplo de rotina automática - Inclusão de contrato com geração do cronograma financeiro/físico
A função CN300AddCrg(aPergunte) permite que se gere automaticamente o cronograma financeiro/físico pela rotina automática da mesma maneira que se faz pela tela(pelo botão Outras Ações → Incluir cronograma financeiro/físico).
A função recebe como argumento o vetor aPergunte, que é composto conforme abaixo:
Utilidade | Valor | |
---|---|---|
1 | Periodicidade(tipo numérico) | 1=Mensal, 2=Quinzenal, 3=Diário, 4=Condição Pagamento |
2 | Dias(tipo numérico) | Número de dias para avançar nas parcelas do cronograma |
3 | Último dia do mês?(tipo lógico) | .T. = SIM ou .F.=NÃO Indica se a data prevista de medição deve ser ajustada para o último dia do mês de competência |
4 | Competência de início?(tipo caractere) | Deve ser composta por mês/ano no formato MM/AAAA(Exemplo: 12/2018) |
5 | Data prevista da 1º medição(tipo data) | Data prevista para que ocorra a primeira medição(exemplo: ) |
6 | Quantidade de parcelas(tipo numérico) | Número de parcelas do cronograma |
7 | Condição de Pagamento(tipo caractere) | Código da condição de pagamento que as parcelas do cronograma devem ser geradas |
8 |
Variável de controle interno, deve ser composta conforma abaixo:
Taxa de Juros(tipo numérico) | Taxa de Juros para cálculo do valor presente |
Bloco de código | ||
---|---|---|
| ||
#Include 'Protheus.ch' #INCLUDE "FWMVCDEF.CH" User Function CN300AUTO() Local aPergunte := {} Local aErro := {} Local oModel := FWLoadModel("CNTA300") //Carrega o modelo oModel:SetOperation(MODEL_OPERATION_INSERT) // Seta operação de inclusão oModel:Activate() // Ativa o Modelo //Cabeçalho do contrato oModel:SetValue( 'CN9MASTER' , 'CN9_DTINIC' , Ctod("24/02/2017") ) oModel:SetValue( 'CN9MASTER' , 'CN9_NUMERO' , '000000000000069' ) oModel:SetValue( 'CN9MASTER' , 'CN9_UNVIGE' , '3' ) oModel:SetValue( 'CN9MASTER' , 'CN9_VIGE' , 1 ) oModel:SetValue( 'CN9MASTER' , 'CN9_MOEDA' , 1 ) oModel:SetValue( 'CN9MASTER' , 'CN9_CONDPG' , '001' ) oModel:SetValue( 'CN9MASTER' , 'CN9_TPCTO' , '001' ) oModel:SetValue( 'CN9MASTER' , 'CN9_FLGREJ' , '2' ) oModel:SetValue( 'CN9MASTER' , 'CN9_FLGCAU' , '2' ) oModel:SetValue( 'CN9MASTER' , 'CN9_ASSINA' , Ctod("24/02/2017") ) //Cliente/Fornecedor do Contrato oModel:SetValue( 'CNCDETAIL' , 'CNC_CODIGO' , '001 ' ) oModel:SetValue( 'CNCDETAIL' , 'CNC_LOJA' , '01' ) //Planilhas do Contrato oModel:LoadValue( 'CNADETAIL' , 'CNA_CONTRA' , '000000000000069' ) oModel:SetValue( 'CNADETAIL' , 'CNA_NUMERO' , '000001' ) oModel:SetValue( 'CNADETAIL' , 'CNA_FORNEC' , '001 ' ) oModel:SetValue( 'CNADETAIL' , 'CNA_LJFORN' , '01' ) oModel:SetValue( 'CNADETAIL' , 'CNA_TIPPLA' , '004' ) oModel:SetValue( 'CNADETAIL' , 'CNA_FLREAJ' , '2' ) //Itens da Planilha do Contrato oModel:SetValue( 'CNBDETAIL' , 'CNB_ITEM' , '001' ) oModel:SetValue( 'CNBDETAIL' , 'CNB_PRODUT' , '001 ' ) oModel:SetValue( 'CNBDETAIL' , 'CNB_QUANT' , 1 ) oModel:SetValue( 'CNBDETAIL' , 'CNB_VLUNIT' , 1000 ) oModel:SetValue( 'CNBDETAIL' , 'CNB_PEDTIT' , '1' ) //Cronograma Financeiro aAdd(aPergunte,1)//Periodicidade: 1=Mensal, 2=Quinzenal, 3=Diario, 4=Cond. Pag. aAdd(aPergunte,30)//Dia(s)? aAdd(aPergunte,.T.)//Ultimo dia do mes? .T.=SIM, .F.=NAO aAdd(aPergunte,"12/2018")//Competencia de inicio? aAdd(aPergunte,CToD("20/12/2018"))//Data prevista 1º medicao aAdd(aPergunte,12)//Quantidade de parcelas aAdd(aPergunte," ")//Condicao de Pagamento? aAdd(aPergunte,.F.0)//SeTaxa for mensal(Periodicidade: 1=Mensal) e Ultimo dia do Mes=SIM, entao deve ser .T., caso contrario .F.de Juros para cálculo do valor presente //Gera cronograma de forma automatica CN300AddCrg(aPergunte) //Validação e Gravação do Modelo If oModel:VldData() oModel:CommitData() else aErro := oModel:GetErrorMessage() TmsMsgErr(aErro) EndIf Return |
Exemplo de rotina automática - Revisão de realinhamento
A Rotina CNTA300 foi desenvolvida em MVC, portanto para realizar a revisão automaticamente, deve-se fazer uso do modelo de dados. A Seguir mostraremos um exemplo de como realizar a revisão de um contrato utilizando o modelo de dados da rotina CNTA300.
Para mais detalhes sobre a utilização do MVC, consulte a pagina: http://tdn.totvs.com/display/public/mp/AdvPl+utilizando+MVC
Bloco de código | ||
---|---|---|
| ||
#Include 'Protheus.ch' #Include "FWMVCDEF.CH" User Function CN300AUTO() Local oModel := Nil Local cContra := ' < NÚMERO_DO_CONTRATO > ' Local cTipRev := ' < TIPO_DE_REVISÃO > ' Local cJustific := 'Justificativa da revisão do contrato' Local lRet := .F. //=== Preparação do contrato para revisão ============================================================================================= CN9->(DBSetOrder(1)) If CN9->(DbSeek(xFilial("CN9")+cContra)) //- Posicionamento no contrato que será revisado. A300STpRev("3") //- Define o tipo de revisão que será realizado. oModel := FWLoadModel("CNTA300") //- Carrega o modelo de dados do contrato. oModel:SetOperation(MODEL_OPERATION_INSERT) //- Define operação do modelo. Será INSERIDA uma revisão. oModel:Activate(.T.) //- Ativa o modelo. É necessária a utilização do parâmetro como true (.T.) para realizar uma copia. //=== Preenchimento das alterações da revisão. ======================================================================================= //== Cabeçalho oModel:SetValue( 'CN9MASTER' , 'CN9_TIPREV' , cTipRev) //- É obrigatório o preenchimento do tipo de revisão do contrato. oModel:SetValue( 'CN9MASTER' , 'CN9_JUSTIF' , cJustific') //- É obrigatório o preenchimento da justificativa de revisão do contrato. //== Qualquer alteração possível na execução manual pode ser automatizada. oModel:SetValue( 'CNBDETAIL' , 'CNB_VLUNIT' , 0.0010) //- Alteração do valor unitário do item. CN300RdSld(oModel) //- Realiza a redistribuição do saldo da planilha //== Validação e Gravação do Modelo lRet := oModel:VldData() .And. oModel:CommitData() EndIf Return lRet |
Exemplo de rotina automática - Aprovação de revisão (sem alçadas)
A Rotina CNTA300 foi desenvolvida em MVC, portanto para realizar a aprovação, deve-se fazer uso do modelo de dados. A Seguir mostraremos um exemplo de como realizar a aprovação de uma revisão de um contrato utilizando o modelo de dados da rotina CNTA300.
Para mais detalhes sobre a utilização do MVC, consulte a pagina: http://tdn.totvs.com/display/public/mp/AdvPl+utilizando+MVC
Informações | ||
---|---|---|
| ||
A utilização da aprovação de modo automático está vinculada ao fonte CNTA300 posterior a data de 29/05/2018. |
Bloco de código | ||
---|---|---|
| ||
### Exemplo de aprovação utilizando a função CN300Aprov ### #Include 'Protheus.ch' #Include "FWMVCDEF.CH" User Function CN300AUTO() Local cFilCont := ' < FILIAL_DO_CONTRATO > ' Local cContra := ' < NÚMERO_DO_CONTRATO > ' Local cRevisa := ' <NÚMERO_DA_REVISÃO> ' Local nRet := 0 Local cMsgErro := "" Local lRet := .F. //=== Preparação do contrato para revisão ============================================================================================= CN9->(DBSetOrder(1)) If CN9->( DbSeek( cFilCont + cContra + cRevisa )) nRet := CN300Aprov(.T.,,@cMsgErro) //- Função retorna 0 em caso de falha e 1 em caso de sucesso, também retorna a mensagem de erro por referência através do parâmetro cMsgErro. If nRet == 1 lRet := .T. Else VarInfo("","Erro ao aprovar o contrato "+cContra+" "+cMsgErro) EndIf EndIf Return lRet |
Exemplo de mudança de situação de um contrato
Para mudar a situação de um contrato não é necessário instanciar o modelo de dados, pois a rotina de mudança de situação(função CN100Situac) carrega sozinha o modelo e realiza as alterações necessários. Abaixo um exemplo:
Bloco de código | ||
---|---|---|
| ||
### Exemplo de alteração de situação utilizando a função CN100Situac ### #Include 'Protheus.ch' #Include "FWMVCDEF.CH" /* É possível mudar para as situações conforme abaixo: "01"=Cancelado "03"=Emitido "05"=Vigente "06"=Paralisado "07"=Sol Fina. "08"=Finalizado "11"=Rejeitado */ User Function CN300SITU() Local cFilCont := ' < FILIAL_DO_CONTRATO > ' Local cContra := ' < NÚMERO_DO_CONTRATO > ' Local cRevisa := ' <NÚMERO_DA_REVISÃO> ' CN9->(DBSetOrder(1)) If CN9->( DbSeek( cFilCont + cContra + cRevisa ))//Deve se posicionar no contrato que terá sua situação alterada CN100Situac('CN9',CN9->(Recno()),4, "05",.T.)//Muda a situação do contrato para vigente EndIf Return lRet |
Exemplo de paralisação/reinicio de contrato
Abaixo um exemplo de como é possível paralisar e dar reinicio a um contrato:
Bloco de código | ||
---|---|---|
| ||
### Exemplo de paralisação de uma contrato e seu reinicio ### #Include 'Protheus.ch' #Include "FWMVCDEF.CH" User Function TsRVPar() Local cContra := '[NUMERO DO CONTRATO]' Local cRevisa := Space(3)//Deve ser substituído pela revisão PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "GCT" TABLES "CN9T10" dDatabase := CToD("20/04/2020") IncluiRev(cContra, cRevisa,"005") //Inclui revisão de paralisação cRevisa := CnUltRev(cContra, cFilAnt) AprovRev(cContra, cRevisa) //Aprova revisão de paralisação dDatabase := DaySum(dDatabase, 1) IncluiRev(cContra, cRevisa,"006")//Inclui revisão de reinicio cRevisa := CnUltRev(cContra, cFilAnt) AprovRev(cContra, cRevisa) //Aprova revisão RESET ENVIRONMENT Return Nil Static Function IncluiRev(cContra, cRevisao, cTipRev) Local aErro := {} Local oModel:= Nil CN0->(DbSetOrder(1))//CN0_FILIAL+CN0_CODIGO CN9->(DBSetOrder(1)) If (CN9->(DbSeek(xFilial("CN9") + cContra + cRevisao)) .And. CN0->( DbSeek(xFilial("CN0") + cTipRev) )) A300STpRev(CN0->CN0_TIPO) //Define o tipo de revisão a ser realizado oModel := FWLoadModel('CNTA300') //CNTA300 = Compras, pra vendas usar CNTA301 oModel:SetOperation(MODEL_OPERATION_INSERT) oModel:Activate(.T.) oModel:SetValue('CN9MASTER','CN9_TIPREV' , cTipRev) oModel:SetValue('CN9MASTER','CN9_JUSTIF' , "Teste revisão") If CN0->CN0_TIPO == "5" //paralisacao oModel:SetValue('CN9MASTER','CN9_MOTPAR' , "001") oModel:SetValue('CN9MASTER','CN9_DTFIMP' , DaySum(dDatabase, 1)) EndIf lResult := (oModel:VldData() .And. oModel:CommitData()) If (!lResult) aErro := oModel:GetErrorMessage()//Obtem a mensagem de erro Endif oModel:DeActivate() oModel:Destroy() EndIf Return Static Function AprovRev(cContra, cRevisa) Local aArea := CN9->(GetArea()) Local lResult := .F. CN9->(DBSetOrder(1)) if CN9->(DbSeek(xFilial("CN9") + cContra + cRevisa)) lResult := (CN300Aprov(.T.) == 0) endif RestArea(aArea) Return lResult |
Exemplo de inclusão de contrato de vendas
Para contratos de vendas deve-se carregar o modelo CNTA301 ao invés do CNTA300, abaixo um exemplo:
Bloco de código | ||
---|---|---|
| ||
### Exemplo de inclusão de uma contrato de venda ### #Include 'Protheus.ch' #Include "FWMVCDEF.CH" #INCLUDE "RWMAKE.CH" #INCLUDE "TBICONN.CH" User Function CN300AUTO() Local nRet := 0 PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "GCT" TABLES "CN9T10" ConOut("INICIO TESTE") ExCtrVenda() ConOut("FIM TESTE") RESET ENVIRONMENT Return nRet Static Function ExCtrVenda() Local aErro := {} Local oModel := Nil Local cContrat := "EXCTRVENDA" oModel := FWLoadModel('CNTA301') oModel:SetOperation(MODEL_OPERATION_INSERT) oModel:Activate() //Cabeçalho do Contrato oModel:SetValue('CN9MASTER','CN9_NUMERO', cContrat) oModel:SetValue('CN9MASTER','CN9_DTINIC', dDataBase) oModel:SetValue('CN9MASTER','CN9_UNVIGE', '2') oModel:SetValue('CN9MASTER','CN9_VIGE', 6 ) oModel:SetValue('CN9MASTER','CN9_MOEDA', 1) oModel:SetValue('CN9MASTER','CN9_TPCTO', "031") oModel:SetValue('CN9MASTER','CN9_CONDPG', "000") oModel:SetValue('CN9MASTER','CN9_AUTO', '1') //Cliente/Fornecedor do Contrato oModel:SetValue('CNCDETAIL','CNC_CLIENT' , "CN300R") oModel:SetValue('CNCDETAIL','CNC_LOJACL' , "01") //Planilhas do Contrato oModel:SetValue('CNADETAIL','CNA_NUMERO', PadL("1", Len(CNA->CNA_NUMERO),"0")) oModel:SetValue('CNADETAIL','CNA_CLIENT', "CN300R") oModel:SetValue('CNADETAIL','CNA_LOJACL', "01") oModel:SetValue('CNADETAIL','CNA_TIPPLA', "Z0F") //Itens da Planilha do Contrato oModel:SetValue('CNBDETAIL','CNB_ITEM', PadL("1", Len(CNB->CNB_ITEM),"0")) oModel:SetValue('CNBDETAIL','CNB_PRODUT' ,'GCT000000000000000000000000001') oModel:SetValue('CNBDETAIL','CNB_QUANT' ,6) oModel:SetValue('CNBDETAIL','CNB_TS' , '501') If (oModel:VldData()) /*Valida o modelo como um todo*/ oModel:CommitData()//--Grava Contrato EndIf CN9->(DbSetOrder(1)) If(oModel:HasErrorMessage()) aErro := oModel:GetErrorMessage() AEval( aErro, { | x | ConOut( x ) + CRLF } ) ElseIf(CN9->(DbSeek(xFilial("CN9") + cContrat))) ConOut("Contrato gravado com sucesso.") EndIf Return |