Pontos de Entrada do Importador de XML Protheus

Veja as configurações dos pontos de entrada do Importador de XML Protheus.

A seguir você verá as configurações de pontos de entrada do Importador de XML Protheus.

Para encontrar de forma mais fácil o que você procura, acesse as configurações do que procura direto pelos links abaixo:

GT1FORNEC - Filtrar browse por CNPJ do fornecedor
GT1CODPRF - Formatar o código do produto do fornecedor
GT1CPS - Habilitar campos customizados na tabela 2
GT1ITEM - Carregar campos customizados para o documento de entrada (NFe,NFSe)
GATIPED - Apresentar mais campos na consulta do pedido de compra
GT1VALCP - Preencher algum campo automáticamente ao importar
GTPRDFOR - Ponto após a gravação da SA5/SA7
GTPOSREL - Ponto após o vínculo com pedido de compra
GTITEMCT - Carregar campos customizados para o documento de entrada (CTe)
GT1ALTPC - Ponto para manipular o pedido antes do vínculo
GT1ALTIT - Altera o array de itens antes de importar a NFe
GT1LDPED - Carregar mais campos do pedido para primeira tela do importador
GT1MENU - Adicionar botões no menu Outras Ações
GT1RATCT - Personalização do rateio de CTe
GT1BTNFE - Adicionar botão na tela de importação
GT1LGEND - Adicionar legendas no browse principal
GT1TOLER - Personalizar a tolerância de quantidade e preço
GT1VLPED - Adicionar validação no vínculo com pedido de compra
GT1PFRET - Mudar o produto padrão do CTe
GT1AICTE - Alterar array de itens antes de importar o CTe
GT1VLNFE - Adicionar validações na confirmação da importação da NFe
GT1VCTE - Adicionar validações na confirmação da importação do CTe
GT1QRYPED - Manipula a query de busca do pedido de compra
GT1CTCAB - Adicionar campos no cabeçalho do CTe
GT1CAB - Adicionar campos no cabeçalho da NFe e NFSe
GT1DIVPD - Manipular array de divergência entre pedido e XML
GT1CLIFOR - Manipula a query de busca do fornecedor/cliente
GT1NFRET - Personaliza a busca automática da nota de origem para Ret.PD3
GT1VLPRD - Indica se apresenta ou não as validações entre produto xml e cadastro
GT1BRWCHG - Ponto de chamada após a troca de linha do browse principal
GT1FILBRW - Permite manipilar o filtro do browse principal
GT1CMPCT - Adicionar campos para preencher na importação do CTe
GT1PCAUT - Filtrar pedidos na busca automática de pedidos
GT1INIT - Executar alguma função antes de entrar o programa
GT1PEDCT - Definir o pedido de compra do CTe
GT1VLNFS - Adicionar validações na confirmação da importação da NFSe
GT1CMPLT - Adicionar campos para importação do CTe em lote
GTNUMNFS - Manipular o número da NFSe
CXMANDOC - Manipular o número da NFe, NFSe, CTe e CTe OS
CXMANSER - Manipular a série dos documentos
CXNFDESX - Regra para desconsiderar algum XML
CXVALXML - Adicionar validações para o XML
GT1OPDF - Alterar informações da AC9 (Base Conhecimento)
GTAVICMS - Ponto para alterar o valor do parâmetro MV_XGTVICD
GT1CPRPA - Ponto para adicionar campos (SB1 ou SC7) no filtro da regra automática
CXEMPAUT - Definir quais empresas estão autorizadas para utilizar o importador
GT1MENUDI - Permite adicionar botões no painel de documentos importados
CXDEFFIL - Permite definir a qual filial do XML pertence
GT1CBAVR - Manipular os campos do cabeçalho do aviso de recebimento
GT1CPCRG - Adicionar conteúdos da regra automática nas tabelas SD1 ou SF1
GT1DCNLAN - CNPJs de emissores que não serão efetuados validação do Doc. Origem

GT1FORNEC

Descrição Utilizado para filtrar o browse de NFe e CTe, informando o CNPJ dos fornecedores os quais são visíveis para o usuário.
Parâmetros Nenhum
Retorno
Tipo Descrição
Caracter Lista de CNPJs separados por vírgula
Exemplo
User Function GT1FORNEC() 

Local cCodUser := RetCodUsr()

Local cFornDispo := ""


Do Case

Case cCodUser == "000000" // Administrador

cFornDispo := ""

Case cCodUser == "000001" // Usuário 1

cFornDispo := "64260896000392,72285216000151,82161944000105"

Case cCodUser == "000002" // Usuário 2

cFornDispo := "64260896000392,72285216000151,82161944000105"

EndCase


Return cFornDispo

GT1CODPRF

Descrição Utilizado para formatar o código de produto do fornecedor com alguma regra específica, impactando na relação produto x fornecedor (SA5).
Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter Código de produto do fornecedor
PARAMIXB[2] Caracter CNPJ/CPF do fornecedor
Retorno
Tipo Descrição
Caracter Código de produto formatado do fornecedor
Exemplo
User Function GT1CodPRF()

Local cCodXML := PARAMIXB[1]

Local cCGCEmi := PARAMIXB[2]


If cCGCEmi == "99999999999999"

cCodPRF := "XXXXXX"

Else

If Len(cCodXML) < 6

cCodPRF := REPLICATE("0",6-Len(cCodXML) ) + cCodXML

ElseIf Len(cCodXML) > 6

cCodPRF := SubStr(cCodXML,Len(cCodXML)-5,Len(cCodXML))

Else

cCodPRF := cCodXML

EndIf

EndIf


Return cCodPRF

GT1CPS

Descrição Utilizado para habilitar a edição de campos customizados criados na tabela 2, contida no parâmetro MV_XGTTAB2. Os campos informados neste ponto de entrada devem ser a partir do underline, conforme exemplo.
Parâmetros Nenhum
Retorno
Tipo Descrição
Array Campos que permitem edição
Exemplo
User Function GT1CPS()

Local aAdItem := {}

aAdd(aAdItem, "_CONTA")

Return(aAdItem)

GT1ITEM

Descrição Utilizado para levar campos customizados ao Documento de Entrada. Este ponto de entrada é chamado para cada item do XML (linha do browse).
Parâmetros
Parâmetro Tipo Descrição
PARAMIXB Array Array contendo os itens da linha corrente
Retorno
Tipo Descrição
Array Array contendo informações do campo e valor que
devem ser adicionados ao array levado ao documento de
entrada
Exemplo
User Function GT1ITEM()

Local aParam := PARAMIXB

Local aAdItem := {}

Local _nPosConta := aScan(aHeader, {|x| x[2] == PadR("Z2_CONTA", 10)})


If _nPosConta > 0

aAdd(aAdItem, {"D1_CONTA", aParam[_nPosConta], Nil})

EndIf

Return(aAdItem)

GATIPED

Descrição Utilizado para apresentar outros campos do pedido de compra (SC7) na consulta de pedidos em aberto. Botão ‘Ped. Compra’.
Parâmetros Nenhum
Retorno
Tipo Descrição
Array Array contendo os campos da tabela SC7 que devem ser
apresentados no browse
Exemplo
User Function GATIPED()

Local aCampos := {}

aAdd(aCampos, {'Vencimento', SC7->C7_VENCTO, "C7_VENCTO"})

aAdd(aCampos, {'Conta Contábil', SC7->C7_CONTA, "C7_CONTA"})

Return aCampos

GT1VALCP

Descrição Utilizado para preencher automaticamente algum campo do XML ao carregar a primeira tela da importação.
Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Array Array contendo informações do item atual
PARAMIXB[2] Numérico Número da linha do browse
PARAMIXB[3] Caracter Código que indica qual momento que está
sendo chamado, sendo eles:
  • 1=NFe tipo Normal
  • 2=NFe tipo Devolução/Beneficiamento/Retorno
  • 3=NFe tipo Complemento de IPI/Preço/ICMS
  • 4=NFSe tipo Serviço
Retorno
Tipo Descrição
Nulo Nenhum
Exemplo
User Function GT1VALCP()

Local aItens := PARAMIXB[1]
Local nLinha := PARAMIXB[2]
Local cTipo := PARAMIXB[3]
Local _nPosLote := 0
Local cLote := ""


Do Case
Case cTipo $ "1|4"
       _nPosLote := AScan(aHeader, {|x| x[2] == PadR("Z2_LOTECTL", 10)})

If _nPosLote > 0
If At("LOTE",Upper(aItens[nLinha, 2])) != 0
cLote := SubStr(aItens[nLinha,2],At("LOTE",Upper(aItens[nLinha, 2]))+5,;
Len(aItens[nLinha, 2]))
aCols[nLinha, _nPosLote] := PadR(AllTrim(cLote),TamSx3("D1_LOTECTL")[1])
EndIf
EndIf

Case cTipo $ "2|3"
       _nPosLote := AScan(aHeadItem, {|x| x[2] == PadR("Z2_LOTECTL", 10)})

If _nPosLote > 0
If At("LOTE",Upper(aItens[nLinha, 2])) != 0
cLote := SubStr(aItens[nLinha,2],At("LOTE",Upper(aItens[nLinha, 2]))+5,;
Len(aItens[nLinha, 2]))
aCols[nLinha, _nPosLote] := PadR(AllTrim(cLote),TamSx3("D1_LOTECTL")[1])
EndIf
EndIf

EndCase

Return

GTPRDFOR

Descrição Utilizado para executar alguma regra após a gravação/atualização da relação produto x fornecedor (SA5) ou produto x cliente (SA7).
Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Numérico Código indicativo do tipo de arquivo que acabou de incluir, sendo eles:
  • 1=SA5 (Produto x Fornecedor)
  • 2=SA7 (Produto x Cliente)
PARAMIXB[2] Caracter Código do fornecedor
PARAMIXB[3] Caracter Código da loja
PARAMIXB[4] Caracter Código do produto do fornecedor
PARAMIXB[5] Caracter Código do produto do Protheus
Retorno
Tipo Descrição
Nulo Nenhum
Exemplo
User Function GTPRDFOR()

Local cTipo := PARAMIXB[1]

Local cCodFor := PARAMIXB[2]

Local cLoja := PARAMIXB[3]

Local cCodPRF := PARAMIXB[4]

Local cCod := PARAMIXB[5]

Do Case

Case cTipo == 1 // SA5

Reclock("SA5",.F.)

SA5->A5_SKIPLOT := "1"

SA5->(MsUnlock())

Case cTipo == 2 // SA7

Reclock("SA7",.F.)

SA7->A7_SERVTIM := "032"

SA7->(MsUnlock())

EndCase

Return

GTPOSREL

Descrição Utilizado para executar alguma regra após a relação do pedido de compra, como por exemplo preencher algum campo do cabeçalho da nota fiscal.
Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter Código do pedido de compra selecionado
PARAMIXB[2] Caracter Item do pedido de compra selecionado
Retorno
Tipo Descrição
Nulo Nenhum
Exemplo
User Function GTPOSREL()

Local cPedido := PARAMIXB[1]

Local cItem := PARAMIXB[2]

Local aAreaAnt := GetArea()

Local aAreaSC7 := SC7->(GetArea())


SC7->(dbSetOrder(1))

If SC7->(dbSeek(xFilial("SC7") + PadR(cPedido,TamSx3("C7_NUM")[1]) + ;

PadR(cItem,TamSx3("C7_ITEM")[1]) ))

M->&(_cCmp1 + "_NATFIN") := SC7->C7_NATUREZ

EndIf


RestArea(aAreaSC7)

RestArea(aAreaAnt)

Return Nil

GTITEMCT

Descrição Utilizado para levar campos customizados ao Documento de Entrada para o tipo de documento CTe (Conhecimento de Transporte). Este ponto de entrada é chamado para cada item do CTe.
Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter Código do tipo de CTe, sendo eles:
  • 1=Entrada
  • 2=Saída
PARAMIXB[2] Array Array que contém algumas informações do cabeçalho do CTe
PARAMIXB[3] Array Array que contém o item corrente do CTe
Retorno
Tipo Descrição
Array Array contendo informações do campo e valor que
devem ser adicionados ao array levado ao documento de entrada
Exemplo
User Function GTITEMCT()

Local aAreaAnt := GetArea()

Local cTipo := PARAMIXB[1] // "1" Entrada // "2" Saída

Local aCabecCTe := PARAMIXB[2]

Local aItensCTe := PARAMIXB[3]

Local aAddCampo := {}

Do Case

Case cTipo == "1"

aAdd(aAddCampo,{"D1_LOCAL", SD1->D1_LOCAL, Nil})

Case cTipo == "2"

aAdd(aAddCampo,{"D1_LOCAL", SD2->D2_LOCAL, Nil})

EndCase

RestArea(aAreaAnt)

Return aAddCampo

GT1ALTPC

Descrição Utilizado para alterar alguma informação do pedido de compra, como por exemplo e conversão da moeda.
Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter Código do pedido de compra selecionado
PARAMIXB[2] Caracter Item do pedido de compra selecionado
Retorno
Tipo Descrição
Nulo Nenhum
Exemplo
User Function GT1ALTPC()

Local cPedido := PARAMIXB[1]

Local cItem := PARAMIXB[2]

Local aAreaAnt := GetArea()

Local aAreaSC7 := SC7->(GetArea())


SC7->(dbSetOrder(1))

If SC7->(dbSeek(xFilial("SC7") + PadR(cPedido,TamSx3("C7_NUM")[1]) +;

PadR(cItem,TamSx3("C7_ITEM")[1]) ))

RecLock("SC7",.F.)

SC7->C7_TXMOEDA := (4.25)

SC7->(MsUnlock())

EndIf

RestArea(aAreaSC7)

RestArea(aAreaAnt)

Return

GT1ALTIT

Descrição Utilizado para alterar alguma informação do array de itens antes de levá-lo ao Documento de Entrada. Este ponto de entrada sobrepõe o array do programa pelo definido na função.
Parâmetros
Parâmetro Tipo Descrição
PARAMIXB Array Array com todos os itens do browse 
Retorno
Tipo Descrição
Array Array de itens que será considerado para levar ao Documento de Entrada
Exemplo
User Function GT1ALTIT()

Local aAreaAnt := GetArea()

Local aItens := PARAMIXB // Array onde contém os itens

// Pega a posição do código específico da lente

Local _nPosCod := aScan(aItens[1], {|x| AllTrim(x[1]) == "D1_COD" }

Local nI := 1


For nI := 1 To Len(aItens)

If _nPosCod > 0 .And. !Empty(aItens[nI][_nPosCod][2]) .And. ;

(Posicione("SB1",1,xFilial("SB1") + aItens[nI][_nPosCod][2],"B1_TIPO") $;

"LP|BL" )

aItens[nI][_nPosCod][2] := SubStr(aItens[nI][_nPosCod][2],1,7)

EndIf

Next nI

RestArea(aAreaAnt)

Return aItens

GT1LDPED

Descrição Utilizado para preencher algum campo da nota fiscal com informação a nível de item do pedido de compra selecionado.
Parâmetros Nenhum
Retorno
Tipo Descrição
Array Array com a relação campo SC7 x Tabela 2 do importador (contida em MV_XGTTAB2)
Exemplo
User Function GT1LDPED()

Local aAdItem := {}

// A função deverá retornar esta estrutura:

//

// Primeira posição é o campo customizado da SC7

// Segundo é o campo correspondente na tabela 2 do importador de

// notas

// Terceiro é o valor que será armazenado no array (para controle

// interno)

//

// Conforme exemplo:

// aAdd(aAdItem, {"C7_XCMP1","Z2_XCMP1",Nil})

//

aAdd(aAdItem, {"C7_DESCRI","Z2_DSPROD",Nil})

Return aAdItem

GT1MENU

Descrição Utilizado para adicionar botões no menu principal do importador, localizado em Outras Ações.
Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter

Browse posicionado, sendo eles:
NFE
NFS
CTE
CCE
CAN

Retorno
Tipo Descrição
Nulo Nenhum
Exemplo
User Function GT1MENU()

aAdd(aRotina,{ "Botão Customizado" , "u_funcao", 0 , 2, 0, .F.})

Return

GT1RATCT

Descrição Utilizado para personalizar o rateio no conhecimento de transporte.
Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter Código do tipo de CTe, sendo eles:
1=Entrada
2=Saída
PARAMIXB[2] Array Array com informações do cabeçalho
PARAMIXB[3] Array Array com informações dos itens 
PARAMIXB[4] Array Array com valores do ICMS
Retorno
Tipo Descrição
Array Array que contém os itens com os valores alterados
Exemplo
User Function GT1RATCT()

Local nTipCTe := PARAMIXB[1] // "1"- CTe de Compra, "2" - CTe de Venda

Local aCabecCTe := PARAMIXB[2] // Cabeçalho CTE

Local aItens := PARAMIXB[3] // Itens do CTe

Local aICMS := PARAMIXB[4] // ICMS do XML

Local nPosPalt := aScan(aItens[1],{|x| AllTrim(x[1])=="D1_QTDPALE" })

Local nPosVlUn := aScan(aItens[1],{|x| AllTrim(x[1])=="D1_VUNIT" })

Local nPosValt := aScan(aItens[1],{|x| AllTrim(x[1])=="D1_TOTAL" })

// VALOR DO CONHECIMENTO

Local nPosVlConh := aScan(aCabecCTe, {|x| x[1] == "MV_PAR21"})

Local nTotalPlt := 0

Local nVlConhe := 0

Local nI := 0


If nPosPalt <= 0

Aviso("GT1RATCT", "Não foi encontrado o campo 'Qtde Palete'",{"Fechar"}, 2)

Return Nil

EndIf

If nPosVlUn <= 0

Aviso("GT1RATCT", "Não foi encontrado o campo 'Valor Unitário'",{"Fechar"}, 2)

Return Nil

EndIf

If nPosValt <= 0

Aviso("GT1RATCT", "Não foi encontrado o campo 'Valor Total'",{"Fechar"}, 2)

Return Nil

EndIf

// Percorre os itens para puxar o total de paletes

For nI := 1 To Len(aItens)

nTotalPlt += aItens[nI][nPosPalt][2]

Next nI

// Total do Frete

If nPosVlConh > 0

nVlConhe := aCabecCTe[nPosVlConh][2]

EndIf

If nVlConhe <= 0

// Contingência caso não seja possível consultar o total do

// conhecimento de frete, pega o valor do ICMS

nVlConhe := aICMS[4]

If nVlConhe <= 0

Aviso("GT1RATCT", "Não foi possível fazer a leitura do valor"+;

" do conhecimento.", {"Fechar"}, 2)

Return Nil

EndIf

EndIf

// Rateio pelo palete

For nI := 1 To Len(aItens)

// VALOR DO FRETE * QTD PALETE / TOTAL PALETE

// (VALOR * CRITÉRIO / TOTAL DO CRITÉRIO = VALOR PONDERADO)

nVlPonde := Round((nVlConhe * aItens[nI][nPosPalt][2]) / nTotalPlt, 2

If nVlPonde <= 0

// Quando não existe quantidade de palete, joga 0,00001

// com base no decimal

nVlPonde := (1 / (10 ** (TamSx3("D1_VUNIT")[2])))

EndIf


aItens[nI][nPosVlUn][2] := nVlPonde // VALOR UNITÁRIO

aItens[nI][nPosValt][2] := nVlPonde // VALOR TOTAL

Next nI

Return aItens

GT1BTNFE

Descrição Utilizado para adicionar botões na primeira tela da importação da NFe tipo Normal.
Parâmetros Nenhum
Retorno
Tipo Descrição
Array Array contendo informações do botão
Exemplo
User Function GT1BTNFE()

Local aButtons := {}

aAdd(aButtons,{"Gerar Pedido",{|| U_GerarPed()},"Gerar o pedido de"+;

" compra com base no XML"})

Return aButtons

GT1LGEND

Descrição Utilizado para personalizar as legendas do browse principal.
Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter

Browse posicionado, sendo eles:
NFE
CTE

PARAMIXB[2] Objeto  
Retorno
Tipo Descrição
Nulo Nenhum
Exemplo
User Function GT1LGEND()

Local cBrowse := PARAMIXB[1] // Browse que será apresentado, NFE ou CTe

Local oBrowse := PARAMIXB[2] // Objeto do browse para adicionara legenda


oBrowse:oBrowse:AddLegend("StaticCall(GT1LGEND,GetLegend,SZ1->Z1_XML)"+;

" == '1'","PINK" ,"Pedido preenchido no XML","4")

oBrowse:oBrowse:AddLegend("StaticCall(GT1LGEND,GetLegend,SZ1->Z1_XML)"+;

" == '2'","ORANGE","Pedido preenchido no XML porém inválido","4")

oBrowse:oBrowse:AddLegend("StaticCall(GT1LGEND,GetLegend,SZ1->Z1_XML)"+;

" == '3'","WHITE" ,"Pedido não preenchido no XML","4")

Return

//////////////

Static Function GetLegend(cXml)

Local aAreaAnt := GetArea()

Local oXmlLegend := Nil

Local xRet := Nil

Local cRet := ""

Local cPed := ""

Local cItem := ""

Local nI := 0

Local lFound := .F.

Local lFoundXPed := .F.

Local lFoundItemPed := .F.

Local cQuery := ""

Local cAliasQry := ""

oXmlLegend := TXmlManager():New()

If !(xRet := oXmlLegend:Parse( cXml ))

Conout( "Error: " + oXmlLegend:Error() )

Return "3"

EndIf

oXmlLegend:DOMChildNode() // <NFe>

oXmlLegend:DOMChildNode() // <infNFe>

oXmlLegend:DOMChildNode() // <ide>

lFound := .F.

nI := 0

// Pula para o próximo que é <emit> e assim por diante

Do While oXmlLegend:DOMNextNode() .And. !lFound

nI++

// Quando encontrar <det> que são os itens

If oXmlLegend:CNAME == "det"

  // Entra no primeiro produto

       oXmlLegend:DOMChildNode()

       //

       If oXmlLegend:CNAME == "prod"

        lFound := .T.

lFoundXPed := .F.

lFoundItemPed := .F.

// Entra nos atributos do produto

oXmlLegend:DOMChildNode()

//

Do While oXmlLegend:DOMNextNode() .And. (!lFoundXPed .Or.;

!lFoundItemPed)

If oXmlLegend:CNAME == "xPed"

lFoundXPed := .T.

cPed := oXmlLegend:CTEXT

EndIf

If oXmlLegend:CNAME == "nItemPed"

lFoundItemPed := .T.

cItem := oXmlLegend:CTEXT

EndIf

EndDo

EndIf

EndIf

EndDo

If lFoundXPed .And. lFoundItemPed

cRet := "1" // Contém

cQuery := "SELECT 1"

cQuery += " FROM " + RetSqlName("SC7") + " SC7"

cQuery += " WHERE SC7.C7_FILIAL = '"+xFilial("SC7")+"'"

cQuery += " AND SC7.C7_NUM = '"+cPed+"'"

cQuery += " AND SC7.C7_ITEM = '"+cItem+"'"

cQuery += " AND SC7.D_E_L_E_T_ = ' '"

cAliasQry := GetNextAlias()

dbUseArea(.T., "TOPCONN", TCGENQRY(, , cQuery), cAliasQry, .F.,.T.)

If (cAliasQry)->(Eof())

(cAliasQry)->(dbCloseArea())

If Len(AllTrim(cPed)) < TamSX3("C7_NUM")[1]

cPed := PADL(AllTrim(cPed),TamSX3("C7_NUM")[1],"0")

Else

cPed := Right(AllTrim(cPed),TamSX3("C7_NUM")[1])

EndIf

If Len(AllTrim(cItem)) < TamSX3("C7_ITEM")[1]

cItem := PADL(AllTrim(cItem),TamSX3("C7_ITEM")[1],"0")

Else

cItem := Right(AllTrim(cItem),TamSX3("C7_ITEM")[1])

EndIf

cQuery := "SELECT 1"

cQuery += " FROM " + RetSqlName("SC7") + " SC7"

cQuery += " WHERE SC7.C7_FILIAL = '"+xFilial("SC7")+"'"

cQuery += " AND SC7.C7_NUM = '"+cPed+"'"

cQuery += " AND SC7.C7_ITEM = '"+cItem+"'"

cQuery += " AND SC7.D_E_L_E_T_ = ' '"

cAliasQry := GetNextAlias()

dbUseArea(.T., "TOPCONN", TCGENQRY(, , cQuery), cAliasQry,.F., .T.)

If (cAliasQry)->(Eof())

cRet := "2" // Contém inválido

EndIf

EndIf

(cAliasQry)->(dbCloseArea())

Else

cRet := "3" // Não Contém

EndIf


oXmlLegend := Nil

RestArea(aAreaAnt)

return cRet

GT1TOLER

Descrição

Utilizado para especificar uma tolerância nas validações da quantidade e valor unitário realizadas no vínculo com o pedido de compra.

Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter Código do fornecedor
PARAMIXB[2] Caracter Código da loja
PARAMIXB[3] Caracter Código do produto
PARAMIXB[4] Caracter Código do grupo do produto
PARAMIXB[5] Numérico Quantidade do item no pedido de compra
PARAMIXB[6] Numérico

Valor unitário do item no pedido de compra

PARAMIXB[7] Numérico Quantidade do item no XML
PARAMIXB[8] Numérico Valor unitário do item no XML
Retorno
Tipo Descrição
Array

Array contendo a quantidade e valor máximo permitido que seja diferente

Exemplo
User Function GT1TOLER()

// {Quantidade,Preço R$}

Return {0,3}

GT1VLPED

Descrição

Utilizado para executar alguma validação no vínculo com o pedido de compra.

Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Array

Array contendo os itens do browse principal

PARAMIXB[2] Array

Array contendo informações dos campos do browse (aHeader)

Retorno
Tipo Descrição
Lógico

Verdadeiro para prosseguir com o vínculo e Falso para bloquear o vínculo com o pedido de compra

Exemplo
User Function GT1VLPED()

Local aAreaAnt := GetArea()

Local aColsImp := PARAMIXB[1]

Local aHeadCols := PARAMIXB[2]

Aviso("GT1VLPED - Validação específica", "Validação está retornando"+;

" falso!", {"Fechar"}, 3)

lRet := .F.

RestArea(aAreaAnt)

Return lRet

GT1PFRET

Descrição Utilizado para mudar o produto padrão na importação do CTe.
Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter

Código do tipo de CTe, sendo eles:
1=Entrada
2=Saída

PARAMIXB[2] Array Array contendo informações do cabeçalho
Retorno
Tipo Descrição
Caracter

Código do produto que será considerado no lançamento do CTe

Exemplo
User Function GT1PFRET

Local aAreaAnt := GetArea()

Local cTipoCTe := PARAMIXB[1] // "1" Entrada // "2" Saída

Local aCabecCTe := PARAMIXB[2] //


If cTipoCTe == "2"

If cEmpAnt == "02"

cProdFrete := "4136" // Frete Interconpany

Else

cProdFrete := "0463" // Frete sobre Venda.

EndIf

EndIf


RestArea(aAreaAnt)

Return cProdFrete

GT1AICTE

Descrição

Utilizado para alterar qualquer informação nos itens do CTe antes de levá-los para o Documento de Entrada.

Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter

Código do tipo de CTe, sendo eles:
1=Entrada
2=Saída

PARAMIXB[2] Array Array com informações do cabeçalho
PARAMIXB[3] Array Array com informações dos itens
PARAMIXB[4] Array Array com valores do ICMS
Retorno
Tipo Descrição
Array Array com todos os itens do CTe alterados
Exemplo
User Function GT1AICTE()

Local nTipCTe := PARAMIXB[1] // "1"- CTe de Compra, "2" - CTe de Venda

Local aCabecCTe := PARAMIXB[2] // Cabeçalho CTE

Local aItens := PARAMIXB[3] // Itens do CTe

Local aICMS := PARAMIXB[4] // ICMS do XML

Local nPosCC := aScan(aItens[1],{|x| AllTrim(x[1])=="D1_CC" })

Local nPosConta := aScan(aItens[1],{|x| AllTrim(x[1])=="D1_CONTA" })

Local nI := 0

// Conhecimento de Transporte relacionado a VENDA

If nTipCTe == "2"

For nI := 1 To Len(aItens)

If nPosCC > 0

aItens[nI][nPosCC][2] := "350851"

EndIf

If nPosConta > 0

aItens[nI][nPosConta][2] := "4420603"

EndIf

Next nI

EndIf

Return aItens

GT1VLNFE

Descrição Utilizado para executar alguma validação após a confirmação da primeira tela da importação, dentro da importação de uma nota fiscal eletrônica.
Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Array

Array contendo os itens do browse principal

Retorno
Tipo Descrição
Lógico

Verdadeiro para prosseguir com a importação e Falso para bloquear a importação

Exemplo
User Function GT1VLNFE()

MsgAlert("Validação do PE GT1VLNFE")

Return .F.

GT1VCTE

Descrição Utilizado para executar alguma validação após a confirmação da primeira tela da importação, dentro da importação de um conhecimento de transporte.
Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter

Código do tipo de CTe, sendo eles:
1=Entrada
2=Saída

PARAMIXB[2] Array Array contendo o cabeçalho do CTe
PARAMIXB[3] Array

Array contendo as notas de origem do CTe

Retorno
Tipo Descrição
Lógico

Verdadeiro para prosseguir com a importação e Falso para bloquear a importação

Exemplo
User Function GT1VCTE()

Local aAreaAnt := GetArea()

Local lRet := .T.

Local cTipCte := PARAMIXB[1]

Local aCab := PARAMIXB[2]

Local aNFOri := PARAMIXB[3]

Do Case

Case cTipCte == "1"

For nA := 1 To Len(aNFOri)

// Numero + Serie + Fornecedor + Loja + Tipo da Nota

SF1->( dbSetOrder(1) )

// Posiciona na SF1

If SF1->( dbSeek(xFilial("SF1") + aNFOri[nA][1][2]) )

If Empty(SF1->F1_STATUS)

MsgAlert("Não é possível importar CTe vinculado a"+;

" nota fiscal de origem como pré-nota.")

Return .F.

EndIf

EndIf

Next nA

EndCase

RestArea(aAreaAnt)

Return .T.
   

GT1QRYPED

Descrição

Utilizado para adicionar alguma condição na query de busca do pedido de compra, no preenchimento manual.

Parâmetros Nenhum
Retorno
Tipo Descrição
Caracter Pedaço da query que será adicionada a query principal
Exemplo
User Function GT1QRYPED()

Local cFiltro := ""

cFiltro += " AND C7_EMISSAO >= '20200101'"

Return cFiltro

GT1CTCAB

Descrição

Utilizado para manipular o cabeçalho do conhecimento de transporte antes da importação.

Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter

Código do tipo de CTe, sendo eles:

  • 1=Entrada
  • 2=Saída
PARAMIXB[2] Array Array contendo o cabeçalho do CTe
PARAMIXB[3] Array

Array contendo as notas de origem do CTe

Retorno
Tipo Descrição
Array

Array com informações do cabeçalho que será substituído no programa

Exemplo
User Function GT1CTCAB()

Local cTipoCTe := PARAMIXB[1]

Local aCab := PARAMIXB[2]

Local aNotas := PARAMIXB[3]

Local nPosTpFret := aScan(aCab,{|x| AllTrim(x[1]) == "F1_TPFRETE" })

Do Case

Case cTipoCTe == "1" // Compra

If nPosTpFret > 0

aCab[nPosTpFret][2] := "F" // FOB

EndIf

Case cTipoCTe == "2" // Venda

If nPosTpFret > 0

aCab[nPosTpFret][2] := "C" // CIF

EndIf

EndCase

Return aCab

GT1CAB

Descrição Utilizado para manipular o cabeçalho da nota fiscal.
Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Array Array com informações do cabeçalho
Retorno
Tipo Descrição
Array

Array com informações do cabeçalho que será substituído no programa

Exemplo
User Function GT1CAB() 

Local aCab := PARAMIXB

Local nPosTipo := aScan(aCab,{|x| AllTrim(x[1]) == "F1_TIPO" })

Local cTipoNF := "N"

If nPosTipo > 0

cTipoNF := aCab[nPosTipo][2]

EndIf

Do Case

Case cTipoNF == "N"

aAdd(aCab,{"F1_MENNOTA","Observacao no cabecalho nota"+;

" Normal",Nil,Nil})

Case cTipoNF == "D"

aAdd(aCab,{"F1_MENNOTA","Observacao no cabecalho nota"+;

" Devolucao",Nil,Nil})

Otherwise

aAdd(aCab,{"F1_MENNOTA","Observacao no cabecalho nota"+;

" Outros",Nil,Nil})

EndCase

Return(aCab)

GT1DIVPD

Descrição

Utilizado para manipular o array contendo as divergências entre pedido de compra e XML, na impressão do relatório.

No exemplo abaixo é utilizado para excluir as divergência a partir de uma tolerância.

Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Array Array com divergências encontradas
Retorno
Tipo Descrição
Array

Array que será substituído para impressão do relatório.

Exemplo
User Function GT1DIVPD()

Local aDiver := PARAMIXB[1]

Local nI := 0

Local nValorXml := 0

Local nValorPed := 0

Local nDiferenca := 0

Local nToler := 0

   

    For nI := 1 To Len(aDiver)

        If "VALOR" $ Upper(aDiver[nI][1])

            nValorXml := Val(StrTran(aDiver[nI][8],",","."))

            nValorPed := Val(StrTran(aDiver[nI][9],",","."))

            nDiferenca := Abs(nValorXml - nValorPed)

            nToler := ((1 / 100) * nValorPed)

            If nDiferenca <= nToler

                aDiver[nI][1] := "DELETAR"

            EndIf

        EndIf

    Next nI

    nI := 1

    Do While Len(aDiver) > 0

        If nI > Len(aDiver)

            Exit

        EndIf

        If aDiver[nI][1] == "DELETAR"

            aDel(aDiver,nI)

            aSize(aDiver,Len(aDiver)-1)

        Else

            nI++

        EndIf

    EndDo

Return aDiver

GT1CLIFOR

Descrição

Manipula a query de busca do fornecedor/cliente para adicionar condições na busca do fornecedor/cliente.

Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter

Tipo de busca:
1=Fornecedor
2=Cliente

Retorno
Tipo Descrição
Caracter

Condição para adicionar a query.

Exemplo
User Function GT1CLIFOR()

Local lCliente := (PARAMIXB[1] == "2")

Local cWhere := ""

// Parametro para indicar códigos não utilizados

// Exemplo com código + loja

// "'01234501','09876502',..."

Local cCodigos := GetNewPar("MV_????","")

    // Condição somente na busca de fornecedores

    If !lCliente

        cWhere := " AND SA2.A2_COD + SA2.A2_LOJA NOT IN ("+cCodigos+")"

    EndIf

Return cWhere

GT1NFRET

Descrição

Personaliza a busca automática da nota de origem para a importação do retorno em poder de terceiros.

Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Numérico Número da linha da grid.
Retorno
Tipo Descrição
Array

Array contendo o código do produto e nota(s) para o vínculo. ({"produto",aNotas})

Exemplo
User Function GT1NFRET()

Local nItem := PARAMIXB[1]

Local aRet := {"",{}}

Local cxPed := ""

Local nItemPed := ""

Local oXmlMan := Nil

    // Retorna o objeto TXmlManager do Xml

    oXmlMan := U_CXTranXml( (_cTab1)->&(_cCmp1 + "_XML") )

   

    // Posiciona na tag <xPed> com função do ConexãoNF-e

    If U_CXPosXML(oXmlMan,Separa(">nfeProc/>NFe/>infNFe/?det@nItem="+cValtoChar(nItem)+"/?prod/?xPed","/"))

        // Captura conteúdo da tag posicionada

        cxPed := oXmlMan:cText

        // Verifica se tem mais uma tag

        If oXmlMan:DOMHasNextNode()

            // Posiciona na próxima tag

            oXmlMan:DOMNextNode()

            // Captura a informação da tag posicionada, que deve ser <nItemPed>

            nItemPed := oXmlMan:cText

        EndIf

    EndIf

    If !Empty(cxPed) .And. !Empty(nItemPed)

        // Informações que deve ser retornadas:

        // aRet[1] = Código do produto

        // aRet[2] = array com informaçãoes da SD2:

      //           aAdd(aNotas,{D2_DOC,D2_SERIE,D2_CLIENTE,D2_LOJA,D2_COD,D2_ITEM,B6_SALDO,D2_PRCVEN,D2_NUMSEQ,D2_LOTECTL,D2_DTVALID,D2_TES,D2_IDENTB6,D2_LOCAL,D2_VALIPI,D2_EMISSAO,0})

       

    EndIf

Return aRet

GT1VLPRD

Descrição

Indica se apresenta ou não as validações entre produto xml e cadastro ao importar uma NFe.

Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Numérico

Código para o tipo de validação:
1=NCM,2=Origem,3=CEST,4=EAN,5=CFOP.

PARAMIXB[2] Array

Array com os itens do grid

PARAMIXB[3] Numérico

Número da linha posicionada

Retorno
Tipo Descrição
Lógico

Verdadeiro para realizar a validação e Falso para não validar.

Exemplo
User Function GT1VLPRD()

Local aAreaAnt := GetArea()

Local nTipoVld := PARAMIXB[1] // 1=NCM, 2=Origem, 3=CEST, 4=EAN, 5=CFOP

Local aItens := PARAMIXB[2] // Itens da grid

Local nLinha := PARAMIXB[3] // Linha posicionada

Local lRet := .T.

    Do Case

        Case nTipoVld == 1 // NCM

            // Quando o tipo de produto for ATIVO IMOBILIZADO|BENEFICIAMENTO|EMBALAGEM, não faz validação do NCM

            If Posicione("SB1",1,xFilial("SB1") + aItens[nLinha][_nPosProdu],"B1_TIPO") $ "AI|BN|EM"

                lRet := .F.

            Endif

        Case nTipoVld == 2 // Origem

        Case nTipoVld == 3 // CEST

        Case nTipoVld == 4 // EAN

        Case nTipoVld == 5 // CFOP

        Otherwise

            lRet := .T.

    EndCase

RestArea(aAreaAnt)

Return lRet

GT1BRWCHG

Descrição

Ponto de chamada após a troca de linha do browse de documentos pendentes de importação.

Utilizar variável cCombo1 para manipular o tipo de nota e cCombo2 para manipular o tipo de frete.

Parâmetros Nenhum
Retorno
Tipo Descrição
Nulo

Nenhum

Exemplo
User Function GT1BRWCHG()

// Seta o tipo de frete para CIF
    cCombo2 := "C"

Return

GT1FILBRW

Descrição

Permite manipilar o filtro do browse principal.

Parâmetros Nenhum
Retorno
Tipo Descrição
Caracter

Condição para adicionar a query.

Exemplo
User Function GT1FILBRW()

Local cFiltro := ""

   

    // Ignora notas de um determinado fornecedor

    cFiltro := " AND Z1_CGCEMI NOT IN ('12345678910123','98765432109876')"

Return cFiltro

GT1CMPCT

Descrição

Permite adicionar campos para preencher na importação do CTe. Campos a nível de documento de origem.

Parâmetros Nenhum
Retorno
Tipo Descrição
Array

Array com informações do(s) campo(s) adicionado(s).

Exemplo
User Function GT1CMPCT()

Local aFields := {}

    aAdd(aFields,{;

        {"Classe Valor","DX_CLVL","@!",TamSx3("D1_CLVL")[1],0,"",,"C","CTH",},; // {X3_TITULO,X3_CAMPO,X3_PICTURE,X3_TAMANHO,X3_DECIMAL,X3_VALID,X3_USADO,X3_TIPO,X3_F3,X3_CONTEXT}

        {"D1_CLVL"/*Campo SD1*/,""/*Valor Padrão*/};

    })

    aAdd(aFields,{;

        {"Item CTa","DX_ITEMCTA","@!",TamSx3("D1_ITEMCTA")[1],0,"",,"C","CTD",},; // {X3_TITULO,X3_CAMPO,X3_PICTURE,X3_TAMANHO,X3_DECIMAL,X3_VALID,X3_USADO,X3_TIPO,X3_F3,X3_CONTEXT}

        {"D1_ITEMCTA"/*Campo SD1*/,""/*Valor Padrão*/};

    })

    aAdd(aFields,{;

        {"Conta Contábil","DX_CONTA","@!",TamSx3("D1_CONTA")[1],0,"",,"C","CT1",},; // {X3_TITULO,X3_CAMPO,X3_PICTURE,X3_TAMANHO,X3_DECIMAL,X3_VALID,X3_USADO,X3_TIPO,X3_F3,X3_CONTEXT}

        {"D1_CONTA"/*Campo SD1*/,""/*Valor Padrão*/};

    })

Return aFields

GT1PCAUT

Descrição

Permite definir quais pedidos de compra devem ser considerados na busca automática.

Parâmetros Nenhum
Retorno
Tipo Descrição
Array

Array com informações de pedido de compra para consideração.

Exemplo
User Function GT1PCAUT()

Local aPedPE := {}

Local cQuery := ""

Local cAliasSC7 := ""

Local cRestNFe := SuperGetMV("MV_RESTNFE")

    cQuery := " SELECT SC7.R_E_C_N_O_ RECNOC7"

    cQuery +=   " FROM " + RetSqlName("SC7") + " SC7"

    cQuery +=  " WHERE SC7.C7_FILENT = '" + xFilial("SC7") + "'"

    If cRestNFe == "S"

        cQuery += " AND SC7.C7_CONAPRO NOT IN ('B','R')"

    Endif

    // Verifica se tem saldo

    cQuery +=    " AND (SC7.C7_QUANT - SC7.C7_QUJE - SC7.C7_QTDACLA) > 0"

    cQuery +=    " AND SC7.C7_RESIDUO = ' '"

    cQuery +=    " AND SC7.C7_TPOP <> 'P'"

    cQuery +=    " AND SC7.D_E_L_E_T_ = ' '"

    cQuery +=  " ORDER BY C7_NUM, C7_PRODUTO, C7_DATPRF, C7_ITEM"

    cQuery := ChangeQuery(cQuery)

    cAliasSC7 := GetNextAlias()

    dbUseArea(.T., "TOPCONN", TcGenQry(, , cQuery), cAliasSC7, .F., .T.)

    Do While (cAliasSC7)->(!Eof())

        SC7->(dbGoTo( (cAliasSC7)->RECNOC7 ))

       

        aAdd(aPedPE, {.F.,;    // 1

            SC7->C7_NUM,;      // 2

            SC7->C7_ITEM,;     // 3

            SC7->C7_EMISSAO,;  // 4

            SC7->C7_PRODUTO,;  // 5

            SC7->C7_UM,;       // 6

            (SC7->C7_QUANT - SC7->C7_QUJE - SC7->C7_QTDACLA),; // 7

            SC7->C7_DESCRI,;   // 8

            SC7->C7_PRECO,;    // 9

            SC7->C7_TES,;      // 10

            SC7->C7_PICM,;     // 11

            SC7->C7_IPI,;      // 12

            0,;                // 13

            SC7->C7_LOJA,;     // 14

            SC7->C7_COND,;     // 15

            SC7->C7_DATPRF,;   // 16

            SC7->C7_ITEMGRD,;  // 17

            SC7->C7_VLDESC})   // 18

        (cAliasSC7)->(dbSkip())

    EndDo

    (cAliasSC7)->(dbCloseArea())

    If Len(aPedPE) == 0

        // Altera para nulo para o sistema procurar de forma padrão.

        aPedPE := Nil

    EndIf

Return aPedPE

GT1INIT

Descrição

Ponto para executar alguma função antes de entrar o programa.

Parâmetros Nenhum
Retorno
Tipo Descrição
Nulo

Nenhum

Exemplo
User Function GT1INIT()

    MsAguarde({|| Processo() }, "Carregando Registros", "Sincronização produto x fornecedor (ZB0 x ZC6)")

Return Nil

GT1PEDCT

Descrição

Ponto para definir o pedido de compra para a importação do CTe.

Parâmetros Nenhum
Retorno
Tipo Descrição
Array

Array com informações do pedido de compra.

Exemplo
User Function GT1PEDCT()

Local aAreaAnt := GetArea()

Local cQuery := ''

Local cAliasQry := ''

Local aPedCTE := {}

    cQuery := "SELECT SC7.C7_NUM,"

    cQuery +=       " SC7.C7_ITEM,"

    cQuery +=       " SC7.C7_PRODUTO,"

    cQuery +=       " SC7.C7_DESCRI"

    cQuery +=  " FROM " + RetSqlName('ZZU') + " ZZU"

    cQuery += " INNER JOIN " + RetSqlName('SC7') + " SC7"

    cQuery +=    " ON SC7.C7_FILENT = '" + xFilial('SC7') + "'"

    cQuery +=   " AND SC7.C7_NUM = ZZU.ZZU_PC"

    cQuery +=   " AND SC7.C7_ITEM = '0001'"

    cQuery +=   " AND SC7.D_E_L_E_T_ = ' '"

    cQuery += " WHERE ZZU.ZZU_FILIAL = '" + xFilial('ZZU') + "'"

    cQuery +=   " AND ZZU.ZZU_NUMPF = '" + (_cTab1)->&(_cCmp1 + "_PEDFRT") + "'"

    cQuery +=   " AND ZZU.ZZU_SEQ = " + cValToChar( (_cTab1)->&(_cCmp1 + "_SEQFRT") )

    cQuery +=   " AND ZZU.D_E_L_E_T_ = ' '"

    cQuery := ChangeQuery(cQuery)

    cAliasQry := GetNextAlias()

    dbUseArea(.T., 'TOPCONN', TcGenQry(, , cQuery), cAliasQry, .F., .T.)

    If (cAliasQry)->(!Eof())

        (cAliasQry)->( aAdd(aPedCTE,{""/*Chave*/,C7_NUM,C7_ITEM,C7_PRODUTO,C7_DESCRI, (_cTab1)->&(_cCmp1 + "_TOTVAL") }) )

       

    EndIf

    (cAliasQry)->(dbCloseArea())

RestArea(aAreaAnt)

Return aPedCTE

GT1VLNFS

Descrição

Permite adicionar validações na confirmação da importação da NFSe.

Parâmetros Nenhum
Retorno
Tipo Descrição
Lógico

Verdadeiro para permitir importação, Falso para impedir.

Exemplo
User Function GT1VLNFS()

MsgAlert("Validação do PE GT1VLNFS")

Return .F.

GT1CMPLT

Descrição

Permite adicionar campos na importação do CTe em lote.

Parâmetros Nenhum
Retorno
Tipo Descrição
Array

Array com informações do(s) campo(s) adicionados.

Exemplo
User Function GT1CMPLT()

Local aCampos := {}

    //            Tabela, Campo      , Título    , F3  , Nil <reservado para conteúdo>

    aAdd(aCampos,{"SF1" ,"F1_MENNOTA","Observ."  ,""   ,Nil})

    aAdd(aCampos,{"SD1" ,"D1_OP"     ,"Cod. OP"  ,"SC2",Nil})

    aAdd(aCampos,{"SD1" ,"D1_XDESCRI","Desc. XML",""   ,Nil})

    aAdd(aCampos,{"SD1" ,"D1_XUM"    ,"UM XML"   ,""   ,Nil})

    aAdd(aCampos,{"SD1" ,"D1_XQTDE"  ,"Qtde. XML",""   ,Nil})

    aAdd(aCampos,{"SD1" ,"D1_DTVALID","Dt. Valid",""   ,Nil})

Return aCampos

GTNUMNFS

Descrição

Ponto para manipular o número da nota fiscal de serviço.

Parâmetros
Parâmetro Tipo Descrição
PARAMIXB Caracter Número da nota fiscal de serviço do XML.
Retorno
Tipo Descrição
Caracter

Número da nota fiscal de serviço formatado.

Exemplo
User Function GTNUMNFS()

Local cNumNFS := Paramixb

Local cNumAux := ""

Local cNumAux2 := ""

    If Len(cNumNFS) > 9

        cNumAux := SubStr(cNumNFS,1,4)

   

        // Pega as 9 posições da direita para esquerda

        cNumAux2 := Right(Alltrim(cNumNFS),9)

        // Remove zeros a esquerda

        Do While Len(cNumAux2) > 0 .And. SubStr(cNumAux2,1,1) == "0"

            cNumAux2 := SubStr(cNumAux2,2)

        EndDo

        // Incrementa 2021 + 503 = 2021503

        cNumAux += PadL(AllTrim(cNumAux2),5,"0")

    Else

        cNumAux := cNumNFS

    EndIf

   

Return cNumAux

CXMANDOC

Descrição

Ponto para manipular o número da NFe, NFSe, CTe e CTe OS.

Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter Número do documento do XML.
PARAMIXB[2] Caracter Conteúdo do XML.
PARAMIXB[3] Catacter

Tipo de XML:
1=NFe
2=CTe
4=NFSe
6=CTe OS

Retorno
Tipo Descrição
Caracter

Número do documento formatado.

Exemplo
User Function CXMANDOC()

Local cDoc := PARAMIXB[1] // Número do documento

Local cXml := PARAMIXB[2] // XML

Local cTipo := PARAMIXB[3] // Tipo de XML 1=NFe;2=CTe;4=NFSe;5=Cancelamento;6=CTe OS

Local cCNPJ := ""

    If cTipo == "4" // NFSe

        // Captura o CNPJ do tomador do XML NFSe

        cCNPJ := U_CXCgcDe(cXml,cTipo)

        // Manipula os zeros a esquerda

        If AllTrim(SubStr(cCNPJ,1,8)) == "01234567"

            // Retira os zeros a esquerda

            Do While Len(cDoc) > 0 .And. SubStr(cDoc,1,1) == "0"

                cDoc := SubStr(cDoc,2)

            EndDo

        EndIf

    EndIf

Return cDoc

CXMANSER

Descrição

Ponto para manipular a série dos documentos.

Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter Número da série do XML.
PARAMIXB[2] Caracter Conteúdo do XML.
PARAMIXB[3] Caracter Tipo de XML:
1=NFe
2=CTe
4=NFSe
6=CTe OS
Retorno
Tipo Descrição
Caracter

Número da série formatada.

Exemplo
User Function CXMANSER()

Local cSerie := PARAMIXB[1]

Local cXml   := PARAMIXB[2]

Local cTipo  := PARAMIXB[3]

Local cCNPJ := ""

Local oXmlMan := U_CXTranXml(cXml) // Instancia o objeto do XML

    If cTipo == "1" // NFe

        // Captura o CNPJ do emissor do XML NFe

        If Empty(cCNPJ := U_CXSeekXml(oXmlMan,Separa(">nfeProc/>NFe/>infNFe/?emit/?CNPJ","/")))

            cCNPJ := U_CXSeekXml(oXmlMan,Separa(">nfeProc/>NFe/>infNFe/?emit/?CPF","/"))

        EndIf

        // Manipula a série para o fornecedor x

        If AllTrim(cCNPJ) == "01234567891234"

            // Adiciona zeros a esquerda

            cSerie := PadL(AllTrim(cSerie),3,"0")

        EndIf

    EndIf

Return cSerie

CXNFDESX

Descrição

Permite definir regra para desconsiderar algum XML.

Deve também manipular o tipo do XML para 0=Desonciderado e gravar erro no campo _CCECOR.

Parâmetros Nenhum
Retorno
Tipo Descrição
Lógico

Verdadeiro para considerar, Falso para desconsiderar.

Exemplo
User Function CXNFDESX()

Local aAreaAnt := GetArea()

Local lOk := .T.

Local cTab1 := ""

Local cCmp1 := ""

Local cTipoXml := ""

    cTab1 := Upper(AllTrim(GetNewPar("MV_XGTTAB1", ""))) // Cabecalho XML

    cCmp1 := IIf(SubStr(cTab1, 1, 1) == "S", SubStr(cTab1, 2, 2), cTab1)

   

    cTipoXml := (cTab1)->&(cCmp1 + "_TIPO")

    If cTipoXml == "1" // NFe

       

        // [...]

       

        If !lOk

            // Altera situação do XML para 0=Desconsiderado

            RecLock(cTab1,.F.)

            (cTab1)->&(cCmp1 + "_SIT") := "0" // Desconsiderado

            (cTab1)->&(cCmp1 + "_CCECOR") := "XML desconsiderado por se tratar de Encargos de Transmissão"

            (cTab1)->(MsUnLock())

        EndIf

    EndIf

RestArea(aAreaAnt)

Return lOk

CXVALXML

Descrição

Ponto de entrada para adicionar validações na primeira camada.

Parâmetros Nenhum
Retorno
Tipo Descrição
Array

Array com indicação se bloqueia a importação e com o texto da mensagem. ({.T.,""})

Exemplo
User Function CXVALXML()

Local aAreaAnt := GetArea()

Local aRet := {.T.,""}

Local cTab1 := ""

Local cCmp1 := ""

Local dDtEmis := Nil

Local nTipo := "1"

Local cForMail := ""

Local cTextoEml := ""

    cTab1 := Upper(AllTrim(GetNewPar("MV_XGTTAB1", ""))) // Cabecalho XML

    cCmp1 := IIf(SubStr(cTab1, 1, 1) == "S", SubStr(cTab1, 2, 2), cTab1)

    dDtEmis := (cTab1)->&(cCmp1 + "_DTEMIS")

    nTipo := (cTab1)->&(cCmp1 + "_TIPO") // 1 = NFe, 2 = CTe, 4 = NFSe

    // Quando a nota for emitida depois do dia 25, envia notificação para o fornecedor

    If nTipo $ "1|4" .And. Day(dDtEmis) > 25 .And. Day(dDtEmis) <= 31

        cForMail := AllTrim(Posicione("SA2",1,xFilial("SA2") + (cTab1)->&(cCmp1 + "_CODEMI") + (cTab1)->&(cCmp1 + "_LOJEMI"),"A2_EMAIL"))

        cTextoEml := GetNewPar("MV_XGTMSGE","")

        cTextoEml := Mensagem(cTextoEml,cTab1,cCmp1)

        If (cTab1)->(U_CXFieldP(cCmp1 + "_EMLFOR")) == 0

            MsgAlert("Não foi encontrado o campo " + cCmp1 + "_EMLFOR" + " para notificação de e-mail ao fornecedor.", "E-mail ao Fornecedor")

        Else

            // Só envia a primeira vez

            If Empty((cTab1)->&(cCmp1 + "_EMLFOR")) .Or. (cTab1)->&(cCmp1 + "_EMLFOR") == "2"

                // Envia o e-mail para fornecedor cadastrado na SA2

                If EnvEmail(cForMail,cTextoEml)

                    // Marca como e-mail já enviado

                    RecLock(cTab1,.F.)          

                    (cTab1)->&(cCmp1 + "_EMLFOR") := "1" // Sim

                    (cTab1)->(MsUnlock())

                Else

                    // Marca como e-mail ainda não enviado

                    RecLock(cTab1,.F.)          

                    (cTab1)->&(cCmp1 + "_EMLFOR") := "2" // Não

                    (cTab1)->(MsUnlock())

                EndIf

            EndIf

        EndIf

        aRet := {.F.,"Emissão posterior ao dia 25."}

    EndIf

RestArea(aAreaAnt)

Return aRet

GT1OPDF

Descrição

Ponto para alterar informações da tabela AC9 (Base Conhecimento) no anexo automático do DANFE.

Parâmetros Nenhum
Retorno
Tipo Descrição
Nulo

Nenhum.

Exemplo
User Function GT1OPDF()

Reclock("AC9",.F.)
AC9->AC9_CODOBJ := "Alterado"
AC9->(MsUnlock())

Return Nil

GTAVICMS

Descrição

Ponto para alterar o valor do parâmetro MV_XGTVICD.

Parâmetros Nenhum
Retorno
Tipo Descrição
Caracter

Opção de resposta a pergunta do sistema.

Exemplo
User Function GTAVICMS()

Local cRetOp := Nil

    // Verifica o código da TES digitado, caso seja para consumo próprio, altera para sempre

    // manter o valor digitado em tela (valor ICMS igual a zero)

    If M->&(_cCmp1 + "_TES") == "173"

        cRetOP := "1" // Manter digitado

    EndIf

Return cRetOP

GT1CPRPA

Descrição

Ponto para adicionar campos (SB1 ou SC7) no filtro da regra automática.

Parâmetros Nenhum
Retorno
Tipo Descrição
Array

Array com relação de campos para utilizar no filtro:
aCampos[x][1] -> Campo da tabela 8 [Regra Automática]
aCampos[x][2] -> Nome da tabela de referência [SB1 ou SC7]
aCampos[x][3] -> Nome do campo da tabela de referencia

Exemplo
User Function GT1CPRPA()

Local aCampos := ""

    // aCampos[x][1] -> Campo da tabela 8 [Regra Automática]

    // aCampos[x][2] -> Nome da tabela de referência [SB1 ou SC7]

    // aCampos[x][3] -> Nome do campo da tabela de referencia

  aCampos := { {"ZA8_ESTOQ" , "SB1", "B1_ESTOQUE"},;

              {"ZA8_APLICA", "SC7", "C7_APLIC"} }

Return aCampos

CXEMPAUT

Descrição

Ponto para permitir informar quais empresas estão autorizadas para utilização dos serviços de gerenciamento de XMLs, separados por ; e conforme estrutura <empresa>+<filial>;<empresa>+<filial>.

Utilizado quando conteúdo excede o tamanho do parâmetro MV_CXNFEMP.

Parâmetros Nenhum
Retorno
Tipo Descrição
Caracter

Texto com sequencia de empresas autorizadas, separadas por ; (ponto e vírgula).

Exemplo
User Function CXEMPAUT()

Local cConteudo := ""

// Formato <empresa><filial>, onde 99 é empresa e 01 a filial

cConteudo := "9901;9902"

Return cConteudo

GT1MENUDI

Descrição

Ponto utilizado para adicionar botões no menu de Outras Ações no painel de documentos importados.

Parâmetros Nenhum
Retorno
Tipo Descrição
Array

Array contendo informações do botão.

Exemplo
User Function GT1MENUDI()
Local aButtons := {}

    // FWFormBrowse(): AddButton ( < cTitle>, [ xAction], [ uParam1], [ nOption], [ nVerify] ) 
    aAdd(aButtons,{"Titulo","U_FUNCAO(cParam)",,4,0})

Return aButtons

CXDEFFIL

Descrição

Ponto de entrada para definir a filial na qual o XML pertence, chamado na função de busca da filial pelo CNPJ.

Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Caracter CNPJ do destinatário/tomador do XML
PARAMIXB[2] Caracter Inscrição Estadual do destinatário/tomador do XML
PARAMIXB[3] Caracter Código do município do destinatário/tomador do XML
PARAMIXB[4] Caracter CEP do destinatário/tomador do XML
PARAMIXB[5] Caracter Conteúdo do XML
Retorno
Tipo Descrição
Array

Array contendo o código da empresa na primeira posição e o código da filial na segunda: {"99","01"}

Exemplo
User Function CXDEFFIL()
Local cCNPJ := PARAMIXB[1]
Local cInsEst  := PARAMIXB[2]
Local cCodMun := PARAMIXB[3]
Local cCEP := PARAMIXB[4]
Local cXML := PARAMIXB[5]
Local aSalvSM0 := {}
Local aEmpSM0 := {"",""}

    OpenSm0()
    aSalvSM0 := SM0->( GetArea() )
    SM0->(dbGoTop())
    Do While SM0->(!Eof())
        
        If AllTrim(cCNPJ) == AllTrim(SM0->M0_CGC)
            SM0->(aAdd(aEmpSM0,{AllTrim(M0_CODIGO),AllTrim(M0_CODFIL)}))
        EndIf

        SM0->(dbSkip())
    EndDo
    RestArea(aSalvSM0)

Return aEmpSM0

GT1CBAVR

Descrição

Ponto de entrada utilizado para adicionar e manipular os campos enviados para a importação de um aviso de recebimento.

Parâmetros
Parâmetro Tipo Descrição
PARAMIXB[1] Array Cabeçalho do aviso de recebimento (DB1)
PARAMIXB[2] Caracter Conteúdo do XML
PARAMIXB[3] Caracter

Tipo do XML:
1 - NFe

2 - CTe

4 - NFSe

6 - CTe OS

Retorno
Tipo Descrição
Array

Array contendo o cabeçalho do aviso de recebimento (DB1) alterado pelo usuário.

Exemplo

 

User Function GT1CBAVR()
Local aDB1 := PARAMIXB[1]
Local cXml := PARAMIXB[2]
Local cTipoXml := PARAMIXB[3]

aAdd(aDB1,{"DB1_VOLUME",3,Nil})
aAdd(aDB1,{"DB1_ESPECIE","SPED",Nil})

Return aDB1

GT1CPCRG

Descrição

Ponto de entrada utilizado para levar os valores da Regra Automática para o Documento de entrada (SF1/SD1)

Parâmetros Nenhum
Retorno
Tipo Descrição
Array

Array com relação de campos para utilizar no filtro:
aCampos[x][1] -> Campo da tabela 8 [Regra Automática]
aCampos[x][2] -> Nome da tabela de referência [SF1 ou SD1]
aCampos[x][3] -> Nome do campo da tabela de referencia

Exemplo
User Function GT1CPCRG()

Local aCampos:= {}

// aCampos[x][1] -> Campo da tabela 8 [Regra Automática]

// aCampos[x][2] -> Nome da tabela de referência [SF1 ou SD1]

// aCampos[x][3] -> Nome do campo da tabela de referencia

 aCampos := { {"ZH_OBS" , "SF1", "F1_OBS"},;

               {"ZH_CODREG", "SF1", "F1_OBS2"},;

               {"ZH_CODREG", "SD1", "D1_REGUTI"},;

             {"ZH_DESCRG","SD1","D1_DESCREG"} }

Return aCampos

GT1DCNLAN

Descrição

Ponto utilizado para definir quais CNPJs de emissores não serão efetuados validação do Doc. Origem

Parâmetros Nenhum
Retorno
Tipo Descrição
String

String contendo informações dos CNPJs.

Exemplo
User Function GT1DCNLAN ()

Local cConteudo := ""

cConteudo := "40437843000174;19702321000166;63481505000135"

Return cConteudo