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