Histórico da Página
...
04-Devolução
05-Reentrega
06-Complemento
07-Cancelamento
08-Aliança
09-Manut. Transp
10-Compl.Impost
11-Armazenagem
12-Anulação
13-Substituição
14-Can.Anul
Aviso | ||
---|---|---|
| ||
Parâmetros e processo abaixo desativados à partir de atendendo Ajuste SINIEF 9/07 CONFAZ, onde para o prestador de serviços, foi revogado a obrigação de emissão do CT-e de Anulação. Devendo ser seguido à partir desta data emissão de CTe Substituição. |
...
Bloco de código | ||||
---|---|---|---|---|
| ||||
//-- Montagem do Cabeçalho aCab := {} AAdd( aCab, { "DT6_FILDOC" , DT6->DT6_FILDOC , Nil } ) //-- Obrigatorio AAdd( aCab, { "DT6_DOC" , DT6->DT6_DOC , Nil } ) //-- Obrigatorio AAdd( aCab, { "DT6_SERIE" , DT6->DT6_SERIE , Nil } ) //-- Obrigatorio //-- Montagem dos Itens aItens := {} aAdd( aItens, {}) //-- Para que o valor da devolução seja calculada, enviar uma linha com array vazio If !MsgYesNo("No teste, deseja calcular valor da devolução? ") If MsgYesNo("Deseja testar por valor ($150)? Se a oção for 'Não', o percentual será de 30%") //-- Exemplo de opção de Valor informado em $150,00 AAdd( aItens[1], { "NVLRDOC" , 150 , Nil } ) Else //-- Exemplo de opção de percentual informado em 30% AAdd( aItens[1], { "NPERCDOC" , 30 , Nil } ) EndIf EndIf //-- Montagem das Nfs - Este array será apenas avaliado se a opção de devolução seja por NF (3ª pergunta do <F12> da rotina) aNfs := {} aAdd( aNfs, {}) DTC->(DbSetOrder(3)) //-- DTC_FILIAL+DTC_FILDOC+DTC_DOC+DTC_SERIE+DTC_SERVIC+DTC_CODPRO If DTC->(MsSeek(xFilial("DTC") + DT6->(DT6_FILDOC+DT6_DOC+DT6_SERIE))) AAdd( aNfs[Len(aNfs)], { "DTC_NUMNFC" , DTC->DTC_NUMNFC , Nil } ) //-- Obrigatorio, quando selecionado por NF (3º pergunte do F12 do TMSA500) AAdd( aNfs[Len(aNfs)], { "DTC_SERNFC" , DTC->DTC_SERNFC , Nil } ) //-- Obrigatorio, quando selecionado por NF (3º pergunte do F12 do TMSA500) AAdd( aNfs[Len(aNfs)], { "DTC_CLIREM" , DTC->DTC_CLIREM , Nil } ) //-- Obrigatorio, quando selecionado por NF (3º pergunte do F12 do TMSA500) AAdd( aNfs[Len(aNfs)], { "DTC_LOJREM" , DTC->DTC_LOJREM , Nil } ) //-- Obrigatorio, quando selecionado por NF (3º pergunte do F12 do TMSA500) AAdd( aNfs[Len(aNfs)], { "DTC_CODPRO" , DTC->DTC_CODPRO , Nil } ) //-- Obrigatorio, quando selecionado por NF (3º pergunte do F12 do TMSA500) AAdd( aNfs[Len(aNfs)], { "DTC_FILORI" , DTC->DTC_FILORI , Nil } ) //-- Obrigatorio, quando selecionado por NF (3º pergunte do F12 do TMSA500) AAdd( aNfs[Len(aNfs)], { "DTC_LOTNFC" , DTC->DTC_LOTNFC , Nil } ) //-- Obrigatorio, quando selecionado por NF (3º pergunte do F12 do TMSA500) EndIf //-- Chamada à MsExecAuto, os dois primeiros argumentos são de uso interno e serão ignorados, se passado algum conteúdo Private lMsErroAuto := .F. //-- Utilizada na funcao MsExecAuto() MsExecAuto({|a,b,c,d,e,f| TMSA500(a,b,c,d,e,f)},Nil,Nil,nOpcAut,aCab,aItens,aNfs) If lMsErroAuto MostraErro() Else MsgAlert("TESTE OK") EndIf |
Opção 5 - Reentrega
* Cabeçalho - Documento a receber a manutenção
Em todas as opções de chamadas, o TMSA500 espera os campos DT6_FILDOC, DT6_DOC e DT6_SERIE como cabeçalho.
* Opção de Reentrega por Documento ou Nf:
A opção reentrega por NFou por documento (3ª pergunta da tecla de função <F12>), será respeitada na execução automática.
Caso a opção seja de reentrega por Docto, o array de NF não será necessário.
Caso a opção de reentrega por NF esteja ativa, um array com as NF's a serem devolvidas será obrigatório para o sucesso.
Os campos obrigatórios para cada NF serão os seguintes:
- DTC_NUMNFC
- DTC_SERNFC
- DTC_CLIREM
- DTC_LOJREM
- DTC_CODPRO
- DTC_FILORI
- DTC_LOTNFC
* Valor do documento:
Para a chamada da reentrega, pode-se gerá-la de 3 formas para o cálculo do Valor do documento:
- Calculado: O Sistema calculará, baseado nas condições comerciais cadastradas, o valor do documento de reentrega.
Para efetivar uma reentrega nesta condição, o array aItens deverá conter uma linha vazia.
- Valor Informado: Um valor líquido será informado para a rotina, que acatará este valor para o documento.
Para esta opção, enviar 1 item com a constante "NVLRDOC" preenchida com o valor desejado.
- Percentual informado: Um percentual sobre o Documento original será informado à rotina, que fará o cálculo e o gravará no documento.
Para esta opção, enviar 1 item com a constante "NPERCDOC" preenchida com o percentual desejado.
Exemplo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
//-- Montagem do Cabeçalho aCab := {} AAdd( aCab, { "DT6_FILDOC" , DT6->DT6_FILDOC , Nil } ) //-- Obrigatorio AAdd( aCab, { "DT6_DOC" , DT6->DT6_DOC , Nil } ) //-- Obrigatorio AAdd( aCab, { "DT6_SERIE" , DT6->DT6_SERIE , Nil } ) //-- Obrigatorio //-- Montagem dos Itens aItens := {} aAdd( aItens, {}) //-- Para que o valor da reentrega seja calculada, enviar uma linha com array vazio If !MsgYesNo("No teste, deseja calcular valor da Reentrega? ") If MsgYesNo("Deseja testar por valor ($250)? Se a oção for 'Não', o percentual será de 70%") //-- Exemplo de opção de Valor informado em $250,00 AAdd( aItens[1], { "NVLRDOC" , 250 , Nil } ) Else //-- Exemplo de opção de percentual informado em 70% AAdd( aItens[1], { "NPERCDOC" , 70 , Nil } ) EndIf EndIf //-- Montagem das Nfs //-- Diferente do exemplo da devolução (acima), este demonstra a chamada por documento, sem envio ou citação do array de NFs //-- Chamada à MsExecAuto, os dois primeiros argumentos são de uso interno e serão ignorados, se passado algum conteúdo Private lMsErroAuto := .F. //-- Utilizada na funcao MsExecAuto() MsExecAuto({|a,b,c,d,e| TMSA500(a,b,c,d,e)},Nil,Nil,nOpcAut,aCab,aItens) If lMsErroAuto MostraErro() Else MsgAlert("TESTE OK") EndIf |
Opção 6 - Complemento
* Cabeçalho - Documento a receber a manutenção
Em todas as opções de chamadas, o TMSA500 espera os campos DT6_FILDOC, DT6_DOC e DT6_SERIE como cabeçalho.
* Valor do documento:
Para a chamada da funcionalidade de complemento, é obrigatório que sejam enviados todos os itens com os componentes e os valores a serem complementados.
Como trata-se de complemento de um documento, apenas componentes do documento original poderão ser complementados.
IMPORTANTE: NÃO poderá complementar o documento pelo total do frete (internamente tratado como componente "TF").
Os campos a serem enviados no array de itens são:
- DT8_CODPAS (Obrigatório): Código do componente a ser complementado.
- DT8_VALTOT (Obrigatório): Valor do complemento para o componente.
Exemplo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
//-- Montagem do Cabeçalho
aCab := {}
AAdd( aCab, { "DT6_FILDOC" , DT6->DT6_FILDOC , Nil } ) //-- Obrigatorio
AAdd( aCab, { "DT6_DOC" , DT6->DT6_DOC , Nil } ) //-- Obrigatorio
AAdd( aCab, { "DT6_SERIE" , DT6->DT6_SERIE , Nil } ) //-- Obrigatorio
//-- Montagem dos Itens
aItens := {}
If MsgYesNo("Testar com erro?")
//-- "Maus" exemplos de uso da rotina, deve-se enviar ao menos um componente e ele deve ser válido e com valor positivo.
aAdd( aItens, {})
If !MsgYesNo("Zerado?")
AAdd( aItens[Len(aItens)], { "DT8_CODPAS", 'XX' , Nil } ) //-- Código do Componente: Obrigatório
AAdd( aItens[Len(aItens)], { "DT8_VALTOT", 100 , Nil } ) //-- Valor do Componente: Obrigatório
EndIf
Else
//-- Exemplo complementando todos os componentes do documento por 15% do seu valor original
DT8->(DbSetOrder(2)) //-- DT8_FILIAL+DT8_FILDOC+DT8_DOC+DT8_SERIE+DT8_CODPRO+DT8_CODPAS
DT8->(MsSeek(xFilial("DT8")+DT6->(DT6_FILDOC+DT6_DOC+DT6_SERIE)))
Do While DT8->(!Eof()) .And. DT8->(DT8_FILIAL+DT8_FILDOC+DT8_DOC+DT8_SERIE) == xFilial("DT8")+DT6->(DT6_FILDOC+DT6_DOC+DT6_SERIE)
//-- O Total do Frete é ignorado pela rotina, se passado
If AllTrim(DT8->DT8_CODPAS) != "TF"
aAdd( aItens, {})
AAdd( aItens[Len(aItens)], { "DT8_CODPAS", DT8->DT8_CODPAS , Nil } ) //-- Código do Componente: Obrigatório
AAdd( aItens[Len(aItens)], { "DT8_VALTOT", DT8->DT8_VALTOT * 0.15 , Nil } ) //-- Valor do Componente: Obrigatório
EndIf
DT8->(DbSkip())
EndDo
EndIf
//-- Montagem das Nfs
//-- Apenas a opção de devolução e reentrega possuem esta opção e não é necessário seu envio
//-- Chamada à MsExecAuto, os dois primeiros argumentos são de uso interno e serão ignorados, se passado algum conteúdo
Private lMsErroAuto := .F. //-- Utilizada na funcao MsExecAuto()
MsExecAuto({|a,b,c,d,e| TMSA500(a,b,c,d,e)},Nil,Nil,nOpcAut,aCab,aItens)
If lMsErroAuto
MostraErro()
Else
MsgAlert("TESTE OK")
EndIf |
Opção 7 - Cancelamento
* Cabeçalho - Documento a receber a manutenção
Em todas as opções de chamadas, o TMSA500 espera os campos DT6_FILDOC, DT6_DOC e DT6_SERIE como cabeçalho.
Na opção de Cancelamento, apenas o Cabeçalho é necessário, onde informa-se o documento a ser cancelado.
Exemplo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
//-- Montagem do Cabeçalho
aCab := {}
AAdd( aCab, { "DT6_FILDOC" , DT6->DT6_FILDOC , Nil } ) //-- Obrigatorio
AAdd( aCab, { "DT6_DOC" , DT6->DT6_DOC , Nil } ) //-- Obrigatorio
AAdd( aCab, { "DT6_SERIE" , DT6->DT6_SERIE , Nil } ) //-- Obrigatorio
//-- Montagem dos Itens
//-- Não há itens para a opção de cancelamento.
aItens := {}
aAdd( aItens, {})
//-- Montagem das Nfs
//-- Apenas a opção de devolução e reentrega possuem esta opção e não é necessário seu envio
//-- Chamada à MsExecAuto, os dois primeiros argumentos são de uso interno e serão ignorados, se passado algum conteúdo
Private lMsErroAuto := .F. //-- Utilizada na funcao MsExecAuto()
MsExecAuto({|a,b,c,d,e| TMSA500(a,b,c,d,e)},Nil,Nil,nOpcAut,aCab,aItens)
If lMsErroAuto
MostraErro()
Else
MsgAlert("TESTE OK")
EndIf |
Opção 8 - Aliança
* Cabeçalho - Documento a receber a manutenção
Em todas as opções de chamadas, o TMSA500 espera os campos DT6_FILDOC, DT6_DOC e DT6_SERIE como cabeçalho.
* Itens:
Para a chamada da manutenção Aliança, será observado, assim como na tela, se o TMS está com o serviço de Aliança ativo.
Existem 3 ações que podem ser executadas nesta opção:
- Documento Aliança ser alterado para Documento Normal
Neste caso, não é necessário envio de qualquer informação no Item.
- Documento Normal para Aliança 1º percurso
Indicar apenas que é 1º percurso, não havendo outras informações a serem enviadas.
Para esta opção, enviar 1 item com a constante "NPERCURDOC" preenchida com número 1 (um).
- Documento Normal para Aliança 2º percurso
Deve-se indicar a filial e o Ctrc Aliança, assim como numero do parceiro (de acordo com a tabela MI do cadastro de tabelas - SX5).
Para esta opção, enviar 1 item com as seguintes constantes:
* "NPERCURDOC"- fixo 2
* "CFILDPCDOC"- Filial aliança
* "CCTRDPCDOC"- Ctrc Aliança
* "NPARCEIDOC"- Número do parceiro de acordo com a ordem na tabela "MI" do cadastro de tabelas - SX5
Exemplo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
//-- Montagem do Cabeçalho
aCab := {}
AAdd( aCab, { "DT6_FILDOC" , DT6->DT6_FILDOC , Nil } ) //-- Obrigatorio
AAdd( aCab, { "DT6_DOC" , DT6->DT6_DOC , Nil } ) //-- Obrigatorio
AAdd( aCab, { "DT6_SERIE" , DT6->DT6_SERIE , Nil } ) //-- Obrigatorio
//-- Montagem dos Itens
aItens := {}
aAdd( aItens, {})
If TmsDocAli(DT6->DT6_FILDOC,DT6->DT6_DOC,DT6->DT6_SERIE)
MsgAlert("Neste teste, o Documento é aliança, será retornado para transporte ou entrega normal")
ElseIf !MsgYesNo("Deseja testar com erro? ")
If MsgYesNo("1º percurso?")
AAdd( aItens[1], { "NPERCURDOC", 1 , Nil } )
Else
AAdd( aItens[1], { "NPERCURDOC", 2 , Nil } )
AAdd( aItens[1], { "CFILDPCDOC", "02" , Nil } )
AAdd( aItens[1], { "CCTRDPCDOC", "123456" , Nil } )
AAdd( aItens[1], { "NPARCEIDOC", 1 , Nil } )
EndIf
EndIf
//-- Montagem das Nfs
//-- Apenas a opção de devolução e reentrega possuem esta opção e não é necessário seu envio
//-- Chamada à MsExecAuto, os dois primeiros argumentos são de uso interno e serão ignorados, se passado algum conteúdo
Private lMsErroAuto := .F. //-- Utilizada na funcao MsExecAuto()
MsExecAuto({|a,b,c,d,e,f| TMSA500(a,b,c,d,e,f)},Nil,Nil,nOpcAut,aCab,aItens,aNfs)
If lMsErroAuto
MostraErro()
Else
MsgAlert("TESTE OK")
EndIf |
Opção 9 - Manutenção Transporte
* Cabeçalho - Documento a receber a manutenção
Em todas as opções de chamadas, o TMSA500 espera os campos DT6_FILDOC, DT6_DOC e DT6_SERIE como cabeçalho.
* Itens:
Para a chamada da manutenção de Transporte do documento, pode-se alterar apenas 2 informações:
- Serviço de transporte: Indicar o serviço de transposte, exemplo: "1"-Coleta, "2"-Transporte; "3"-Entrega.
Para esta opção, enviar 1 item com a constante "CSERTMSDOC" preenchida com a informação desejada.
- Tipo de transporte: Um percentual sobre o Documento original será informado à rotina, que fará o cálculo e o gravará no documento.
Para esta opção, enviar 1 item com a constante "NPERCDOC" preenchida com a informação desejada.
Exemplo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
//-- Montagem do Cabeçalho
aCab := {}
AAdd( aCab, { "DT6_FILDOC" , DT6->DT6_FILDOC , Nil } ) //-- Obrigatorio
AAdd( aCab, { "DT6_DOC" , DT6->DT6_DOC , Nil } ) //-- Obrigatorio
AAdd( aCab, { "DT6_SERIE" , DT6->DT6_SERIE , Nil } ) //-- Obrigatorio
//-- Montagem dos Itens
aItens := {}
aAdd( aItens, {})
If !MsgYesNo("Deseja testar com erro?")
AAdd( aItens[1], { "CSERTMSDOC" , Iif(DT6->DT6_SERTMS=="3","2","3") , Nil } )
AAdd( aItens[1], { "CTIPTRADOC" , Iif(DT6->DT6_TIPTRA=="1","2","1") , Nil } )
EndIf
//-- Montagem das Nfs
//-- Apenas a opção de devolução e reentrega possuem esta opção e não é necessário seu envio
//-- Chamada à MsExecAuto, os dois primeiros argumentos são de uso interno e serão ignorados, se passado algum conteúdo
Private lMsErroAuto := .F. //-- Utilizada na funcao MsExecAuto()
MsExecAuto({|a,b,c,d,e| TMSA500(a,b,c,d,e)},Nil,Nil,nOpcAut,aCab,aItens)
If lMsErroAuto
MostraErro()
Else
MsgAlert("TESTE OK")
EndIf |
Opção 10 - Complemento de Imposto
* Cabeçalho - Documento a receber a manutenção
Em todas as opções de chamadas, o TMSA500 espera os campos DT6_FILDOC, DT6_DOC e DT6_SERIE como cabeçalho.
* Valor do documento:
Para a chamada do complemento de imposto, pode-se gerá-la de 2 formas para o cálculo do Valor do documento:
- Valor Informado: Um valor líquido será informado para a rotina, que acatará este valor para o documento.
Para esta opção, enviar 1 item com a constante "NVLRDOC" preenchida com o valor desejado.
- Percentual informado: Um percentual sobre o Documento original será informado à rotina, que fará o cálculo e o gravará no documento.
Para esta opção, enviar 1 item com a constante "NPERCDOC" preenchida com o percentual desejado.
Exemplo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
//-- Montagem do Cabeçalho
aCab := {}
AAdd( aCab, { "DT6_FILDOC" , DT6->DT6_FILDOC , Nil } ) //-- Obrigatorio
AAdd( aCab, { "DT6_DOC" , DT6->DT6_DOC , Nil } ) //-- Obrigatorio
AAdd( aCab, { "DT6_SERIE" , DT6->DT6_SERIE , Nil } ) //-- Obrigatorio
//-- Montagem dos Itens
aItens := {}
aAdd( aItens, {})
If MsgYesNo("Deseja testar por valor ($150)? Se a oção for 'Não', o percentual será de 30%")
AAdd( aItens[1], { "NVLRDOC" , 150 , Nil } )
Else
AAdd( aItens[1], { "NPERCDOC" , 30 , Nil } )
EndIf
//-- Montagem das Nfs
//-- Apenas a opção de devolução e reentrega possuem esta opção e não é necessário seu envio
//-- Chamada à MsExecAuto, os dois primeiros argumentos são de uso interno e serão ignorados, se passado algum conteúdo
Private lMsErroAuto := .F. //-- Utilizada na funcao MsExecAuto()
MsExecAuto({|a,b,c,d,e| TMSA500(a,b,c,d,e)},Nil,Nil,nOpcAut,aCab,aItens)
If lMsErroAuto
MostraErro()
Else
MsgAlert("TESTE OK")
EndIf |
Opção 11 - Armazenagem
* Cabeçalho - Documento a receber a manutenção
Em todas as opções de chamadas, o TMSA500 espera os campos DT6_FILDOC, DT6_DOC e DT6_SERIE como cabeçalho.
* Valor do documento:
Para a chamada do documento de armazenagem, é necessário informar a quantidade de dias de armazenagem.
Para esta opção, enviar 1 item com a constante "NDIASDOC" preenchida com a quantidade de dias de armazenagem.
Exemplo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
//-- Montagem do Cabeçalho
aCab := {}
AAdd( aCab, { "DT6_FILDOC" , DT6->DT6_FILDOC , Nil } ) //-- Obrigatorio
AAdd( aCab, { "DT6_DOC" , DT6->DT6_DOC , Nil } ) //-- Obrigatorio
AAdd( aCab, { "DT6_SERIE" , DT6->DT6_SERIE , Nil } ) //-- Obrigatorio
//-- Montagem dos Itens
aItens := {}
aAdd( aItens, {})
If !MsgYesNo("Testar com erro?")
AAdd( aItens[1], { "NDIASDOC" , 3 , Nil } )
EndIf
//-- Montagem das Nfs
//-- Apenas a opção de devolução e reentrega possuem esta opção e não é necessário seu envio
//-- Chamada à MsExecAuto, os dois primeiros argumentos são de uso interno e serão ignorados, se passado algum conteúdo
Private lMsErroAuto := .F. //-- Utilizada na funcao MsExecAuto()
MsExecAuto({|a,b,c,d,e| TMSA500(a,b,c,d,e)},Nil,Nil,nOpcAut,aCab,aItens)
If lMsErroAuto
MostraErro()
Else
MsgAlert("TESTE OK")
EndIf
|
04. ASSUNTOS RELACIONADOS
...