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[2], 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[2], 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[2], 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[2], Caractere, Conteúdo do XML.

  • PARAMIXB[3], 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[2], Caractere, Conteúdo do XML.

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

User Function GT1ITDKD() 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

CX9MCFTO

Descrição: Permite alterar a lista de impostos exibida na tela “Conferência de Impostos” (conferência por totais), que compara os valores do XML com os valores calculados no Documento de Entrada. Pode ser usado, por exemplo, para não exibir os impostos do Configurador de Tributos (IBS/CBS/IS).

Quando é executado:

  • Na confirmação da classificação do Documento de Entrada, antes de a tela “Conferência de Impostos” ser exibida.

  • Somente para NF-e e CT-e.

  • Somente quando há ao menos uma divergência entre os valores do XML e os valores calculados.

  • Somente em processos manuais. Não é executado em rotinas automáticas.

  • Depende de os parâmetros MV_XGTCIMP (NF-e) e MV_XGTCIMC (CT-e) estarem ativos e de a espécie do documento estar em MV_XGTNFES (NF-e) ou MV_XGTCTES (CT-e).

  • Não se aplica a formulário próprio.

Parâmetros:

  • PARAMIXB[1], Array, Lista de impostos totalizados da nota (estrutura abaixo).

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

Estrutura de cada item de PARAMIXB[1]:

  • [1], Numérico, Legenda: 1 = igual ao XML (verde), 2 = diferença no valor (vermelho), 3 = diferença na base ou alíquota (laranja).

  • [2], Caractere, Código do imposto: ICM, ICR, FCP, FST, IPI, PS2, CF2 ou código da regra do Configurador de Tributos.

  • [3], Caractere, Descrição do imposto exibida na tela.

  • [4], Numérico, Base de cálculo do XML.

  • [5], Numérico, Alíquota do XML.

  • [6], Numérico, Valor do XML.

  • [7], Numérico, Base de cálculo calculada.

  • [8], Numérico, Alíquota calculada.

  • [9], Numérico, Valor calculado.

  • [10], Numérico, Diferença (valor do XML − valor calculado).

  • [11], Caractere, Código do tributo. Para o Configurador de Tributos: CBSFED, IBSEST, IBSMUN ou ISFED.

Retorno: Array, Impostos que serão exibidos na tela “Conferência de Impostos”, na mesma estrutura de PARAMIXB[1]. Se o retorno não for do tipo Array, a tela mostra os impostos originais.

Observação: O ponto de entrada altera apenas o que aparece na tela. Os valores dos impostos da nota não são modificados.

Exemplo: exibir só os impostos tradicionais (sem IBS/CBS/IS).

User Function CX9MCFTO() Local aTotImp := ParamIxb[1] Local aRet    := {} Local cPadrao := "ICM|ICR|FCP|FST|IPI|PS2|CF2" Local nI  For nI := 1 To Len(aTotImp) 	If AllTrim(aTotImp[nI][2]) $ cPadrao 		aAdd(aRet, aTotImp[nI]) 	EndIf Next nI  Return aRet
Respondeu à sua pergunta?