Passar para o conteúdo principal

TOTVs Protheus: Pontos de entrada disponíveis

A seguir você encontra as configurações dos pontos de entrada disponíveis no Monitor DFe Protheus, com descrição, parâmetros, retorno e exemplo de código para personalizar o Importador Qive.

Escrito por Julia S.

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: Caractere, 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:

  • PARAMIXB[1], Caractere, Código de produto do fornecedor.

  • PARAMIXB[2], Caractere, CNPJ/CPF do fornecedor.

Retorno: Caractere, 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: 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: PARAMIXB, Array, Array contendo os itens da linha corrente.

Retorno: 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: 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. Utilizar variáveis private aHeader e aCols para PARAMIXB[3] = 1 ou 4 e aHeadItem e aColsItem para PARAMIXB[3] = 2 ou 3.

Parâmetros:

  • PARAMIXB[1], Array, Array contendo informações do item atual.

  • PARAMIXB[2], Numérico, Número da linha do browse.

  • PARAMIXB[3], Caractere, 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: Nulo, Nenhum

Exemplo:

User Function GT1VALCP() Local aItens := PARAMIXB[1] Local nLinha := PARAMIXB[2] Local _nPosLote := AScan(aHeader, {|x| x[2] == PadR("Z2_LOTECTL", 10)}) Local cLote := ""      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  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:

  • 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], Caractere, Código do fornecedor.

  • PARAMIXB[3], Caractere, Código da loja.

  • PARAMIXB[4], Caractere, Código do produto do fornecedor.

  • PARAMIXB[5], Caractere, Código do produto do Protheus.

Retorno: 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:

  • PARAMIXB[1], Caractere, Código do pedido de compra selecionado.

  • PARAMIXB[1], Caractere, Item do pedido de compra selecionado.

Retorno: 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:

  • PARAMIXB[1], Caractere, 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: 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, a conversão da moeda.

Parâmetros:

  • PARAMIXB[1], Caractere, Código do pedido de compra selecionado.

  • PARAMIXB[2], Caractere, Item do pedido de compra selecionado.

Retorno: 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: PARAMIXB, Array, Array com todos os itens do browse.

Retorno: 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: 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: Nenhum

Retorno: 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:

  • PARAMIXB[1], Caractere, 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: 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: 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:

  • PARAMIXB[1], Caractere, Nome do browse

  • PARAMIXB[1], Objeto, Objeto do browse

Retorno: 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:

  • PARAMIXB[1], Caractere, Código do fornecedor.

  • PARAMIXB[2], Caractere, Código da loja.

  • PARAMIXB[3], Caractere, Código do produto.

  • PARAMIXB[4], Caractere, 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: 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:

  • PARAMIXB[1], Array, Array contendo os itens do browse principal.

  • PARAMIXB[2], Array, Array contendo informações dos campos do browse (aHeader).

Retorno: 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:

  • PARAMIXB[1], Caractere, Código do tipo de CTe, sendo eles: 1=Entrada, 2=Saída

  • PARAMIXB[1], Array, Array contendo informações do cabeçalho.

Retorno: Caractere, 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:

  • PARAMIXB[1], Caractere, 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: 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: PARAMIXB[1], Array, Array contendo os itens do browse principal.

Retorno: 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:

  • PARAMIXB[1], Caractere, 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: 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: Caractere, 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:

  • PARAMIXB[1], Caractere, 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: 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: PARAMIXB[1], Array, Array com informações do cabeçalho.

Retorno: 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: PARAMIXB[1], Array, Array com divergências encontradas.

Retorno: 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: PARAMIXB[1], Caractere, Tipo de busca: 1=Fornecedor, 2=Cliente

Retorno: 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: PARAMIXB[1], Numérico, Número da linha da grid.

Retorno: 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:

  • 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: 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: Nulo, Nenhum

Exemplo:

User Function GT1BRWCHG()      // Seta o tipo de frete para CIF     cCombo2 := "C"  Return

GT1FILBRW

Descrição: Permite manipular o filtro do browse principal.

Parâmetros: Nenhum

Retorno: Caractere, 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: 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: 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             SC7->C7_OPER})     // 19 // Se em sua release o campo for Virtual, enviar conteúdo em branco          (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: 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: 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: 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: Array, Array com informações do(s) campo(s) adicionados.

Observação: Dependendo do campo adicionado pode ser necessário refazer a ordenação das informações enviadas para o ExecAuto. Por exemplo, o campo D1_PEDIDO e D1_ITEMPC é orientado que seja enviado na 4º e 5º do array de itens do ExecAuto. Sendo assim, utilizar o ponto de entrada GT1ALTIT para reordenar o array.

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: PARAMIXB, Caractere, Número da nota fiscal de serviço do XML.

Retorno: Caractere, 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:

  • PARAMIXB[1], Caractere, Número do documento do XML.

  • PARAMIXB[2], Caractere, Conteúdo do XML.

  • PARAMIXB[3], Carecrete, Tipo de XML: 1=NFe, 2=CTe, 4=NFSe, 6=CTe OS

Retorno: Caractere, 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:

  • PARAMIXB[1], Caractere, Número da série do XML.

  • PARAMIXB[1], Caractere, Conteúdo do XML.

  • PARAMIXB[1], Caractere, Tipo de XML: 1=NFe, 2=CTe, 4=NFSe, 6=CTe OS

Retorno: Caractere, 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: 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: 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: 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: Caractere, 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: 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 referência.

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 referência    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: Caractere, Texto com sequência 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: 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:

  • PARAMIXB[1], Caractere, CNPJ do destinatário/tomador do XML.

  • PARAMIXB[2], Caractere, Inscrição Estadual do destinatário/tomador do XML.

  • PARAMIXB[3], Caractere, Código do município do destinatário/tomador do XML.

  • PARAMIXB[4], Caractere, CEP do destinatário/tomador do XML.

  • PARAMIXB[5], Caractere, Conteúdo do XML.

Retorno: 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:

  • PARAMIXB[1], Array, Cabeçalho do aviso de recebimento (DB1).

  • PARAMIXB[1], Caractere, Conteúdo do XML.

  • PARAMIXB[1], Caractere, Tipo do XML: 1-NFe, 2-CTe, 4-NFSe, 6-CTe OS

Retorno: 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: 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 referência.

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 referência   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: Caractere, String contendo informações dos CNPJs.

Exemplo:

User Function GT1DCNLAN () Local cConteudo := ""     cConteudo := "40437843000174;19702321000166;63481505000135"  Return cConteudo

GT1ITDKD

Descrição: Ponto utilizado para enviar campos para a tabela DKD. NFE e NFSe.

Parâmetros:

  • PARAMIXB[1], Array, Linha do item atual.

  • PARAMIXB[2], Caractere, Tipo do XML: 1-NFe, 4-NFSe

Retorno: Array, Itens a serem inseridos na tabela DKD.

Exemplo:

Local aParam := PARAMIXB[1] // Linha do item atual Local cTipo  := PARAMIXB[2] // Tipo do documento Local aDKDItem := {} Local nPosPRD := aScan(aHeader, {|x| x[2] == PadR("ZB_COD", 10)}) Local cObs := ""  cObs := Posicione("SB1", 1, xFilial("SB1") + xFilial("SB1") + aParam[nPosPRD] , "B1_OBS")  IF cTipo == "1" aadd(aDKDItem,{"DKD_OBS"    ,"Sobre o item"                          ,NIL}) aadd(aDKDItem,{"DKD_TESTE"  ,cObs                                    ,NIL}) ELSE aadd(aDKDItem,{"DKD_OBS"    ,"NF de serviço"                         ,NIL}) aadd(aDKDItem,{"DKD_TESTE"  ,cObs                                    ,NIL}) ENDIF Return aDKDItem

GT1DKDCT

Descrição: Ponto utilizado para enviar campos para a tabela DKD. CTe.

Parâmetros:

  • PARAMIXB[1], Caractere, CTe de Entrada(1) ou Saída(2)

  • PARAMIXB[2], Array, Cabeçalho dos Itens.

  • PARAMIXB[3], Array, Itens do CTe.

Retorno: Array, Itens a serem inseridos na tabela DKD.

Exemplo:

User Function GTDKDCT() Local aAreaAnt := GetArea() Local cTipo := PARAMIXB[1] // "1" Entrada // "2" Saída Local aCabecCTe := PARAMIXB[2] Local aItensCTe := PARAMIXB[3] Local aDKDItem := {}  Do Case Case cTipo == "1" aadd(aDKDItem,{"DKD_OBS"    ,"Sobre o item"                                ,NIL}) Case cTipo == "2" aadd(aDKDItem,{"DKD_OBS"    ,"Sobre o item 2"                                ,NIL}) EndCase  RestArea(aAreaAnt) Return aDKDItem

GTDKDCLS

Descrição: Ponto utilizado para enviar campos para a tabela DKD no momento da Classificação.

Parâmetros:

  • PARAMIXB[1], Array, Linha atual do Item.

  • PARAMIXB[2], Caractere, Tipo do documento.

Retorno: Array, Itens a serem inseridos na tabela DKD.

Exemplo:

User Function GTDKDCLS() Local aAreaAnt := GetArea() Local aParam := PARAMIXB[1] // Linha do item atual Local cTipo := PARAMIXB[2] // 1-NFE;2-CTE-4-NFSE Local aDKDItem := {}  IF cTipo == '1'    aAdd(aDKDItem,{"DKD_OBS","Sobre o item 1", Nil})    aAdd(aDKDItem,{"DKD_TESTE","Teste", Nil}) ELSE    aAdd(aDKDItem,{"DKD_OBS","NF SERVICO", Nil})    aAdd(aDKDItem,{"DKD_TESTE","Servico", Nil}) ENDIF RestArea(aAreaAnt) Return aDkdItem

GT1MACLS

Descrição: Permite a manipulação do Array de Itens antes do envio para Classificação. (Tela de Docs. Importados)

Parâmetros: PARAMIXB, Array, Array contendo os itens da linha corrente.

Retorno: Array, Array contendo informações alteradas.

Exemplo:

User Function GT1MACLS() Local aItem := PARAMIXB Local nPosTes := 0 Local nPosProd := 0  nPosTes := aScan(aItem, {|x| x[1] == "D1_TES"}) nPosProd := aScan(aItem, {|x| x[1] == "D1_COD"})      IF nPosTes > 0 .AND. nPosProd > 0        cTes := Posicione("SB1",1,xFilial("SB1")+aItem[nPosProd][2],"B1_TE") // Pega a TES do Produto         IF !Empty(cTes)              aItem[nPosTes][2] := cTes         ENDIF     ENDIF Return aItem

GT1VCLAS

Descrição: Utilizado para executar alguma validação ao clicar no botão 'Classificar' na rotina de Docs. Importados ou na execução do serviço de classificação automático (CXNFJOB6).

Parâmetros: Nenhum

Retorno: Lógico, Verdadeiro para prosseguir com a importação e Falso para bloquear a importação.

Exemplo:

User Function GT1VCLAS() Local lRet := .T. Local dDataEst := GetNewPar("MV_ULMES") Local lAuto := IsBlind()      IF SF1->F1_EMISSAO < dDataEst        lRet := .F.        IF !lAuto            Alert("Data de emissão do documento menor que a data do fechamento do estoque")        ENDIF     ENDIF  Return lRet
Respondeu à sua pergunta?