Passo a passo: | A rotina automática (ExecAuto) do cadastro de planilha orçamentaria (PCOA100) pode ser utilizado de duas formas: 1) Primeira Situação: Para incluir a Planilha Orçamentaria (AK1) e o nó principal da estrutura (AK3). Para este caso, deve ser passado para a função PCOA100 apenas a estrutura xAutoCab, contendo os campos da tabela "Planilha Orçamentaria" (AK1). A estrutura do xAutoItens não deve ser passado para a função.
Bloco de código |
---|
language | diffxml |
---|
theme | RDarkFadeToGrey |
---|
title | Exemplo de Inclusão da Planilha Orçamentária |
---|
collapse | true |
---|
| Local aAutoCab
aAutoCab := { ;
{"AK1_CODIGO", "TSTPCOA100TESTEPLAN000001" , nil},;
{"AK1_VERSAO", "0001" , nil},;
{"AK1_DESCRI", "TESTE DO PCOA100 PARA INCLUIR PLANILHA" , nil},;
{"AK1_TPPERI", "3" , nil},;
{"AK1_INIPER", CTOD("01/01/16") , nil},;
{"AK1_FIMPER", CTOD("31/12/16") , nil},;
{"AK1_CTRUSR", "1" , nil},;
{"AK1_STATUS", "1" , nil};
} |
2) Segunda Situação: Para alteração de itens do orçamento (AK2). Para este caso, deve ser passado para a função PCOA100 as estruturas xAutoCab e xAutoItens. Na estrutura xAutoCab deve ser passado o código da planilha, a versão e a conta orçamentária analítica, analítica que receberá os itens passado na estrutura xAutoItens. Os períodos devem ser preenchidos com a estrutura P99, onde 99 é o dígito numérico que representa o período desejado. Exemplo: P01 para primeiro período, P02 para segundo segundo período e assim deve seguir até o último período desejado.2.1) Alterando um item já existente: Para alterar um item já existente, deve ser usado a clausula LINPOS. Nesta clausula, o primeiro elemento é o texto LINPOS, o segundo elemento é o campo referente ao item e no terceiro elemento deve ser o código do item da planilha.
Aviso |
---|
| A rotina automática (Execauto) não fará o cadastro da estrutura analítica da planilha orçamentária.
Este cadastro deverá ser feito diretamente na rotina "Orçamentos" (Atualizações/Planilhas/Orçamentos). Para incluir essa estrutura, altere a planilha desejada e selecione a opção: Outras Ações/Estrut./Incluir C.O.. |
2.1) Alterando um item já existente:
Para alterar um item já existente, deve ser usado a clausula LINPOS. Nesta clausula, o primeiro elemento é o texto LINPOS, o segundo elemento é o campo referente ao item e no terceiro elemento deve ser o código do item da planilha. Observação: para alterar os valores deve ser enviado toda a estrutura xAutoItens e modificar com os novos dados as posições desejadas.
Bloco de código |
---|
language | xml |
---|
theme | FadeToGrey |
---|
title | Alteração de um item existente |
---|
collapse | true |
---|
| //exemplo de alteração de um item já existente na planilha
xAutoCab := { | Bloco de código |
---|
language | diff |
---|
theme | RDark |
---|
title | Alteração de um item existente |
---|
| //exemplo de alteração de um item já existente na planilha
xAutoCab := {;
{"AK2_ORCAME", "MYPLANORC" , nil},;
{"AK2_VERSAO", "0001" , nil},;
{"AK2_COORCAME" , "1010111TESTEPLAN000001" , nil},;
}
xAutoItens := {}
aAdd(xAutoItens,{{'AK2_ORCAME' , 'MYPLANORC' , NIL },; {"AK2_VERSAO", "0001" , nil},;
{'"AK2_VERSAO'CO" , '0001' "1010111" , NIL }, nil}; // Mesma conta analítica do xAutoItens
}
xAutoItens := {}
aAdd(xAutoItens,{;
{'AK2_COORCAME' , '111TESTEPLAN000001' , , NIL },;
{'AK2_IDVERSAO' , '0001' , NIL },;
{'AK2_CLASSECO' , '0000011010111' , NIL },;
{'LINPOS' , 'AK2_ID' , '0001'},; //no 2o. elemento de LINPOS tem que ser passado o campo do item e no 3o.elemento o codigo do item , NIL },;
{'AK2_CLASSE' , '000001' , NIL },;
{'P01LINPOS' , 11000'AK2_ID' , NIL '0001'},; //primeiro períodoEstrutura do elemento LINPOS
{'P02P01' , 1200011000 , NIL },; //segundoP01 - primeiro período
{'P03P02' , 1300012000 , NIL },; //P02 - segundo período
{'P04P03' , 1400013000 , NIL },;
{'P05P04' , 1500014000 , NIL },;
{'P06P05' , 1600015000 , NIL },;
{'P07P06' , 1700016000 , NIL },;
{'P08P07' , 1800017000 , NIL },;
{'P09P08' , 1900018000 , NIL },;
{'P10P09' , 2000019000 , NIL },;
{'P11P10' , 2100020000 , NIL },;
{'P12P11' , 2200021000 , NIL },;
}){'P12' , 22000 , NIL };
}) |
2.2) Criando um novo item em uma planilha existente: Para incluir um novo item na planilha, no conteudo conteúdo do campo AK2_ID deve ser passado "*".
Bloco de código |
---|
language | xml |
---|
theme | FadeToGrey |
---|
title | Inclusão de novo item na Planilha |
---|
collapse | true |
---|
| //exemplo de inclusão de novo item na planilha
xAutoCab := {;
{"AK2_ORCAME", "TESTEPLAN000001" , nil},;
{"AK2_VERSAO", "0001" , nil},;
{"AK2_CO" , "1010111" , nil}; // Mesma conta analítica do xAutoItens
}
xAutoItens := {}
aAdd(xAutoItens,{;
{'AK2_ORCAME' ,'TESTEPLAN000001' , NIL},;
{'AK2_VERSAO' ,'0001' , NIL},;
{'AK2_CO' ,'1010111' , NIL},;
{'AK2_ID' ,'*' , NIL},; //AKD_ID com '*' para criar um novo registro na AK2
{'AK2_CLASSE' ,'000001' , NIL},;
{'P01' ,11000 , NIL},; //P01 - primeiro período
{'P02' ,12000 , NIL},; //P02 = segundo período
{'P03' ,13000 , NIL},;
{'P04' ,14000 , NIL},;
{'P05' ,15000 , NIL},;
{'P06' ,16000 , NIL},;
{'P07' ,17000 , NIL},;
{'P08' ,18000 , NIL},;
{'P09' ,19000 , NIL},;
{'P10' ,20000 , NIL},;
{'P11' ,21000 , NIL},;
{'P12' ,22000 , NIL};
}) |
Aviso |
---|
| O tamanho dos campos chave (Exemplo: AK2_ORCAME, AK2_VERSAO) devem respeitar o tamanho do dicionário de dados. Verifique a necessidade de utilizar funções como PADR() para esta padronização.
|
Abaixo exemplo de código fonte para incluir planilha (AK1) e para alterar itens da planilha (AK2): Bloco de código |
---|
language | xml |
---|
theme | FadeToGrey |
---|
title | Exemplo de ExecAuto |
---|
collapse | true |
---|
| #include "Protheus.ch"
User Function TstPcoa100()
Local aAutoCab := {}
Local aAutoItens := {}
Private lMsHelpAuto := .T.
Private lMsErroAuto := .F.
If MsgYesNo("Deseja Incluir planilha - Caso nao sera considerado alterar","Atencao")
aAutoCab := { ;
{"AK1_CODIGO" , "TESTEPLAN000001" , nil},;
{"AK1_VERSAO" , "0001" , nil},;
{"AK1_DESCRI" , "TESTE DO PCOA100 PARA INCLUIR PLANILHA" , nil},;
{"AK1_TPPERI" , "3" , nil},;
{"AK1_INIPER" , CTOD("01/01/19") , nil},;
{"AK1_FIMPER" , CTOD("31/12/19") , nil},;
{"AK1_CTRUSR" , "1" , nil},;
{"AK1_STATUS" , "1" , nil};
}
MSExecAuto( {|x, y, z, a, b, c| PCOA100(x, y, z, a, b, c)}, |
//exemplo de inclusão de novo item na planilha aAdd(xAutoItens,{ {'AK2_ORCAME' ,'MYPLANORC' , NIL},; {'AK2_VERSAO' ,'0001' , NIL},; {'AK2_CO' ,'111' , NIL},; {'AK2_ID' ,'*', NIL},; {'AK2_CLASSE' ,'000001' , NIL},; {'P01' ,11000 , NIL},; //primeiro período {'P02' ,12000 , NIL},; //segundo período {'P03' ,13000 , NIL},; {'P04' ,14000 , NIL},; {'P05' ,15000 , NIL},; {'P06' ,16000 , NIL},; {'P07' ,17000 , NIL},; {'P08' ,18000 , NIL},; {'P09' ,19000 , NIL},; {'P10' ,20000 , NIL},; {'P11' ,21000 , NIL},; {'P12' ,22000 , NIL}; } ) //---------------------------------------------------------// Abaixo exemplo de código fonte para incluir planilha (AK1) e para alterar itens da planilha (AK2) //---------------------------------------------------------// #include "Protheus.ch" User Function TstPcoa100() Local aAutoCab Local aAutoItens Private lMsHelpAuto := .T. Private lMsErroAuto := .F. If MsgYesNo("Deseja Incluir planilha - Caso nao sera considerado alterar","Atencao")aAutoCab := { ;{"AK1_CODIGO", "TSTPCOA100" , nil},;{"AK1_VERSAO", "0001" , nil},;{"AK1_DESCRI" , "TESTE DO PCOA100 PARA INCLUIR PLANILHA" , nil},;{"AK1_TPPERI" , "3" , nil},;{"AK1_INIPER" , CTOD("01/01/16") , nil},;{"AK1_FIMPER" , CTOD("31/12/16") , nil},;{"AK1_CTRUSR" , "1" , nil},;{"AK1_STATUS" , "1" , nil};}MSExecAuto( {|x,y,z,a,b,c| PCOA100(x,y,z, a, b, c)}, 3/*nCallOpcx*/,/*cRevisa*/, /*lRev*/, /*lSim*/, aAutoCab, /*xAutoItens*/) //inclusão | AK1If !lMsErroAutomsgalert na AK1
If !lMsErroAuto
msgalert("Incluido com sucesso! ") | Else
Else
msgalert("Erro na inclusao!") | EndIfElse
EndIf
Else
//alteracao da planilha - A estrutura | tem que estar pronto AK1 / AK3aAutoCab := { ;{"AK2_ORCAME", "TSTPCOA100" , nil},;{"AK2_VERSAO", "0001" , nil},;{"AK2_CO" , "111" , nil}; }aAutoItens := {} //exemplo de alteracao de um item ja existente na planilha aAdd(aAutoItens,{ {'AK2_ORCAME' ,'TSTPCOA100' , NIL},; {'AK2_VERSAO' ,'0001' , NIL},;{'AK2_CO' ,'111' , NIL},;{'AK2_ID' ,'0001', NIL},;{'AK2_CLASSE' ,'000001' , NIL},;{'LINPOS' ,'AK2_ID' , '0001'},;{'P01' ,11000 , NIL},;{'P02' ,12000 , NIL},;{'P03' ,13000 , NIL},;{'P04' ,14000 , NIL},;{'P05' ,15000 , NIL},;{'P06' ,16000 , NIL},;{'P07' ,17000 , NIL},;{'P08' ,18000 , NIL},;{'P09' ,19000 , NIL},;{'P10' ,20000 , NIL},;{'P11' ,21000 , NIL},;{'P12' ,22000 , NIL};} )//exemplo de inclusao de um novo item na planilhaaAdd(aAutoItens,{ {'AK2_ORCAME' ,'TSTPCOA100' , NIL},; {'AK2_VERSAO' ,'0001' , NIL},;{'AK2_CO' ,'111' , NIL},;{'AK2_ID' ,'*', NIL},; //para inclusão de novo item da planilha deve ser passado no conteúdo "*" e nao deve ser utilizado LINPOS{'AK2_CLASSE' ,'000001' , NIL},;{'P01' ,111000 , NIL},;{'P02' ,112000 , NIL},;{'P03' ,113000 , NIL},;{'P04' ,114000 , NIL},;{'P05' ,115000 , NIL},;{'P06' ,116000 , NIL},;{'P07' ,117000 , NIL},;{'P08' ,118000 , NIL},;{'P09' ,119000 , NIL},;{'P10' ,120000 , NIL},;{'P11' ,121000 , NIL},;{'P12' ,122000 , NIL};} )MSExecAuto( {|x,y,z,a,b,c| PCOA100(x,y,z, a, b, c)}, 4/*nCallOpcx*/,/*cRevisa*/, /*lRev*/, /*lSim*/,aAutoCab, aAutoItens) //4=alteração para manipular itens da planilhaIf !lMsErroAutomsgalert("Alterado os itens da planilha com sucesso! ")Else msgalert("Erro na alteracao dos itens da planilha!")MostraErro()EndIfEndIfReturn analítica da planilha tem que estar pronta AK1 / AK3
aAutoCab := { ;
{"AK2_ORCAME" , "TESTEPLAN000001" , nil },;
{"AK2_VERSAO" , "0001" , nil },;
{"AK2_CO" , "1010111" , nil };
}
aAutoItens := {}
/*
//exemplo de alteracao de um item ja existente na planilha
aAdd(aAutoItens,{ {'AK2_ORCAME' , 'TESTEPLAN000001' , NIL },;
{'AK2_VERSAO' , '0001' , NIL },;
{'AK2_CO' , '1010111' , NIL },;
{'AK2_ID' , '0001' , NIL },;
{'AK2_CLASSE' , '000001' , NIL },;
{'LINPOS' , 'AK2_ID' , '0001'},;
{'P01' , 11000 , NIL },;
{'P02' , 12000 , NIL },;
{'P03' , 13000 , NIL },;
{'P04' , 14000 , NIL },;
{'P05' , 15000 , NIL },;
{'P06' , 16000 , NIL },;
{'P07' , 17000 , NIL },;
{'P08' , 18000 , NIL },;
{'P09' , 19000 , NIL },;
{'P10' , 20000 , NIL },;
{'P11' , 21000 , NIL },;
{'P12' , 22000 , NIL };
} )
*/
//exemplo de inclusao de um novo item na planilha
aAdd(aAutoItens,{ {'AK2_ORCAME' , 'TESTEPLAN000001' , NIL},;
{'AK2_VERSAO' , '0001' , NIL},;
{'AK2_CO' , '1010111' , NIL},;
{'AK2_ID' , '*' , NIL},;
{'AK2_CLASSE' , '000001' , NIL},;
{'P01' , 111000 , NIL},;
{'P02' , 112000 , NIL},;
{'P03' , 113000 , NIL},;
{'P04' , 114000 , NIL},;
{'P05' , 115000 , NIL},;
{'P06' , 116000 , NIL},;
{'P07' , 117000 , NIL},;
{'P08' , 118000 , NIL},;
{'P09' , 119000 , NIL},;
{'P10' , 120000 , NIL},;
{'P11' , 121000 , NIL},;
{'P12' , 122000 , NIL};
} )
MSExecAuto( {|x, y, z, a, b, c| PCOA100(x, y, z, a, b, c)}, 4/*nCallOpcx*/, /*cRevisa*/, /*lRev*/, /*lSim*/, aAutoCab, aAutoItens) //4=alteração para manipular itens da planilha
If !lMsErroAuto
msgalert("Alterado os itens da planilha com sucesso! ")
Else
msgalert("Erro na alteracao dos itens da planilha!")
MostraErro()
EndIf
EndIf
Return
|
|