Professional Documents
Culture Documents
Cna200 PRW
Cna200 PRW
CH"
#INCLUDE "PROTHEUS.CH"
//Situacoes de contrato
#DEFINE DEF_SCANC "01" //Cancelado
#DEFINE DEF_SELAB "02" //Em Elaboracao
#DEFINE DEF_SEMIT "03" //Emitido
#DEFINE DEF_SAPRO "04" //Em Aprovacao
#DEFINE DEF_SVIGE "05" //Vigente
#DEFINE DEF_SPARA "06" //Paralisado
#DEFINE DEF_SSPAR "07" //Sol Fina.
#DEFINE DEF_SFINA "08" //Finalizado
#DEFINE DEF_SREVS "09" //Revisao
#DEFINE DEF_SREVD "10" //Revisado
//Transacoes
#DEFINE DEF_TRAINC "007"//Inclusao de Planilhas
#DEFINE DEF_TRAEDT "008"//Edicao de Planilhas
#DEFINE DEF_TRAEXC "009 "//Exclusao de Planilhas
#DEFINE DEF_TRAVIS "032"//Visualizacao de Planilhas
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CNTA200 � Autor � Marcelo Custodio � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Rotina de cadastro das planilhas de contrato ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � CNTA200() ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � ExpA1 = Array Cabecalho para Rotina Automatica ���
��� � ExpA2 = Array Itens para Rotina Automatica ���
��� � ExpN2 = Opcao do aRotina para Rotina Automatica ���
��� � ExpC1 = Rotina que faz a chamada dessa funcao.
���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� ATUALIZACOES SOFRIDAS DESDE A CONSTRU � AO INICIAL. ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P r ogramador � Data � BOPS � Motivo da Alteracao
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
Function CNTA200(xAutoCab,xAutoItens,nOpcAuto,cRotina)
Local cFiltro := ""
Local cCn200Fil := ""
Local aIndexCNA := {}
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Ajusta Dicionarios SX1 �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
AjustaSX1()
If !lC200Auto
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Filtra MBrowse �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If ExistBlock("CN200FIL")
cCn200Fil := ExecBlock("CN200FIL",.F.,.F.)
If ( ValType(cCn200Fil) == "C" ) .And. !Empty(cCn200Fil)
cFiltro := cCn200Fil
EndIf
EndIf
If !Empty(cFiltro)
bFiltraBrw := {|| FilBrowse("CNA",@aIndexCNA,@cFiltro) }
Eval(bFiltraBrw)
EndIf
mBrowse(6,1,22,75,"CNA")
Else
DEFAULT nOpcAuto := 3
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Executa rotina automatica �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
MBrowseAuto(nOpcAuto,Aclone(aAutoCab),"CNB")
EndIf
Return
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200Manut � Autor � Marcelo Custodio � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Rotina de manutencao do cadastro de planilhas ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � CN200Manut(cExp01,nExp02,nExp03,lExp04,lExp05,aExp06,aExp07 � � �
��� � ,cExp08,cExp09,dExp10,dExp11) ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � cExp01 - Alias do arquivo ���
��� � nExp02 - Registro selecionado ���
��� � nExp03 - Opcao selecionada pelo usuario ���
��� � xExp04 -
���
��� � lExp05 - Exibe campos referentes a revisao do tipo reali. � � �
��� � lExp06 - Exibe campos referentes a revisao do tipo readq. � � �
��� � aExp07 - Array com os cabecalhos de planilhas ���
��� � aExp08 - Array com os itens das planilhas ���
��� � cExp09 - Codigo do contrato ���
��� � cExp10 - Numero de identificacao da planilha ���
��� � dExp11 - Data de inicio do contrato ���
��� � dExp12 - Data de termino do contrato ���
��� � aExp13 -
���
��� � lExp14 - Indica se o usuario podera VISUALIZAR a planilha � � �
��� � do contrato mesmo sem ter acesso ao mesmo. Esse
��� � parametro e enviado como .T. exclusivamente
��� � rotina de liberacao (MATA097) quando o
��� � do tipo CT (Contrato) e o Aprovador nao possui
��� � acesso ao contrato.
���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200 ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function
CN200Manut(cAlias,nReg,nOpc,xFiller,lReali,lReadq,aPlani,aPlIt,cContra,cPlani,dInic
io,dTermino,aHeaderPla,aRateio,lVisAprCt)
Local l200SCC := ExistBlock("CTA200SCC")
Local l200PLN := ExistBlock("CTA200PLN")
Local lRet := .T.
Local lC200Auto := ((Type("lC200Auto") == "L") .And. lC200Auto)
Local l200VLPLA := ExistBlock("CN200VLPLA")
Local lC200VlAt := ExistBlock("C200VLAT")
Local nA := 0
Local nPosCampo := 0
Local nOpca := 0
Local nTotCronog
Local nPos
Local nPlan
Local nx
Local oDlg
Local cFilCod
Local lPer := .F. // Alterar para .T. caso n � o tenha permiss � o para inserir
planilha
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Definicao de variaveis de tela �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
Local aColsPla := {}
Local aSize := MsAdvSize(,.F.,430)
Local aObjects := {}
Local aPosObj := {}
Local nUsado := 0
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Walk-Thru �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
Local cWhile := "" //Condicao While para montar o aCols
Local cSeek := ""
Private aTela := {}
Private aGets := {}
Private oGetDados
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Ajusta Dicionarios SX3 �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
AjustaSX3()
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Ajusta Dicionarios SX7 �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
AjustaSX7()
If lRet
dbSelectArea("CN9")
dbSetOrder(1)
dbSeek(xFilial("CN9")+CNA->CNA_CONTRA+CNA->CNA_REVISA)
If !lRetVlAt
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica se o contrato aceita exclusao/inclusao �
// � de planilhas �
// � - 2 - Elaboracao �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If AllTrim(CN9->CN9_SITUAC) != DEF_SELAB .AND. AllTrim(CN9-
>CN9_SITUAC) != DEF_SEMIT .AND. AllTrim(CN9->CN9_SITUAC) != DEF_SAPRO
Help(" ",1,"CNTA200SIT") //"Situa � � o de contrato inv � lida
para exc/inc de planilhas"
lRet := .F.
EndIF
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica se a planilha possui cronograma e se �
// � o mesmo possui medicoes �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If lRet .And. !Empty(CNA->CNA_CRONOG)
dbSelectArea("CNF")
dbSetOrder(1)
cFilCod := xFilial("CNF")
If dbSeek(cFilCod+CNA->CNA_CRONOG)
If aRotina[nOpc,4] == 2
lRet := If(lContrEd,.T.,CN240VldUsr(CNA-
>CNA_CONTRA,DEF_TRAVIS,.T.,lVisAprCt))
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Identifica tipo do contrato: compra/venda �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If lContrEd
CN1->(dbSetOrder(1))
CN1->(dbSeek(xFilial("CN1")+M->CN9_TPCTO))
cEspCtr := CN1->CN1_ESPCTR
Else
cEspCtr := If(Empty(CNA->CNA_CLIENT),"1","2")
EndIf
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica se o usuario tem permissao de delecao. �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If nOpc == 5
If (VAL(GetVersao(.F.)) == 11 .And. GetRpoRelease() >= "R6" .Or.
VAL(GetVersao(.F.)) > 11) .And. FindFunction("MaAvalPerm")
aArea2 := GetArea()
CNB->(dbSeek(xFilial("CNB")+CNA->(CNA_CONTRA+CNA_REVISA+CNA_NUMERO)))
While !CNB->(Eof()) .And. lRet .And. xFilial("CNB")+CNA-
>(CNA_CONTRA+CNA_REVISA+CNA_NUMERO)==CNB-
>(CNB_FILIAL+CNB_CONTRA+CNB_REVISA+CNB_NUMERO)
lRet := MaAvalPerm(1,{CNB->CNB_PRODUT,"CNT200",5})
CNB->(dbSkip())
End
RestArea(aArea2)
If !lRet
Help(,,1,'SEMPERM')
EndIf
EndIf
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Verifica se o contrato pertence a um Edital e n � o permite deletar a
planilha. �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
CN9->(dbSetOrder(1))
If CN9->(dbSeek(xFilial("CN9")+CNA->CNA_CONTRA+CNA->CNA_REVISA)).And.!
Empty(CN9->CN9_CODED)
Aviso (STR0059,STR0071,{"OK"}) // O contrato foi gerado por um edital e
por isso n � o se pode excluir planilhas
lRet := .F.
EndIf
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica se o contrato pertence a um Edital e n � o permite incluir a planilha.
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If lRet
If(nOpc == 3 .AND. nModulo != 28 .AND. nModulo != 69) //retirado pois essa
valida � � o ja � feita ao selecionar o numero do contrato dentro da rotina de
inclus � o da planilha
CN9->(dbSetOrder(1))
If CN9->(dbSeek(xFilial("CN9")+CNA->CNA_CONTRA+CNA->CNA_REVISA)).And.!
Empty(CN9->CN9_CODED)
lRet := .F.
lPer := .T.
Aviso (STR0059,STR0070,{"OK"}) // O contrato foi gerado por um
edital e por isso n � o se pode incluir planilhas
EndIf
EndIf
EndIf
If lRet
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Exclui campos da Enchoice de acordo com �
// � o tipo do contrato quando disponivel �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If aRotina[nOpc,4] != 3 .Or. lContrEd
If cEspCtr == "1"
aCpoN :=
{"CNA_FILIAL","CNA_ESPEL","CNA_DTMXMD","CNA_CLIENT","CNA_LOJACL","CNA_VLCOMS"}
Else
aCpoN :=
{"CNA_FILIAL","CNA_FORNEC","CNA_LJFORN","CNA_ESPEL","CNA_DTMXMD"}
EndIf
Else
If cContra != Nil .and. cEspCtr == "2"
aCpoN :=
{"CNA_FILIAL","CNA_ESPEL","CNA_DTMXMD","CNA_CRONOG","CNA_VLCOMS","CNA_CRONCT","CNA_
FORNEC","CNA_LJFORN"}
Else
aCpoN :=
{"CNA_FILIAL","CNA_ESPEL","CNA_DTMXMD","CNA_CRONOG","CNA_VLCOMS","CNA_CRONCT"}
EndIf
EndIf
dbSelectArea("SX3")
MsSeek("CNA")
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Seleciona os campos do cabecalho das planilhas �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
While !Eof() .And. SX3->X3_ARQUIVO == "CNA"
dbSkip()
EndDo
RegToMemory("CNA",(nOpc == 3))
If lContrEd
nPlan := aScan(aPlani,{|x| x[CNA->(FieldPos("CNA_NUMERO"))] == cPlani})
If nPlan > 0
For na:=1 to len(aCpoEnch)
nPos := CNA->(FieldPos(aCpoEnch[na]))
If nPos > 0
M->&(aCpoEnch[na]) := aPlani[nPlan,nPos]
EndIf
Next
EndIf
EndIf
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Devolve o tamanho da tela atualmente no micro do usuario. �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
Private aSizeAut := MsAdvSize()
aNoFields := CN200AFld(nOpc,lReadq,lReali,lContrEd,cEspCtr)
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica campos editaveis �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
dbSelectArea("SX3")
dbSetOrder(1)
MsSeek("CNB")
While !EOF() .And. (SX3->X3_ARQUIVO == "CNB")
If X3Uso(X3_USADO) .And. cNivel >= SX3->X3_NIVEL .And. Ascan(aNoFields,
{|x| x == alltrim(SX3->X3_CAMPO)}) == 0
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Impede alteracao dos campos no array aNAlter �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If Empty(CN9->CN9_CODED) .Or. nModulo == 69
If SX3->X3_VISUAL == "A" .And. aScan(aNAlter,AllTrim(SX3-
>X3_CAMPO)) == 0
aAdd(aAlter,SX3->X3_CAMPO)
EndIf
Else
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Se a planilha pertence a um edital, permite alterar
apenas o campo ref. a TES �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If SX3->X3_VISUAL == "A" .And. aScan(aAlterEdt,AllTrim(SX3-
>X3_CAMPO)) > 0
aAdd(aAlter,SX3->X3_CAMPO)
EndIf
EndIf
EndIf
dbSelectArea("SX3")
dbSkip()
EndDo
If nOpc != 3
If !lContrEd
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Monta query para preenchimento da fillgetdados �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
dbSelectArea("CNB")
dbSetOrder(1)
cFilCod := xFilial("CNB")
aStruCNB := CNB->(dbStruct())
If Empty(Ascan(aStruCNB,{|x| x[2]=="M"}))
cQuery := "SELECT CNB.* "
cQuery += " FROM "+RetSQLName("CNB")+" CNB"
cQuery += " WHERE CNB.CNB_FILIAL = '"+xFilial("CNB")+"'"
cQuery += " AND CNB.CNB_CONTRA = '"+M->CNA_CONTRA+"'"
cQuery += " AND CNB.CNB_REVISA = '"+M->CNA_REVISA+"'"
cQuery += " AND CNB.CNB_NUMERO = '"+M->CNA_NUMERO+"'"
cQuery += " AND CNB.D_E_L_E_T_ = ' '"
EndIf
cSeek := cFilCod+M->CNA_CONTRA+M->CNA_REVISA+M->CNA_NUMERO
cWhile := "CNB_FILIAL+CNB_CONTRA+CNB_REVISA+CNB_NUMERO"
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Executa fillgetdados para edicao �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
FillGetDados(nOpc,"CNB",1,cSeek,{||
&cWhile },bCondicao,aNoFields,,,cQuery,,,aHeaderPla,aColsPla,,,,)
Else
If nPlan > 0
aColsPla := aPlIt[nPlan]
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Executa fillgetdados para edicao atraves do contrato �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
FillGetDados(nOpc,"CNB",1,,,,aNoFields,,,,,.T.,If(len(aHeaderPla)==0,aHeaderPla,NIL
),aColsPla,)
EndIf
EndIf
Else
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Executa fillgetdados para inclusao �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
FillGetDados(nOpc,"CNB",1,,,,aNoFields,,,,,.T.,If(len(aHeaderPla)==0,aHeaderPla,NIL
),aColsPla,)
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Preenche primeito item da planilha �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
aColsPla[1][aScan(aHeaderPla,{|x| Trim(x[2])=="CNB_ITEM"})] :=
StrZero(1,Len(CNB->CNB_ITEM))
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Se for contrato de vendas, atualiza na planilha o cliente inserido
no contrato �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If lContrEd .Or. FunName()=="CNTA100"
//-- Adiciona planilha
If aPlani # NIL
aAdd(aPlani,Array(CNA->(FCount()) + 1))
aTail(aTail(aPlani)) := {}
nPlan := Len(aPlani)
EndIf
If AliasInDic("CNZ")
Aadd(aButtons, {'S4WB013N',{|| oGetDados:oBrowse:lDisablePaint :=
.T. , GCTRateio(oGetDados,aRatPlan,nOpc,{M->CNA_CONTRA,M->CNA_REVISA,M-
>CNA_NUMERO},@aRatAux), oGetDados:oBrowse:lDisablePaint :=
.F. },STR0055,STR0056})//"Rateio por Item do pedido"##"Rateio "
Endif
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Adiciona bot � o para localiza � � o f � sica (Gestao de Servicos) �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If SuperGetMv("MV_CNINTFS",.F.,.F.) .And. If(!Empty(cEspCtr),cEspCtr ==
'2',.T.) .And. FindFunction("AT110Man")
If aPlani # NIL
aAdd(aButtons,{"DESTINOS",{||
If(CN200CabOk(aCpoEnch,@oDlg),CN200Loca(M->CNA_CONTRA,M->CNA_REVISA,M-
>CNA_NUMERO,oGetDados,@aTail(aPlani[nPlan]),aPlani,nOpc==2),NIL)},STR0057,STR0058})
//"Localiza � � o F � sica"#"L.Fisica"
Else
aAdd(aButtons,{"DESTINOS",{||
If(CN200CabOk(aCpoEnch,@oDlg),CN200Loca(M->CNA_CONTRA,M->CNA_REVISA,M-
>CNA_NUMERO,oGetDados,@aLocais,,nOpc==2),NIL)},STR0057,STR0058})//"Localiza � � o
F � sica"#"L.Fisica"
EndIf
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Botao para exportar dados para EXCEL �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If FindFunction("RemoteType") .And. RemoteType() == 1
aAdd(aButtons , {PmsBExcel()[1],{||
DlgToExcel({ {"ENCHOICE",STR0036,aGets,aTela},
{"GETDADOS",OemToAnsi(STR0037),aHeaderPla,aColsPla}})},PmsBExcel()[2],PmsBExcel()
[3]})
EndIf
If aRotina[ nOpc, 4 ] == 2
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Botao do Tracker �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
aAdd(aButtons, { "bmpord1", { || CN200Track( aColsPla, aHeaderPla
) }, STR0038, STR0039 } ) // "System Tracker", "Tracker"
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Botao do banco de conhecimento �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
aAdd(aButtons, { "clips", { || CN200Conhec() }, STR0041,
STR0042 } ) // "Banco de conhecimento", "Conhecim."
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Avalia botoes do usuario �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If ExistBlock( "CN200BUT" )
If ValType( aUsButtons := ExecBlock( "CN200BUT", .F., .F., {nOpc}
) ) == "A"
If Len(aUsButtons)>=1 .And. ValType(aUsButtons[1]) == "A"
AEval( aUsButtons[1], { |x| AAdd( aButtons, x ) } )
EndIf
If Len(aUsButtons)>=2 .And. ValType(aUsButtons[2]) == "A"
for nx := 1 to len(aUsButtons[2])
aUsButtons[2][nx][2] := &(aUsButtons[2][nx][2])
aadd(aButtons,{aUsButtons[2][nx]
[1],aUsButtons[2][nx][2],aUsButtons[2][nx][3],aUsButtons[2][nx][4] } )
next
EndIf
EndIf
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Preenche campos usados no cadastro atraves da rotina de �
// � contratos �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If cContra != Nil
M->CNA_CONTRA := cContra
EndIf
If cPlani != Nil
M->CNA_NUMERO := cPlani
EndIf
If !Empty(dInicio) .And. Empty(M->CNA_DTINI)
M->CNA_DTINI := dInicio
EndIf
If !Empty(dTermino) .And. Empty(M->CNA_DTFIM)
M->CNA_DTFIM := dTermino
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Inicializa lancamento do SIGAPCO �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If !lContrEd
PcoIniLan("000354")
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Dialog.
�
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
DEFINE MSDIALOG oDlg TITLE cCadastro From aSize[7],0 to
aSize[6],aSize[5] of oMainWnd PIXEL
oGetDados:=MsNewGetDados():New(aPosObj[2,1],aPosObj[2,2],aPosObj[2,3],aPosObj[2,4],
IIF(nOpc!=3 .And. nOpc!
=4,0,GD_UPDATE+GD_INSERT+GD_DELETE),'CN200LinOk','CN200TudOk','+CNB_ITEM',aAlter,,9
999,'CN200FldOk',,'CN200DelOk',oDlg,aHeaderPla,aColsPla)
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �Ŀ
// � Valida o cabecalho antes do preenchimento dos itens
�
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
oGetDados:oBrowse:bGotFocus := {||CN200CabOk(aCpoEnch,@oDlg) }
If nPos > 0
M->&(aCpoEnch[na]) := aAutoCab[nPos,2]
EndIf
Next
If MsGetDAuto(aAutoItens,,{||
CN200TudOk()},aAutoCab,aRotina[nOpc][4])
nOpca := 1
Else
nOpca := 0
EndIf
Else
nOpca := 1
EndIf
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Confere se a chamada ao programa de manutencao de planilhas nao e
feita pelo programa de manutencao �
// � de contratos. Caso seja, atualiza o array aRateio com o rateio
definido na planilha. Pois, quando �
// � o programa de planilhas e chamado pela rotina de contratos, o
cadastro da planilha so e feito �
// � ao atualizar a tela de formulario do contrato.
�
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If IsInCallStack("CN100MANUT")
For nX := 1 to len(aRatPlan)
nPos := aSCan(aRateio,{|x| alltrim(x[1]) + alltrim(x[2]) +
alltrim(x[3]) + alltrim(x[4]) == Alltrim(aRatPlan[nX,1]) + Alltrim(aRatPlan[nX,2])
+ Alltrim(aRatPlan[nX,3]) + Alltrim(aRatPlan[nX,4])})
If nPos > 0
aRateio[nPos] := aClone(aRatPlan[nX])
Else
aAdd(aRateio,aClone(aRatPlan[nX]))
Endif
Next nX
Endif
EndIf
If !lC200Auto
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Finaliza lancamento do SIGAPCO �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If !lContrEd
PcoFinLan("000354")
PcoFreeBlq("000354",,,,,(nOpc == 4 .And. nOpca!=1))
EndIf
EndIf
EndIF
RestArea(aArea)
If cPlani != Nil
If !lPer
cPlani := M->CNA_NUMERO
EndIf
EndIf
Return (nOpca == 1)
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200SC � Autor � Marcelo Custodio � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Exibe Solicitacoes de compra em aberto ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � CN200SC(oExp01) ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � oExp01 - GetDados ���
��� � aExp02 - Array com os itens das planilhas ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200 ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200SC(oGetDados,aPlIt)
Local oDlg
Local oMark
Local aFields := {}
Local aArea := GetArea()
Local aGrupo := UsrGrComp(RetCodUsr())
Local aAreaSX3 := SX3->(GetArea())
Local aAreaSC1 := SC1->(GetArea())
Local aCpos := {}
Local aMarca := {}
Local aCampos :=
{"C1_OK","C1_NUM","C1_ITEM","C1_PRODUTO","C1_QUANT","C1_QUJE","C1_DESCRI","C1_GRUPC
OM"}
Local aButEnc := {}
Local aHeader := oGetDados:aHeader
Local aCols := oGetDados:aCols
Local aMark := {}
Local aFiltro := {}
Local aCTBEnt := If(FindFunction("CTBEntArr"),CTBEntArr(),{})
Local cMarca := GetMark()
Local cAlias := "SC1"
Local cCampoOk := "C1_OK"
Local cCadastro := OemToAnsi(STR0012)
Local cCpoPre := If(GetMV("MV_CNPRECO"),"B1_UPRC","B1_CUSTD")
Local cFilSC1 := 'C1_FILIAL == "'+xFilial('SC1')+'".And. C1_QUJE < C1_QUANT
.And. C1_TPOP<>"P" .And. C1_TPSC<>"2" .And. C1_APROV$" ,L" .And.( C1_COTACAO ==
"'+Space(Len(SC1->C1_COTACAO))+'" .Or. C1_COTACAO == "'+Replicate("X",Len(SC1-
>C1_COTACAO))+'")'+' .And. SC1->C1_FLAGGCT <> "1"'
Local cCn200Sc1 := ""
Local cCn200SCF := ""
Local nOpcA := 0
Local nPosCod := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_PRODUT"})
Local nPosPrc := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_VLUNIT"})
Local nPosQuant := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_QUANT"})
Local nPosTotal := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_VLTOT"})
Local nPosNmSc := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_NUMSC"})
Local nPosItSc := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_ITEMSC"})
Local nPosQtSol := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_QTDSOL"})
Local nPosItem := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_ITEM"})
Local nExistIt := 0
Local nDeleta := 0
Local nx := 0
Local ny := 0
Local nSaldo := 0
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Ponto de Entrada para adicionar o filtro customizado ao filtro da tabela SC1
�
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If ExistBlock("CN200SC1")
cCn200Sc1 := ExecBlock("CN200SC1",.F.,.F.)
If ( ValType(cCn200Sc1) == "C" ) .And. !Empty(cCn200Sc1)
cFilSC1 += IIf(Empty(cFilSC1),"",".AND.")+cCn200Sc1
EndIf
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Ponto de Entrada para customizar o filtro da tabela SC1 �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If ExistBlock("CN200FSC")
cCn200SCF := ExecBlock("CN200FSC",.F.,.F.)
If ( ValType(cCn200SCF) == "C" ) .And. !Empty(cCn200SCF)
cFilSC1 := cCn200SCF
EndIf
EndIf
dbSelectArea("SC1")
dbSetOrder(1)
Set Filter To &(cFilSC1)
cFilter := cFilSC1
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Monta os botoes da enchoice passando o filtro para ser restaurado na saida da
visualizacao �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
aButEnc := { {"PESQUISA",{|| axPesqui() },OemToAnsi(STR0013)} ,;
//"Pesquisar"
{"RELATORIO",{||
A110Visual("SC1",RecNo(),2)},OemToAnsi(STR0014)} } //"Visualizar" -- Usa funcao
de visualizacao do pedido de compra
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Monta o Header com os titulos do MsSelect �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
dbSelectArea("SX3")
dbSetOrder(2)
For nx := 1 to Len(aCampos)
If MsSeek(aCampos[nx])
If AllTrim(aCampos[nx])=="C1_OK"
AADD(aCpos,{aCampos[nx],""," ",X3_PICTURE})
Else
AADD(aCpos,{aCampos[nx],"",AllTrim(X3Titulo()),X3_PICTURE})
EndIf
EndIf
Next
dbSelectArea("SX3")
dbSetOrder(1)
MsSeek(cAlias)
While !Eof() .And. SX3->X3_ARQUIVO == cAlias
IF ( SX3->X3_BROWSE=="S".And.SX3->X3_CONTEXT <> "V" .And. X3Uso(SX3-
>X3_USADO).And. Ascan(aCpos,{|x| Alltrim(x[1]) == Alltrim(SX3->X3_CAMPO)})==0 )
Aadd(aCpos,{SX3->X3_CAMPO,"",AllTrim(X3Titulo()),X3_PICTURE})
EndIf
dbSkip()
Enddo
DEFINE MSDIALOG oDlg TITLE cCadastro From 30,30 To 285,600 OF oMainWnd PIXEL
oMark := MsSelect():New(cAlias,cCampoOk,"CN200FLAG()",aCpos,@lInverte,@cMarca,
{ 17,2,113,285})
oMark:bMark := {||
CN200AddMark(cMarca,@aMarca,cCampoOk,cAlias),oMark:OBROWSE:Refresh()}
dbSelectArea("SC1")
dbSetOrder(1)
dbClearFilter()
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Monta o aCols com as SCs selecionados �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If nOpcA== 1
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Ponto de Entrada para tratamento do campo centro de custo na solicitacao
compras. �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If l200SCC
aFields := ExecBlock ("CTA200SCC",.F.,.F.)
Endif
For nx := 1 to Len(aMarca)
dbSelectArea(cAlias)
MsGoto(aMarca[nx])
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Varre o aCols e compara se ja existe o item da solicitacao
�
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
nExistIT := Ascan(aCols,{|x| x[nPosNmSc] ==
FieldGet(FieldPos(aCampos[2])) .And. x[nPosItSc] ==
FieldGet(FieldPos(aCampos[3]))})
If nExistIT = 0
If aMarca[nx] > 0
cItem := IIf(Empty(aCols),StrZero(1,Len(CNB-
>CNB_ITEM)),Soma1(aCols[Len(aCols)][1]))
AADD(aCols,Array(Len(aHeader)+1))//inclui novo item
Case IsHeadRec(Trim(aHeader[nY][2]))
== .T.
aCols[Len(aCols)][nY] := CNB-
>(Recno())
Case IsHeadAlias(Trim(aHeader[nY][2])) ==
.T.
aCols[Len(aCols)][nY] := "CNB"
Case Trim(aHeader[nY][2]) == "CNB_CONTA"
aCols[Len(aCols)][nY] := SC1-
>C1_CONTA
Case Trim(aHeader[nY][2]) == "CNB_ITEMCT"
aCols[Len(aCols)][nY] := SC1-
>C1_ITEMCTA
Case Trim(aHeader[nY][2]) == "CNB_CC"
aCols[Len(aCols)][nY] := SC1->C1_CC
OtherWise
aCols[Len(aCols)][nY] :=
CriaVar(aHeader[ny,2])
EndCase
Next nY
For nY := 1 To Len(aCTBEnt)
If GDFieldPos("CNB_EC"+aCTBEnt[nY]
+"CR",aHeader) > 0 .And. SC1->(FieldPos("C1_EC"+aCTBEnt[nY]+"CR")) > 0
aTail(aCols)
[GDFieldPos("CNB_EC"+aCTBEnt[nY]+"CR",aHeader)] := SC1->&("C1_EC"+aCTBEnt[nY]+"CR")
EndIf
If GDFieldPos("CNB_EC"+aCTBEnt[nY]
+"DB",aHeader) > 0 .And. SC1->(FieldPos("C1_EC"+aCTBEnt[nY]+"DB")) > 0
aTail(aCols)
[GDFieldPos("CNB_EC"+aCTBEnt[nY]+"DB",aHeader)] := SC1->&("C1_EC"+aCTBEnt[nY]+"DB")
EndIf
Next nY
aCols[Len(aCols)][nPosTotal] := aCols[Len(aCols)]
[nPosPrc]*aCols[Len(aCols)][nPosQuant]
aCols[Len(aCols)][Len(aHeader)+1] := .F.
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Impede que o item da planilha seja deletado pela
getdados �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
oGetDados:lNewLine:=.F.
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Varre array para preenchimento.
�
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If len(aFields) > 0
For nY := 1 To Len(afields)
If (nposfield:= aScan(aHeader, {|x|
AllTrim(x[2])==afields[nY,1]})) > 0
aCols[len(aCols),nposfield]:=
&(afields[nY,2])
Endif
Next ny
EndIf
EndIf
EndIf
EndIf
Next
EndIf
oGetDados:Refresh()
RestArea(aAreaSC1)
RestArea(aAreaSX3)
RestArea(aArea)
Return(.T.)
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200Flag � Autor � Marcelo Custodio � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Valida o usuario atraves da solicitacao selecionada ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � CN200Flag() ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200 ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200Flag()
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200AddMark � Autor � Marcelo Custodio � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Altera marcacao realizada pelo usuario
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � CN200AddMark(cExp01,aExp02,cExp03,cExp04)
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � cExp01 - Marca
��� � aExp02 - Array com as marcacoes
��� � cExp03 - Campo de validacao
��� � cExp04 - Alias do arquivo
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200AddMark(cMarca,aMarca,cCampoOk,cAlias)
Local cFilCod := xFilial(cAlias)
Local cNum := IIF(cAlias== "SC1",SC1->C1_NUM,SC7->C7_NUM)
Local cItem := IIF(cAlias== "SC1",SC1->C1_ITEM,SC7->C7_ITEM)
Local cFilCodPos:= IIF(cAlias== "SC1","C1_FILIAL","C7_FILIAL")
Local cNumPos := IIF(cAlias== "SC1","C1_NUM","C7_NUM")
Local aCN200SPC := {}
Local lCN200SPC := .F.
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Ponto de entrada para customizar a marcacao da solicitacao de compra / Pedido
de Compras �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If ExistBlock("CN200SPC")
aCN200SPC := ExecBlock("CN200SPC",.F.,.F.,{cMarca,aMarca,cCampoOk,cAlias})
If Valtype(aCN200SPC) == "A"
aMarca := aClone(aCN200SPC)
lCN200SPC := .T.
Endif
EndIf
If !lCN200SPC
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Posiciona no inicio da solicitacao de compra / Pedido de Compras �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
dbSeek(xFilial(cAlias)+cNum)
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Percorre os itens da mesma solicitacao/ Pedido de Compras �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
While (cAlias)->&cFilCodPos == cFilCod .And. (cAlias)->&cNumPos == cNum
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Verifica se a solicita � � o de compra / Pedido de Compras j � esta
marcada �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If aScan(aMarca,RecNo())> 0
aMarca[aScan(aMarca,RecNo())] := 0
//Altera campo de marcacao para todos os itens
If &(cCampoOk) == cMarca
RecLock(cAlias,.F.)
&(cCampoOk) := ""
MsUnlock()
EndIf
Else
AADD(aMarca,Recno())
//Altera campo de marcacao para todos os itens
If &(cCampoOk) != cMarca
RecLock(cAlias,.F.)
&(cCampoOk) := cMarca
MsUnlock()
EndIf
EndIf
dbSkip()
EndDo
Return
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200SCIT � Autor � Marcelo Custodio � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Exibe solicitacoes de compra para importacao por item ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � CN200SCIT(oExp01) ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � oExp01 - GetDados ���
��� � aExp02 - Array com os itens das planilhas ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200 ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200SCIT(oGetDados,aPlIt)
Local l200SCC := ExistBlock("CTA200SCC")
Local lSolic := IF(SuperGetMv("MV_RESTCOM")=="S",.T.,.F.)
Local nOpcA := 0
Local nSavQual := 0
Local nX := 0
Local nY := 0
Local nInclui := 0
Local n := oGetDados:nAt
If !Empty(cVar)
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Monta o Header com os titulos do MsSelect �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
dbSelectArea("SX3")
dbSetOrder(2)
For nx := 1 to Len(aCampos)
If MsSeek(aCampos[nx])
AADD(aHeadCpos,AllTrim(X3Titulo()) )
EndIf
Next
dbSelectArea("SC1")
dbSetOrder(2)
If MsSeek(xFilial()+cVar)
bFiltro := { || .T. }
cQuery := ""
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Filtra solicitacoes de compra �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
cQuery += "SELECT R_E_C_N_O_ SC1RECNO "
cQuery += " FROM "+RetSqlName("SC1")
cQuery += " WHERE C1_FILIAL = '"+xFilial("SC1")+"'"
cQuery += " AND C1_PRODUTO = '"+cVar+"'"
cQuery += " AND C1_QUJE < C1_QUANT "
cQuery += " AND C1_TPOP <>'P' "
If SC1->(FieldPos("C1_TPSC")) > 0
cQuery += " AND C1_TPSC <> '2' "
EndIf
cQuery += " AND C1_APROV IN(' ','L') "
cQuery += " AND (C1_COTACAO ='"+Space(Len(C1_COTACAO))+"' OR
C1_COTACAO = '"+Replicate("X",Len(C1_COTACAO))+"') "
cQuery += " AND C1_FLAGGCT <> '1' AND "
If ExistBlock("CN200IT")
cQuerySc1 := ExecBlock("CN200IT",.F.,.F.)
If ( ValType(cQuerySc1) == "C" )
cQuery += cQuerySc1 + " AND "
EndIf
EndIf
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Posiciona o SC1 �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
SC1->( MsGoto( ( cAliasQry )->SC1RECNO ) )
dbSelectArea( "SC1" )
If Eval( bIf ) .And. Eval( bFiltro )
AADD(aArrayF4,{SC1->C1_NUM,SC1->C1_ITEM,SC1-
>C1_PRODUTO,TransForm(nSaldo,PesqPictQt("C1_QUANT")),SC1->C1_DESCRI})
AADD(aSavRec,RecNo())
EndIf
EndIf
EndIf
dbSelectArea( cAliasQry )
dbSkip()
EndDo
Else
Help(" ",1,"A120F4")
EndIf
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Seleciona descricao do produto �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
cDescr := Substr(Posicione("SB1",1,xFilial("SB1")+cVar,"SB1->B1_DESC"),1,15)
aNewF4 := {}
If Len(aArrayF4) > 0
nOpcA := 0
cLine := "{If(aArrayF4[oQual:nAt,1],oOk,oNo)"
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Monta dinamicamente o bline do CodeBlock �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
bLine := &( "{ || " + cLine + " }" )
If nOpcA == 1
cFilCod := xFilial("SC1")
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Ponto de Entrada para tratamento do campo centro de custo na
solicitacao compras. �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If l200SCC
aFields := ExecBlock ("CTA200SCC",.F.,.F.)
Endif
For nx := 1 to Len(aArrayF4)
If aArrayF4[nx][1]
dbSelectArea("SC1")
dbSetOrder(1)
MsSeek(xFilial("SC1")+aArrayF4[nx][2]+aArrayF4[nx]
[3])
If nInclui == 0
cItem :=
IIf(Empty(aCols),"01",SomaIt(aCols[Len(aCols)][1]))
AADD(aCols,Array(Len(aHeader)+1))
aCols[Len(aCols)][Len(aHeader)+1] := .F.
n := Len(aCols)
EndIf
Next nY
For nY := 1 To Len(aCTBEnt)
If GDFieldPos("CNB_EC"+aCTBEnt[nY]
+"CR",aHeader) > 0 .And. SC1->(FieldPos("C1_EC"+aCTBEnt[nY]+"CR")) > 0
aTail(aCols)
[GDFieldPos("CNB_EC"+aCTBEnt[nY]+"CR",aHeader)] := SC1->&("C1_EC"+aCTBEnt[nY]+"CR")
EndIf
If GDFieldPos("CNB_EC"+aCTBEnt[nY]
+"DB",aHeader) > 0 .And. SC1->(FieldPos("C1_EC"+aCTBEnt[nY]+"DB")) > 0
aTail(aCols)
[GDFieldPos("CNB_EC"+aCTBEnt[nY]+"DB",aHeader)] := SC1->&("C1_EC"+aCTBEnt[nY]+"DB")
EndIf
Next nY
aCols[Len(aCols)][nPosTotal] := aCols[Len(aCols)]
[nPosPrc]*aCols[Len(aCols)][nPosQuant]
Endif
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �Ŀ
// � Varre array para preenchimento.
�
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If len(aFields) > 0
For nY := 1 To Len(afields)
If (nposfield:= aScan(aHeader, {|x|
AllTrim(x[2])==afields[nY,1]})) > 0
aCols[len(aCols),nposfield]:=
&(afields[nY,2])
Endif
Next ny
EndIf
Next
EndIf
Else
Aviso(OemToAnsi(STR0018),OemToAnsi(STR0033),{"Ok"})//"Nao ha itens em
aberto para o produto selecionado"
EndIf
Else
Aviso(OemToAnsi(STR0018),OemToAnsi(STR0043),{"Ok"})//"Preencha o produto"
EndIf
oGetDados:Refresh()
RestArea(aAreaSC1)
RestArea(aAreaSB1)
RestArea(aArea)
Return .T.
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200SaldoSC � Autor � Marcelo Custodio � Data �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Calcula saldo do item
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � nExp01 - Posicao do codigo do produto na CNB (CNB_PRODUT)
��� � nExp02 - Posicao do numero da SC na CNB (CNB_NUMSC)
��� � nExp03 - Posicao do item da SC na CNB (CNB_ITEMSC)
��� � nExp04 - Posicao do item da CNB (CNB_ITEM)
��� � nExp05 - Posicao da quantidade da CNB (CNB_QUANT)
��� � nExp06 - Posicao da quantidade solicitada da CNB (CNB_QTDSOL)
��� � nExp07 - Numero do contrato
��� � cExp08 - Numero da planilha
��� � cExp09 - Numero da revisao do contrato
��� � aExp10 - Acols dos itens de planilha
���
��� � aExp11 - Array com os itens das planilhas
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function
CN200SaldoSC(nPosCod,nPosNumSC,nPosItSC,nPosItem,nPosQuant,nPosQtSol,cNumCont,cNumP
la,cNumRevisa,aCols,aPlIt)
If !Empty(aPlIt)
For nx := 1 to Len(aPlIt)
For ny := 1 to Len(aPlIt[nX]) //Proximo item
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica se o item ja foi adicionado a planilha �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If !aPlIt[nx][ny][Len(aPlIt[nx][ny])].And.!ATail(aPlIt[nx]
[ny]).And.;
(aPlIt[ nx,ny, nPosCod ] == SC1->C1_PRODUTO).And. ;
(aPlIt[ nx,ny, nPosNumSC] == SC1->C1_NUM).And. ;
(aPlIt[ nx,ny, nPosItSC ] == SC1->C1_ITEM)
nSaldo -= aPlIt[nx,ny,nPosQuant]//Retira quantidade ja
atendida
dbSelectArea("CNB")
dbSetOrder(1)
EndIf
Next nY
Next nX
EndIf
RestArea(aArea)
Return(nSaldo)
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200CabOk � Autor � Marcelo Custodio � Data � 28.11.2005
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Valida cabecalho
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � CN200CabOk(aExp01,oExp02)
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � aExp01 - Array com os campos do cabecalho
��� � oExp02 - Dialog
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200CabOk(aCpoEnch,oDlg)
Local cCpo := ""
Local cMens := ""
local lOk := .T.
Local n
Local cProg := FunName()
Local cFlagRej := '1'
If (lOk := Obrigatorio(aGets,aTela))
If lContrEd
If cEspctr =="1" // Verifica se o contrato e Compra ou Venda
If Empty(M->CNA_FORNEC) .Or. aScan(aForn,{|x| x[1] == M-
>CNA_FORNEC .And. x[2] == M->CNA_LJFORN .And. x[len(aHeader1)+1] == .F.}) == 0
cCpo := "CNA_FORNEC"
cMens := OemToAnsi(STR0021)//"Fornecedor inv � lido para o
contrato selecionado"
lOk := .F.
EndIf
Endif
If M->CNA_FLREAJ=='1' .And. M->CN9_FLGREJ=='2'
cCpo := "CNA_FLREAJ"
cMens := OemToAnsi(STR0049)//"Esta planilha n � o poder � ser
Reajustada. O contrato desta planilha n � o possui Reajuste."
lOk := .F.
EndIf
Else
If cEspctr =="1" // Verifica se o contrato e Compra ou Venda
If cProg == "CNTA100" //Rotina de manutencao de contratos
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Preenche acols com o array dos fornecedores �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If Type("aForn") != "A"
aForn := aEval(oGetDad1:aCols,{|x| {x[aScan(aHeader1,
{|x| AllTrim(x[2]) == "CNC_CODIGO"})],x[aScan(aHeader1,{|x| AllTrim(x[2]) ==
"CNC_LOJA"})]}})
EndIf
Return lOk
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200LinOk � Autor � Marcelo Custodio � Data � 28.11.2005
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Valida item da planilha
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � CN200LinOK(oExp01)
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � oExp01 - Estrutura da linha
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200LinOk(o)
Local lRet := .T.
Local lRet1 := .T.
Local lCN200CVL := .T.
Local lCN200VTOT := .T.
Local lC200Auto :=((Type("lC200Auto") == "L") .And. lC200Auto)
Local lFilOri := CNB->(FieldPos("CNB_FILORI")) > 0
If (!Empty(CNB->(FieldPos("CNB_TS"))))
aPosCto:= iIf(cEspCtr == "1" .Or. cCtrmed == '2',
{nPosQuant,nPosVlUni,nPosProd,nPosUM},
{nPosQuant,nPosVlUni,nPosProd,nPosUM,nPosTS} )
Else
aPosCto:= iIf(cEspCtr == "1" ,{nPosQuant,nPosVlUni,nPosProd,nPosUM},
{nPosQuant,nPosVlUni,nPosProd,nPosUM} )
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Chama ponto de entrada para validacoes especificas �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If ExistBlock("CN200CVL")
lCN200CVL := ExecBlock("CN200CVL",.F.,.F.,{aCols[n],aHeader})
lRet := If(Valtype(lCN200CVL)=="L",lCN200CVL,lRet)
Else
If !aCols[o:nAt,len(aHeader)+1]
For nA := 1 to len(aPosCto)
if Empty(aCols[o:nAt][aPosCto[nA]])
lRet := .F.
exit
EndIf
Next nA
If !lRet
If cEspCtr == "1"
Help(" ",1,"CNTA200TE2") //"Os campos Produto, Quantidade,
Valor Unit � rio ou Un. Medida est � o em Branco. "
Else
Help(" ",1,"CNTA200TS3") //"Os campos Produto, Quantidade,
Valor Unit � rio, Un. Medida ou TES est � o em Branco. "
EndIf
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Ponto de entrada valida ou n � o o c � lculo do valor total do item
selecionado �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If ExistBlock("CN200VTOT")
lCN200VTOT := ExecBlock("CN200VTOT",.F.,.F.,{aCols[n],aHeader})
lRet1:= If(Valtype(lCN200VTOT)=="L",lCN200VTOT,.T.)
EndIf
If lRet1
If lRet .And. ( NoRound(aCols[o:nAt][nPosQuant]*aCols[o:nAt]
[nPosVlUni],nTamTot) != aCols[o:nAt][nPosVlTot] ) .And.;
( Round(aCols[o:nAt][nPosQuant]*aCols[o:nAt]
[nPosVlUni],nTamTot) != aCols[o:nAt][nPosVlTot] )
Aviso("CNTA200",STR0048,{"OK"})//"Valor total inv � lido!"
lRet := .F.
EndIf
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Valida produto com Contrato de Parceria �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If lRet .And. !lProdCtr
dbSelectArea("SB1")
dbSetOrder(1)
If dbSeek(xFilial("SB1")+aCols[o:nAt][nPosProd])
If SB1->B1_CONTRAT='S'
Help(" ",1,"CNTA200PRD")
lRet := .F.
EndIf
EndIf
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Valida produto em relacao a solicitacao de compra �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If lRet .And. !Empty(aCols[o:nAt][nPosSC1])
If lFilOri .And. !Empty(aCols[o:nAt][nPosFilOr])
cFilSC1 := xFilial("SC1",aCols[o:nAt][nPosFilOr])
EndIf
dbSelectArea("SC1")
dbSetOrder(1)
If dbSeek(cFilSC1+aCols[o:nAt][nPosSC1]+aCols[o:nAt][nPosItSC1])
If SC1->C1_PRODUTO != aCols[o:nAt][nPosProd]
Help(" ",1,"CNTA200INV") //"Produto invalido para o
item"
lRet := .F.
EndIf
EndIf
EndIf
EndIf
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Chama ponto de entrada para validacoes especificas �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If ExistBlock("CN200VLIN")
uRet := ExecBlock("CN200VLIN",.F.,.F.,{aCols[n],aHeader})
lRet := If(Valtype(uRet)=="L",uRet,lRet)
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Valida lancamento do SIGAPCO �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If lRet .And. !lC200Auto
lRet:= PcoVldLan('000354','02','CNTA200',,, .T.)
EndIf
EndIf
Return lRet
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200TudOk � Autor � Marcelo Custodio � Data � 28.11.2005
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Valida itens da planilha
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � CN200TudOK()
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200TudOk(o)
Local nA := 0
Local nI := 0
Local nPosItem := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_ITEM"})
Local nPosSC1 := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_NUMSC"})
Local nPosItSC1 := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_ITEMSC"})
Local nPosQuant := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_QUANT"})
Local nPosVlUni := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_VLUNIT"})
Local nPosProd := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_PRODUT"})
Local nPosUM := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_UM"})
Local nPosVlTot := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_VLTOT"})
Local nPosVlDec := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_VLDESC"})
Local nPosFilOr := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_FILORI"})
If nI > len(aCols)
Help(" ",1,"CNTA200PLA") //"Insira um item na planilha"
lRet := .F.
EndIf
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Chama ponto de entrada para validacoes especificas �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If ExistBlock("CN200CVT")
If Empty(aRatAux) .And. !Empty(aRatPlan)
aRatAux := aClone(aRatPlan)
ElseIf Empty(aRatPlan)
aRatAux := GetRatInBase(oGetDados,"CNA")
EndIf
lCN200CVT := ExecBlock("CN200CVT",.F.,.F.,{aCols,aHeader,aRatAux})
lRet := If(Valtype(lCN200CVT)=="L",lCN200CVT,lRet)
Else
If lRet
M->CNA_VLTOT := 0
For nI := 1 to len(aCols)
//-- Nao validar linhas deletadas do aCols
If aCols[nI][Len(aCols[1])]
Loop
EndIf
For nA := 1 to len(aPosCto)
If Empty(aCols[nI][aPosCto[nA]])
lRet := .F.
Exit
EndIf
Next nA
If !lRet
Help(" ",1,"CNTA200COR") //"Preencha corretamente todos os
itens"
Exit
EndIf
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Valida produto em relacao a solicitacao de compra �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If lRet .And. !Empty(aCols[nI][nPosSC1])
If lFilOri .And. !Empty(aCols[o:nAt][nPosFilOr])
cFilSC1 := xFilial("SC1",aCols[o:nAt][nPosFilOr])
EndIf
dbSelectArea("SC1")
dbSetOrder(1)
If dbSeek(cFilSC1+aCols[nI][nPosSC1]+aCols[nI][nPosItSC1])
If SC1->C1_PRODUTO != aCols[nI][nPosProd]
Help(" ",1,"CNTA200INV") //"Produto inv � lido
para o item"
lRet := .F.
Exit
EndIf
EndIf
EndIf
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Valida produto com Contrato de Parceria �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If lRet .And. !lProdCtr
dbSelectArea("SB1")
dbSetOrder(1)
If dbSeek(cFilSB1+aCols[nI][nPosProd])
If SB1->B1_CONTRAT='S'
Help(" ",1,"CNTA200PRD")
lRet := .F.
Exit
EndIf
EndIf
EndIf
lProdFr := dbSeek(cFilSA5+M->CNA_FORNEC+M-
>CNA_LJFORN+aCols[nI][nPosProd])
If !lProdFr
dbSelectArea("SB1")
dbSetOrder(1)
If dbSeek(cFilSB1+aCols[nI][nPosProd])
dbSelectArea("SAD")
dbSetOrder(1)
lProdFr := dbSeek(cFilSAD+M->CNA_FORNEC+M-
>CNA_LJFORN+SB1->B1_GRUPO)
EndIf
EndIf
If !lProdFr
Aviso(STR0018,STR0044+AllTrim(aCols[nI][nPosItem])
+STR0045,{ "OK" },2)//"O produto informado no item "###" n � o est � amarrado ao
fornecedor informado. Verifique a amarra � � o produto X fornecedor."
lRet := .F.
Exit
EndIf
EndIf
M->CNA_VLTOT += (aCols[nI][nPosVlTot]-aCols[nI][nPosVlDec])
Next nI
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Valida lancamento do SIGAPCO �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If lRet
lRet:=
PcoVldLan('000354','01','CNTA200',/*lUsaLote*/,/*lDeleta*/,
.F./*lVldLinGrade*/)
EndIf
EndIf
EndIf
Return lRet
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200VldCon � Autor � Marcelo Custodio � Data � 28.11.2005
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Valida contrato
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200VldCon()
Local aArea := GetArea()
Local lRet := .T.
Local cContrato := M->CNA_CONTRA
Local cRevisa := M->CNA_REVISA
Local cCtrFix := ""
If !Empty(cContrato)
If lContrEd
If cContrato <> M->CN9_NUMERO
lRet := .F.
Help(" ",1,"CNTA200COP")//"Numero do contrato cadastrado na
Planilha divergente ao Contrato.
EndIf
Else
lRet:= ExistCpo("CN9",cContrato+cRevisa)
EndIf
lRet := If(lContrEd,lRet,lRet.And.CN240VldUsr(cContrato,DEF_TRAINC,.T.))
If lRet
dbSelectArea("CN9")
dbSetOrder(1)
If Empty(cRevisa)
dbSeek(xFilial("CN9")+cContrato)
//Seleciona revisao mais recente se houver
If !Empty(CN9->CN9_REVATU)
M->CNA_REVISA := cRevisa := CN9->CN9_REVATU
EndIf
EndIF
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica se o contrato aceita planilha �
// � Situacoes que aceitam a inclusao de planilha �
// � - 2 - Elaboracao �
// � - 3 - Emitido �
// � - 4 - Em Aprovacao �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If AllTrim(CN9->CN9_SITUAC) == DEF_SELAB .OR. AllTrim(CN9-
>CN9_SITUAC) == DEF_SEMIT .OR. AllTrim(CN9->CN9_SITUAC) == DEF_SAPRO
//Busca Tipo de Contrato
If (CN1->(FieldPos("CN1_CTRFIX")) > 0) .And. CN1-
>(dbSeek(xFilial("CN1")+CN9->CN9_TPCTO))
cCtrFix := CN1->CN1_CTRFIX
EndIf
//Para tipo de contrato fixo nao permite inclusao de
planilha
If cCtrFix != "2"
If Empty(CN9->CN9_CLIENT)
//Quando altera o numero do contrato limpa o
fornecedor
cEspctr:="1"
IF !Empty(CN9->CN9_REVATU)=.F.
If ALTERA .And. M->CNA_CONTRA != CNA-
>CNA_CONTRA
M->CNA_FORNEC :=
Space(TamSX3("CNA_FORNEC")[1])
M->CNA_LOJA :=
Space(TamSX3("CNA_LOJA")[1])
Endif
dbSelectArea("CNC")
dbSetOrder(1)
//� � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Seleciona primeiro fornecedor
relacionado �
// � ao contrato
�
//� � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � �
If dbSeek(xFilial("CNC")+M-
>CNA_CONTRA+If(FieldPos("CNC_REVISA")>0,M->CNA_REVISA,""))
M->CNA_FORNEC := CNC->CNC_CODIGO
M->CNA_LJFORN := CNC->CNC_LOJA
Else
M->CNA_FORNEC :=
Space(TamSX3("CNA_FORNEC")[1])
M->CNA_LJFORN :=
Space(TamSX3("CNA_LJFORN")[1])
Endif
lRet := .T.
Else
lRet := .F.
Help(" ",1,"CNTA200CON") //"Contrato
revisado, selecione a vers � o mais recente."
EndIf
Else
//Quando altera o numero do contrato limpa o
Vendedor
cEspctr:="2"
IF !Empty(CN9->CN9_REVATU)=.F.
If ALTERA .And. M->CNA_CONTRA != CNA-
>CNA_CONTRA
M->CNA_CLIENT :=
Space(TamSX3("CNA_CLIENT")[1])
M->CNA_LOJACL :=
Space(TamSX3("CNA_LOJACL")[1])
Endif
dbSelectArea("SA1")
dbSetOrder(1)
//� � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Seleciona primeiro cliente
relacionado ao contrato �
//� � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If dbSeek(xFilial("SA1")+CN9-
>CN9_CLIENT+CN9->CN9_LOJACL)
M->CNA_CLIENT := SA1->A1_COD
M->CNA_LOJACL := SA1->A1_LOJA
Else
M->CNA_CLIENT :=
Space(TamSX3("A1_COD")[1])
M->CNA_LOJACL :=
Space(TamSX3("A1_LOJA")[1])
Endif
lRet := .T.
Else
lRet := .F.
Help(" ",1,"CNTA200CON") //"Contrato
revisado, selecione a vers � o mais recente."
EndIf
Endif
Else
lRet := .F.
M->CNA_REVISA := Space(TamSX3("CNA_REVISA")[1])
Aviso(OemToAnsi(STR0018),OemToAnsi(STR0046),
{"Ok"}) //"O tipo do Contrato selecionado n � o permite a inclus � o de planilhas."
EndIf
Else
lRet := .F.
M->CNA_REVISA := Space(TamSX3("CNA_REVISA")[1])
Help(" ",1,"CNTA200ATU") //"A situa � � o atual do contrato
n � o permite a inclus � o de planilhas."
EndIf
ElseIf Empty(CN9->CN9_CODED)
//Limpa revisao quando o contrato nao for encontrado
M->CNA_REVISA := Space(TamSX3("CNA_REVISA")[1])
Endif
EndIf
Else
lRet := .F.
Endif
RestArea(aArea)
Return lRet
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200PlaNum � Autor � Marcelo Custodio � Data � 28.11.2005
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Retorna numero sequencial da planilha de acordo com o
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � cExp01 := CN200PlaNum(cExp02,cExp03)
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � cExp01 - Numero sequencial da planilha
��� � cExp02 - Numero do contrato
��� � cExp03 - Numero da revisao
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200PlaNum(cContra,cRevisa)
Local cNumPla := Strzero(0,TamSX3("CNA_NUMERO")[1])
Local cFilCod
Local aArea := GetArea()
dbSelectArea("CNA")
dbSetOrder(1)
cFilCod := xFilial("CNA")
dbSeek(cFilCod+cContra+cRevisa)
//Seleciona planilha mais recente
While CNA->CNA_FILIAL == cFilCod .And. CNA->CNA_CONTRA == cContra .And. CNA-
>CNA_REVISA == cRevisa
cNumPla := CNA->CNA_NUMERO
dbSkip()
EndDo
cNumPla := Soma1(cNumPla)
RestArea(aArea)
Return cNumPla
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200Grv � Autor � Marcelo Custodio � Data � 28.11.2005
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Grava a planilha e os itens
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � CN200Grv(nExp01,oExp02)
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � nExp01 - Opcao selecionada
��� � oExp02 - Getdados dos itens
��� � aExp03 - Verifica se e rotina automatica
��� � aExp04 - Array Cabecalho para Rotina Automatica
��� � aExp05 - Array Itens para Rotina Automatica
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200Grv(nOpc,oGetDados,lC200Auto,aHeadAuto,aColsAuto,aRatPlan,aLocais)
Local nCntFor := 0
Local nTam := 0
Local nUsado := 0
Local nCntFor2 := 0
Local nItem := 0
Local nTot := 0
Local nTotAnt := 0
Local nQtAtd := 0
Local nX := 0
Local nPosItm := 0
Local nVlComs := 0
Local aHeader := {}
Local aCols := {}
Local aItms := {}
aHeader := IIf(lC200Auto,aHeadAuto,oGetDados:aHeader)
aCols := IIf(lC200Auto,aColsAuto,oGetDados:aCols)
Do Case
Case nOpc == 3 // Inclusao
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Preenche campos do cabecalho �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
dbSelectArea("CNA")
Reclock("CNA",.T.)
For nCntFor := 1 To FCount()
If (FieldName(nCntFor)=="CNA_FILIAL")
CNA->CNA_FILIAL := xFilial()
Else
FieldPut(nCntFor,M->&(FieldName(nCntFor)))
EndIf
Next nCntFor
MsUnlock()
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Executa o lancamento do SIGAPCO �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
PcoDetLan("000354","01","CNTA200")
dbSelectArea("CNB")
nUsado := Len(aHeader)
cFilCod := xFilial("CNB")
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Preenche campos dos itens �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
For nCntFor := 1 To Len(aCols)
If ( !aCols[nCntFor][nUsado+1] )
dbSelectArea("CNB")
Reclock("CNB",.T.)
For nCntFor2 := 1 To nUsado
If ( aHeader[nCntFor2][10] != "V" )
FieldPut(FieldPos(aHeader[nCntFor2]
[2]),aCols[nCntFor][nCntFor2])
EndIf
Next nCntFor2
CNB->CNB_FILIAL := cFilCod
If CNB->(FieldPos("CNB_FILORI")) > 0
CNB->CNB_FILORI := cFilCod
EndIf
CNB->CNB_NUMERO := CNA->CNA_NUMERO
CNB->CNB_REVISA := CNA->CNA_REVISA
CNB->CNB_CONTRA := CNA->CNA_CONTRA
CNB->CNB_DTCAD := dDataBase
CNB->CNB_SLDMED := CNB->CNB_QUANT
CNB->CNB_SLDREC := CNB->CNB_QUANT
nTot += (CNB->CNB_QUANT*CNB->CNB_VLUNIT)-CNB-
>CNB_VLDESC
MsUnlock()
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Executa o lancamento do SIGAPCO �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
PcoDetLan("000354","02","CNTA200")
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Atualiza solicitacao de compra �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � �
If !Empty(CNB->CNB_NUMSC)
If lFilOri .And. !Empty(CNB->CNB_FILORI)
cFilSC1 := xFilial("SC1",CNB->CNB_FILORI)
Else
cFilSC1 := xFilial("SC1")
EndIf
dbSelectArea("SC1")
If dbSeek(cFilSC1+CNB->CNB_NUMSC+CNB->CNB_ITEMSC)
RecLock("SC1",.F.)
SC1->C1_FLAGGCT := "1" //Solicitacao
bloqueada para SIGAGCT
MsUnlock()
EndIf
EndIf
EndIf
Next
If lCronog
dbSelectArea("CN9")
dbSetOrder(1)
dbSeek(xFilial("CN9")+CNA->CNA_CONTRA+CNA->CNA_REVISA)
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica se o contrato possui cronograma fisico �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
lFisico := ((CN1->(FieldPos("CN1_CROFIS")) > 0) .And.
Posicione("CN1",1,xFilial("CN1")+CN9->CN9_TPCTO,"CN1_CROFIS") == "1")
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Apaga os itens da planilha �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
dbSelectArea("CNB")
dbSetOrder(1)
If dbSeek(xFilial()+CNA->CNA_CONTRA+CNA->CNA_REVISA+CNA->CNA_NUMERO)
cFilCod := xFilial("CNB")
While !Eof() .And. CNB->CNB_FILIAL = cFilCod .And. CNB-
>CNB_CONTRA == CNA->CNA_CONTRA .And. CNB->CNB_REVISA == CNA->CNA_REVISA .And. CNB-
>CNB_NUMERO == CNA->CNA_NUMERO
If !Empty(CNB->CNB_ITEMSC)
If lFilOri .And. !Empty(CNB->CNB_FILORI)
cFilSC1 := xFilial("SC1",CNB->CNB_FILORI)
Else
cFilSC1 := xFilial("SC1")
EndIf
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � Ŀ
// � Retira quantidade atendida da solicitacao de
compra �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � �
dbSelectArea("SC1")
dbSetOrder(1)
If dbSeek(cFilSC1+CNB->CNB_NUMSC+CNB->CNB_ITEMSC)
RecLock("SC1")
SC1->C1_FLAGGCT := ""
MsUnlock()
EndIf
EndIf
RecLock("CNB", .F.)
dbDelete()
MsUnLock()
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Exclui o lancamento do SIGAPCO �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
PcoDetLan("000354","02","CNTA200",.T.)
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Armazena itens no array para controle do cronograma
// � fisico
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If lFisico
aAdd(aItms,CNB->CNB_ITEM)
EndIf
dbSelectArea("CNB")
dbSkip()
EndDo
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Preenche campos da planilha �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
dbSelectArea("CNA")
Reclock("CNA",.F.)
For nCntFor := 1 To FCount()
If (FieldName(nCntFor)=="CNA_FILIAL")
CNA->CNA_FILIAL := xFilial()
Else
FieldPut(nCntFor,M->&(FieldName(nCntFor)))
EndIf
Next nCntFor
MsUnlock()
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Executa o lancamento do SIGAPCO �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
PcoDetLan("000354","01","CNTA200")
dbSelectArea("CNB")
nUsado := Len(aHeader)
cFilCod := xFilial("CNB")
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Preenche campos dos itens �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
For nCntFor := 1 To Len(aCols)
If ( !aCols[nCntFor][nUsado+1] )
dbSelectArea("CNB")
Reclock("CNB",.T.)
For nCntFor2 := 1 To nUsado
If ( aHeader[nCntFor2][10] != "V" )
FieldPut(FieldPos(aHeader[nCntFor2]
[2]),aCols[nCntFor][nCntFor2])
EndIf
Next nCntFor2
CNB->CNB_FILIAL := cFilCod
If CNB->(FieldPos("CNB_FILORI")) > 0
CNB->CNB_FILORI := CN9->CN9_FILORI
EndIf
CNB->CNB_NUMERO := CNA->CNA_NUMERO
CNB->CNB_REVISA := CNA->CNA_REVISA
CNB->CNB_CONTRA := CNA->CNA_CONTRA
CNB->CNB_SLDMED := CNB->CNB_QUANT
CNB->CNB_SLDREC := CNB->CNB_QUANT
nTot += (CNB->CNB_QUANT*CNB->CNB_VLUNIT)-CNB-
>CNB_VLDESC
MsUnlock()
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Executa o lancamento do SIGAPCO �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
PcoDetLan("000354","02","CNTA200")
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Atualiza solicitacao de compra �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � �
If !Empty(CNB->CNB_NUMSC)
If lFilOri .And. !Empty(CNB->CNB_FILORI)
cFilSC1 := xFilial("SC1",CNB->CNB_FILORI)
Else
cFilSC1 := xFilial("SC1")
EndIf
dbSelectArea("SC1")
If dbSeek(cFilSC1+CNB->CNB_NUMSC+CNB->CNB_ITEMSC)
RecLock("SC1",.F.)
SC1->C1_FLAGGCT := "1"
MsUnlock()
EndIf
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica se o item foi incluido na planilha
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If lFisico .And. (nPosItm := aScan(aItms,CNB->CNB_ITEM)) ==
0
If Empty(cAlias)//Verifica se o alias do cronograma
ja foi criado
dbSelectArea("CNF")
dbSetOrder(2)
cAlias := GetNextAlias()
cQuery := ChangeQuery( cQuery )
dbUseArea( .T., "TOPCONN", TcGenQry(
,,cQuery ), cAlias, .F., .T. )
EndIf
cFilCNS := xFilial("CNS")
(cAlias)->(dbGoTop())
While !(cAlias)->(Eof())
// � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Insere novo registro no cronograma fisico
para todas �
// � as parcelas
�
// � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � �
dbSelectArea("CNS")
RecLock("CNS",.T.)
CNS->CNS_FILIAL:=cFilCNS
CNS->CNS_CONTRA:=CNA->CNA_CONTRA
CNS->CNS_REVISA:=CNA->CNA_REVISA
CNS->CNS_CRONOG:=CNA->CNA_CRONOG
CNS->CNS_PARCEL:=(cAlias)->CNF_PARCEL
CNS->CNS_PLANI :=CNA->CNA_NUMERO
CNS->CNS_ITEM :=CNB->CNB_ITEM
MsUnlock()
(cAlias)->(dbSkip())
EndDo
ElseIf nPosItm > 0
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Quando o item nao foi incluso ou excluso apenas
retira �
// � do array de controle
�
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � �
aDel(aItms,nPosItm)
aSize(aItms,len(aItms)-1)
EndIf
EndIf
Next
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Finaliza alias do cronograma �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If !Empty(cAlias)
(cAlias)->(dbCloseArea())
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Verifica se houveram itens excluidos �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If lFisico .and. len(aItms) > 0
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Monta query para buscar os itens do cronograma fisico �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
cItms := ""
For nx:=1 to len(aItms)
cItms += "'"+aItms[nx]+"',"
Next
cAlias := GetNextAlias()
cQuery := ChangeQuery( cQuery )
dbUseArea( .T., "TOPCONN", TcGenQry( ,,cQuery ), cAlias, .F., .T.
)
dbSelectArea("CNS")
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Exclui os itens do cronograma fisico �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
While !(cAlias)->(Eof())
CNS->(dbGoTo((cAlias)->RECNO))
RecLock("CNS",.F.)
dbDelete()
MsUnlock()
(cAlias)->(dbSkip())
EndDo
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Preenche valor total da planilha �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
Reclock("CNA",.F.)
CNA->CNA_VLTOT := nTot
CNA->CNA_SALDO := nTot
MsUnlock()
nTot -= nTotAnt
RecLock("CNZ", .F.)
dbDelete()
MsUnLock()
dbSelectArea("CNZ")
dbSkip()
EndDo
aRatPlan := {}
EndIf
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Apaga os itens da planilha �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
dbSelectArea("CNB")
dbSetOrder(1)
cFilCod := xFilial("CNB")
If dbSeek(cFilCod+CNA->CNA_CONTRA+CNA->CNA_REVISA+CNA->CNA_NUMERO)
While !Eof() .And. CNB->CNB_FILIAL = cFilCod .And. CNB-
>CNB_CONTRA == CNA->CNA_CONTRA .And. CNB->CNB_REVISA == CNA->CNA_REVISA .And. CNB-
>CNB_NUMERO == CNA->CNA_NUMERO
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Exclui o lancamento do SIGAPCO �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
PcoDetLan("000354","02","CNTA200",.T.)
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Exclui o lancamento do SIGAPCO �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
PcoDetLan("000354","02","CNTA200",.T.)
dbSelectArea("CNB")
dbSkip()
EndDo
EndIf
AGW->(dbSkip())
End
EndIf
If !Empty(CNA->CNA_CRONOG)
dbSelectArea("CNF")
dbSetOrder(2)
cFilCod := xFilial("CNF")
dbSeek(cFilCod+CNA->CNA_CONTRA+CNA->CNA_REVISA+CNA->CNA_CRONOG)
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Exclui a amarracao com os conhecimentos �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
MsDocument( "CNA", CNA->( RecNo() ), 2, , 3 )
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Apaga cabecalho da planilha �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
dbSelectArea("CNA")
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Executa o lancamento do SIGAPCO �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
PcoDetLan("000354","01","CNTA200",.T.)
RecLock("CNA", .F.)
dbDelete()
MsUnLock()
EndCase
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Grava localizacoes fisicas (AGW) �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If (nOpc == 3 .Or. nOpc == 4) .And. AliasInDic("AGW")
CNB->(dbSetOrder(1))
AGW->(dbSetOrder(2))
For nCntFor := 1 To Len(aLocais)
CNB->(dbSeek(xFilial("CNB")+CNA->(CNA_CONTRA+CNA_REVISA+CNA_NUMERO)
+aLocais[nCntFor,1]))
If CNB->CNB_BASINS # '1' .Or. (nOpc == 4 .And. !CNB->(Found()))
//-- Tratamento para alteracao do CNB_BASINS
If AGW->(dbSeek(xFilial("AGW")+CNA->(CNA_CONTRA+CNA_NUMERO)+CNB-
>CNB_ITEM))
RecLock("AGW",.F.)
AGW->(dbDelete())
AGW->(MsUnLock())
EndIf
Loop
EndIf
RecLock("AGW",!AGW->(dbSeek(xFilial("AGW")+CNA->(CNA_CONTRA+CNA_NUMERO)
+aLocais[nCntFor,1])))
AGW->(MsUnLock())
Next nCntFor
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Atualiza valor da comissao para contratos de venda �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If cEspCtr == "2"
cQuery := "SELECT SUM(CNB_VLTOT) AS CNB_VLTOT "
cQuery += " FROM "+RetSQLName("CNB")+" CNB "
cQuery += " WHERE CNB.CNB_FILIAL = '"+xFilial("CNB")+"'"
cQuery += " AND CNB.CNB_CONTRA = '"+CNA->CNA_CONTRA+"'"
cQuery += " AND CNB.CNB_REVISA = '"+CNA->CNA_REVISA+"'"
cQuery += " AND CNB.CNB_FLGCMS = '1' "
cQuery += " AND CNB.D_E_L_E_T_ = ' ' "
cAlias := GetNextAlias()
cQuery := ChangeQuery( cQuery )
dbUseArea( .T., "TOPCONN", TcGenQry( ,,cQuery ), cAlias, .F., .T. )
If !(cAlias)->(Eof())
RecLock("CNA",.F.)
CNA->CNA_VLCOMS := (cAlias)->CNB_VLTOT
MsUnlock()
EndIf
(cAlias)->( dbCloseArea() )
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Executa PE apos a gravacao �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If ExistBlock("CN200GRP")
ExecBlock("CN200GRP",.F.,.F.,{nOpc})
EndIf
Return
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200FilFor � Autor � Marcelo Custodio � Data � 28.11.2005
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Rotina de filtro da consulta padrao para filtrar apenas os
��� � fornecedores do contrato
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � nOpc - Opcao selecionada
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200FilFor()
Local lRet := .F.
Local cProg := FunName()
Local cRevisa := ""
Local lRev := CNC->(FieldPos("CNC_REVISA")) > 0
Do Case
case cProg == "CNTA200" .OR. cProg == "CNTA100"
If !lContrEd
cRevisa := M->CNA_REVISA
lRet := CNC->(dbSeek(xFilial("CNC")+M-
>CNA_CONTRA+If(lRev,cRevisa,"")+SA2->A2_COD+SA2->A2_LOJA))
Else
lRet := (aScan(aForn,{|x| x[1] == SA2->A2_COD .And. x[2] == SA2-
>A2_LOJA}) > 0)
EndIf
case cProg == "CNTA120"
cRevisa := M->CND_REVISA
lRet := CNC->(dbSeek(xFilial("CNC")+M->CND_CONTRA+If(lRev,cRevisa,"")
+SA2->A2_COD+SA2->A2_LOJA))
case cProg == "CNTA090"
cRevisa := M->CN8_REVISA
lRet := CNC->(dbSeek(xFilial("CNC")+M->CN8_CONTRA+If(lRev,cRevisa,"")
+SA2->A2_COD+SA2->A2_LOJA))
case cProg == "CNTA220"
cRevisa := Posicione("CN9",1,xFilial("CNC")+M->CNM_CONTRA,"CN9_REVATU")
lRet := CNC->(dbSeek(xFilial("CNC")+M->CNM_CONTRA+If(lRev,cRevisa,"")
+SA2->A2_COD+SA2->A2_LOJA))
OtherWise
lRet := .T.
End Case
Return lRet
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200VldNum � Autor � Marcelo Custodio � Data � 28.11.2005
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Verifica numero da planilha
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200VldNum()
Local lRet := .T.
Local aArea := GetArea()
dbSelectArea("CNA")
If INCLUI
If dbSeek(xFilial("CNA")+M->CNA_NUMERO+M->CNA_REVISA+M->CNA_NUMERO)
Help(" ",1,"CNTA200JAE") //"N � mero de planilha j � existente"
lRet := .F.
EndIf
Else
If M->CNA_NUMERO != CNA->CNA_NUMERO .And. dbSeek(xFilial("CNA")+M-
>CNA_NUMERO+M->CNA_REVISA+M->CNA_NUMERO)
Help(" ",1,"CNTA200JAE") //"N � mero de planilha j � existente"
lRet := .F.
EndIf
EndIf
RestArea(aArea)
Return lRet
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200VldDini � Autor � Marcelo Custodio � Data �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Verifica data de inicio da planilha
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200VldDini()
If lMVC
dTIniCtr := oModel:GetModel("CN9MASTER"):GetValue("CN9_DTINIC") // Data
Inicio do contrato
dTFimCtr := oModel:GetModel("CN9MASTER"):GetValue("CN9_DTFIM") // Data
final do contrato
dDtFim := oModel:GetModel("CNADETAIL"):GetValue("CNA_DTFIM") //
Data final da planilha
Else
dTIniCtr := CN9->CN9_DTINIC // Data final do contrato
dTFimCtr := CN9->CN9_DTFIM // Data inicio do contrato
dDtFim := M->CNA_DTFIM // Data final da planilha
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Posiciona no arquivo de contrato �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If !lMVC .And. ( CN9->CN9_NUMERO != M->CNA_CONTRA .And. CN9->CN9_REVISA != M-
>CNA_REVISA )
CN9->(dbSetOrder(1))
CN9->(dbSeek(xFilial("CN9")+M->CNA_CONTRA+M->CNA_REVISA))
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica data de inicio em relacao ao contrato �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If ( Type("dCN9FIM") != "U" ) .And. dCN9FIM != NIL
If M->CNA_DTINI < dTIniCtr .Or. M->CNA_DTINI > dCN9FIM
Help(" ",1,"CNTA200DTI") //"Data de in � cio inv � lida"
lRet := .F.
EndIf
Else
If M->CNA_DTINI < dTIniCtr .Or. M->CNA_DTINI > dTFimCtr
Help(" ",1,"CNTA200DTI") //"Data de in � cio inv � lida"
lRet := .F.
EndIf
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica data de inicio em relacao a data de termino �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If lRet .And. !Empty(dDtFim) .And. M->CNA_DTINI > dDtFim
Help(" ",1,"CNTA200MEN") //"A data de in � cio n � o pode ser menor que a data
final da planilha"
lRet := .F.
EndIf
Return lRet
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200VldDfim � Autor � Marcelo Custodio � Data �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Verifica data de termino da planilha
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200VldDfim()
If lMVC
dTIniCtr := oModel:GetModel("CN9MASTER"):GetValue("CN9_DTINIC") //
Data Inicio do contrato
dTFimCtr := oModel:GetModel("CN9MASTER"):GetValue("CN9_DTFIM") //
Data final do contrato
dDtIni := oModel:GetModel("CNADETAIL"):GetValue("CNA_DTINI")
// Data final da planilha
Else
dTIniCtr := CN9->CN9_DTINIC // Data final do contrato
dTFimCtr := CN9->CN9_DTFIM // Data inicio do contrato
dDtIni := M->CNA_DTINI // Data final da planilha
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Posiciona no arquivo de contrato �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If !lMVC .AND. (CN9->CN9_NUMERO != M->CNA_CONTRA .And. CN9->CN9_REVISA != M-
>CNA_REVISA)
CN9->(dbSetOrder(1))
CN9->(dbSeek(xFilial("CN9")+M->CNA_CONTRA+M->CNA_REVISA))
dTIniCtr := CN9->CN9_DTINIC // Data final do contrato
dTFimCtr := CN9->CN9_DTFIM // Data inicio do contrato
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica data de termino em relacao ao contrato �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If ( Type("dCN9FIM") != "U" ) .AND. dCN9FIM != NIL
If M->CNA_DTFIM < M->CN9_DTINIC .Or. M->CNA_DTFIM > dCN9FIM
Help(" ",1,"CNTA200DTF") //"Data final inv � lida"
lRet := .F.
EndIf
Else
If M->CNA_DTFIM < dTIniCtr .Or. M->CNA_DTFIM > dTFimCtr
Help(" ",1,"CNTA200DTF") //"Data final inv � lida"
lRet := .F.
EndIf
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica data de termino em relacao a data de inicio �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If lRet .And. !Empty(dDtIni) .And. dDtIni > M->CNA_DTFIM
Help(" ",1,"CNTA200DFM") //"A data final n � o pode ser menor que a data de
in � cio da planilha"
lRet := .F.
EndIf
Return lRet
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u ncao � CN200Track � Autor � Sergio Silveira � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � � o � Faz o tratamento da chamada do System Tracker
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � R e torno � .T. ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Static Function CN200Track( aCols, aHeader )
Local aEnt := {}
Local cKey := M->CNA_CONTRA + M->CNA_REVISA + M->CNA_NUMERO
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Percorre o acols �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
For nLoop := 1 To Len( aCols )
AAdd( aEnt, { "CNB", cKey + aCols[ nLoop, nPosItem ] } )
Next nLoop
MaTrkShow( aEnt )
Return( .T. )
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u ncao � CN200AGrv � Autor � Marcelo Custodio � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � � o � Executa gravacao da planilha nos arrays aPlani e aPlIt,
��� � usados na rotina de inclusao de contratos ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � nExp01 - Opcao atual ���
��� � aExp02 - Array com os cabecalhos das planilhas ���
��� � aExp03 - Array com os itens das planilhas(aCols) ���
��� � oExp04 - Getdados dos itens ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200AGrv(nOpc,aPlani,aPlIt,oGetDados)
Do Case
Case nOpc == 3 // Inclusao
dbSelectArea("CNA")
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Inclui itens da planilha �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
aAdd(aPlIt,aClone(aCols))
nPlan := len(aPlani)
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Preenche campos do cabecalho �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
For nCntFor := 1 To FCount()
If (FieldName(nCntFor)=="CNA_FILIAL")
aPlani[len(aPlani),nCntFor] := xFilial()
Else
aPlani[len(aPlani),nCntFor] := M->&(FieldName(nCntFor))
EndIf
Next nCntFor
dbSelectArea("CNB")
nUsado := Len(aHeader)
cFilCod := xFilial("CNB")
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Calcula total dos itens �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
For nCntFor := 1 To Len(aCols)
If ( !aCols[nCntFor][nUsado+1] )
nTot += (aCols[nCntFor,aScan(aHeader,{|x| AllTrim(x[2]) ==
"CNB_QUANT"})]*aCols[nCntFor,aScan(aHeader,{|x| AllTrim(x[2]) == "CNB_VLUNIT"})])-
aCols[nCntFor,aScan(aHeader,{|x| AllTrim(x[2]) == "CNB_VLDESC"})]
EndIf
Next
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Atualiza valor total do cabecalho �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
aPlani[len(aPlani),nPosCnaVlt] := nTot
aPlani[len(aPlani),nPosCnaSld] := nTot
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Calcula total dos itens �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
For nCntFor := 1 To Len(aCols)
If ( !aCols[nCntFor][nUsado+1] )
nTot += (aCols[nCntFor,aScan(aHeader,{|x| AllTrim(x[2]) ==
"CNB_QUANT"})]*aCols[nCntFor,aScan(aHeader,{|x| AllTrim(x[2]) == "CNB_VLUNIT"})])-
aCols[nCntFor,aScan(aHeader,{|x| AllTrim(x[2]) == "CNB_VLDESC"})]
EndIf
Next
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Atualiza valor total do cabecalho �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
aPlani[nPlan,nPosCnaVlt] := nTot
aPlani[nPlan,nPosCnaSld] := nTot
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Atualiza itens da planilha �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
aPlIt[nPlan] := aClone(aCols)
Case nOpc == 5 //Exclusao
dbSelectArea("CNA")
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Exclui planilha �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
aDel(aPlani,nPlan)
aSize(aPlani,len(aPlani)-1)
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Exclui itens da planilha �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
aDel(aPlIt,nPlan)
aSize(aPlIt,len(aPlIt)-1)
EndCase
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Executa PE apos a gravacao �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If ExistBlock("CN200AGRP")
aCN200AGRP := ExecBlock("CN200AGRP",.F.,.F.,{nOpc,aPlani,aPlIt})
If ValType(aCN200AGRP) == "A"
If Len(aCN200AGRP)>=1 .And. ValType(aCN200AGRP[1]) == "A"
aPlani := aClone(aCN200AGRP[1])
Endif
If Len(aCN200AGRP)>=2 .And. ValType(aCN200AGRP[2]) == "A"
aPlit := aCN200AGRP[2]
Endif
Endif
EndIf
Return
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u ncao � CN200Conhec � Autor � Sergio Silveira � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � � o � Chamada da visualizacao do banco de conhecimento
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � CN200Conhec() ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � Nenhum ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � R e torno � .T. ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Return( .t. )
/*/
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P r ograma � MenuDef � Autor � Fabio Alves Silva � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � � o � Utilizacao de menu Funcional
��� � ���
��� � ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � R e torno � Array com opcoes da rotina. ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � Parametros do array a Rotina: ���
��� � 1. Nome a aparecer no cabecalho ���
��� � 2. Nome da Rotina associada ���
��� � 3. Reservado ���
��� � 4. Tipo de Transa � � o a ser efetuada:
��� � 1 - Pesquisa e Posiciona em um Banco de Dados ���
��� � 2 - Simplesmente Mostra os Campos ���
��� � 3 - Inclui registros no Bancos de Dados ���
��� � 4 - Altera o registro corrente ���
��� � 5 - Remove o registro corrente do Banco de Dados ���
��� � 5. Nivel de acesso ���
��� � 6. Habilita Menu Funcional ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� DATA � Programador � Manutencao efetuada ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
/*/
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Ponto de entrada utilizado para inserir novas opcoes no array aRotina �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If ExistBlock("CNT200MNU")
ExecBlock("CNT200MNU",.F.,.F.)
EndIf
Return(aRotina)
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u ncao � CN200AFld � Autor � Marcelo Custodio � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � � o � Gera array com os campos nao exibidos na get dados
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � nExp01 - Opcao atual ���
��� � lExp02 - Exibe campos de readequacao ���
��� � lExp03 - Exibe campos de realinhamento ���
��� � lExp04 - Informa se a edicao esta sendo realizada pela ���
��� � rotina de inclusao de contrato ���
��� � cExp05 - Especie do contrato - compra/venda ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200AFld(nOpc,lReadq,lReali,lContrEd,cEspCtr)
Local aNoFields :=
{"CNB_FILIAL","CNB_NUMERO","CNB_REVISA","CNB_CODMEN","CNB_OBS","CNB_DTANIV","CNB_CO
NORC","CNB_CONTRA","CNB_DTCAD","CNB_DTPREV","CNB_PERC","CNB_RATEIO","CNB_TIPO","CNB
_ITSOMA","CNB_PRCORI","CNB_QTDORI","CNB_QTRDAC","CNB_QTRDRZ","CNB_PERCAL","CNB_FILH
O"}
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Nao exibe campos referentes aos saldos dos itens durante a inc/alter �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If (nOpc == 3 .Or. nOpc == 4) .Or. lContrEd
aAdd(aNoFields,"CNB_SLDMED")
aAdd(aNoFields,"CNB_SLDREC")
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Nao exibe campos referentes a revisao do tipo realinhamento �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If nOpc == 3 .Or. nOpc == 4 .Or. !lReali .Or. lContrEd
aAdd(aNoFields,"CNB_DTREAL")
aAdd(aNoFields,"CNB_REALI")
aAdd(aNoFields,"CNB_VLTOTR")
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Nao exibe campos referentes a revisao do tipo readequacao �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If nOpc == 3 .Or. nOpc == 4 .Or. !lReadq .Or. lContrEd
aAdd(aNoFields,"CNB_QTREAD")
aAdd(aNoFields,"CNB_VLREAD")
aAdd(aNoFields,"CNB_VLRDGL")
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Verifica especie do contrato, e exclui campo de comissao quando contrato de
compra �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
if cEspCtr == "1"
aAdd(aNoFields,"CNB_FLGCMS")
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Verifica especie do contrato, e exclui campo Tipo Saida quando contrato de
compra �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If FunName()=="CNTA100"
If cEspCtr == "1"
aAdd(aNoFields,"CNB_TS")
Else
aAdd(aNoFields,"CNB_TE")
EndIf
EndIf
Return aNoFields
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u ncao � AjustaSX3 � Autor � Marcelo Custodio � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � � o � Funcao utilizada para ajustar o dicionario SX3
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Static Function AjustaSX3()
Local aArea := GetArea()
Local cReserv := " � � " //Permite alterar Usado, Browse e Obrigatorio
Local cValiQtd := 'Positivo() .And. CN140VldQtd() .And. cn200MultT()'
Local cValid := 'Positivo() .And. cn200MultT()'
Local cValidDsc := 'Positivo() .And. M->CNB_DESC <= 100 .And. cn200MultT()'
Local cValidPrd := 'ExistCPO("SB1") .And. CN200VldProd(M->CNB_PRODUT) .And.
cn200MultT()'
Local cIniDT := "StoD('')"
Local cVldRev := "(Vazio().Or.ExistCpo('CN9',M->CNA_CONTRA+M->CNA_REVISA)) .And.
CN200VldCon()"
Local cUsadoCNB := " � � � � � � � � � � � � � � � "
Local cReserCNB := " � � "
Local cRsrItem := " � � "
dbSelectArea("SX3")
dbSetOrder(2)
If dbSeek("C7_DESC1")
cReserv :=SX3->X3_RESERV
If dbSeek("CNB_DESC")
Reclock("SX3",.F.)
SX3->X3_RESERV:= cReserv
MsUnlock()
Endif
Endif
If dbSeek("CNB_ULTAVA");
.And. Upper(AllTrim(SX3->X3_RELACAO)) != Upper(AllTrim(cIniDT))
RecLock("SX3",.F.)
SX3->X3_RELACAO:= cIniDT
MsUnlock()
EndIf
If dbSeek("CNB_PROXAV");
.And. Upper(AllTrim(SX3->X3_RELACAO)) != Upper(AllTrim(cIniDT))
RecLock("SX3",.F.)
SX3->X3_RELACAO := cIniDT
MsUnlock()
EndIf
RestArea(aArea)
Return
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200PC � Autor � Aline Sebrian � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Exibe Pedido de Compras ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � CN200PC(oExp01) ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � oExp01 - GetDados ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200 ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200PC(oGetDados)
Local oDlg
Local oMark
Local cMarca := GetMark()
Local lInverte := .F.
Local lPedido := IF(SuperGetMv("MV_RESTPED")=="S",.T.,.F.)
Local aFields := {}
Local aArea := GetArea()
Local aGrupo := UsrGrComp(RetCodUsr())
Local aAreaSX3 := SX3->(GetArea())
Local aAreaSC7 := SC7->(GetArea())
Local aCpos := {}
Local aMarca := {}
Local aCampos :=
{"C7_OK","C7_NUM","C7_ITEM","C7_PRODUTO","C7_QUANT","C7_PRECO","C7_DESCRI","C7_GRUP
COM"}
Local aButEnc := {}
Local aHeader := oGetDados:aHeader
Local aCols := oGetDados:aCols
Local aMark := {}
Local aFiltro := {}
Local aCab := {}
Local aCN200PED := {}
Local aCN200CRP := {}
Local aCTBEnt := If(FindFunction("CTBEntArr"),CTBEntArr(),{})
Local nOpcA := 0
Local nPosCod := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_PRODUT"})
Local nPosPrc := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_VLUNIT"})
Local nPosQuant := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_QUANT"})
Local nPosTotal := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_VLTOT"})
Local nPosNmSc := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_NUMSC"})
Local nPosItSc := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_ITEMSC"})
Local nPosItem := ASCAN(aHeader,{|x| AllTrim(x[2]) == "CNB_ITEM"})
Local nExistIt := 0
Local nDeleta := 0
Local nx := 0
Local ny := 0
Local nTamDesc := TamSX3("CNB_DESC")[2]
If ExistBlock( "CN200PID" )
cCN200PID := ExecBlock( "CN200PID", .F., .F., )
If ValType( cCN200PID ) == "C" .And. !Empty(cCN200PID)
cFilSC7 += IIf(Empty(cFilSC7),"",".And.") + cCN200PID
EndIf
EndIf
dbSelectArea("SC7")
dbSetOrder(1)
Set Filter To &(cFilSC7)
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Monta os botoes da enchoice passando o filtro para ser restaurado na saida da
visualizacao �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
//arrumar
aButEnc := { {"PESQUISA",{|| axPesqui() },OemToAnsi(STR0013)} ,;
//"Pesquisar"
{"ANALITIC",{||C200VisuPC(RecNo())},OemToAnsi(STR0014)} } //"Visualizar" -- Usa
funcao de visualizacao do pedido de compra
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Monta o Header com os titulos do MsSelect �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
dbSelectArea("SX3")
dbSetOrder(2)
For nx := 1 to Len(aCampos)
If MsSeek(aCampos[nx])
If AllTrim(aCampos[nx])=="C7_OK"
AADD(aCpos,{aCampos[nx],""," ",X3_PICTURE})
Else
AADD(aCpos,{aCampos[nx],"",AllTrim(X3Titulo()),X3_PICTURE})
EndIf
EndIf
Next
dbSelectArea("SX3")
dbSetOrder(1)
MsSeek(cAlias)
While !Eof() .And. SX3->X3_ARQUIVO == cAlias
IF ( SX3->X3_BROWSE=="S".And.SX3->X3_CONTEXT <> "V" .And. X3Uso(SX3-
>X3_USADO).And. Ascan(aCpos,{|x| Alltrim(x[1]) == Alltrim(SX3->X3_CAMPO)})==0 )
Aadd(aCpos,{SX3->X3_CAMPO,"",AllTrim(X3Titulo()),X3_PICTURE})
EndIf
dbSkip()
Enddo
If ExistBlock("CN200CRP")
aCN200CRP := ExecBlock("CN200CRP", .F., .F.)
If ValType(aCN200CRP) == "A"
aCab := aCN200CRP
DbSelectArea("SX3")
DbSetOrder(2)
For nX := 1 to Len(aCab)
If aScan(aCpos,{|x| x[1]= aCab[nX]})==0
If SX3->(MsSeek(aCab[nX]))
Aadd(aCpos,{SX3->X3_CAMPO,SX3->X3_TIPO,SX3-
>X3_CONTEXT,SX3->X3_PICTURE})
EndIf
EndIf
Next nX
EndIf
EndIf
DEFINE MSDIALOG oDlg TITLE cCadastro From 30,30 To 285,600 OF oMainWnd PIXEL
oMark := MsSelect():New(cAlias,cCampoOk,"CN200FLAGPC()",aCpos,@lInverte,@cMarca,
{ 17,2,113,285})
oMark:bMark := {||
CN200AddMark(cMarca,@aMarca,cCampoOk,cAlias),oMark:OBROWSE:Refresh()}
dbSelectArea("SC7")
dbSetOrder(1)
dbClearFilter()
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Monta o aCols com os PCs selecionados �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If nOpcA== 1
For nx := 1 to Len(aMarca)
dbSelectArea(cAlias)
MsGoto(aMarca[nx])
If nExistIT = 0
If aMarca[nx] > 0
cItem := IIf(Empty(aCols),StrZero(1,Len(CNB-
>CNB_ITEM)),Soma1(aCols[Len(aCols)][nPosItem]))
AADD(aCols,Array(Len(aHeader)+1))//inclui novo item
For nY := 1 To Len(aCTBEnt)
If GDFieldPos("CNB_EC"+aCTBEnt[nY]
+"CR",aHeader) > 0 .And. SC7->(FieldPos("C7_EC"+aCTBEnt[nY]+"CR")) > 0
aTail(aCols)
[GDFieldPos("CNB_EC"+aCTBEnt[nY]+"CR",aHeader)] := SC7->&("C7_EC"+aCTBEnt[nY]+"CR")
EndIf
If GDFieldPos("CNB_EC"+aCTBEnt[nY]
+"DB",aHeader) > 0 .And. SC7->(FieldPos("C7_EC"+aCTBEnt[nY]+"DB")) > 0
aTail(aCols)
[GDFieldPos("CNB_EC"+aCTBEnt[nY]+"DB",aHeader)] := SC7->&("C7_EC"+aCTBEnt[nY]+"DB")
EndIf
Next nY
aCols[Len(aCols)][nPosTotal] :=
Round(aCols[Len(aCols)][nPosPrc]*aCols[Len(aCols)][nPosQuant], TamSX3("CNB_VLTOT")
[2])
aCols[Len(aCols)][Len(aHeader)+1] := .F.
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Impede que o item da planilha seja deletado pela
getdados �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
oGetDados:lNewLine:=.F.
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Varre array para preenchimento.
�
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If len(aFields) > 0
For nY := 1 To Len(afields)
If (nposfield:= aScan(aHeader, {|x|
AllTrim(x[2])==afields[nY,1]})) > 0
aCols[len(aCols),nposfield]:=
&(afields[nY,2])
Endif
Next ny
EndIf
EndIf
EndIf
EndIf
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Ponto de entrada executado no carregamento do aCols ao Item da
Planilha �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If ExistBlock("CN200PED")
aCN200PED := ExecBlock("CN200PED",.F.,.F.,
{aHeader,aCols[len(aCols)],aMarca[nx]})
If ValType(aCN200PED) == "A"
aCols[len(aCols)] := aClone(aCN200PED)
EndIf
EndIf
Next
EndIf
oGetDados:Refresh()
RestArea(aAreaSC7)
RestArea(aAreaSX3)
RestArea(aArea)
Return(.T.)
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200FlagPC � Autor � Aline Sebrian � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Valida o usuario atraves da pedido de compras selecionado � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � CN200FlagPC() ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200 ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200FlagPC()
Local lPedido := IF(SuperGetMv("MV_RESTPED")=="S",.T.,.F.)
Local cFlag := IIf(C7_QUJE>=C7_QUANT,'X',' ')
+If(C7_TPOP=='P'.And.C7_APROV$"R,B",'X',' ');
+If(Empty(SC7->C7_GRUPCOM),' ',If(lPedido.And.aScan(aGrupoPC,SC7->C7_GRUPCOM) <=
0,'X',' '))
Return cFlag
/*/
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F un � � o � C200VisuPC � Autor � Aline Sebrian � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � � o � Chama a rotina de visualizacao dos Pedidos de Compras ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � C200VisuPC() ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200 ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
/*/
Function C200VisuPC(nRecSC7)
Local aArea := GetArea()
Local aAreaSC7 := SC7->(GetArea())
Local cSavCadastro := cCadastro
Local cFilBak := cFilAnt
Local lRet := .F.
PRIVATE nTipoPed := 1
PRIVATE cCadastro := OemToAnsi(STR0053)
PRIVATE l120Auto := .F.
PRIVATE aBackSC7 := {} //Sera utilizada na visualizacao do pedido - MATA120
MaFisEnd()
DbSelectArea("SC7")
MsGoto(nRecSC7)
If !EOF() .And. !Empty(SC7->C7_NUM)
cFilAnt := IIf(!Empty(SC7->C7_FILIAL),SC7->C7_FILIAL,cFilAnt)
A120Pedido(Alias(),RecNo(),2)
cFilant := cFilBak
cCadastro := cSavCadastro
lRet := .T.
EndIf
RestArea(aAreaSC7)
RestArea(aArea)
Return lRet
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � AjustaSX1 � Autor � Aline Sebrian � Data
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Configura as perguntas na rotina da planilha do contrato
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � S i ntaxe � AjustaSX1() ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
Static Function AjustaSX1()
Local aAreaAnt := GetArea()
PutHelp("PCNTA200PRD",{"Produto inv � lido para o item. ", "Este produto possui
Contrato de"," Parceria."},;
{"Invalid product for the item. ", "This product
has Partnersh.Agreem."},;
{"Producto invalido para el item. ", "fecha de
inicio."},.F.)
PutHelp("SCNTA200COP",{"Verifique no Contrato."},;
{"Check on Contract."},;
{"Verifique en el Contrato."},.F.)
PutHelp("PCNTA200TS1",{"Tipo Saida somente para Contratos ", "do Tipo Vendas" },;
{"Outflow Type is only for Sales Type ", "
Contracts."},;
{"Tipo Salida solamente pra Contratos ", "del
Tipo"},.F.)
PutHelp("PCNTA200TS2",{"Tipo Sa � da n � o cadastrada."},;
{"Outflow Type isn't registered."},;
{"Tipo salida no registrado"},.F.)
RestArea(aAreaAnt)
Return
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � cn200VldTS � Autor � Aline Sebrian � Data � 14.01.2010
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Valida Tipo Saida na Planilha
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function cn200VldTS()
Local cReadVar := ReadVar()
Local xConteudo := &(cReadVar)
Local lRet := .T.
Local cEspecie := ""
dbSelectArea("SF4")
dbSetOrder(1)
MsSeek(xFilial("SF4")+xConteudo)
If SF4->(Found())
If xConteudo < "500"
Help (" ",1,"A410NOTES")
lRet := .F.
EndIf
Return lRet
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � cn200VldTe � Autor � Aline Sebrian � Data � 14.01.2010
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Valida Tipo Entrada na Planilha
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function cn200VldTE()
Local cReadVar := ReadVar()
Local xConteudo := &(cReadVar)
Local lRet := .T.
Local cEspecie := ""
If SF4->(Found())
If xConteudo > "500"
Help (" ",1,"A410NOTES")
lRet := .F.
EndIf
If lRet
If cEspecie == "2"
Help (" ",1,"CNTA200TE1")//"Tipo Entrada somente para Contratos
do Tipo Compras"
lRet := .F.
EndIf
EndIf
EndIf
Return lRet
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F un � � o � AjustaSX7 � Autor � Aline Sebrian � Data � 11/02/11
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � � o � Funcao de processamento da gravacao do SX7
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Static Function AjustaSX7()
Local aSX7 := {}
Local aEstrut:= {}
Local i := 0
Local j := 0
Local lSX7 := .F.
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Preencha a matriz aSX7 com os campos a serem criados. Utilize a mesma ordem
indicada na �
// � matriz aEstrut
�
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
aEstrut :=
{"X7_CAMPO","X7_SEQUENC","X7_REGRA","X7_CDOMIN","X7_TIPO","X7_SEEK","X7_ALIAS","X7_
ORDEM","X7_CHAVE","X7_CONDIC","X7_PROPRI"}
DbSelectArea("SX7")
DbSetOrder(1)
aAdd(aSX7,{"CNB_PRODUT","004",'If(Empty(M->CNA_CLIENT),SB1-
>B1_TE,"")',"CNB_TE","P","S","SB1",1,'xFilial("SB1")+M->CNB_PRODUT',"","S"})
aAdd(aSX7,{"CNB_PRODUT","005",'If(!Empty(M->CNA_CLIENT),SB1-
>B1_TS,"")',"CNB_TS","P","S","SB1",1,'xFilial("SB1")+M->CNB_PRODUT',"","S"})
dbSelectArea("SX7")
dbSetOrder(1)
For i:= 1 To Len(aSX7)
If !Empty(aSX7[i][2])
If !dbSeek(aSX7[i,1]+aSX7[i,2])
lSX7 := .T.
RecLock("SX7",.T.)
For j:=1 To Len(aSX7[i])
If !Empty(FieldName(FieldPos(aEstrut[j])))
FieldPut(FieldPos(aEstrut[j]),aSX7[i,j])
EndIf
Next j
dbCommit()
MsUnLock()
EndIf
EndIf
Next i
Return
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200VldProd � Autor � Allyson Freitas � Data �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Valida permissao de Produto
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � P a rametros � cProd: Produto
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200VldProd(cProd)
Local lRet := .T.
Local aCTBEnt := If(FindFunction("CTBEntArr"),CTBEntArr(),{})
Local oObj := Nil
Local nY
Local oModel := FWModelActive()
Local lMVC := ValType(oModel) <> "U" .And. nModulo <> 28
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica se o usuario tem permissao de inclusao. �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If Inclui
If (VAL(GetVersao(.F.)) == 11 .And. GetRpoRelease() >= "R6" .Or.
VAL(GetVersao(.F.)) > 11) .And. FindFunction("MaAvalPerm")
lRet := MaAvalPerm(1,{cProd,"CNT200",3})
If !lRet
Help(,,1,'SEMPERM')
EndIf
EndIf
EndIf
SB1->(dbSeek(xFilial("SB1")+cProd))
If !lMVC
oObj := If(FunName() == "CNTA140",oGetDad1,oGetDados)
For nY := 1 To Len(aCTBEnt)
If GDFieldPos("CNB_EC"+aCTBEnt[nY]+"CR",oObj:aHeader) > 0 .And. SB1-
>(FieldPos("B1_EC"+aCTBEnt[nY]+"CR")) > 0
aTail(oObj:aCols)[GDFieldPos("CNB_EC"+aCTBEnt[nY]
+"CR",oObj:aHeader)] := SB1->&("B1_EC"+aCTBEnt[nY]+"CR")
EndIf
If GDFieldPos("CNB_EC"+aCTBEnt[nY]+"DB",oObj:aHeader) > 0 .And. SB1-
>(FieldPos("B1_EC"+aCTBEnt[nY]+"DB")) > 0
aTail(oObj:aCols)[GDFieldPos("CNB_EC"+aCTBEnt[nY]
+"DB",oObj:aHeader)] := SB1->&("B1_EC"+aCTBEnt[nY]+"DB")
EndIf
Next nY
EndIf
Return lRet
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200FldOk � Autor � Allyson Freitas � Data �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Valida permissao de Produto
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200FldOk()
Local lRet := .T.
Local cFieldCNB := ReadVar()
Local cFieldEdit := SubStr(cFieldCNB,4,Len(cFieldCNB))
Local nPProduto := 0
Local oModel := FWModelActive()
Local oModelCNB := Nil
Local lMVC := ValType(oModel) <> "U" .And. nModulo <> 28
If Altera
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica se o usuario tem permissao de alteracao. �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If cFieldEdit $ "CNB_PRODUT"
If (VAL(GetVersao(.F.)) == 11 .And. GetRpoRelease() >= "R6" .Or.
VAL(GetVersao(.F.)) > 11) .And. FindFunction("MaAvalPerm")
If !lMVC
nPProduto := aScan(aHeader,{|x| AllTrim(x[2])==
"CNB_PRODUT"})
If !(lRet := MaAvalPerm(1,{aCols[n][nPProduto],"CNT200",5})
.And. MaAvalPerm(1,{cCampo,"CNT200",3}))
Help(,,1,'SEMPERM')
EndIf
Else
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Tratamentos para interface em MVC �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
oModelCNB := oModel:GetModel("CNBDETAIL")
lRet := MaAvalPerm(1,
{oModelCNB:GetValue("CNB_PRODUT"),"CNT200",5}) .And. MaAvalPerm(1,
{oModelCNB:GetValue("CNB_PRODUT"),"CNT200",3})
If !lRet
Help(,,1,'SEMPERM')
EndIf
EndIf
EndIf
Else
If (VAL(GetVersao(.F.)) == 11 .And. GetRpoRelease() >= "R6" .Or.
VAL(GetVersao(.F.)) > 11) .And. FindFunction("MaAvalPerm")
If !lMVC
nPProduto := aScan(aHeader,{|x| AllTrim(x[2])==
"CNB_PRODUT"})
If !(lRet := MaAvalPerm(1,{aCols[n]
[nPProduto],"CNT200",4}))
Help(,,1,'SEMPERM')
EndIf
Else
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Tratamentos para interface em MVC �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
oModelCNB := oModel:GetModel("CNBDETAIL")
lRet := lRet := MaAvalPerm(1,
{oModelCNB:GetValue("CNB_PRODUT"),"CNT200",4})
If !lRet
Help(,,1,'SEMPERM')
EndIf
EndIf
EndIf
EndIF
EndIf
Return lRet
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u n � ao � CN200DelOk � Autor � Allyson Freitas � Data �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � ao � Valida permissao de Produto
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � Uso � CNTA200
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function CN200DelOk()
Local lRet := .T.
Local nPProduto := 0
Local oModel := FWModelActive()
Local oModelCNB := Nil
Local lMVC := ValType(oModel) <> "U" .And. nModulo <> 28
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
// � Verifica se o usuario tem permissao de exclusao. �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
If (VAL(GetVersao(.F.)) == 11 .And. GetRpoRelease() >= "R6" .Or.
VAL(GetVersao(.F.)) > 11) .And. FindFunction("MaAvalPerm")
If !lMVC
If !(lRet := MaAvalPerm(1,{aCols[n][nPProduto],"CNT200",5}))
Help(,,1,'SEMPERM')
EndIf
Else
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Tratamentos para interface em MVC �
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
oModelCNB := oModel:GetModel("CNBDETAIL")
If !(lRet := MaAvalPerm(1,
{oModelCNB:GetValue("CNB_PRODUT"),"CNT200",5}))
Help(,,1,'SEMPERM')
EndIf
EndIf
EndIf
Return lRet
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � F u ncao � cn200MultT � Autor � Aline S Damasceno � Data � 03/02/12
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � D e scri � � o � Efetua a Validacao dos campos digitados quanto a
��� � ,preco, desconto e quantidade liberada. ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � R e torno � Logico ���
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
*/
Function cn200MultT()
Local aArea := GetArea()
Local cEspecie := ""
Local oObj := Nil
Local nPVlUnit := 0
Local nPVlTot := 0
Local nPVlDesc := 0
Local nPOVlDesc := 0
Local nPDescont := 0
Local nPODescont := 0
Local nPQuant := 0
Local nPQtdOri := 0
Local nPTES := 0
Local nX := 0
Local nTotal := 0
Local lRetorno := .T.
Local cReadVar := ReadVar()
Local xConteudo := &(cReadVar)
Local oModel := FWModelActive()
Local oModelCNB := Nil
Local lMVC := ValType(oModel) <> "U" .And. nModulo <> 28
Local nValDesc := 0
Local aSaveLines := FWSaveRows()
If !lMVC
Do Case
Case "CNBNDESC"$cReadVar
If FindFunction("FtDescItem")
FtDescItem(0,@oObj:aCols[n,nPVlUnit],IIF(oObj:aCols[n,nPQtdOri]>0,@oObj:aCols[n,nPQ
tdOri],@oObj:aCols[n,nPQuant]),0,@xConteudo,@oObj:aCols[n,nPVlDesc],0,1,,)
EndIf
Case "CNB_QUANT"$cReadVar
If FindFunction("FtDescItem")
FtDescItem(0,@oObj:aCols[n,nPVlUnit],IIF(oObj:aCols[n,nPQtdOri]>0,@oObj:aCols[n,nPQ
tdOri],@oObj:aCols[n,nPQuant]),0,@oObj:aCols[n,nPODescont],@oObj:aCols[n,nPOVlDesc]
,0,1,,)
oObj:aCols[n,nPDescont] := oObj:aCols[n,nPODescont]
oObj:aCols[n,nPVlDesc] := oObj:aCols[n,nPOVlDesc]
EndIf
EndCase
EndIf
//Tratamento para contrato do tipo vendas
If cEspecie=="2" .And. (!( Type("lC200Auto") != "U" .And. lC200Auto )) .And.
(FunName() <> "CNTA140")
nPVlDesc := aScan(oObj:aHeader,{|x| AllTrim(x[2])=="CNB_VLDESC"})
nPDescont := aScan(oObj:aHeader,{|x| AllTrim(x[2])=="CNB_DESC"})
Do Case
Case "CNB_VLUNIT"$cReadVar
oObj:aCols[n,nPVlDesc] := 0
oObj:aCols[n,nPDescont]:= 0
Case "CNB_QUANT"$cReadVar
oObj:aCols[n,nPVlDesc] := 0
oObj:aCols[n,nPDescont]:= 0
Case "CNB_DESC"$cReadVar
If FindFunction("FtDescItem")
FtDescItem(0,@oObj:aCols[n,nPVlUnit],@oObj:aCols[n,nPQuant],0,@xConteudo,@oObj:aCol
s[n,nPVlDesc],0,1,,)
EndIf
EndCase
EndIf
Else
// � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Ŀ
// � Tratamentos para interface em MVC �
//� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
oModelCNB := oModel:GetModel("CNBDETAIL")
cEspecie := FwFldGet("CN9_ESPCTR")
oModel:GetModel("CNSDETAIL"):LoadValue("CNS_DESCRI",Posicione("SB1",1,xFilial("SB1"
)+M->CNB_PRODUT,"B1_DESC"))
EndIf
Next nX
EndIf
EndIf
RestArea(aArea)
FWRestRows(aSaveLines)
Return(lRetorno)
/*
��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
��������������������������������������
������������������������������������������������
��������������������������������������
������������������������������������������������
����������������������������������ͻ��
���Programa � CN200Loca �Autor�Jo�o Gon�alves de Oliveira � Data �
10/02/11 ���
������������������������������������������������
���������������������������������� ��
���Descri��o � Chamada da fun��o de atualiza��o da localiza��o f�sica
���
������������������������������������������������
���������������������������������� ��
���Sintaxe � CN200Loca(ExpO1,ExpC2,ExpC3,ExpC4,ExpC5)
���
������������������������������������������������
���������������������������������� ��
���Par�metros� Nenhum
���
������������������������������������������������
���������������������������������� ��
���Retorno � Nenhum
���
������������������������������������������������
����������������������������������ͼ��
������������������������������������������������
��������������������������������������
������������������������������������������������
��������������������������������������
*/
Function CN200Loca(cContra,cRevisa,cPlanil,oGetDados,aLocais,aPlani,lVisual)
Local nPRODUT := aScan(oGetDados:aHeader,{|x| AllTrim(x[2]) == "CNB_PRODUT"})
Local nQUANT := aScan(oGetDados:aHeader,{|x| AllTrim(x[2]) == "CNB_QUANT"})
Local nBASINS := aScan(oGetDados:aHeader,{|x| AllTrim(x[2]) == "CNB_BASINS"})
Local nITEM := aScan(oGetDados:aHeader,{|x| AllTrim(x[2]) == "CNB_ITEM"})
Local nPosLocal := 0
Local nX := 0
Local nY := 0
Local nPLANIL := 0
Local nITEM2 := 0
Local nCLIENT := 0
Local nLOJA := 0
Local nCODFAB := 0
Local nLOJAFA := 0
Local nPRODUT2 := 0
Local nNUMSER := 0
Local aDadosCtr := {}
Local lBkpINC := INCLUI
Local lBkpALT := ALTERA
Local lConfirm := .F.
Local lValidou := .F.
Local lCntEdit := If(Type("lContrEd") == "L" .And. lContrEd,.T.,.F.)
Local cCliente := If(lCntEdit,M->CN9_CLIENT,Posicione("CN9",1,xFilial("CN9")
+cContra+cRevisa,"CN9_CLIENT"))
Local cLojaCli := If(lCntEdit,M->CN9_LOJACL,Posicione("CN9",1,xFilial("CN9")
+cContra+cRevisa,"CN9_LOJACL"))
If nPosLocal > 0
aDadosCtr := aClone(aLocais[nPosLocal,2])
//-- Tratamento para troca do produto
If (nPRODUT2 := aScan(aDadosCtr,{|x| x[1] ==
"AGW_PRODUT"})) > 0
aDadosCtr[nPRODUT2,2] :=
oGetDados:aCols[oGetDados:nAt,nPRODUT]
EndIf
Else
For nX := 1 To AGW->(FCount())
aAdd(aDadosCtr,{Trim(AGW->(FieldName(nX))),AGW-
>&(FieldName(nX))})
Next nX
EndIf
lConfirm := AT110Man("AGW",AGW->(Recno()),If(AGW-
>(Found()),4,3),aDadosCtr,cPlanil,oGetDados:aHeader,oGetDados:aCols)
Else
INCLUI := .T.
ALTERA := .F.
aAdd(aDadosCtr,{"AGW_CONTRA",cContra,.F.})
aAdd(aDadosCtr,{"AGW_PLANIL",cPlanil,.F.})
aAdd(aDadosCtr,
{"AGW_ITEM",oGetDados:aCols[oGetDados:nAt,nITEM],.F.})
aAdd(aDadosCtr,{"AGW_CLIENT",cCliente,.F.})
aAdd(aDadosCtr,{"AGW_LOJA",cLojaCli,.F.})
aAdd(aDadosCtr,
{"AGW_PRODUT",oGetDados:aCols[oGetDados:nAt,nPRODUT],.F.})
aAdd(aDadosCtr,{"AGW_DESCRI",Posicione("SB1",1,xFilial("SB1")
+oGetDados:aCols[oGetDados:nAt,nPRODUT],"B1_DESC"),.F.})
lConfirm :=
AT110Man("AGW",0,3,aDadosCtr,cPlanil,oGetDados:aHeader,oGetDados:aCols)
EndIf
For nX := 1 To Len(aPlani)
//-- Planilha sem localizacoes
If Empty(aTail(aPlani[nX]))
Loop
EndIf
For nY := 1 To Len(aTail(aPlani[nX]))
//-- Mesmo item da mesma planilha
If aTail(aPlani[nX])
[nY,2,nPLANIL,2]+aTail(aPlani[nX])[nY,2,nITEM2,2] ==
cPlanil+oGetDados:aCols[oGetDados:nAt,nITEM]
Loop
EndIf
If aTail(aPlani[nX])[nY,2,nCLIENT,2] ==
aDadosCtr[nCLIENT,2] .And.;
aTail(aPlani[nX])
[nY,2,nLOJA,2] == aDadosCtr[nLOJA,2] .And.;
aTail(aPlani[nX])
[nY,2,nPRODUT2,2] == aDadosCtr[nPRODUT2,2] .And.;
aTail(aPlani[nX])
[nY,2,nNUMSER,2] == aDadosCtr[nNUMSER,2]
Help(" ",1,"AT040INC01")
lValidou := .F.
EndIf
Next nY
Next nX
If !lValidou
lConfirm :=
AT110Man("AGW",0,If(lCntEdit,3,4),aDadosCtr,cPlanil,oGetDados:aHeader,oGetDados:aCo
ls)
EndIf
End
If lConfirm
If (nPosLocal := aScan(aLocais,{|x| x[1] ==
oGetDados:aCols[oGetDados:nAt,nITEM]})) == 0
aAdd(aLocais,
{oGetDados:aCols[oGetDados:nAt,nITEM],aClone(aDadosCtr)})
Else
aLocais[nPosLocal,2] := aClone(aDadosCtr)
EndIf
EndIf
EndIf
EndIf
INCLUI := lBkpINC
ALTERA := lBkpALT
Return
/*
������������������������������������������������
�����������������������������
������������������������������������������������
�����������������������������
������������������������������������������������
�������������������������ͻ��
���Programa � CNAGWLoad�Autor � Andre Anjos � Data � 18/08/11
���
������������������������������������������������
������������������������� ��
���Descricao � Retorna array com as localizacoes fisicas (AGW). ���
������������������������������������������������
������������������������� ��
���Uso � CNTA200 ���
������������������������������������������������
�������������������������ͼ��
������������������������������������������������
�����������������������������
������������������������������������������������
�����������������������������
*/
Function CNAGWLoad(nOpc,cContra,cPlanil)
Local aRet := {}
Local nX := 0
AGW->(dbSkip())
End
EndIf
Return aRet
/*
������������������������������������������������
�����������������������������
������������������������������������������������
�����������������������������
������������������������������������������������
�������������������������ͻ��
���Programa �CN200VlBas�Autor � Andre Anjos � Data � 29/08/11
���
������������������������������������������������
������������������������� ��
���Descricao � Valida alteracao do campo de integracao com Gestao de Serv.���
������������������������������������������������
������������������������� ��
���Uso � GCT ���
������������������������������������������������
�������������������������ͼ��
������������������������������������������������
�����������������������������
������������������������������������������������
�����������������������������
*/
Function CN200VlBas()
Local lRet := .T.
Local oObj := If(FunName() == "CNTA140",oGetDad1,oGetDados)
Return lRet
/*
������������������������������������������������
�����������������������������
������������������������������������������������
�����������������������������
������������������������������������������������
�������������������������ͻ��
���Programa �C200BIWhen�Autor � Andre Anjos � Data � 29/08/11
���
������������������������������������������������
������������������������� ��
���Descricao � When dos campos CNB_BASINS e CNB_TABPRC. ���
������������������������������������������������
������������������������� ��
���Uso � GCT ���
������������������������������������������������
�������������������������ͼ��
������������������������������������������������
�����������������������������
������������������������������������������������
�����������������������������
*/
Function C200BIWhen(cCampo)
Local lRet := .T.
If cCampo == "CNB_BASINS"
lRet := SuperGetMV("MV_CNINTFS",.F.,.F.)
EndIf
If lRet
Do Case
Case FunName() $ "CNTA100*CNTA200"
lRet := !Empty(M->CNA_CLIENT)
Case FunName() == "CNTA140"
lRet := !Empty(CN9->CN9_CLIENT)
EndCase
EndIf
Return lRet