Perguntas Empty

Mais
2 anos 5 meses atrás #33200 por CZL1
Empty foi criado por CZL1
Boa tarde!

Enrosquei nesse codigo para montar um pedido, se alguem puder me ajudar eu agradeço:

Local aHeader := {}
Local aCols := {}
Local nSC6Item := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_ITEM" })
Local nSC6Cod := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_PRODUTO" })
Local nSC6DES := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_DESCRI" })
Local nSC6UM := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_UM" })
Local nSC6Qtde := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_QTDVEN" })
Local nSC6PrcV := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_PRCVEN" })
Local nSC6Vlr := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_VALOR" })
Local nQuantLib := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_QTDLIB" })
Local nSC6Amz := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_LOCAL" })
Local nSC6End := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_LOCALIZ" })
Local nSC6Lot := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_LOTECTL" })
Local nSC6OPER := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_OPER" })
Local nSC6C6DTVALID := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_DTVALID" })
Local nClasfis := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_CLASFIS" })
Local nSC6TES := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_TES" })

cCod := AllTrim(CValToChar((cAlias)->ZAC_COD))
cLote := AllTrim(CValToChar((cAlias)->ZAC_LOTE))

IF (aScan(aCols,{|x|AllTrim(x[nSC6Cod] ) + AllTrim(x[nSC6Lot]) == ALLTRIM(cCod) + ALLTRIM(cLote)})) == 0
IF Empty(aCols[Len(aCols)][nSC6Cod]) .And. Len(aCols) == 1
cContaIt := "01"
ELSE
cContaIt := aCols[Len(aCols)][nSC6Item]
cContaIt := Soma1(cContaIt)
ENDIF

Quando rodo o codigo, ele para no primeiro IF, com a msn: ERROR: array out of bounds ( 0 of 0 ) .

Eu havia montado um codigo semelhante, mas, não tinha declarado o acols e o aHeader e funcionava bem, mas, precisei alterar a forma de receber os dados e dessa vez não passava sem criar o aHeader e o ACols. Em compensação não entendo o erro que dá agora...

Por favor Acessar ou Registrar para participar da conversa.

Mais
2 anos 5 meses atrás #33201 por admin
Respondido por admin no tópico Empty
Você esta usando algum ponto de entrada ?
manda o fonte todo.

Por favor Acessar ou Registrar para participar da conversa.

Mais
2 anos 5 meses atrás #33202 por admin
Respondido por admin no tópico Empty
Voce declarou acols := {} por isso está dando erro na sua linha, preciso entender em que momento esta rodando essa função.

Por favor Acessar ou Registrar para participar da conversa.

Mais
2 anos 5 meses atrás #33203 por CZL1
Respondido por CZL1 no tópico Empty
Então mano... só declarei pq reclama quando rodo que o acols não existe, o estranho que antes não precisei...

Segue:

#INCLUDE "TOTVS.CH"
#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'PARMTYPE.CH'
#INCLUDE "RWMAKE.CH"
#INCLUDE "TOPCONN.CH"

#DEFINE ENTER CHR(13) + CHR(10)

User Function ZLERCOD()

local oFont := TFont():New("Arial",,018,,.T.,,,,,.F.,.F.)
Local cPedido := SPACE(10)

Define MsDialog oDlg Title 'Informe o número do pedido de montagem' From 100,100 TO 300,600 Pixel

oSay01 := TSay():New(015,007,{||'Montagem de Pedido: '},oDlg,,oFont,,,,.T.,CLR_RED,CLR_WHITE,046,089)
@ 014,060 MSGET oGet VAR cPedido PICTURE "@N 9999999999" Pixel SIZE 100, 009 OF oDlg COLORS 0, 16777215 PIXEL

_oTButton1 := TButton():New(055,065,"MONTAR PEDIDO",oDlg,{||U_ValidCod(cPedido)}, 70,20,,,.F.,.T.,.F.,,.F.,,,.F.)

ACTIVATE DIALOG oDlg CENTERED

Return

User Function ValidCod(cPedido)

Local aDados := {"01","02"} //Desabilitar quando usar pelo smartclint
Local cPed
Local x := 0
Local n := 0
Local y := 0
Local aHeader := {}
Local aCols := {}
Local nSC6Item := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_ITEM" })
Local nSC6Cod := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_PRODUTO" })
Local nSC6DES := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_DESCRI" })
Local nSC6UM := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_UM" })
Local nSC6Qtde := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_QTDVEN" })
Local nSC6PrcV := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_PRCVEN" })
Local nSC6Vlr := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_VALOR" })
Local nQuantLib := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_QTDLIB" })
Local nSC6Amz := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_LOCAL" })
Local nSC6End := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_LOCALIZ" })
Local nSC6Lot := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_LOTECTL" })
Local nSC6OPER := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_OPER" })
Local nSC6C6DTVALID := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_DTVALID" })
Local nClasfis := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_CLASFIS" })
Local nSC6TES := aScan(aHeader,{|x|AllTrim(x[2]) == "C6_TES" })
Local cContaIt := ""
Local cClasFis := ""
Local cResultado
Local cCod
Local cLote
Local dEmissao := 0
Local cQuery
Local cQuery1
Local cAlias := GetNextAlias()
Local cAlias1 := GetNextAlias1()

// Desabilitar os três parâmetros abaixo quando for usar pelo smartclint
RpcSetType(3)
RpcSetEnv(aDados[1],aDados[2])

cPed := Alltrim(cPedido)

cQuery := " SELECT ZAC_COD " + ENTER
cQuery += " ,ZAC_FILIAL " + ENTER
cQuery += " ,ZAC_LOTE " + ENTER
cQuery += " ,ZAC_QTD " + ENTER
cQuery += " ,ZAC_END " + ENTER
cQuery += " ,ZAC_CTSEQ " + ENTER
cQuery += " FROM ZAC010 AS ZAC " + ENTER
cQuery += " WHERE ZAC_CTSEQ = '" + cPed + "'" + ENTER

dbUseArea(.T., "TOPCONN", TCGENQRY(,,cQuery),cAlias, .F., .T.)
(cAlias)->(DbGoTop())

DO WHILE (cAlias)->(!Eof())

cCod := AllTrim(CValToChar((cAlias)->ZAC_COD))
cLote := AllTrim(CValToChar((cAlias)->ZAC_LOTE))

IF (aScan(aCols,{|x|AllTrim(x[nSC6Cod] ) + AllTrim(x[nSC6Lot]) == ALLTRIM(cCod) + ALLTRIM(cLote)})) == 0

IF Empty(aCols[Len(aCols)][nSC6Cod]) .And. Len(aCols) == 1
cContaIt := "01"
ELSE
cContaIt := aCols[Len(aCols)][nSC6Item]
cContaIt := Soma1(cContaIt)
ENDIF

IF x == 1
IF !Empty(aCols[Len(aCols)][nSC6Cod])
aAdd(aCols,Array(Len(aHeader) + 1))

FOR y := 1 TO Len(aHeader)
IF !( AllTrim(aHeader[y,2]) $ "C6_ALI_WT/C6_REC_WT")
aCols[Len(aCols)][y] := CriaVar(aHeader[y,2],.T.)
&("M->" + AllTrim(aHeader[y,2])) := CriaVar(aHeader[y,2],.T.)
ENDIF
NEXT y

aCols[Len(aCols)][Len(aHeader) + 1] := .F.
ENDIF
ELSE
aAdd(aCols,Array(Len(aHeader) + 1))

FOR y := 1 TO Len(aHeader)
IF !( AllTrim(aHeader[y,2]) $ "C6_ALI_WT/C6_REC_WT")
aCols[Len(aCols)][y] := CriaVar(aHeader[y,2],.T.)
&("M->" + AllTrim(aHeader[y,2])) := CriaVar(aHeader[y,2],.T.)
ENDIF
NEXT y

aCols[Len(aCols)][Len(aHeader) + 1] := .F.
ENDIF

n := Len(aCols)

IF Type("oGetDad") <> "U"
oGetDad:oBrowse:nAt := Len(aCols)
oGetDad:oBrowse:SetFocus()
ENDIF

// Numero sequencia do Item
aCols[Len(aCols)][nSC6Item] := cContaIt

// Tratando produto
M->C6_PRODUTO := cCod
aCols[Len(aCols)][nSC6Cod] := cCod

IF ExistTrigger("C6_PRODUTO")
RunTrigger(2,Len(aCols),Nil,,"C6_PRODUTO")
ENDIF

// Tratando descricao

cQuery1 := " SELECT B1_RASTRO " + ENTER
cQuery1 += " ,B1_XMESVAL " + ENTER
cQuery1 += " ,B1_DESC " + ENTER
cQuery1 += " ,B1_UM " + ENTER
cQuery1 += " FROM SB1010 AS SB1 " + ENTER
cQuery1 += " WHERE B1_COD = '" + cCod + "'" + ENTER

dbUseArea(.T., "TOPCONN", TCGENQRY(,,cQuery1),cAlias1, .F., .T.)
(cAlias1)->(DbGoTop())

M->C6_DESCRI := SB1->B1_DESC
aCols[Len(aCols)][nSC6DES] := SB1->B1_DESC

// Tratando unidade de medida
M->C6_UM := SB1->B1_UM
aCols[Len(aCols)][nSC6UM] := SB1->B1_UM

// Unidade de Medida
//A410SegUm(.T.)

IF ExistTrigger("C6_UM")
RunTrigger(2,Len(aCols),Nil,,"C6_UM")
ENDIF

// Armazem
M->C6_LOCAL := '01'
aCols[Len(aCols)][nSC6Amz] := '01'

IF ExistTrigger("C6_LOCAL")
RunTrigger(2,Len(aCols),Nil,,"C6_LOCAL")
ENDIF

// Vencimento do lote



IF EMPTY((cAlias)->B1_XMESVAL) = .F. // SE DIFERENTE DE VAZIO

dEmissao := Posicione('SC2',1,xFilial("SC2") + PadR(TMP->ZAC_COD,15) + PadR(TMP->ZAC_LOTE,10),"C2_EMISSAO")
cResultado := MonthSum(STOD(dEmissao),VAL(ALLTRIM((cAlias)->B1_XMESVAL)))

M->C6_DTVALID := cResultado
aCols[Len(aCols)][nSC6C6DTVALID] := cResultado
END-IF

// Classificação Fiscal
M->C6_CLASFIS := cClasFis
aCols[Len(aCols)][nClasfis] := cClasFis

// Endereço
M->C6_LOCALIZ := 'PRODUCAO'
aCols[Len(aCols)][nSC6End] := 'PRODUCAO'

IF ExistTrigger("C6_LOCALIZ")
RunTrigger(2,Len(aCols),Nil,,"C6_LOCALIZ")
ENDIF

// Lote
M->C6_LOTECTL := cLote
aCols[Len(aCols)][nSC6Lot] := cLote

// Quantidade Liberada
M->C6_QTDLIB := nQt
aCols[Len(aCols)][nQuantLib] := nQt

// Quantidade Vendida
M->C6_QTDVEN := nQt
aCols[Len(aCols)][nSC6Qtde] := nQt

IF ExistTrigger("C6_QTDVEN")
RunTrigger(2,Len(aCols),Nil,,"C6_QTDVEN")
ENDIF

// Preco Unitario
M->C6_PRCVEN := DA1->DA1_PRCVEN
aCols[Len(aCols)][nSC6PrcV] := DA1->DA1_PRCVEN

IF ExistTrigger("C6_PRCVEN")
RunTrigger(2,Len(aCols),Nil,,"C6_PRCVEN")
ENDIF

// Valor total do Item
aCols[Len(aCols)][nSC6Vlr] := A410Arred(aCols[Len(aCols)][nSC6Qtde] * aCols[Len(aCols)][nSC6PrcV],"C6_VALOR")
M->C6_VALOR := aCols[Len(aCols)][nSC6Vlr]

IF ExistTrigger("C6_VALOR")
RunTrigger(2,Len(aCols),Nil,,"C6_VALOR")
ENDIF

// Tipo de operacao - TES Inteligente
M->C6_OPER := '01'
aCols[Len(aCols)][nSC6OPER] := '01'

// TES do Item

IF M->B1_IPI <> 0
M->C6_TES := '548'
aCols[Len(aCols)][nSC6TES] := '548'

IF ExistTrigger("C6_TES")
RunTrigger(2,Len(aCols),Nil,,"C6_TES")
ENDIF
ELSE
M->C6_TES := '549'
aCols[Len(aCols)][nSC6TES] := '549'

IF ExistTrigger("C6_TES")
RunTrigger(2,Len(aCols),Nil,,"C6_TES")
ENDIF
ENDIF

ELSE
nAcolsDupl := aScan(aCols,{|x|AllTrim(x[nSC6Cod]) + AllTrim(x[nSC6Lot]) == ALLTRIM(cCod) + ALLTRIM(cLote)})
aCols[nAcolsDupl][nSC6Qtde] := aCols[nAcolsDupl][nSC6Qtde] + nQt
aCols[nAcolsDupl][nQuantLib] := aCols[nAcolsDupl][nQuantLib] + nQt

IF ExistTrigger("C6_QTDVEN")
RunTrigger(2,Len(aCols),Nil,,"C6_QTDVEN")
ENDIF
ENDIF


IF Type("oGetDad") <> "U"

// Atualiza tela
n := 1
oGetDad:oBrowse:nAt := 1
oGetDad:oBrowse:Refresh()
oGetDad:oBrowse:SetFocus()
oGetDad:Refresh()
ENDIF

// Resolvendo problema CFOP
A410ReCalc()

Alias->(DbSkip())
END

Return

Por favor Acessar ou Registrar para participar da conversa.

Mais
2 anos 5 meses atrás #33204 por CZL1
Respondido por CZL1 no tópico Empty
Não, não estou usando...a idéia aqui é pegar as informações gravadas em uma tabela e usar para montar um pedido de remessa

Por favor Acessar ou Registrar para participar da conversa.

Mais
2 anos 5 meses atrás #33206 por admin
Respondido por admin no tópico Empty
Brother blz, cara essa rotina é chamada via menu ?, não estou conseguindo entender por onde está rodando essa rotina ? via job ? via menu ?, porque pra funcionar vc teria que estar dentro do pedido de vendas, com o aheader e o acols preenchidos, sinceramente não consegui entender em que momento está executando essa rotina ?

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.111 segundos
Joomla templates by a4joomla