· 5 years ago · Oct 16, 2020, 06:58 PM
1/*HEADER*/
2create or replace package PKG_MFTTRANSPORTADORA is
3 -- Author : GONCALVES
4 -- Created : 24/07/2009 15:49:44
5 -- Purpose :
6 TYPE TSEQDOCTO IS TABLE OF MFT_CTRC.SEQCTRC%TYPE index by binary_integer;
7 aSeqDocto TSEQDOCTO;
8 aSeqDocto_Null TSEQDOCTO;
9 aSeqDoctoN binary_integer := 0;
10 procedure mftp_geraEmpenho( pnNroEmpresa in Integer,
11 pnIdUsuario in Integer,
12 psUsuario in Varchar2,
13 pnUsaTabFrete in Integer,
14 pnUsaCgo in Integer,
15 pnGeraCTRCUnico in Integer,
16 pnOk in out number,
17 psMsgErro in out Varchar2);
18 procedure mftp_cancEmpenho( pnNroEmpenho in integer,
19 psUsuario in Varchar2,
20 pnVerifDependencias IN INTEGER,
21 pnVerifNfSm IN INTEGER,
22 pnOk in out Integer,
23 psMsgErro in out Varchar2 );
24 procedure mftp_geraCtrc(pnNroEmpresa in Integer,
25 psUsuario in Varchar2,
26 pnOk in out Integer,
27 psMsgErro in out Varchar2);
28 procedure mftp_geraCtrcMan( pnSeqCtrc in Integer,
29 psUsuAlteracao in varchar2,
30 pnOk in out Integer,
31 psMsgErro in out Varchar2);
32 procedure mftp_cancelaCtrc(pnSeqCtrc in Integer,
33 psUsuCancelou in Varchar2,
34 pnOk in out Integer,
35 psMsgErro in out Varchar2,
36 psOrigem in varchar2 default 'C');
37 procedure mftp_geraNfps( pnNroEmpresa in Integer,
38 pnIdUsuario in Integer,
39 psUsuario in Varchar2,
40 pnOk out Integer,
41 psMsgErro out Varchar2);
42 procedure mftp_geraNfpsMan( pnSeqNfps in Integer,
43 psUsuAlteracao in varchar2,
44 pnOk in out Integer,
45 psMsgErro in out Varchar2);
46 procedure mftp_cancelaNfps(pnSeqNfps in Integer,
47 psUsuCancelou in Varchar2,
48 pnOk in out Integer,
49 psMsgErro in out Varchar2,
50 psOrigem in varchar2 default 'C');
51 procedure mftp_geraFinancCtrcC( vnSeqCTRC in integer,
52 psUsuAlteracao in varchar2,
53 pnOk in out Integer,
54 psMsgErro out Varchar2);
55 procedure mftp_geraFinancCtrc( pnIdUsuario in number,
56 psUsuAlteracao in varchar2,
57 pnOk in out Integer,
58 psMsgErro out Varchar2);
59 procedure mftp_cancFinancCtrc( pnSeqCtrc in Integer,
60 psUsuAlteracao in varchar2,
61 pbOk in out Integer,
62 psMsgErro out Varchar2);
63 procedure mftp_geraFinancNfps( pnSeqNfps in Integer,
64 psUsuAlteracao in varchar2,
65 pnOk in out Integer,
66 psMsgErro in out Varchar2);
67 procedure mftp_cancFinancNfps( pnSeqNfps in Integer,
68 psUsuAlteracao in varchar2,
69 pbOk in out Integer,
70 psMsgErro out Varchar2);
71/* procedure mftp_geraRateio( pnNroEmpenho IN NUMBER,
72 pnNroDocto IN NUMBER,
73 psSerieDocto IN VARCHAR2,
74 pnSeqPessoa IN NUMBER,
75 pnVersao IN NUMBER,
76 psUf IN VARCHAR2,
77 pnVlrTotal IN NUMERIC,
78 pnVlrBaseIcms IN NUMERIC,
79 pnAliqIcms IN NUMERIC,
80 pnVlrIcms IN NUMERIC,
81 pnNroEmpresa IN NUMBER,
82 psUsuAlteracao IN VARCHAR2,
83 pbOk in out Integer,
84 psMsgErro in out Varchar2 );
85 procedure mftp_cancRateio( pnNroDocto IN NUMBER,
86 psSerieDocto IN VARCHAR2,
87 pnSeqPessoa IN NUMBER,
88 pnNroEmpresa IN NUMBER,
89 pnOk IN OUT INTEGER,
90 psMsgErro IN OUT VARCHAR2); */
91 procedure mftp_geraRateioCtrc( pnSeqCtrc IN NUMBER,
92 pbOk in out Integer,
93 psMsgErro out Varchar2 );
94 procedure mftp_cancRateioCtrc( pnSeqCtrc IN NUMBER,
95 pbOk in out Integer,
96 psMsgErro out Varchar2 );
97 procedure mftp_geraRateioNfps( pnSeqNfps IN NUMBER,
98 pnOk in out Integer,
99 psMsgErro in out Varchar2 );
100 procedure mftp_cancRateioNfps( pnSeqNfps IN NUMBER,
101 pbOk in out Integer,
102 psMsgErro out Varchar2 );
103 procedure mftp_geraRateioEmpenho( pnNroEmpenho IN NUMBER,
104 pnOk in out Integer,
105 psMsgErro in out Varchar2 );
106 procedure mftp_cancRateioEmpenho( pnNroEmpenho IN NUMBER,
107 pbOk in out Integer,
108 psMsgErro out Varchar2);
109 function mftf_retRejFinanc( psCodLink in Varchar2 )
110 return Varchar2;
111 function mftf_StrNotasFiscais( pnNroEmpenho in Integer,
112 pnElementoIni in Integer Default 0,
113 pnElementoFim in Integer Default 0)
114 return varchar2;
115 function mftf_StrManifestosCTRC(pnNroEmpenho in Integer,
116 pnElementoIni in Integer Default 0,
117 pnElementoFim in Integer Default 0)
118 return varchar2;
119 function mftf_DadosImpostos( pnNroEmpresa in integer,
120 pnNroTributacao in integer,
121 psTipTributacao in varchar2,
122 psUfCliente in varchar2,
123 psUfRemetente in varchar2,
124 psDado in varchar2,
125 pnSeqProduto in integer default 0 )
126 return number;
127 function mftf_CSTImpostos(pnNroEmpresa in integer,
128 pnNroTributacao in integer,
129 psTipTributacao in varchar2,
130 psUfCliente in varchar2,
131 psUfRemetente in varchar2,
132 psDado in varchar2,
133 pnSeqProduto in integer default 0)
134 return varchar2;
135 function mftf_BuscaCfop( pnCgo in Integer,
136 pnNroTributacao in Integer,
137 psIndContribIcms in Varchar2,
138 psUf in Varchar2,
139 psUfEmpresa in Varchar2,
140 pnNroRegimeTrib in max_empresa.nroregtributacao%type)
141 return number;
142 procedure mftp_geraNfVinculoRateio( pnSeqAuxNotaFiscalF IN NUMBER,
143 pnSeqAuxNotaFiscalV IN NUMBER);
144 procedure mftp_geraNfRateioFrete( pnSeqAuxNotaFiscal IN NUMBER,
145 pnNumeroNf IN NUMBER,
146 psSerieNf IN VARCHAR2,
147 pnSeqPessoa IN INTEGER,
148 pnVersaoPessoa IN NUMBER,
149 psUf IN VARCHAR2,
150 pnVlrServico IN NUMERIC,
151 pnVlrBaseIcms IN NUMERIC,
152 pnAliqIcms IN NUMERIC,
153 pnVlrIcms IN NUMERIC,
154 pnNroEmpresa IN NUMBER,
155 pdDtaHorEmissao IN DATE,
156 pdDtaSaida IN DATE,
157 pdDtaLancto IN DATE,
158 psUsuLancto IN VARCHAR2,
159 pnCGO IN INTEGER,
160 pnVlrBaseIss IN INTEGER,
161 pnAliqIss IN INTEGER,
162 pnVlrIss IN INTEGER,
163 psSituacaoNfPis IN VARCHAR2,
164 psSituacaoNFCofins IN VARCHAR2,
165 psSituacaoNF IN VARCHAR2,
166 pnVlrIsentosIcms IN NUMBER,
167 pnVlrOutrosIcms IN NUMBER,
168 pnAppOrigem IN INTEGER,
169 psCTeChaveAcesso in VARCHAR2,
170 pnOk in out Integer,
171 psMsgErro in out Varchar2,
172 pnPDProdFrete IN NUMBER,
173 pnLinkERP in mlf_auxnotafiscal.linkerp%type,
174 pnSeqNotaFiscal in number default null,
175 psChaveCTe in varchar2 default null,
176 pnTipoCTe IN MLF_AUXNOTAFISCAL.TIPOCTE%TYPE,
177 psIndConsumidorFinal IN MLF_AUXNOTAFISCAL.INDCONSUMIDORFINAL%TYPE,
178 pnBasCalcIcmsPartilha IN MLF_AUXNFITEM.BASCALCICMSPARTILHA%TYPE,
179 pnPerAliqIntPartilhaIcms IN MLF_AUXNFITEM.PERALIQINTPARTILHAICMS%TYPE,
180 pnPerPartilhaIcms IN MLF_AUXNFITEM.PERPARTILHAICMS%TYPE,
181 pnVlrIcmsCalcOrigem IN MLF_AUXNFITEM.VLRICMSCALCORIGEM%TYPE,
182 pnVlrIcmsCalcDestino IN MLF_AUXNFITEM.VLRICMSCALCDESTINO%TYPE,
183 pnCodMunOrig IN MLF_AUXNOTAFISCAL.CODMUNORIG%TYPE,
184 pnCodMunDest IN MLF_AUXNOTAFISCAL.CODMUNDEST%TYPE );
185 procedure mftp_cancRateioFrete ( pnSeqAuxNotaFiscalV IN NUMBER,
186 pbOk in out Integer,
187 psMsgErro out Varchar2 );
188 PROCEDURE mftp_geraFinanceiro(
189 psIncluiDeleta IN VARCHAR2,
190 pnNroEmpresa IN FI_INTTITULO.NROEMPRESA%TYPE,
191 pnNroNota IN FI_INTTITULO.NROTITULO%TYPE,
192 psSerieNota IN FI_INTTITULO.SERIETITULO%TYPE,
193 pnVlrTitulo IN FI_INTTITULO.VLRORIGINAL%TYPE,
194 psCodEspecie IN FI_INTTITULO.CODESPECIE%TYPE,
195 pnNroCondPagto IN MFT_CTRC.NROCONDICAOPAGTO%TYPE,
196 pnSeqPessoa IN FI_INTTITULO.CODPESSOA%TYPE,
197 pdDtaEmissao IN FI_INTTITULO.DTAEMISSAO%TYPE,
198 pnLinkErp IN MFT_CTRC.LINKERP%TYPE,
199 psUsuAlteracao IN OR_NFVENCIMENTO.USUALTERACAO%TYPE,
200 pnCodOperacao IN FI_INTTITULOOPE.CODOPERACAO%TYPE,
201 pnSeqIntTitulo IN FI_INTTITULO.SEQTITULO%TYPE,
202 pnOK IN OUT INTEGER,
203 psMsgErro IN OUT Varchar2);
204 procedure mftp_ConsCancEmpenho( pnNroEmpenho IN INTEGER,
205 pnConsDependencias IN INTEGER,
206 pnConsNfSm IN INTEGER,
207 pnOk IN OUT INTEGER,
208 psMsg IN OUT VARCHAR2);
209 procedure mftp_ConsCancNFPS( pnSeqNfps IN INTEGER,
210 pnOk IN OUT INTEGER,
211 psMsg IN OUT VARCHAR2 );
212 procedure mftp_ConsCancCTRC( pnSeqCtrc IN INTEGER,
213 pnOk IN OUT INTEGER,
214 psMsg IN OUT VARCHAR2 );
215 procedure mftp_geraNumDoctoEmpenho( pnNroEmpresa IN INTEGER,
216 pnCgo IN INTEGER,
217 pnNroDocto OUT INTEGER,
218 psSerieDOCTO OUT VARCHAR2,
219 pnOk OUT INTEGER,
220 psMsgErro OUT VARCHAR2 );
221 function mftf_verificaNumDoctoEmpenho( pnNroEmpresa IN INTEGER,
222 pnCgo IN INTEGER)
223 return varchar2
224 ;
225 procedure mftp_intNFServico( pnSeqNf in Integer,
226 psUsuAlteracao in varchar2,
227 pnOk in out Integer,
228 psMsgErro out Varchar2);
229 procedure mftp_integraNfFiscal( pnSeqNf in integer);
230 procedure mftp_geraFinancNFServ( pnSeqNfps in Integer,
231 psUsuAlteracao in varchar2,
232 pnOk in out Integer,
233 psMsgErro out Varchar2);
234 procedure mftp_cancFinancNfServico( pnSeqNfps in Integer,
235 psUsuAlteracao in varchar2,
236 pbOk in out Integer,
237 psMsgErro out Varchar2);
238 procedure mftp_geraNumNFServico( pnSeqNf in Integer );
239 procedure mftp_ConsCancNFServico( pnSeqNf IN INTEGER,
240 pnOk IN OUT INTEGER,
241 psMsg IN OUT VARCHAR2 );
242 procedure mftp_cancelaNFServico( pnSeqNf in Integer,
243 psUsuCancelou in Varchar2,
244 pnOk in out Integer,
245 psMsgErro in out Varchar2);
246 procedure mftp_cancFiscalNFServico( pnSeqNf in integer );
247 function mftf_BuscaQtdVolumeLocus(
248 pnNroCarga in MFT_EMPENHO_CARGADF.Nrocarga%type,
249 pnSeqPessoa in GE_PESSOA.Seqpessoa%type,
250 pnNroEmpresa in MFT_EMPENHO_CARGADF.NROEMPRESA%TYPE,
251 psDividePorNota in varchar2 )
252 return number;
253 procedure mftp_ProcImportTxt( pnIdUser in integer );
254 procedure mftp_geraManifesto(pnNroEmpresa in ge_empresa.nroempresa%type,
255 pnNroEmpTransbordo in ge_empresa.nroempresa%type,
256 pnIdUser in integer,
257 psUsuInclusao in Varchar2,
258 pnOk out number,
259 psMsgErro out Varchar2);
260 procedure mftp_geraManifestoMan( pnSeqManifesto in Integer,
261 psUsuAlteracao in varchar2,
262 pnOk in out Integer,
263 psMsgErro in out Varchar2);
264 procedure mftp_cancelaManifesto(pnSeqManifesto in mft_manifesto.seqmanifesto%type,
265 psUsuCancelou in ge_usuario.codusuario%type,
266 pnOk out number,
267 psMsgErro out Varchar2);
268 procedure mftp_ImpManifestoTransbordo(pnNroEmpresa in max_empresa.nroempresa%type,
269 pnSeqManifesto in mft_manifesto.seqmanifesto%type,
270 pnSeqManifestoImp in mft_manifesto.seqmanifesto%type,
271 psUsuAlteracao in varchar2);
272 procedure mftp_LancaComissao(
273 pnNroCarga in MFTV_EMPENHO_DOC.NROCARGA%type,
274 pnSeqGeracao in MFT_CCFRETE.SEQGERACAO%type,
275 psIndTipoDocto in MFTV_EMPENHO_DOC.INDTIPODOC%type,
276 psUsuario in MFT_CCFRETE.USULANCTO%type);
277 procedure mftp_EstornoComissao(
278 pnNroCarga in MFT_CCFRETE.NROCARGA%type,
279 pnSeqGeracao in MFT_CCFRETE.SEQGERACAO%type,
280 psUsuario in MFT_CCFRETE.USULANCTO%type);
281 procedure mftp_FechtoComissao(
282 psUsuario in MFT_CCFRETE.USULANCTO%type);
283 procedure mftp_BuscaFaixaValorFrete( psTipoFaixaValor in varchar2,
284 pnSeqRemetente in integer,
285 pnSeqDestinatario in integer,
286 psIndAssociaFaixaValor in varchar2,
287 pnPesoTotal in number,
288 pnErro out integer,
289 psMsgErro out varchar2,
290 pnValorFrete out number,
291 pnTempoPrev out number );
292 procedure mftp_geraCtrcCompImp( pnSeqCtrcOrigem in integer,
293 pnCgo in integer,
294 pnCfop in integer,
295 psCstIcms in varchar2,
296 pnVlrBaseIcms in number,
297 pnAliqIcms in number,
298 pnVlrIcms in number,
299 pnVlrIsentoIcms in number,
300 pnVlrOutrosIcms in number,
301 psObservacao in varchar2,
302 psUsuario in varchar2,
303 pnOk out integer,
304 psMsgErro out varchar2,
305 pnSeqCtrcComp out integer
306 );
307 procedure mftp_intNfSMDef( pnSeqAuxNotaFiscal in integer);
308 procedure mftp_cancelaCtrcAgrup( pnLinkErp in Integer,
309 psUsuCancelou in Varchar2,
310 pnOk in out Integer,
311 psMsgErro in out Varchar2);
312 PROCEDURE MFTP_COPIAMANIFESTO(PSCHAVEABORT IN MFT_MANIFESTO.MDFECHAVEABORT%TYPE,
313 PNSEQMANIFESTO IN MFT_MANIFESTO.SEQMANIFESTO%TYPE,
314 PNNROEMPRESA IN MFT_MANIFESTO.NROEMPRESA%TYPE);
315 function mftf_ObsTributacao( pnNroEmpresa in integer,
316 pnNroTributacao in integer,
317 psTipTributacao in varchar2,
318 psUfCliente in varchar2,
319 psUfRemetente in varchar2 )
320 return varchar2;
321end PKG_MFTTRANSPORTADORA;
322
323/*HEADER END*/
324
325
326/*BODY*/
327
328create or replace package body PKG_MFTTRANSPORTADORA is
329 /* package para a geração dos Empenhos / CTRC's - Projeto Transportadora */
330 /* Gonçalves - 09/2009 */
331 procedure mftp_geraEmpenho(pnNroEmpresa in Integer,
332 pnIdUsuario in Integer,
333 psUsuario in Varchar2,
334 pnUsaTabFrete in Integer,
335 pnUsaCgo in Integer,
336 pnGeraCTRCUnico in Integer,
337 pnOk in out number,
338 psMsgErro in out Varchar2) is
339 /* Procedure responsável pela geração dos Empenhos/CTRC's do sistema Transportadora
340 Nesta procedure serão listadas todas as notas do sm (MFL_DOCTOFISCAL) que estiverem
341 dentro das cargas selecionadas. A partir do município das empresas (emissora/recebedora),
342 serão gerados empenhos(entregas) ou conhecimentos de transporte. */
343 vnQtdReg NUMBER(3);
344 vnQtdRegNf NUMBER(3);
345 vnQtdRegObs NUMBER(3);
346 vnQtdRegObsDesc NUMBER(3);
347 vnRegGerados NUMBER(4);
348 vnNroEmpenho NUMBER(8);
349 vnNroEmpenhoDf NUMBER(9);
350 vsSerieDocto MFT_EMPENHO.SERIEDOCTO%TYPE;
351 vnNroDocto MFT_EMPENHO.NRODOCTO%TYPE;
352 vsPDBuscaQtdVolumeLocus MAX_PARAMETRO.VALOR%TYPE;
353 vnPDSeqDestinatarioDiversos MFT_DESTINATARIO.SEQDESTINATARIO%TYPE;
354 vsPDObsPadraoCTRCMan MAX_PARAMETRO.VALOR%TYPE;
355 vsPDAgrupaCTRCRemData MAX_PARAMETRO.VALOR%TYPE;
356 vnValorFreteFaixa MFT_FAIXAVALOR.VALOR_FRETE%TYPE;
357 vnTempoPrevFaixa MFT_FAIXAVALOR.TEMPO_PREV%TYPE;
358 vnValorFretePeso MFT_FAIXAVALOR.VALOR_FRETE%TYPE;
359 vnValorFreteValor MFT_FAIXAVALOR.VALOR_FRETE%TYPE;
360 vsObsPadraoCTe varchar2(250);
361 vsPDVlrTotalExibir varchar2(1);
362 vsTipoCalcICMS VARCHAR2(1);
363 vnQtdRegCTRCUnico number(1);
364 vnNroViagem MFT_EMPENHO.NROVIAGEM%TYPE;
365 vnFreteValorEmp mft_empenho.fretevalor%type;
366 vnFreteValorCTRC mft_empenho.fretevalor%type;
367 vnvlrfixofreteempenho number;
368 vnvlrfixofretectrc number;
369 vnQtdNF integer;
370 vsIndConsumidorFinalCGO max_codgeraloper.indconsumidorfinal%type;
371 vnPercAliqDest map_tributacaouf.peraliquotadestino%type;
372 vsTipCalcIcmsPart map_tributacaouf.tipocalcicmspartilha%type;
373 vnPerAliqIntPartilhaIcms map_tributacaouf.peraliquota%type;
374 vnBasCalcIcmsPartilha mfl_dfitem.vlritem%type;
375 vnBasCalcIcmsPartInterEst mft_empenho.bascalcicmspartinterest%type;
376 vnPerPartilhaIcms map_partilhaicms.percpartilha%type;
377 vnVlrIcmsCalcOrigem mfl_dfitem.vlricmscalcorigem%type;
378 vnVlrIcmsCalcDestino mfl_dfitem.vlricmscalcdestino%type;
379 vnVlrBaseFecpPartilha mfl_dfitem.bascalcicmspartinterest%type;
380 vnPerAliquotaFecpPartilha mft_empenho.peraliquotafecppartilha%type;
381 vnVlrFecpPartilha mft_empenho.vlrfecppartilha%type;
382 vnQtdCargaCTRC integer;
383 vnVlrFreteFixo number;
384 vnCountCarga integer;
385 vsIndUtilPartilhaIcms max_paramgeral.indutilpartilhaicms%type;
386 vnVlrIcmsOp mft_empenho.vlricms%type;
387 begin
388 --Busca o parametro dinamico -- Quantidade máxima de notas que poderão ser emitidas no campo
389 -- NOTAS FISCAIS de um único CTRC
390 SP_BUSCAPARAMDINAMICO('MAXTRANSP',pnNroEmpresa,'QTDNFCTRCNF','N',2,
391 'DEFINE A QUANTIDADE MÁXIMA DE NOTAS FISCAIS QUE PODERÃO SER EMITIDAS
392 NO CAMPO NOTAS FISCAIS DE UM MESMO CTRC',
393 vnQtdRegNf);
394 --Busca o parametro dinamico -- Quantidade máxima de notas que poderão ser emitidas no campo
395 -- OBSERVACOES de um único CTRC - Quando NÃO existir Desconto
396 SP_BUSCAPARAMDINAMICO('MAXTRANSP',pnNroEmpresa,'QTDNFCTRCOBS','N',10,
397 'DEFINE A QUANTIDADE MÁXIMA DE NOTAS FISCAIS QUE PODERÃO SER EMITIDAS
398 NO CAMPO OBSERVAÇÕES DE UM MESMO CTRC - QUANDO NÃO EXISTIR DESCONTO',
399 vnQtdRegObs);
400 --Busca o parametro dinamico -- Quantidade máxima de notas que poderão ser emitidas no campo
401 -- OBSERVACOES de um único CTRC - Quando existir Desconto
402 SP_BUSCAPARAMDINAMICO('MAXTRANSP',pnNroEmpresa,'QTDNFCTRCOBSDESC','N',8,
403 'DEFINE A QUANTIDADE MÁXIMA DE NOTAS FISCAIS QUE PODERÃO SER EMITIDAS
404 NO CAMPO OBSERVAÇÕES DE UM MESMO CTRC - QUANDO EXISTIR DESCONTO',
405 vnQtdRegObsDesc);
406 --Busca pd q indica se a quantidade de volume será do locus
407 SP_BUSCAPARAMDINAMICO('MAXTRANSP',pnNroEmpresa,'BUSCA_QTDVOLUME_LOCUS','S','N',
408 'AO GERAR O CTRC, BUSCAR A QUANTIDADE DE VOLUMES DO CLIENTE NA CARGA DO LOCUS (S-SIM, N-NÃO, VALOR PADRÃO:N)? MARCADO COMO NÃO, A GERAÇÃO BUSCARÁ A QUANTIDADE DE VOLUMES DA NOTA FISCAL.',
409 vsPDBuscaQtdVolumeLocus);
410 --Busca pd q indica o destinatário utilizado para gerar CTRC a partir de manifestos
411 SP_BUSCAPARAMDINAMICO('MAXTRANSP',pnNroEmpresa,'COD_DESTINATARIO_DIVERSOS','N',0,
412 'INFORME O CÓDIGO DO DESTINATÁRIO QUE SERÁ UTILIZADO PARA GERAÇÃO DE CTRCS A PARTIR DE MANIFESTOS DE CARGAS.',
413 vnPDSeqDestinatarioDiversos);
414 --Busca pd com observações padrão
415 SP_BUSCAPARAMDINAMICO('MAXTRANSP',pnNroEmpresa,'OBS_PADRAO_CTRC_MAN','S','X',
416 'INFORME A OBSERVAÇÃO PADRÃO PARA GERAR NO CTRC COM BASE EM MANIFESTOS DE CARGAS (MÁX. DE 250 CARACTERES). VALOR PADRÃO: X (SEM OBSERVAÇÃO).',
417 vsPDObsPadraoCTRCMan);
418 --Busca pd com observações padrão
419 SP_BUSCAPARAMDINAMICO('MAXTRANSP',0,'VLR_TOTAL_EXIBIR','S','M',
420 'VALOR TOTAL A EXIBIR V-VALOR TOTAL M-VALOR MERCADORIA (PADRÃO)',
421 vsPDVlrTotalExibir);
422 If vsPDObsPadraoCTRCMan = 'X' then
423 vsPDObsPadraoCTRCMan := '';
424 end if;
425 --Busca pd com observações padrão
426 SP_BUSCAPARAMDINAMICO('MAXTRANSP',pnNroEmpresa,'AGRUPA_CTRC','S','N',
427 'AO GERAR AUTOMATICAMENTE, AGRUPAR OS CTRCs POR:' || chr(13) || chr(10) ||
428 'R-REMETENTE' || chr(13) || chr(10) ||
429 'RD-REMETENTE/DATA' || chr(13) || chr(10) ||
430 'RC-REMETENTE/CARGA' || chr(13) || chr(10) ||
431 'RDC-REMETENTE/DATA/CARGA' || chr(13) || chr(10) ||
432 'N-NÃO AGRUPA(PADRÃO)' || chr(13) || chr(10) ||
433 'OBS: VÁLIDO APENAS QDO O REMETENTE FOR O TOMADOR DO SERVIÇO(FRETE PAGO)',
434 vsPDAgrupaCTRCRemData);
435 select nvl(MAX(a.indutilpartilhaicms),'N')
436 into vsIndUtilPartilhaIcms
437 from max_paramgeral a;
438 -- Busca destinatário configurado para CTRCs agrupados
439 If vsPDAgrupaCTRCRemData != 'N' or pnGeraCTRCUnico = 1 Then
440 begin
441 Select a.seqpessoa into vnPDSeqDestinatarioDiversos from mftv_destinatario a where a.seqpessoa = vnPDSeqDestinatarioDiversos;
442 exception
443 when no_data_found then
444 pnOk := 0;
445 psMsgErro := 'O destinatário diversos configurado para ser utilizado na geração de CTRC''s agrupados ou a partir de Manifestos de Carga ou quando gerar apenas um CTRC não é válido.
446Verifique o parâmetro dinâmico COD_DESTINATARIO_DIVERSOS.';
447 return;
448 end;
449 End If;
450 vnRegGerados := 0;
451 vnNroEmpenho := 0;
452 vnQtdRegCTRCUnico := 0;
453 pnOk := 1;
454 psMsgErro := NULL;
455 vnQtdReg := vnQtdRegNf + vnQtdRegObs;
456 -- Carrega TMP devido a baixa performance da view Mftv_Manifesto_Df
457 for t in (select * from Mftx_Dadosempenho)
458 loop
459 Insert Into Mftx_Manifesto_Df
460 (Nroempresadf, Nroecfdf, Seqnf, Numerodf, Seriedf, Nrocarga, Nroempresa, Seqmotorista,
461 Seqremetente, Placaveiculo, Seqtransp, Idusuario, Nrotabfrete_Nfps, Nrotabfrete_Ctrc, Cgo_Ctrc,
462 Cgo_Nfps, Seqpessoadestinatario, Cgo, Modelodf, Importada, Seqmanifesto, Seqmanifestodf,
463 Dtalancto, Tipooperacao, Origem, Remnrocpfcnpj, Remdigcpfcnpj, Seqcidade, Tipopagtofrete,
464 Nfechaveacesso, SEQEMBARCACAO, INDMULTTRANSP)
465 Select Df.Nroempresadf, Df.Nroecfdf, Df.Seqnf, Df.Numerodf, Df.Seriedf, Df.Nrocarga, t.Nroempresa,
466 t.Seqmotorista, t.Seqremetente, t.Placaveiculo, t.Seqtransp, t.Idusuario,
467 t.Nrotabfrete_Nfps, t.Nrotabfrete_Ctrc, t.Cgo_Ctrc, t.Cgo_Nfps,
468 Df.Seqpessoadestinatario, Null Cgo, Df.Modelodf, 'M' Importada,
469 --IMPORTADA EM MANIFESTO
470 Df.Seqmanifesto, Df.Seqmanifestodf, Df.Dtalancamento Dtalancto,
471 Decode(Emp.Uf, Df.Ufdestino, 'E', 'I') Tipooperacao, Df.Origem, Null Remnrocpfcnpj,
472 Null Remdigcpfcnpj, Null Seqcidade, Null Tipopagtofrete, df.Nfechaveacesso,
473 t.SEQEMBARCACAO, t.INDMULTTRANSP
474 From Mftv_Manifesto_Df Df, Max_Empresa Emp
475 Where Df.Seqmanifesto = t.Seqmanifesto
476 And Emp.Seqpessoaemp = t.Seqremetente
477 And Emp.Status = 'A';
478 end loop;
479 for vt in(
480 select distinct a.nrocarga
481 from mftx_dadosempenho a)
482 loop
483 insert into mftx_totalcarga
484 (nrocarga,
485 vlrcargadoctoempenho,
486 vlrcargadoctoctrc,
487 qtdcarganotas)
488 select vt.nrocarga,
489 max(decode(b.tipodocto, 'E', b.vlrtotal, 0)),
490 max(decode(b.tipodocto, 'C', b.vlrtotal, 0)),
491 sum(b.qtdnotas)
492 from mftv_doctofiscaltotal b
493 where b.nrocarga = vt.nrocarga
494 and b.nroempresapd1 = pnNroEmpresa
495 and b.nroempresapd2 = pnNroEmpresa;
496 select count(1)
497 into vnCountCarga
498 from mftx_totalcarga x
499 where x.nrocarga = vt.nrocarga;
500 if vnCountCarga = 0 then
501 insert into mftx_totalcarga(nrocarga)
502 values(vt.nrocarga);
503 end if;
504 end loop;
505 update mftx_totalcarga x
506 set (x.vlrgeraldoctoempenho,
507 x.vlrgeraldoctoctrc) = (select sum(w.vlrcargadoctoempenho),
508 sum(w.vlrcargadoctoctrc)
509 from mftx_totalcarga w);
510 for vtbl in (SELECT
511 TIPODOCTO,
512 NROEMPRESA,
513 IDUSUARIO,
514 EMPDOCTO,
515 SEQREMETENTE,
516 LEAD(SEQREMETENTE) OVER(ORDER BY SEQREMETENTE,SEQDESTINATARIO, DTALANCTO, TIPOOPERACAO, NUMERODF) PROXSEQREMETENTE,
517 NVL(LAG(SEQREMETENTE) OVER(ORDER BY SEQREMETENTE,SEQDESTINATARIO, DTALANCTO, TIPOOPERACAO, NUMERODF ),SEQREMETENTE) ANTSEQREMETENTE,
518 SEQDESTINATARIO,
519 LEAD(SEQDESTINATARIO) OVER(ORDER BY SEQREMETENTE,SEQDESTINATARIO, DTALANCTO, TIPOOPERACAO, NUMERODF) PROXSEQDESTINATARIO,
520 NVL(LAG(SEQDESTINATARIO) OVER(ORDER BY SEQREMETENTE,SEQDESTINATARIO, DTALANCTO, TIPOOPERACAO, NUMERODF), SEQDESTINATARIO) ANTSEQDESTINATARIO,
521 DTALANCTO,
522 LEAD(DTALANCTO) OVER(ORDER BY SEQREMETENTE,SEQDESTINATARIO, DTALANCTO, TIPOOPERACAO, NUMERODF) PROXDTALANCTO,
523 NVL(LAG(DTALANCTO) OVER(ORDER BY SEQREMETENTE,SEQDESTINATARIO, DTALANCTO, TIPOOPERACAO, NUMERODF), DTALANCTO) ANTDTALANCTO,
524 TIPOOPERACAO,
525 LEAD(TIPOOPERACAO) OVER(ORDER BY SEQREMETENTE,SEQDESTINATARIO, DTALANCTO, TIPOOPERACAO, NUMERODF) PROXTIPOOPERACAO,
526 NVL(LAG(TIPOOPERACAO) OVER(ORDER BY SEQREMETENTE,SEQDESTINATARIO, DTALANCTO, TIPOOPERACAO, NUMERODF), TIPOOPERACAO) ANTTIPOOPERACAO,
527 NROTABFRETE,
528 CGO,
529 VERSAOREM,
530 VERSAODEST,
531 TIPOPAGTOFRETE,
532 DECODE(SEQEMBARCACAO, NULL, SEQMOTORISTA, NULL) SEQMOTORISTA,
533 DECODE(SEQEMBARCACAO, NULL, MARCAVEICULO, NULL) MARCAVEICULO,
534 DECODE(SEQEMBARCACAO, NULL, PLACAVEICULO, NULL) PLACAVEICULO,
535 DECODE(SEQEMBARCACAO, NULL, CIDADE, NULL) CIDADE,
536 DECODE(SEQEMBARCACAO, NULL, UFPLACAVEICULO, NULL) UFPLACAVEICULO,
537 NROSERIEECF,
538 SEQNF,
539 NUMERODF,
540 SERIEDF,
541 NROCARGA,
542 LEAD(NROCARGA) OVER(ORDER BY SEQREMETENTE,SEQDESTINATARIO, NROCARGA, TIPOOPERACAO, NUMERODF) PROXNROCARGA,
543 NVL(LAG(NROCARGA) OVER(ORDER BY SEQREMETENTE,SEQDESTINATARIO, NROCARGA, TIPOOPERACAO, NUMERODF), NROCARGA) ANTNROCARGA,
544 MODELODF,
545 TIPOVLRFRETE,
546 VLRPEDAGIO,
547 VLRTAXADIVERSA,
548 VLRTAXACOLETA,
549 VLRTAXAENTREGA,
550 VLRPESOBRUTO,
551 VLRPESOLIQUIDO,
552 VLRMETROCUBICO,
553 VLRFIXO,
554 PERCTOTALNF,
555 VLRGRIS,
556 INDASSOCIAFAIXAVALOR,
557 INDTIPOPESOFAIXAVALOR,
558 VALORESFRETE,
559 ICMSPERCTRIBUT,
560 ICMSPERCALIQ,
561 ALIQPIS,
562 ALIQCOFINS,
563 VLRISENTOICMS,
564 VLROUTROSICMS,
565 CSTICMS,
566 CSTPIS,
567 CSTCOFINS,
568 PERCISS,
569 PERCFRETEROTAPRACA,
570 VLRFRETEROTAPRACA,
571 SITUACAO,
572 NATUREZA,
573 ESPECIE,
574 CALCULADOATE,
575 STATUS,
576 CODSITDOC,
577 REDESPACHO,
578 IMPORTADA,
579 SEQMANIFESTO,
580 SEQMANIFESTODF,
581 ORIGEM,
582 REMNROCPFCNPJ,
583 REMDIGCPFCNPJ,
584 INDGERAAUTOAGRUP,
585 NFECHAVEACESSO,
586 OBSTRIBUTACAO,
587 SEQEMBARCACAO,
588 INDMULTTRANSP,
589 PERCALIQAFRMM,
590 VLRTOTALCARGACTRC,
591 VLRTOTALCARGAEMPENHO,
592 INDRATEIAFRETE,
593 QTDNOTAS,
594 UFDESTINO,
595 UFREMETENTE,
596 NROTRIBUTACAO,
597 TIPTRIBUTACAO,
598 INDCONTRIBICMS,
599 SEQEXPEDIDOR,
600 SEQRECEBEDOR,
601 TIPOPAGTOFIN,
602 INDRATEIAFRETEPORCTRC,
603 SEQSUBCONTRATADO,
604 CTECHAVEACESSOTOMADOR,
605 PRODPREDOMINANTE,
606 CARACTERISCACARGA,
607 DTAHORAVIAGEM,
608 SEQVALEPEDAGIO
609 from (SELECT
610 -- Se for da mesma cidade, gera E (Empenho), se não, gera C (CTRC)
611 DECODE(NVL(DOCTO.SEQCIDADE, NVL(D.SEQCIDADEENTREGA, D.SEQCIDADE)), R.SEQCIDADE, 'E', 'C') TIPODOCTO,
612 DOCTO.NROEMPRESA,
613 DOCTO.EMPDOCTO,
614 -- Se for da mesma cidade, pega NROTABFRETE_NFOP, se não, NROTABFRETE_CTRC
615 -- Se Não houver dados indicados na tabela do destinatário, pega os dados da tela
616 -- RC 70213 - jota 06/09/11 - alterados os decodes para tratamento da coluna UTILSEMPRETABFRETEDEST da MFT_REMETENTE
617 CASE WHEN NVL(D.SEQCIDADEENTREGA, D.SEQCIDADE) = R.SEQCIDADE THEN
618 CASE WHEN pnUsaTabFrete = 1 THEN
619 NVL(decode( nvl( R.UTILSEMPRETABFRETEDEST, 'N' ), 'S', D.NROTABFRETE_NFPS, decode( D.TIPOPAGTOFRETE, 'A', D.NROTABFRETE_NFPS, R.NROTABFRETE_NFPS ) ), DOCTO.NROTABFRETE_NFPS )
620 ELSE NVL(DOCTO.NROTABFRETE_NFPS, decode( nvl( R.UTILSEMPRETABFRETEDEST, 'N' ), 'S', D.NROTABFRETE_NFPS, decode( D.TIPOPAGTOFRETE, 'A', D.NROTABFRETE_NFPS, R.NROTABFRETE_NFPS ) ) )
621 END
622 ELSE
623 CASE WHEN pnUsaTabFrete = 1 THEN
624 NVL(decode( nvl( R.UTILSEMPRETABFRETEDEST, 'N' ), 'S', D.NROTABFRETE_NFPS, decode( D.TIPOPAGTOFRETE, 'A', D.NROTABFRETE_NFPS, R.NROTABFRETE_NFPS ) ), DOCTO.NROTABFRETE_CTRC )
625 ELSE NVL(DOCTO.NROTABFRETE_CTRC, decode( nvl( R.UTILSEMPRETABFRETEDEST, 'N' ), 'S', D.NROTABFRETE_NFPS, decode( D.TIPOPAGTOFRETE, 'A', D.NROTABFRETE_NFPS, R.NROTABFRETE_NFPS ) ) )
626 END
627 END NROTABFRETE,
628 -- Se for da mesma cidade, pega CGO_NFPS, se não, CGO_CTRC
629 -- Se Não houver dados indicados na tabela do destinatário, pega os dados da tela
630 CASE WHEN NVL(D.SEQCIDADEENTREGA, D.SEQCIDADE) = R.SEQCIDADE THEN
631 CASE WHEN pnUsaCgo = 1 THEN
632 NVL(R.CGO_NFPS,DOCTO.CGO_NFPS)
633 ELSE NVL(DOCTO.CGO_NFPS, R.CGO_NFPS) END
634 ELSE
635 CASE WHEN pnUsaCgo = 1 THEN
636 NVL(R.CGO_CTRC,DOCTO.CGO_CTRC)
637 ELSE NVL(DOCTO.CGO_CTRC, R.CGO_CTRC) END
638 END CGO,
639 DOCTO.SEQREMETENTE,
640 R.VERSAO VERSAOREM,
641 DECODE (pnGeraCTRCUnico, 1, vnPDSeqDestinatarioDiversos,
642 DECODE( vsPDAgrupaCTRCRemData || NVL( DOCTO.TIPOPAGTOFRETE, D2.TIPOPAGTOFRETE ) || DECODE(NVL(D2.SEQCIDADEENTREGA, D2.SEQCIDADE), R.SEQCIDADE, 'E', 'C'), 'RDPC', vnPDSeqDestinatarioDiversos, 'RPC', vnPDSeqDestinatarioDiversos, 'RDCPC', vnPDSeqDestinatarioDiversos, 'RCPC',vnPDSeqDestinatarioDiversos, DOCTO.SEQPESSOA)) SEQDESTINATARIO,
643 D.VERSAO VERSAODEST,
644 NVL( DOCTO.TIPOPAGTOFRETE, D2.TIPOPAGTOFRETE ) TIPOPAGTOFRETE,
645 DOCTO.SEQMOTORISTA,
646 V.MARCAVEICULO,
647 V.PLACAVEICULO,
648 C.CIDADE,
649 V.UFPLACAVEICULO,
650 DOCTO.NROSERIEECF,
651 DOCTO.SEQNF,
652 DOCTO.NUMERODF,
653 DOCTO.SERIEDF,
654 DOCTO.NROCARGA,
655 DOCTO.MODELODF,
656 TAB.TIPOVLRFRETE,
657 TAB.VLRPEDAGIO,
658 TAB.VLRTAXADIVERSA,
659 TAB.VLRTAXACOLETA,
660 TAB.VLRTAXAENTREGA,
661 TAB.VLRPESOBRUTO,
662 TAB.VLRPESOLIQUIDO,
663 TAB.VLRMETROCUBICO,
664 TAB.VLRFIXO,
665 TAB.PERCTOTALNF,
666 TAB.VLRGRIS,
667 TAB.INDASSOCIAFAIXAVALOR,
668 TAB.INDTIPOPESOFAIXAVALOR,
669 DECODE(NVL(TAB.INDSOMAPEDAGIOICMS,'N'),'S',NVL(TAB.VLRPEDAGIO, 0),0) + NVL(TAB.VLRTAXADIVERSA, 0) +
670 NVL(TAB.VLRTAXACOLETA, 0) + NVL(TAB.VLRTAXAENTREGA, 0) +
671 NVL(TAB.VLRGRIS, 0) VALORESFRETE,
672 D.UF UFDESTINO,
673 R.UF UFREMETENTE,
674 TAB.NROTRIBUTACAO,
675 DECODE(D.INDCONTRIBICMS, 'S', 'SC', 'SN') TIPTRIBUTACAO,
676 D.INDCONTRIBICMS,
677 PKG_MFTTRANSPORTADORA.mftf_DadosImpostos(DOCTO.NROEMPRESA,
678 TAB.NROTRIBUTACAO,
679 DECODE(D.INDCONTRIBICMS, 'S', 'SC', 'SN'),
680 D.UF,
681 R.UF,
682 'ICMSPERCBASE') ICMSPERCTRIBUT,
683 PKG_MFTTRANSPORTADORA.mftf_DadosImpostos(DOCTO.NROEMPRESA,
684 TAB.NROTRIBUTACAO,
685 DECODE(D.INDCONTRIBICMS, 'S', 'SC', 'SN'),
686 D.UF,
687 R.UF,
688 'ICMSALIQ') ICMSPERCALIQ,
689 PKG_MFTTRANSPORTADORA.mftf_DadosImpostos(DOCTO.NROEMPRESA,
690 TAB.NROTRIBUTACAO,
691 DECODE(D.INDCONTRIBICMS, 'S', 'SC', 'SN'),
692 D.UF,
693 R.UF,
694 'PISALIQ') ALIQPIS,
695 PKG_MFTTRANSPORTADORA.mftf_DadosImpostos(DOCTO.NROEMPRESA,
696 TAB.NROTRIBUTACAO,
697 DECODE(D.INDCONTRIBICMS, 'S', 'SC', 'SN'),
698 D.UF,
699 R.UF,
700 'COFINSALIQ') ALIQCOFINS,
701 PKG_MFTTRANSPORTADORA.mftf_DadosImpostos(DOCTO.NROEMPRESA,
702 TAB.NROTRIBUTACAO,
703 DECODE(D.INDCONTRIBICMS, 'S', 'SC', 'SN'),
704 D.UF,
705 R.UF,
706 'ICMSISENTO') VLRISENTOICMS,
707 PKG_MFTTRANSPORTADORA.mftf_DadosImpostos(DOCTO.NROEMPRESA,
708 TAB.NROTRIBUTACAO,
709 DECODE(D.INDCONTRIBICMS, 'S', 'SC', 'SN'),
710 D.UF,
711 R.UF,
712 'ICMSOUTROS') VLROUTROSICMS,
713 PKG_MFTTRANSPORTADORA.mftf_CSTImpostos(DOCTO.NROEMPRESA,
714 TAB.NROTRIBUTACAO,
715 DECODE(D.INDCONTRIBICMS, 'S', 'SC', 'SN'),
716 D.UF,
717 R.UF,
718 'ICMS') CSTICMS,
719 PKG_MFTTRANSPORTADORA.mftf_CSTImpostos(DOCTO.NROEMPRESA,
720 TAB.NROTRIBUTACAO,
721 DECODE(D.INDCONTRIBICMS, 'S', 'SC', 'SN'),
722 D.UF,
723 R.UF,
724 'PIS') CSTPIS,
725 PKG_MFTTRANSPORTADORA.mftf_CSTImpostos(DOCTO.NROEMPRESA,
726 TAB.NROTRIBUTACAO,
727 DECODE(D.INDCONTRIBICMS, 'S', 'SC', 'SN'),
728 D.UF,
729 R.UF,
730 'COFINS') CSTCOFINS,
731 ME.PERCISS,
732 D.PERCFRETE PERCFRETEROTAPRACA,
733 D.VALORFRETE VLRFRETEROTAPRACA,
734 'X' SITUACAO,
735 -- campos fixos ou não utilizados, mas que precisam ser impressos no ctrc ou empenho
736 'DIVERSOS' NATUREZA,
737 'VOLUMES' ESPECIE,
738 '**********' CALCULADOATE,
739 'A' STATUS,
740 '00' CODSITDOC, -- '00' - NORMAL. QUANDO FOR CANCELADO, DEVERÁ SER '02'.
741 NULL REDESPACHO,
742 DOCTO.IMPORTADA,
743 DOCTO.TIPOOPERACAO,
744 DOCTO.DTALANCTO,
745 DOCTO.SEQMANIFESTO,
746 DOCTO.SEQMANIFESTODF,
747 DOCTO.ORIGEM,
748 DOCTO.IDUSUARIO,
749 DOCTO.REMNROCPFCNPJ,
750 DOCTO.REMDIGCPFCNPJ,
751 DECODE(DOCTO.IMPORTADA, 'A', R.INDGERAAUTOAGRUP, 'A') INDGERAAUTOAGRUP,/* Esse parâmetro só considerado na importação automática via arquivo texto*/
752 DOCTO.NFECHAVEACESSO,
753 PKG_MFTTRANSPORTADORA.mftf_ObsTributacao( DOCTO.NROEMPRESA,
754 TAB.NROTRIBUTACAO,
755 DECODE(D.INDCONTRIBICMS, 'S', 'SC', 'SN'),
756 D.UF,
757 R.UF
758 ) OBSTRIBUTACAO,
759 DOCTO.SEQEMBARCACAO,
760 DOCTO.INDMULTTRANSP,
761 TAB.PERCALIQAFRMM,
762 DOCTO.VLRTOTALCARGACTRC,
763 DOCTO.VLRTOTALCARGAEMPENHO,
764 TAB.INDRATEIAFRETE,
765 DOCTO.QTDNOTAS,
766 DOCTO.SEQEXPEDIDOR,
767 DOCTO.SEQRECEBEDOR,
768 DOCTO.TIPOPAGTOFIN,
769 NVL(TAB.INDRATEIAFRETEPORCTRC,'N') INDRATEIAFRETEPORCTRC,
770 DOCTO.SEQSUBCONTRATADO,
771 DOCTO.CTECHAVEACESSOTOMADOR,
772 DOCTO.PRODPREDOMINANTE,
773 DOCTO.CARACTERISCACARGA,
774 DOCTO.DTAHORAVIAGEM,
775 DOCTO.SEQVALEPEDAGIO
776 ------------------------------
777 FROM (SELECT M.NROEMPRESA EMPDOCTO,
778 M.NROSERIEECF,
779 M.SEQNF,
780 M.NUMERODF,
781 M.SERIEDF,
782 M.NROCARGA,
783 DE.NROEMPRESA,
784 DE.SEQMOTORISTA,
785 DE.SEQREMETENTE,
786 DE.PLACAVEICULO,
787 DE.SEQTRANSP,
788 DE.IDUSUARIO,
789 DE.NROTABFRETE_NFPS,
790 DE.NROTABFRETE_CTRC,
791 DE.CGO_CTRC,
792 DE.CGO_NFPS,
793 M.SEQPESSOA,
794 M.CODGERALOPER CGO,
795 M.MODELODF,
796 'N' IMPORTADA,--NÃO IMPORTADA
797 NULL SEQMANIFESTO,
798 NULL SEQMANIFESTODF,
799 TRUNC(M.DTAHOREMISSAO) DTALANCTO,
800 NULL TIPOOPERACAO,
801 NULL ORIGEM,
802 NULL REMNROCPFCNPJ,
803 NULL REMDIGCPFCNPJ,
804 NULL SEQCIDADE,
805 NULL TIPOPAGTOFRETE,
806 M.NFECHAVEACESSO,
807 DE.SEQEMBARCACAO,
808 DE.INDMULTTRANSP,
809 NVL(TC.VLRGERALDOCTOCTRC, 0) VLRTOTALCARGACTRC,
810 NVL(TC.VLRCARGADOCTOEMPENHO, 0) VLRTOTALCARGAEMPENHO,
811 NVL(TC.QTDCARGANOTAS, 0) QTDNOTAS,
812 DE.SEQEXPEDIDOR,
813 DE.SEQRECEBEDOR,
814 DE.TIPOPAGTOFIN,
815 DE.SEQSUBCONTRATADO,
816 DE.CTECHAVEACESSOTOMADOR,
817 DE.PRODPREDOMINANTE,
818 DE.CARACTERISCACARGA,
819 DE.DTAHORAVIAGEM,
820 DE.SEQVALEPEDAGIO
821 FROM MFL_DOCTOFISCAL M,
822 MFTX_DADOSEMPENHO DE,
823 MAX_EMPSERIENF C,
824 MFTX_TOTALCARGA TC
825 WHERE M.NROEMPRESA = (SELECT NROEMPRESA
826 FROM MAX_EMPRESA
827 WHERE SEQPESSOAEMP = DE.SEQREMETENTE
828 AND STATUS = 'A')
829 AND M.STATUSDF = 'V'
830 AND M.NROCARGA = DE.NROCARGA
831 AND C.NROEMPRESA = M.NROEMPRESA
832 AND C.SERIENF = M.SERIEDF
833 AND DE.NROCARGA = TC.NROCARGA(+)
834 AND ((NVL(C.TIPODOCTO,'N') = 'E' AND M.STATUSNFE in (4, 19)) OR NVL(C.TIPODOCTO,'N') NOT IN ('E', 'O'))
835 AND DE.SEQMANIFESTO IS NULL
836 UNION
837 SELECT N.NROEMPRESA EMPDOCTO,
838 NULL NROSERIEECF,
839 NULL SEQNF,
840 M.NRONOTA,
841 M.SERIENF,
842 M.NROCARGA,
843 DE.NROEMPRESA,
844 DE.SEQMOTORISTA,
845 DE.SEQREMETENTE,
846 DE.PLACAVEICULO,
847 DE.SEQTRANSP,
848 DE.IDUSUARIO,
849 DE.NROTABFRETE_NFPS,
850 DE.NROTABFRETE_CTRC,
851 DE.CGO_CTRC,
852 DE.CGO_NFPS,
853 M.SEQPESSOA,
854 NULL CGO,
855 M.MODELO,
856 'I' IMPORTADA,--IMPORTADA
857 NULL SEQMANIFESTO,
858 NULL SEQMANIFESTODF,
859 M.DTANF DTALANCTOO,
860 NULL TIPOOPERACAO,
861 NULL ORIGEM,
862 NULL REMNROCPFCNPJ,
863 NULL REMDIGCPFCNPJ,
864 NULL SEQCIDADE,
865 NULL TIPOPAGTOFRETE,
866 NULL NFECHAVEACESSO,
867 DE.SEQEMBARCACAO,
868 DE.INDMULTTRANSP,
869 0,
870 0,
871 0,
872 DE.SEQEXPEDIDOR,
873 DE.SEQRECEBEDOR,
874 DE.TIPOPAGTOFIN,
875 DE.SEQSUBCONTRATADO,
876 DE.CTECHAVEACESSOTOMADOR,
877 DE.PRODPREDOMINANTE,
878 DE.CARACTERISCACARGA,
879 DE.DTAHORAVIAGEM,
880 DE.SEQVALEPEDAGIO
881 FROM MFT_NFIMPORT M,
882 MFT_CARGAIMPORT N,
883 MFTX_DADOSEMPENHO DE
884 WHERE N.NROEMPRESA = (SELECT NROEMPRESA
885 FROM MAX_EMPRESA
886 WHERE SEQPESSOAEMP = DE.SEQREMETENTE
887 AND STATUS = 'A')
888 AND M.NROCARGA = N.NROCARGA
889 AND M.NROCARGA = DE.NROCARGA
890 AND DE.SEQMANIFESTO IS NULL
891 UNION
892 SELECT DF.NROEMPRESADF,
893 DF.NROECFDF,
894 DF.SEQNF,
895 DF.NUMERODF,
896 DF.SERIEDF,
897 DF.NROCARGA,
898 DF.NROEMPRESA,
899 DF.SEQMOTORISTA,
900 DF.SEQREMETENTE,
901 DF.PLACAVEICULO,
902 DF.SEQTRANSP,
903 DF.IDUSUARIO,
904 DF.NROTABFRETE_NFPS,
905 DF.NROTABFRETE_CTRC,
906 DF.CGO_CTRC,
907 DF.CGO_NFPS,
908 DF.SEQPESSOADESTINATARIO,
909 NULL CGO,
910 DF.MODELODF,
911 'M' IMPORTADA,--IMPORTADA EM MANIFESTO
912 DF.SEQMANIFESTO,
913 DF.SEQMANIFESTODF,
914 DF.DTALANCTO,
915 DF.TIPOOPERACAO,
916 DF.ORIGEM,
917 NULL REMNROCPFCNPJ,
918 NULL REMDIGCPFCNPJ,
919 NULL SEQCIDADE,
920 NULL TIPOPAGTOFRETE,
921 DF.NFECHAVEACESSO,
922 DF.SEQEMBARCACAO,
923 DF.INDMULTTRANSP,
924 NVL(TC.VLRGERALDOCTOCTRC, 0) VLRTOTALCARGACTRC,
925 NVL(TC.VLRCARGADOCTOEMPENHO, 0) VLRTOTALCARGAEMPENHO,
926 NVL(TC.QTDCARGANOTAS, 0) QTDNOTAS,
927 NULL SEQEXPEDIDOR,
928 NULL SEQRECEBEDOR,
929 NULL TIPOPAGTOFIN,
930 NULL SEQSUBCONTRATADO,
931 NULL CTECHAVEACESSOTOMADOR,
932 NULL PRODPREDOMINANTE,
933 NULL CARACTERISCACARGA,
934 NULL DTAHORAVIAGEM,
935 NULL SEQVALEPEDAGIO
936 FROM MFTX_MANIFESTO_DF DF,
937 MFTX_TOTALCARGA TC
938 WHERE DF.NROCARGA = TC.NROCARGA(+)
939 UNION
940 SELECT M.NROEMPRESA EMPDOCTO,
941 NULL NROSERIEECF,
942 NULL SEQNF,
943 M.NUMERODF,
944 M.SERIEDF,
945 null NROCARGA,
946 M.NROEMPRESA,
947 NULL SEQMOTORISTA,
948 B.SEQPESSOA SEQREMETENTE,
949 NULL PLACAVEICULO,
950 NULL SEQTRANSP,
951 M.IDUSUARIO,
952 NULL NROTABFRETE_NFPS,
953 NULL NROTABFRETE_CTRC,
954 NULL CGO_CTRC,
955 NULL CGO_NFPS,
956 NVL(A.SEQPESSOA, TO_NUMBER(fc5maxparametro('MAXTRANSP', 0, 'SEQ_DEST_PADRAO_IMP'))) SEQDESTINATARIO,
957 NULL CGO,
958 M.CODMODELODF,
959 'A' IMPORTADA,--IMPORTAÇÃO AUTOMÁTICA VIA ARQUIVO TEXTO
960 NULL SEQMANIFESTO,
961 NULL SEQMANIFESTODF,
962 M.DTADF DTALANCTO,
963 NULL TIPOOPERACAO,
964 NULL ORIGEM,
965 M.REMNROCPFCNPJ,
966 M.REMDIGCPFCNPJ,
967 DECODE(A.SEQPESSOA, NULL, C.SEQCIDADE, NULL) SEQCIDADE, -- Adicionado para considerar a cidade importada através do arquivo quando o destinatário não estiver cadastrado
968 M.TIPOPAGTOFRETE TIPOPAGTOFRETE,
969 NULL NFECHAVEACESSO,
970 NULL SEQEMBARCACAO,
971 NULL INDMULTTRANSP,
972 0,
973 0,
974 0,
975 NULL SEQEXPEDIDOR,
976 NULL SEQRECEBEDOR,
977 NULL TIPOPAGTOFIN,
978 NULL SEQSUBCONTRATADO,
979 NULL CTECHAVEACESSOTOMADOR,
980 NULL PRODPREDOMINANTE,
981 NULL CARACTERISCACARGA,
982 NULL DTAHORAVIAGEM,
983 NULL SEQVALEPEDAGIO
984 FROM MFTX_IMPAUTOMATICANOTAS M,
985 GE_PESSOA A,
986 GE_PESSOA B,
987 GE_CIDADE C
988 WHERE A.NROCGCCPF(+) = M.DESTNROCPFCNPJ
989 AND A.DIGCGCCPF(+) = M.DESTDIGCPFCNPJ
990 AND B.NROCGCCPF = M.REMNROCPFCNPJ
991 AND B.DIGCGCCPF = M.REMDIGCPFCNPJ
992 AND C.CIDADE = M.DESTCIDADE
993 AND C.UF = M.DESTUF
994 ) DOCTO,
995 (SELECT Z.NROEMPRESA,
996 X.SEQPESSOA,
997 NVL(Z.NROTABFRETE_CTRC, X.NROTABFRETE_CTRC) NROTABFRETE_CTRC,
998 NVL(Z.NROTABFRETE_NFPS, X.NROTABFRETE_NFPS) NROTABFRETE_NFPS,
999 X.TIPOPAGTOFRETE,
1000 X.SEQCIDADEENTREGA,
1001 X.SEQCIDADE,
1002 X.UF,
1003 X.INDCONTRIBICMS,
1004 X.VALORFRETE,
1005 X.PERCFRETE,
1006 X.VERSAO
1007 FROM MFTV_DESTINATARIO X, MFT_DESTINATARIOEMP Z
1008 WHERE X.SEQPESSOA = Z.SEQDESTINATARIO(+) ) D,
1009 MFTV_DESTINATARIO D2,
1010 MFTV_REMETENTE R,
1011 GE_EMPRESA E,
1012 MFT_TABFRETE TAB,
1013 MAD_VEICULO V,
1014 GE_CIDADE C,
1015 MAX_EMPRESA ME
1016 WHERE D.SEQPESSOA = DECODE (pnGeraCTRCUnico, 1, vnPDSeqDestinatarioDiversos, DECODE( vsPDAgrupaCTRCRemData || NVL( DOCTO.TIPOPAGTOFRETE, D2.TIPOPAGTOFRETE ) || DECODE(NVL(D2.SEQCIDADEENTREGA, D2.SEQCIDADE), R.SEQCIDADE, 'E', 'C'), 'RDPC', vnPDSeqDestinatarioDiversos, 'RPC', vnPDSeqDestinatarioDiversos, 'RDCPC', vnPDSeqDestinatarioDiversos, 'RCPC',vnPDSeqDestinatarioDiversos, DOCTO.SEQPESSOA))
1017 AND D2.SEQPESSOA = DOCTO.SEQPESSOA
1018 /* RC 66914 AND DOCTO.EMPDOCTO =
1019 (SELECT NROEMPRESA
1020 FROM MAX_EMPRESA
1021 WHERE SEQPESSOAEMP = DOCTO.SEQREMETENTE)*/
1022 AND E.NROEMPRESA = DOCTO.NROEMPRESA
1023 -- RC 70213 - jota 06/09/11 - alterados os decodes para tratamento da coluna UTILSEMPRETABFRETEDEST da MFT_REMETENTE
1024 and CASE WHEN NVL(D.SEQCIDADEENTREGA, D.SEQCIDADE) = R.SEQCIDADE THEN
1025 CASE WHEN pnUsaTabFrete = 1 THEN
1026 NVL(decode( nvl( R.UTILSEMPRETABFRETEDEST, 'N' ), 'S', D.NROTABFRETE_NFPS, decode( D.TIPOPAGTOFRETE, 'A', D.NROTABFRETE_NFPS, R.NROTABFRETE_NFPS ) ),DOCTO.NROTABFRETE_NFPS)
1027 ELSE NVL(DOCTO.NROTABFRETE_NFPS, decode( nvl( R.UTILSEMPRETABFRETEDEST, 'N' ), 'S', D.NROTABFRETE_NFPS, decode( D.TIPOPAGTOFRETE, 'A', D.NROTABFRETE_NFPS, R.NROTABFRETE_NFPS ) ) )
1028 END
1029 ELSE
1030 CASE WHEN pnUsaTabFrete = 1 THEN
1031 NVL(decode( nvl( R.UTILSEMPRETABFRETEDEST, 'N' ), 'S', D.NROTABFRETE_NFPS, decode( D.TIPOPAGTOFRETE, 'A', D.NROTABFRETE_NFPS, R.NROTABFRETE_NFPS ) ),DOCTO.NROTABFRETE_CTRC)
1032 ELSE NVL(DOCTO.NROTABFRETE_CTRC, decode( nvl( R.UTILSEMPRETABFRETEDEST, 'N' ), 'S', D.NROTABFRETE_NFPS, decode( D.TIPOPAGTOFRETE, 'A', D.NROTABFRETE_NFPS, R.NROTABFRETE_NFPS ) ) )
1033 END
1034 end = NROTABFRETE
1035 AND V.LOCALVEICULO = C.SEQCIDADE(+)
1036 AND DOCTO.PLACAVEICULO = V.PLACAVEICULO(+)
1037 AND DOCTO.SEQTRANSP = V.SEQTRANSPORTADOR(+)
1038 AND DOCTO.NROEMPRESA = ME.NROEMPRESA
1039 AND DOCTO.SEQREMETENTE = R.SEQPESSOA
1040 AND DOCTO.IDUSUARIO = pnIdUsuario
1041 AND DOCTO.NROEMPRESA = pnNroEmpresa
1042 AND ((D.NROEMPRESA IS NULL) OR (D.NROEMPRESA = DOCTO.NROEMPRESA))
1043 ) ORDER BY SEQREMETENTE,SEQDESTINATARIO, DTALANCTO, TIPOOPERACAO, NUMERODF) loop
1044 If /*Condição para geração de um novo topo*/
1045 /*Caso o checkbox "Gerar apenas um CTRC" eseja marcado*/
1046 (vnQtdRegCTRCUnico = 0 and pnGeraCTRCUnico = 1) or
1047 (--Se a quantidade de linhas por CTRC exceder o parametrizado
1048 vnRegGerados = vnQtdReg or
1049 /*Se for o primeiro registro*/
1050 vnRegGerados = 0 or
1051 /*Se for um Empenho*/
1052 VTBL.TIPODOCTO = 'E' or
1053 /*É gerado um topo por destinatário, quando a geração não é feita a partir de manifestos*/
1054 (VTBL.SEQDESTINATARIO != VTBL.ANTSEQDESTINATARIO and VTBL.IMPORTADA != 'M' ) or
1055 /*É gerado um topo por data de lançamento do manifesto*/
1056 (VTBL.DTALANCTO != VTBL.ANTDTALANCTO and (VTBL.IMPORTADA = 'M' or (vsPDAgrupaCTRCRemData || VTBL.TIPOPAGTOFRETE = 'RDP' ))) or
1057 /*É gerado um topo por núrmero da carga*/
1058 (VTBL.NROCARGA != VTBL.ANTNROCARGA and (vsPDAgrupaCTRCRemData || VTBL.TIPOPAGTOFRETE = 'RCP' )) or
1059 /*É gerado um topo por número da carga e por data de lançamento*/
1060 ((VTBL.DTALANCTO != VTBL.ANTDTALANCTO or VTBL.NROCARGA != VTBL.ANTNROCARGA) and (vsPDAgrupaCTRCRemData || VTBL.TIPOPAGTOFRETE = 'RDCP' )) or
1061 /*É gerado um topo para cada tipo de operação (estadual/interestadual)*/
1062 (VTBL.TIPOOPERACAO != VTBL.ANTTIPOOPERACAO and VTBL.IMPORTADA = 'M' ) or
1063 /* Quebra por remetente*/
1064 (VTBL.SEQREMETENTE != VTBL.ANTSEQREMETENTE) or
1065 /* Parâmetro do remetente para geração automática */
1066 VTBL.INDGERAAUTOAGRUP = 'I' or
1067 VTBL.INDMULTTRANSP IS NOT NULL) Then
1068 SELECT S_MFT_EMPENHO.NEXTVAL INTO vnNroEmpenho FROM DUAL;
1069 If VTBL.SEQEMBARCACAO is not null then
1070 SELECT NVL(A.NROULTVIAGEM,0) + 1
1071 INTO vnNroViagem
1072 FROM MAD_EMBARCACAO A
1073 WHERE A.SEQEMBARCACAO = VTBL.SEQEMBARCACAO;
1074 end if;
1075 INSERT INTO MFT_EMPENHO
1076 (NroEmpenho,NroEmpresa,NroTabFrete,CGO,
1077 SeqDestinatario,Natureza,Especie,SeqRemetente,
1078 Situacao,VlrPedagio,VlrTaxaDiversa,VlrColeta,
1079 VlrEntrega,TipoPagtoFrete,Peso,Quantidade,
1080 Marca,Placa,UF,Local,
1081 SeqMotorista,DtaLancamento,UsuAlteracao,DtaAlteracao,
1082 Automatico,TipoDocto,
1083 CST_ICMS, CST_PIS, CST_COFINS,
1084 VersaoPessoaDest, VersaoPessoaRem, VlrGris, Rateado, NroDocto, SerieDocto,
1085 ObservacaoTrib, seqembarcacao, NROVIAGEM, SEQEXPEDIDOR, SEQRECEBEDOR, TIPOPAGTOFIN,
1086 SEQSUBCONTRATADO, CTECHAVEACESSOTOMADOR, PRODPREDOMINANTE, CARACTERISCACARGA, DTAHORAVIAGEM,
1087 SEQVALEPEDAGIO )
1088 VALUES
1089 (vnNroEmpenho,VTBL.NROEMPRESA,VTBL.NROTABFRETE,VTBL.CGO,
1090 VTBL.SEQDESTINATARIO,VTBL.NATUREZA,VTBL.ESPECIE,VTBL.SEQREMETENTE,
1091 VTBL.SITUACAO,VTBL.VLRPEDAGIO,VTBL.VLRTAXADIVERSA,VTBL.VLRTAXACOLETA,
1092 VTBL.VLRTAXAENTREGA,VTBL.TIPOPAGTOFRETE,0,0,
1093 VTBL.MARCAVEICULO,VTBL.PLACAVEICULO,VTBL.UFPLACAVEICULO,VTBL.CIDADE,
1094 VTBL.SEQMOTORISTA,SYSDATE,psUsuario,SYSDATE,
1095 'S',VTBL.TIPODOCTO,
1096 VTBL.CSTICMS, VTBL.CSTPIS, VTBL.CSTCOFINS,
1097 VTBL.VERSAODEST, VTBL.VERSAOREM, VTBL.VLRGRIS, 'X', vnNroDocto, vsSerieDocto,
1098 VTBL.OBSTRIBUTACAO, VTBL.SEQEMBARCACAO, vnNroViagem, VTBL.SEQEXPEDIDOR, VTBL.SEQRECEBEDOR, VTBL.TIPOPAGTOFIN,
1099 VTBL.SEQSUBCONTRATADO, VTBL.CTECHAVEACESSOTOMADOR, VTBL.PRODPREDOMINANTE, VTBL.CARACTERISCACARGA, VTBL.DTAHORAVIAGEM,
1100 VTBL.SEQVALEPEDAGIO );
1101 If VTBL.SEQEMBARCACAO is not null then
1102 UPDATE MAD_EMBARCACAO
1103 SET NROULTVIAGEM = vnNroViagem
1104 WHERE SEQEMBARCACAO = VTBL.SEQEMBARCACAO;
1105 End if;
1106 vnRegGerados := 0;
1107 vnQtdRegCTRCUnico := 1;
1108 End If;
1109 IF VTBL.IMPORTADA = 'N' OR (VTBL.IMPORTADA = 'M' AND VTBL.ORIGEM = 'N' AND VTBL.NROCARGA > 0) THEN
1110 INSERT INTO MFT_EMPENHO_CARGADF
1111 (NroEmpresa,SeqCTRCCargaDF,NroSerieECF,SeqNF,NumeroDF,
1112 SerieDF,NroEmpenho,NroCarga,Status)
1113 VALUES
1114 (VTBL.EMPDOCTO,S_MFT_EMPENHO_CARGADF.NEXTVAL,VTBL.NROSERIEECF,VTBL.Seqnf,
1115 VTBL.NUMERODF,VTBL.SERIEDF,vnNroEmpenho,VTBL.NROCARGA, VTBL.STATUS);
1116 UPDATE MFL_DOCTOFISCAL A
1117 SET A.TIPOFRETE = DECODE(VTBL.TIPOPAGTOFRETE, 'P', 'C', 'A', 'F')
1118 WHERE NroEmpresa = VTBL.EMPDOCTO
1119 AND NroSerieECF = VTBL.NROSERIEECF
1120 AND NumeroDF = VTBL.NUMERODF
1121 AND SerieDF = VTBL.SERIEDF
1122 AND A.TIPOFRETE != VTBL.TIPOPAGTOFRETE;
1123 SELECT S_MFT_EMPENHODF.NEXTVAL INTO vnNroEmpenhoDf FROM DUAL;
1124 INSERT INTO MFT_EMPENHODF
1125 (SEQEMPENHODF, NROEMPENHO, CODMODELODF, NUMERODF, SERIEDF, SUBSERIEDF, DTADF,
1126 VLRTOTAL, VLRMERCADORIA, QTDEVOLUME, PESOBRUTO, PESOLIQUIDO,
1127 SEQMANIFESTO, SEQMANIFESTODF, NFECHAVEACESSO, VLRTOTTRIB)
1128 SELECT
1129 vnNroEmpenhoDf,
1130 vnNroEmpenho,
1131 VTBL.MODELODF,
1132 VTBL.NUMERODF,
1133 VTBL.SERIEDF,
1134 NULL,
1135 NVL(D.DTALANCAMENTO, D.DTAEMISSAO),
1136 D.vlrcontabil,
1137 Decode(vsPDVlrTotalExibir,'V',D.vlrcontabil,D.vlrprodbruto),
1138 decode(vsPDBuscaQtdVolumeLocus, 'S', PKG_MFTTRANSPORTADORA.mftf_BuscaQtdVolumeLocus(d.nrocarga, d.seqpessoa, d.nroempresa, 'S'),
1139 d.qtdvolume),
1140 D.pesobruto,
1141 D.pesoliquido,
1142 VTBL.SEQMANIFESTO,
1143 VTBL.SEQMANIFESTODF,
1144 VTBL.NFECHAVEACESSO,
1145 D.VLRTOTTRIB
1146 FROM MFLV_DFBASEEDITOTAL D
1147 WHERE VTBL.NUMERODF = D.NUMERODF
1148 AND VTBL.SERIEDF = D.SERIEDF
1149 AND VTBL.NROSERIEECF = D.NROSERIEECF
1150 AND VTBL.EMPDOCTO = D.NROEMPRESA;
1151 ELSIF VTBL.IMPORTADA = 'I' THEN
1152 INSERT INTO MFT_EMPENHODF
1153 (SEQEMPENHODF, NROEMPENHO, CODMODELODF, NUMERODF, SERIEDF, SUBSERIEDF, DTADF,
1154 VLRTOTAL, VLRMERCADORIA, QTDEVOLUME, PESOBRUTO, PESOLIQUIDO, NROCARGA,
1155 SEQMANIFESTO, SEQMANIFESTODF, NFECHAVEACESSO, VLRTOTTRIB)
1156 SELECT
1157 S_MFT_EMPENHODF.NEXTVAL,
1158 vnNroEmpenho,
1159 VTBL.MODELODF,
1160 VTBL.NUMERODF,
1161 VTBL.SERIEDF,
1162 NULL,
1163 D.DTANF,
1164 D.VLRTOTAL,
1165 Decode(vsPDVlrTotalExibir,'V',D.VLRTOTAL,D.VLRMERCADORIA),
1166 D.VOLUMES,
1167 D.pesobruto,
1168 D.pesoliquido,
1169 VTBL.NROCARGA,
1170 VTBL.SEQMANIFESTO,
1171 VTBL.SEQMANIFESTODF,
1172 VTBL.NFECHAVEACESSO,
1173 D.VLRTOTTRIB
1174 FROM MFT_NFIMPORT D
1175 WHERE VTBL.NROCARGA = D.NROCARGA
1176 AND VTBL.NUMERODF = D.NRONOTA
1177 AND VTBL.SERIEDF = D.SERIENF
1178 AND VTBL.EMPDOCTO = D.NROEMPRESA
1179 ;
1180 ELSE
1181 IF VTBL.IMPORTADA != 'A' THEN
1182 INSERT INTO MFT_EMPENHODF
1183 (SEQEMPENHODF, NROEMPENHO, CODMODELODF, NUMERODF, SERIEDF, SUBSERIEDF, DTADF,
1184 VLRTOTAL, VLRMERCADORIA, QTDEVOLUME, PESOBRUTO, PESOLIQUIDO, NROCARGA,
1185 SEQMANIFESTO, SEQMANIFESTODF, NFECHAVEACESSO, VLRTOTTRIB)
1186 SELECT
1187 S_MFT_EMPENHODF.NEXTVAL,
1188 vnNroEmpenho,
1189 VTBL.MODELODF,
1190 VTBL.NUMERODF,
1191 VTBL.SERIEDF,
1192 VTBL.MODELODF,
1193 D.DTADF,
1194 D.VLRTOTAL,
1195 Decode(vsPDVlrTotalExibir,'V',D.VLRTOTAL,D.VLRMERCADORIA),
1196 D.QTDEVOLUME,
1197 D.pesobruto,
1198 D.pesoliquido,
1199 VTBL.NROCARGA,
1200 VTBL.SEQMANIFESTO,
1201 VTBL.SEQMANIFESTODF,
1202 VTBL.NFECHAVEACESSO,
1203 D.VLRTOTTRIB
1204 FROM MFT_MANIFESTO_DF D
1205 WHERE VTBL.NUMERODF = D.NUMERODF
1206 AND VTBL.SERIEDF = D.SERIEDF
1207 AND VTBL.SEQMANIFESTO = D.SEQMANIFESTO
1208 AND VTBL.EMPDOCTO = D.NROEMPRESA;
1209 ELSE
1210 -- Insere os dados cadastrais do destinatário quando o documento for gerado pela importação automática
1211 INSERT INTO MFT_EMPENHODF
1212 (SEQEMPENHODF,
1213 NROEMPENHO,
1214 CODMODELODF,
1215 NUMERODF,
1216 SERIEDF,
1217 SUBSERIEDF,
1218 DTADF,
1219 VLRTOTAL,
1220 VLRMERCADORIA,
1221 QTDEVOLUME,
1222 PESOBRUTO,
1223 PESOLIQUIDO,
1224 NROCARGA,
1225 SEQMANIFESTO,
1226 SEQMANIFESTODF,
1227 /*Dados Destinatário*/
1228 DESTNOMERAZAO,
1229 DESTFISICAJURIDICA,
1230 DESTNROCPFCNPJ,
1231 DESTDIGCPFCNPJ,
1232 DESTCIDADE,
1233 DESTUF,
1234 DESTBAIRRO,
1235 DESTLOGRADOURO,
1236 DESTNROLOGRADOURO,
1237 DESTCMPLTOLOGRADOURO,
1238 DESTCEP,
1239 NFECHAVEACESSO,
1240 VLRTOTTRIB
1241 )
1242 SELECT S_MFT_EMPENHODF.NEXTVAL,
1243 vnNroEmpenho,
1244 VTBL.MODELODF,
1245 VTBL.NUMERODF,
1246 VTBL.SERIEDF,
1247 VTBL.MODELODF,
1248 A.DTADF,
1249 A.VLRTOTAL,
1250 Decode(vsPDVlrTotalExibir,'V', A.VLRTOTAL, A.VLRMERCADORIA),
1251 A.VOLUMES,
1252 A.PESOBRUTO,
1253 A.PESOLIQUIDO,
1254 VTBL.NROCARGA,
1255 VTBL.SEQMANIFESTO,
1256 VTBL.SEQMANIFESTODF,
1257 /*Dados Destinatário*/
1258 A.DESTNOMERAZAO,
1259 A.DESTFISICAJURIDICA,
1260 A.DESTNROCPFCNPJ,
1261 A.DESTDIGCPFCNPJ,
1262 A.DESTCIDADE,
1263 A.DESTUF,
1264 A.DESTBAIRRO,
1265 A.DESTLOGRADOURO,
1266 A.DESTNROLOGRADOURO,
1267 A.DESTCMPLTOLOGRADOURO,
1268 A.DESTCEP,
1269 VTBL.NFECHAVEACESSO,
1270 A.VLRTOTTRIB
1271 FROM MFTX_IMPAUTOMATICANOTAS A
1272 WHERE VTBL.NUMERODF = A.NUMERODF
1273 AND VTBL.SERIEDF = A.SERIEDF
1274 AND VTBL.EMPDOCTO = A.NROEMPRESA
1275 AND VTBL.REMNROCPFCNPJ = A.REMNROCPFCNPJ
1276 AND VTBL.REMDIGCPFCNPJ = A.REMDIGCPFCNPJ;
1277 END IF;
1278 END IF;
1279 IF VTBL.TIPODOCTO = 'C' and VTBL.INDRATEIAFRETEPORCTRC != 'S' THEN
1280 vnRegGerados := vnRegGerados + 1;
1281 select count(distinct a.nrocarga)
1282 into vnQtdCargaCTRC
1283 from MFTX_DADOSEMPENHO a;
1284 vnVlrFreteFixo := vtbl.vlrfixo * vnQtdCargaCTRC;
1285 ELSE
1286 IF VTBL.TIPODOCTO = 'C' THEN
1287 vnRegGerados := vnRegGerados + 1;
1288 END IF;
1289 vnVlrFreteFixo := vtbl.vlrfixo ;
1290 END IF;
1291 /*Condições para atualizar os totais no topo
1292 Segue as mesmas regras da geração do topo*/
1293 If (vnQtdRegCTRCUnico = 1 and pnGeraCTRCUnico = 1 AND vnRegGerados = vnQtdReg) or
1294 (vnRegGerados = vnQtdReg or
1295 VTBL.SEQDESTINATARIO != VTBL.PROXSEQDESTINATARIO or
1296 VTBL.PROXSEQDESTINATARIO IS NULL or VTBL.TIPODOCTO = 'E' or
1297 ( VTBL.PROXDTALANCTO != VTBL.DTALANCTO And ( VTBL.IMPORTADA = 'M' or ( vsPDAgrupaCTRCRemData || VTBL.TIPOPAGTOFRETE = 'RDP' ) ) ) or
1298 (VTBL.PROXNROCARGA != VTBL.NROCARGA and (vsPDAgrupaCTRCRemData || VTBL.TIPOPAGTOFRETE = 'RCP' )) or
1299 ((VTBL.PROXNROCARGA != VTBL.NROCARGA or VTBL.PROXDTALANCTO != VTBL.DTALANCTO) and (vsPDAgrupaCTRCRemData || VTBL.TIPOPAGTOFRETE = 'RDCP' )) or
1300 ( VTBL.PROXTIPOOPERACAO != VTBL.TIPOOPERACAO And VTBL.IMPORTADA = 'M' ) or
1301 ( VTBL.PROXTIPOOPERACAO is null and VTBL.IMPORTADA = 'M' ) or
1302 ( VTBL.PROXDTALANCTO is null and ( VTBL.IMPORTADA = 'M' or ( vsPDAgrupaCTRCRemData || VTBL.TIPOPAGTOFRETE = 'RDP' ) ) ) or
1303 /* Quebra por remetente*/
1304 (VTBL.SEQREMETENTE != VTBL.PROXSEQREMETENTE OR VTBL.PROXSEQREMETENTE IS NULL) or
1305 /* Parâmetro do remetente para geração automática */
1306 VTBL.INDGERAAUTOAGRUP = 'I' or
1307 VTBL.INDMULTTRANSP IS NOT NULL) Then
1308 for vtblTotais in (/* Processo alterado no RC 68832
1309 SELECT e.nroempenho,
1310 a.cgo,
1311 CASE
1312 WHEN VTBL.TIPOVLRFRETE = 'B' THEN-- B - PESO BRUTO
1313 SUM(B.pesobruto) * VTBL.VLRPESOBRUTO
1314 WHEN VTBL.TIPOVLRFRETE = 'L' THEN-- L - Peso Líquido
1315 SUM(B.pesoliquido) * VTBL.VLRPESOLIQUIDO
1316 WHEN VTBL.TIPOVLRFRETE = 'E' THEN-- E - Faixa de Valores por Peso
1317 0 -- Será calculado dentro do Loop
1318 ELSE 0 END VLRFRETEPESO,
1319 CASE
1320 WHEN VTBL.TIPOVLRFRETE = 'M' THEN-- M - Valor para cada M3
1321 SUM(B.volume) * VTBL.VLRMETROCUBICO
1322 WHEN VTBL.TIPOVLRFRETE = 'F' THEN-- F - Valor Fixo
1323 VTBL.VLRFIXO
1324 WHEN VTBL.TIPOVLRFRETE = 'P' THEN-- P - Percentual sobre total da NF
1325 SUM(B.vlrcontabil) * VTBL.PERCTOTALNF / 100
1326 WHEN VTBL.TIPOVLRFRETE = 'R' THEN-- R - Conforme o % ou valor da Rota\Praça
1327 NVL(VTBL.VLRFRETEROTAPRACA,
1328 SUM(B.vlrcontabil)*VTBL.PERCFRETEROTAPRACA/100)
1329 WHEN VTBL.TIPOVLRFRETE = 'K' THEN-- K - Faixa de Valores por Quilometragem
1330 0 -- Será calculado dentro do Loop
1331 ELSE 0 END VLRFRETEVALOR,
1332 SUM(B.vlrprodbruto) VLRMERCADORIA,
1333 SUM(B.pesobruto) PESOBRUTO,
1334 SUM(B.PESOLIQUIDO) PESOLIQUIDO,
1335 decode(vsPDBuscaQtdVolumeLocus, 'S', max(PKG_MFTTRANSPORTADORA.mftf_BuscaQtdVolumeLocus(e.nrocarga, b.seqpessoa, b.nroempresa, 'N')),
1336 'N', SUM(B.qtdvolume)) QTDVOLUMES\*,
1337 'N' IMPORTADA*\
1338 FROM MFT_EMPENHO_CARGADF E,
1339 GE_PESSOA P,
1340 MFT_EMPENHO A,
1341 MFLV_DFBASEEDITOTAL B,
1342 MFT_TABFRETE C
1343 WHERE E.NROSERIEECF = B.NROSERIEECF
1344 AND E.SERIEDF = B.SERIEDF
1345 AND E.NUMERODF = B.NUMERODF
1346 AND E.NROEMPRESA = B.NROEMPRESA
1347 AND B.SEQPESSOA = P.SEQPESSOA
1348 AND E.NROEMPENHO = A.NROEMPENHO
1349 AND C.NROTABFRETE = A.NROTABFRETE
1350 AND A.SITUACAO = 'X'
1351 AND B.NROEMPRESA = (SELECT NROEMPRESA FROM MAX_EMPRESA WHERE SEQPESSOAEMP = A.SEQREMETENTE)
1352 AND NOT EXISTS (SELECT 1 FROM MFT_MANIFESTO_CARGA MC WHERE MC.NROCARGA = E.NROCARGA)
1353 AND VTBL.IMPORTADA != 'M'
1354 Group by e.nroempenho, a.cgo
1355 UNION
1356 SELECT e.nroempenho,
1357 a.cgo,
1358 CASE
1359 WHEN VTBL.TIPOVLRFRETE = 'B' THEN-- B - PESO BRUTO
1360 SUM(B.pesobruto) * VTBL.VLRPESOBRUTO
1361 WHEN VTBL.TIPOVLRFRETE = 'L' THEN-- L - Peso Líquido
1362 SUM(B.pesoliquido) * VTBL.VLRPESOLIQUIDO
1363 WHEN VTBL.TIPOVLRFRETE = 'E' THEN-- E - Faixa de Valores por Peso
1364 0 -- Será calculado dentro do Loop
1365 ELSE 0 END VLRFRETEPESO,
1366 CASE
1367 WHEN VTBL.TIPOVLRFRETE = 'M' THEN-- M - Valor para cada M3
1368 SUM(B.VOLUMES) * VTBL.VLRMETROCUBICO
1369 WHEN VTBL.TIPOVLRFRETE = 'F' THEN-- F - Valor Fixo
1370 VTBL.VLRFIXO
1371 WHEN VTBL.TIPOVLRFRETE = 'P' THEN-- P - Percentual sobre total da NF
1372 SUM(B.VLRTOTAL) * VTBL.PERCTOTALNF / 100
1373 WHEN VTBL.TIPOVLRFRETE = 'R' THEN-- R - Conforme o % ou valor da Rota\Praça
1374 NVL(VTBL.VLRFRETEROTAPRACA,
1375 SUM(B.VLRTOTAL)*VTBL.PERCFRETEROTAPRACA/100)
1376 WHEN VTBL.TIPOVLRFRETE = 'K' THEN-- K - Faixa de Valores por Quilometragem
1377 0 -- Será calculado dentro do Loop
1378 ELSE 0 END VLRFRETEVALOR,
1379 SUM(B.VLRMERCADORIA) VLRMERCADORIA,
1380 SUM(B.PESOBRUTO) PESOBRUTO,
1381 SUM(B.PESOLIQUIDO) PESOLIQUIDO,
1382 decode(vsPDBuscaQtdVolumeLocus, 'S', max(PKG_MFTTRANSPORTADORA.mftf_BuscaQtdVolumeLocus(C.nrocarga, b.seqpessoa, b.nroempresa, 'N')),
1383 'N', SUM(B.VOLUMES)) QTDVOLUMES\*,
1384 'I' IMPORTADA*\
1385 FROM MFT_EMPENHODF E,
1386 GE_PESSOA P,
1387 MFT_EMPENHO A,
1388 MFT_NFIMPORT B,
1389 MFT_CARGAIMPORT C
1390 WHERE E.SERIEDF = B.SERIENF
1391 AND E.NUMERODF = B.NRONOTA
1392 --AND E.NROEMPRESA = B.NROEMPRESA
1393 AND B.SEQPESSOA = P.SEQPESSOA
1394 AND E.NROEMPENHO = A.NROEMPENHO
1395 AND A.SITUACAO = 'X'
1396 AND B.NROEMPRESA = (SELECT NROEMPRESA FROM MAX_EMPRESA WHERE SEQPESSOAEMP = A.SEQREMETENTE)
1397 AND C.NROCARGA = B.NROCARGA
1398 AND VTBL.IMPORTADA != 'M'
1399 Group by e.nroempenho, a.cgo
1400 UNION
1401 SELECT e.nroempenho,
1402 a.cgo,
1403 CASE
1404 WHEN VTBL.TIPOVLRFRETE = 'B' THEN -- B - PESO BRUTO
1405 SUM(B.pesobruto) * VTBL.VLRPESOBRUTO
1406 WHEN VTBL.TIPOVLRFRETE = 'L' THEN -- L - Peso Líquido
1407 SUM(B.pesoliquido) * VTBL.VLRPESOLIQUIDO
1408 WHEN VTBL.TIPOVLRFRETE = 'E' THEN-- E - Faixa de Valores por Peso
1409 0 -- Será calculado dentro do Loop
1410 ELSE 0
1411 END VLRFRETEPESO,
1412 CASE
1413 WHEN VTBL.TIPOVLRFRETE = 'M' THEN -- M - Valor para cada M3
1414 SUM(B.QTDEVOLUME) * VTBL.VLRMETROCUBICO
1415 WHEN VTBL.TIPOVLRFRETE = 'F' THEN -- F - Valor Fixo
1416 VTBL.VLRFIXO
1417 WHEN VTBL.TIPOVLRFRETE = 'P' THEN -- P - Percentual sobre total da NF
1418 SUM(B.VLRTOTAL) * VTBL.PERCTOTALNF / 100
1419 WHEN VTBL.TIPOVLRFRETE = 'R' THEN -- R - Conforme o % ou valor da Rota\Praça
1420 NVL(VTBL.VLRFRETEROTAPRACA, SUM(B.VLRTOTAL) * VTBL.PERCFRETEROTAPRACA / 100)
1421 WHEN VTBL.TIPOVLRFRETE = 'K' THEN-- K - Faixa de Valores por Quilometragem
1422 0 -- Será calculado dentro do Loop
1423 ELSE 0
1424 END VLRFRETEVALOR,
1425 SUM(B.VLRMERCADORIA) VLRMERCADORIA,
1426 SUM(B.PESOBRUTO) PESOBRUTO,
1427 SUM(B.PESOLIQUIDO) PESOLIQUIDO,
1428 CASE
1429 WHEN vsPDBuscaQtdVolumeLocus = 'S'
1430 AND NOT (VTBL.IMPORTADA = 'M' AND
1431 VTBL.ORIGEM = 'D') THEN
1432 max(PKG_MFTTRANSPORTADORA.mftf_BuscaQtdVolumeLocus(b.nrocarga, a.seqremetente, b.nroempresa, 'N'))
1433 ELSE
1434 SUM(B.QTDEVOLUME)
1435 END QTDVOLUMES\*,
1436 'M' IMPORTADA*\
1437 FROM MFT_EMPENHODF E,
1438 MFT_EMPENHO A,
1439 MFT_MANIFESTO_DF B
1440 WHERE E.SEQMANIFESTODF = B.SEQMANIFESTODF
1441 AND E.SEQMANIFESTO = B.SEQMANIFESTO
1442 AND E.NROEMPENHO = A.NROEMPENHO
1443 AND A.SITUACAO = 'X'
1444 AND B.NROEMPRESA =
1445 (SELECT NROEMPRESA
1446 FROM MAX_EMPRESA
1447 WHERE SEQPESSOAEMP = A.SEQREMETENTE)
1448 AND VTBL.IMPORTADA = 'M'
1449 Group by e.nroempenho,
1450 a.cgo
1451 UNION
1452 Totalização para documentos gerados através da importação automática
1453 */
1454 /* Fim RC 68832 */
1455 SELECT e.nroempenho,
1456 a.cgo,
1457 CASE
1458 WHEN VTBL.TIPOVLRFRETE = 'B' THEN -- B - PESO BRUTO
1459 SUM(E.pesobruto) * VTBL.VLRPESOBRUTO
1460 WHEN VTBL.TIPOVLRFRETE = 'L' THEN -- L - Peso Líquido
1461 SUM(E.pesoliquido) * VTBL.VLRPESOLIQUIDO
1462 WHEN VTBL.TIPOVLRFRETE = 'E' THEN -- E - Faixa de Valores por Peso
1463 0 -- Será calculado dentro do Loop
1464 ELSE
1465 0
1466 END VLRFRETEPESO,
1467 CASE
1468 WHEN VTBL.TIPOVLRFRETE = 'M' THEN -- M - Valor para cada M3
1469 SUM(E.QTDEVOLUME) * VTBL.VLRMETROCUBICO
1470 WHEN VTBL.TIPOVLRFRETE = 'F' THEN -- F - Valor Fixo
1471 CASE WHEN VTBL.INDRATEIAFRETE = 'S' AND pnGeraCTRCUnico = 0 AND vsPDAgrupaCTRCRemData = 'N' THEN
1472 case when vtbl.tipodocto = 'C' AND VTBL.VLRTOTALCARGACTRC > 0 then
1473 (vnVlrFreteFixo/VTBL.VLRTOTALCARGACTRC)*SUM(E.VLRTOTAL)
1474 when vtbl.tipodocto = 'E' AND VTBL.VLRTOTALCARGAEMPENHO > 0 then
1475 (VTBL.VLRFIXO/VTBL.VLRTOTALCARGAEMPENHO)*SUM(E.VLRTOTAL)
1476 else
1477 VTBL.VLRFIXO
1478 end
1479 ELSE
1480 VTBL.VLRFIXO
1481 END
1482 WHEN VTBL.TIPOVLRFRETE = 'P' THEN -- P - Percentual sobre total da NF
1483 SUM(E.VLRTOTAL) * VTBL.PERCTOTALNF / 100
1484 WHEN VTBL.TIPOVLRFRETE = 'R' THEN -- R - Conforme o % ou valor da Rota\Praça
1485 NVL(VTBL.VLRFRETEROTAPRACA,
1486 SUM(E.VLRTOTAL) * VTBL.PERCFRETEROTAPRACA / 100)
1487 WHEN VTBL.TIPOVLRFRETE = 'K' THEN -- K - Faixa de Valores por Quilometragem
1488 0 -- Será calculado dentro do Loop
1489 ELSE
1490 0
1491 END VLRFRETEVALOR,
1492 SUM(E.VLRMERCADORIA) VLRMERCADORIA,
1493 SUM(E.PESOBRUTO) PESOBRUTO,
1494 SUM(E.PESOLIQUIDO) PESOLIQUIDO,
1495 SUM(E.QTDEVOLUME) QTDVOLUMES,
1496 MAX(NVL(E.SEQMANIFESTO, 0)) SEQMANIFESTO
1497 FROM MFT_EMPENHODF E,
1498 MFT_EMPENHO A
1499 WHERE E.NROEMPENHO = A.NROEMPENHO
1500 AND A.SITUACAO = 'X'
1501 Group by e.nroempenho,
1502 a.cgo) loop
1503 Begin
1504 /* RP 66469
1505 Novo processo incluído: métodos de cálculo de valor do frete por intervalos fixos de valores.
1506 - Por faixa de peso (TIPOVLRFRETE = 'E')
1507 - Por faixa de valor (TIPOVLRFRETE = 'K')
1508 */
1509 IF VTBL.TIPOVLRFRETE IN ('E','K') THEN
1510 mftp_BuscaFaixaValorFrete(VTBL.TIPOVLRFRETE, VTBL.SEQREMETENTE,
1511 VTBL.SEQDESTINATARIO, VTBL.INDASSOCIAFAIXAVALOR,
1512 CASE WHEN VTBL.INDTIPOPESOFAIXAVALOR = 'B'
1513 THEN vtblTotais.PESOBRUTO
1514 ELSE vtblTotais.PESOLIQUIDO END,
1515 pnOk, psMsgErro, vnValorFreteFaixa, vnTempoPrevFaixa);
1516 IF VTBL.TIPOVLRFRETE = 'E' THEN
1517 vnValorFretePeso := vnValorFreteFaixa;
1518 vnValorFreteValor := 0;
1519 ELSE
1520 vnValorFretePeso := 0;
1521 vnValorFreteValor := vnValorFreteFaixa;
1522 END IF;
1523 ELSE
1524 vnValorFretePeso := vtblTotais.VLRFRETEPESO;
1525 vnValorFreteValor := vtblTotais.VLRFRETEVALOR;
1526 IF VTBL.INDRATEIAFRETE = 'S' AND pnGeraCTRCUnico = 0 AND vsPDAgrupaCTRCRemData = 'N' AND ( VTBL.VLRTOTALCARGACTRC > 0 OR VTBL.VLRTOTALCARGAEMPENHO > 0 ) THEN
1527 SELECT SUM(B.VLRFIXO) VLRFIXOFRETECTRC,
1528 SUM(C.VLRFIXO) VLRFIXOFRETEEMPENHO
1529 INTO vnvlrfixofretectrc,
1530 vnvlrfixofreteempenho
1531 FROM MFTX_DADOSEMPENHO A, MFT_TABFRETE B, MFT_TABFRETE C
1532 WHERE A.NROTABFRETE_CTRC = B.NROTABFRETE
1533 AND A.NROTABFRETE_NFPS = C.NROTABFRETE;
1534 if vtbl.tipodocto = 'E' then
1535 vnFreteValorEmp := nvl(vnFreteValorEmp,0) + vnValorFreteValor;
1536 else
1537 vnFreteValorCTRC := nvl(vnFreteValorCTRC,0) + vnValorFreteValor;
1538 end if;
1539 SELECT COUNT(DISTINCT B.NUMERODF)
1540 into vnQtdNF
1541 FROM MFTX_DADOSEMPENHO A, MFT_EMPENHO_CARGADF B
1542 WHERE A.NROCARGA = B.NROCARGA
1543 AND A.NROCARGA = VTBL.NROCARGA
1544 AND A.NROEMPRESA = VTBL.NROEMPRESA;
1545 IF vnQtdNF = vtbl.QTDNOTAS THEN
1546 IF vtbl.tipodocto = 'E' AND abs(vnFreteValorEmp - (vnvlrfixofreteempenho)) > 0 AND abs(vnFreteValorEmp - (vnvlrfixofreteempenho)) <= 0.05 THEN
1547 vnValorFreteValor := vnValorFreteValor + ((vnvlrfixofreteempenho) - vnFreteValorEmp);
1548 ELSIF vtbl.tipodocto = 'C' AND abs(vnFreteValorCTRC - (vnvlrfixofretectrc)) > 0 AND abs(vnFreteValorCTRC - (vnvlrfixofretectrc)) <= 0.05 THEN
1549 vnValorFreteValor := vnValorFreteValor + ((vnvlrfixofretectrc) - vnFreteValorCTRC);
1550 END IF;
1551 END IF;
1552 END IF;
1553 END IF;
1554 IF pnOk = 1 THEN
1555 SELECT MAX(A.OBSPADRAODACTE)
1556 INTO vsObsPadraoCTe
1557 FROM MAX_EMPRESA A
1558 WHERE A.NROEMPRESA = pnNroEmpresa;
1559 SELECT MAX(A.TIPOCALCULOICMS),
1560 NVL(MAX(A.INDCONSUMIDORFINAL), 'N')
1561 INTO vsTipoCalcICMS,
1562 vsIndConsumidorFinalCGO
1563 FROM MAX_CODGERALOPER A
1564 WHERE A.CODGERALOPER = vtblTotais.CGO;
1565 UPDATE MFT_EMPENHO A
1566 SET Notasfiscais = CASE WHEN vtblTotais.SEQMANIFESTO != '0' THEN '' ELSE mftf_StrNotasFiscais(vnNroempenho,1,vnQtdRegNf) END,
1567 OBSERVACOES = SUBSTR((CASE WHEN vtblTotais.SEQMANIFESTO != '0' THEN vsPDObsPadraoCTRCMan || ' Manifestos: ' || mftf_StrManifestosCTRC(a.nroempenho) || '.' ELSE mftf_StrNotasFiscais(vnNroempenho,vnQtdRegNf + 1) END || ' ' || vsObsPadraoCTe) || DECODE(A.OBSERVACAOTRIB, NULL, NULL, ' - ' || A.OBSERVACAOTRIB), 0, 2000),
1568 Vlrmercadoria = vtblTotais.VLRMERCADORIA,
1569 Vlrtotalservico = vnValorFretePeso +
1570 vnValorFreteValor +
1571 VTBL.VALORESFRETE,
1572 FretePeso = vnValorFretePeso,
1573 FreteValor = vnValorFreteValor,
1574 Vlrbaseicms = DECODE(vsTipoCalcICMS, 'O', 0, DECODE(TIPODOCTO,'C',(nvl(vnValorFretePeso,0) +
1575 nvl(vnValorFreteValor,0) +
1576 nvl(VTBL.VALORESFRETE,0)) * nvl(VTBL.ICMSPERCTRIBUT,0) / 100,0)),
1577 aliqicms = DECODE(TIPODOCTO,'C',VTBL.ICMSPERCALIQ,0),
1578 Vlricms = DECODE(vsTipoCalcICMS, 'O', 0, DECODE(TIPODOCTO,'C',(nvl(vnValorFretePeso,0) +
1579 nvl(vnValorFreteValor,0) +
1580 nvl(VTBL.VALORESFRETE,0)) * nvl(VTBL.ICMSPERCTRIBUT,0) / 100 *
1581 nvl(VTBL.ICMSPERCALIQ,0) / 100,0)),
1582 Vlrisentoicms = DECODE(TIPODOCTO,'C',(nvl(vnValorFretePeso,0) +
1583 nvl(vnValorFreteValor,0) +
1584 nvl(VTBL.VALORESFRETE,0)) * nvl(VTBL.VLRISENTOICMS,0) / 100,0),
1585 Vlroutrosicms = DECODE(TIPODOCTO,'C',(nvl(vnValorFretePeso,0) +
1586 nvl(vnValorFreteValor,0) +
1587 nvl(VTBL.VALORESFRETE,0)) * nvl(VTBL.VLROUTROSICMS,0) / 100,0),
1588 Vlrbasepis = (vnValorFretePeso +
1589 vnValorFreteValor +
1590 VTBL.VALORESFRETE),
1591 Aliqpis = VTBL.ALIQPIS,
1592 Vlrbasecofins = (vnValorFretePeso +
1593 vnValorFreteValor +
1594 VTBL.VALORESFRETE),
1595 Aliqcofins = VTBL.ALIQCOFINS,
1596 Peso = vtblTotais.PESOBRUTO,
1597 Quantidade = vtblTotais.QTDVOLUMES,
1598 Situacao = 'N',
1599 Vlrbaseiss = DECODE(TIPODOCTO,'E',(vnValorFretePeso +
1600 vnValorFreteValor +
1601 VTBL.VALORESFRETE),0),
1602 Aliqiss = DECODE(TIPODOCTO,'E', VTBL.PERCISS, NULL),
1603 Vlriss = DECODE(TIPODOCTO,'E',(nvl(vnValorFretePeso,0) +
1604 nvl(vnValorFreteValor,0) +
1605 nvl(VTBL.VALORESFRETE,0)) * nvl(VTBL.PERCISS,0) / 100,0),
1606 Rateado = 'N',
1607 SEQEXPEDIDOR = VTBL.SEQEXPEDIDOR,
1608 SEQRECEBEDOR = VTBL.SEQRECEBEDOR,
1609 TIPOPAGTOFIN = VTBL.TIPOPAGTOFIN,
1610 SEQSUBCONTRATADO = VTBL.SEQSUBCONTRATADO,
1611 CTECHAVEACESSOTOMADOR = VTBL.CTECHAVEACESSOTOMADOR,
1612 PRODPREDOMINANTE = VTBL.PRODPREDOMINANTE,
1613 CARACTERISCACARGA = VTBL.CARACTERISCACARGA,
1614 DTAHORAVIAGEM = VTBL.DTAHORAVIAGEM,
1615 SEQVALEPEDAGIO = VTBL.SEQVALEPEDAGIO
1616 WHERE NROEMPENHO = VTBLTOTAIS.NROEMPENHO;
1617 If VTBL.SEQEMBARCACAO is not null then
1618 UPDATE MFT_EMPENHO A
1619 SET A.VLRBASEAFRMM = NVL(A.VLRTOTALSERVICO -
1620 A.VLRISENTOICMS -
1621 A.VLROUTROSICMS, 0),
1622 A.VLRAFRMM = NVL((A.VLRTOTALSERVICO -
1623 A.VLRISENTOICMS -
1624 A.VLROUTROSICMS) * VTBL.PERCALIQAFRMM / 100, 0)
1625 WHERE NROEMPENHO = VTBLTOTAIS.NROEMPENHO;
1626 End if;
1627 /* Partilha ICMS */
1628 IF vsIndConsumidorFinalCGO = 'S' AND VTBL.UFREMETENTE != VTBL.UFDESTINO AND ((vsIndUtilPartilhaIcms = 'S' AND NVL(VTBL.INDCONTRIBICMS, 'N') = 'N') OR vsIndUtilPartilhaIcms = 'C') THEN
1629 vnVlrIcmsCalcOrigem := NULL;
1630 vnVlrIcmsCalcDestino := NULL;
1631 -- Busca Aliquota de destino e tipo calc icms partilha
1632 SELECT PKG_MFTTRANSPORTADORA.mftf_DadosImpostos(
1633 VTBL.NROEMPRESA,
1634 VTBL.NROTRIBUTACAO,
1635 VTBL.TIPTRIBUTACAO,
1636 VTBL.UFDESTINO,
1637 VTBL.UFREMETENTE,
1638 'ICMSALIQDEST'),
1639 DECODE(PKG_MFTTRANSPORTADORA.mftf_DadosImpostos(
1640 VTBL.NROEMPRESA,
1641 VTBL.NROTRIBUTACAO,
1642 VTBL.TIPTRIBUTACAO,
1643 VTBL.UFDESTINO,
1644 VTBL.UFREMETENTE,
1645 'TIPCALCICMSPART'), 1, 'S', 'P'),
1646 PKG_MFTTRANSPORTADORA.mftf_DadosImpostos(
1647 VTBL.NROEMPRESA,
1648 VTBL.NROTRIBUTACAO,
1649 VTBL.TIPTRIBUTACAO,
1650 VTBL.UFDESTINO,
1651 VTBL.UFREMETENTE,
1652 'PERFECP')
1653 INTO vnPercAliqDest,
1654 vsTipCalcIcmsPart,
1655 vnPerAliquotaFecpPartilha
1656 FROM DUAL;
1657 SELECT NVL(SUM(A.VLRICMS),0)
1658 INTO vnVlrIcmsOp
1659 FROM MFT_EMPENHO A
1660 WHERE NROEMPENHO = VTBLTOTAIS.NROEMPENHO ;
1661 SP_CALC_PARTILHAICMS( vsIndConsumidorFinalCGO, NVL(VTBL.INDCONTRIBICMS, 'N'), vsTipCalcIcmsPart,
1662 VTBL.UFREMETENTE, VTBL.UFDESTINO,
1663 NVL(VTBL.ICMSPERCALIQ, 0), vnPercAliqDest,
1664 vnPerAliquotaFecpPartilha, (vnValorFretePeso + vnValorFreteValor + VTBL.VALORESFRETE),
1665 vnVlrIcmsOp,
1666 vnPerAliqIntPartilhaIcms, vnBasCalcIcmsPartilha,
1667 vnBasCalcIcmsPartInterEst, vnPerPartilhaIcms,
1668 vnVlrIcmsCalcOrigem, vnVlrIcmsCalcDestino,
1669 vnVlrBaseFecpPartilha, vnPerAliquotaFecpPartilha, vnVlrFecpPartilha);
1670 IF NVL(vnVlrIcmsCalcOrigem, 0) > 0 OR NVL(vnVlrIcmsCalcDestino, 0) > 0 THEN
1671 UPDATE MFT_EMPENHO A
1672 SET A.INDCONSUMIDORFINAL = vsIndConsumidorFinalCGO,
1673 A.TIPOCALCICMSPARTILHA = vsTipCalcIcmsPart,
1674 A.PERALIQINTPARTILHAICMS = vnPerAliqIntPartilhaIcms,
1675 A.BASCALCICMSPARTILHA = vnBasCalcIcmsPartilha,
1676 A.BASCALCICMSPARTINTEREST = vnBasCalcIcmsPartInterEst,
1677 A.PERPARTILHAICMS = vnPerPartilhaIcms,
1678 A.VLRICMSCALCORIGEM = vnVlrIcmsCalcOrigem,
1679 A.VLRICMSCALCDESTINO = vnVlrIcmsCalcDestino,
1680 A.PERALIQUOTAFECPPARTILHA = vnPerAliquotaFecpPartilha,
1681 A.VLRFECPPARTILHA = vnVlrFecpPartilha
1682 WHERE NROEMPENHO = VTBLTOTAIS.NROEMPENHO;
1683 END IF;
1684 END IF;
1685 ELSE
1686 raise_application_error(-20101, psMsgErro);
1687 END IF;
1688 exception when OTHERS then
1689 IF pnOk = 0 Then
1690 IF VTBL.TIPOVLRFRETE IN ('E','K') THEN
1691 pnOk := 0;
1692 psMsgErro := psMsgErro;
1693 ELSIF VTBL.PERCFRETEROTAPRACA is null And VTBL.VLRFRETEROTAPRACA is null then
1694 pnOk := 0;
1695 psMsgErro := 'O Valor do Frete não está parametrizado!';
1696 Else
1697 pnOk := 0;
1698 psMsgErro := 'Erro ao gerar o CTRC!';
1699 End If;
1700 Else
1701 raise_application_error(-20101, SQLERRM);
1702 End If;
1703 End;
1704 If vtbl.TipoDocto = 'E' And vtbl.TipoPagtoFrete = 'A' Then
1705 mftp_geraRateioEmpenho(vtblTotais.NroEmpenho, pnOk, psMsgErro);
1706 End if;
1707 End loop;
1708 End if;
1709 end loop;
1710 end mftp_geraEmpenho;
1711 procedure mftp_cancEmpenho( pnNroEmpenho in integer,
1712 psUsuario in Varchar2,
1713 pnVerifDependencias IN INTEGER,
1714 pnVerifNfSm IN INTEGER,
1715 pnOk in out Integer,
1716 psMsgErro in out Varchar2 )
1717 is
1718 begin
1719 pnOk := 1;
1720 psMsgErro := null;
1721 mftp_ConsCancEmpenho( pnNroEmpenho, pnVerifDependencias, pnVerifNfSm, pnOk, psMsgErro );
1722 if pnOk = 1 then
1723 mftp_cancRateioEmpenho( pnNroEmpenho, pnOk, psMsgErro );
1724 if pnOk = 1 then
1725 UPDATE MFT_EMPENHO_CARGADF
1726 SET STATUS = 'I'
1727 WHERE NROEMPENHO = pnNroEmpenho;
1728 UPDATE MFT_EMPENHODF
1729 SET STATUS = 'I'
1730 WHERE NROEMPENHO = pnNroEmpenho;
1731 UPDATE MFT_EMPENHO
1732 SET SITUACAO = 'C',
1733 USUALTERACAO = psUsuario,
1734 DTAALTERACAO = SYSDATE
1735 WHERE NROEMPENHO = pnNroEmpenho;
1736 end if;
1737 end if;
1738 end;
1739 procedure mftp_geraCtrc(pnNroEmpresa in Integer,
1740 psUsuario in Varchar2,
1741 pnOk in out Integer,
1742 psMsgErro in out Varchar2)
1743 is
1744 vnNumeroNF number(15);
1745 vsSerieNF varchar2(3);
1746 vnSeqCtrc MFT_CTRC.SEQCTRC%TYPE;
1747 vUfEmp MAX_EMPRESA.UF%TYPE;
1748 vnCfop MAX_CODGERALOPER.CFOPESTADO%TYPE;
1749 vsPDGeraFinanc varchar(1);
1750 vnSeqGeracao integer;
1751 vsSeqCtrcGerados varchar2(2000);
1752 vnPDVlrMinimoCTRC number;
1753 vnNroEmpSerieNF max_empserienf.nroempresa%type;
1754 vnNroTributacao mft_tabfrete.nrotributacao%type;
1755 vnNroRegTributacao max_empresa.nroregtributacao%type;
1756 begin
1757 SP_BUSCAPARAMDINAMICO('MAXTRANSP',pnNroEmpresa,'GERA_FINANC','S','G',
1758 'INDIQUE O MOMENTO DE GERAÇÃO DOS TÍTULOS FINANCEIROS RELACIONADOS AOS CONHECIMENTOS DE TRANSPORTES:
1759G - NA GERAÇÃO DO CTRC;
1760E - NO REGISTRO DA DATA DE ENTREGA DO CTRC.
1761VALOR PADRÃO: G.',
1762 vsPDGeraFinanc);
1763 SP_BUSCAPARAMDINAMICO('MAXTRANSP',pnNroEmpresa,'VLR_MINIMO_CTRC','N','0',
1764 'INFORMA O VALOR MÍNIMO PARA GERAÇÃO DO CTRC?
1765OBS: CTRC COM VALOR ABAIXO DO MÍNIMO SERÃO GERADOS COM O VALOR DO PD.
1766INFORMAR O VALOR ZERO PARA NÃO UTILIZAR O PD.',
1767 vnPDVlrMinimoCTRC);
1768 pnOk := 1;
1769 psMsgErro := NULL;
1770 vsSeqCtrcGerados := NULL;
1771 SELECT S_MFT_SEQGERACAO.NEXTVAL
1772 INTO vnSeqGeracao
1773 FROM DUAL;
1774 for vtbl in
1775 ( SELECT A.NROEMPRESA, A.NROEMPENHO, A.CGO, B.SERIENF, (case when NVL(E.TIPOEMISCTE,'I') = 'I' then B.MODELONF else nvl(B.MODELOCTE,B.MODELONF) end) MODELO,
1776 DECODE(A.TIPOPAGTOFRETE,'A',D.NROFORMAPAGTO,R.NROFORMAPAGTO) NROFORMAPAGTO,
1777 DECODE(A.TIPOPAGTOFRETE,'A',D.NROCONDICAOPAGTO,R.NROCONDICAOPAGTO) NROCONDICAOPAGTO,
1778 D.UF UFDEST, A.TIPOPAGTOFRETE, B.GERLIVROFISCAL, B.SERIECTE, A.NROTABFRETE, D.INDCONTRIBICMS,
1779 A.SEQEXPEDIDOR, A.SEQRECEBEDOR, A.TIPOPAGTOFIN,
1780 A.SEQSUBCONTRATADO, A.CTECHAVEACESSOTOMADOR, A.PRODPREDOMINANTE, A.CARACTERISCACARGA, A.DTAHORAVIAGEM,
1781 A.SEQVALEPEDAGIO
1782 FROM MFT_EMPENHO A, MAX_CODGERALOPER B, MFTV_DESTINATARIO D, MFTV_REMETENTE R, MAX_EMPRESA E
1783 WHERE NOT EXISTS (SELECT 1 FROM MFT_CTRC B WHERE B.NROEMPENHO = A.NROEMPENHO)
1784 AND A.TIPODOCTO = 'C'
1785 AND A.CGO = B.CODGERALOPER
1786 AND A.SEQDESTINATARIO = D.SEQPESSOA
1787 AND A.SEQREMETENTE = R.SEQPESSOA
1788 AND A.NROEMPRESA = E.NROEMPRESA
1789 AND A.NROEMPRESA = pnNroEmpresa
1790 )loop
1791 SELECT C.SERIENF,
1792 A.UF
1793 INTO vsSerieNF,
1794 vUfEmp
1795 FROM MAX_EMPRESA A, MAX_EMPSERIENF C
1796 WHERE A.NROEMPRESA = C.NROEMPRESA
1797 AND A.NROEMPRESA = pnNroEmpresa
1798 AND C.SERIENF = NVL(DECODE(NVL(A.TIPOEMISCTE,'I'),'I',vtbl.serienf,nvl(vtbl.seriecte,vtbl.serienf)),
1799 ( SELECT E.SERIENFSAIDA
1800 FROM MAX_EMPRESASEG E
1801 WHERE A.NROSEGMENTOPRINC = E.NROSEGMENTO
1802 AND A.NROEMPRESA = E.NROEMPRESA
1803 AND E.SERIENFSAIDA = C.SERIENF));
1804 SELECT C.NUMERONF,
1805 C.NROEMPRESA
1806 INTO vnNumeroNF,
1807 vnNroEmpSerieNF
1808 FROM MAX_EMPRESA A,
1809 MAX_EMPSERIENF C
1810 WHERE A.NROEMPRESA = C.NROEMPRESA
1811 AND A.NROEMPRESA = FC5_RETEMPORIGDAEMPVIRTUAL( pnNroEmpresa, vsSerieNF )
1812 AND C.SERIENF = vsSerieNF
1813 FOR UPDATE;
1814 vnNumeroNF := vnNumeroNF+1;
1815 select S_MFT_CTRC.NEXTVAL into vnSeqCtrc from dual;
1816 if vtbl.NROTABFRETE is not null then
1817 SELECT max(A.NROTRIBUTACAO)
1818 INTO vnNroTributacao
1819 FROM MFT_TABFRETE A
1820 WHERE A.NROTABFRETE = vtbl.NROTABFRETE;
1821 SELECT MAX(NROEMPRESA)
1822 INTO vnNroRegTributacao
1823 FROM MFT_EMPENHO_CARGADF A
1824 WHERE A.NROEMPENHO = vtbl.NROEMPENHO;
1825 if vnNroTributacao is not null and vnNroRegTributacao is not null then
1826 vnCfop:= mftf_BuscaCfop(VTBL.CGO,vnNroTributacao,VTBL.INDCONTRIBICMS,VTBL.UFDEST,vUfEmp, vnNroRegTributacao);
1827 end if;
1828 end if;
1829 if vnCfop is null then
1830 SELECT
1831 CASE WHEN VTBL.UFDEST = 'EX' THEN CFOPEXTERIOR
1832 WHEN VTBL.UFDEST = vUfEmp THEN CFOPESTADO
1833 ELSE CFOPFORAESTADO END
1834 INTO vnCfop
1835 FROM MAX_CODGERALOPER A
1836 WHERE CODGERALOPER = VTBL.CGO;
1837 end if;
1838 If vnCfop is null then
1839 pnOk := 0;
1840 psMsgErro := 'O CGO ' || to_char(VTBL.CGO) || ' não possui CFOP cadastrado.';
1841 end if;
1842 if pnOk = 1 then
1843 INSERT INTO MFT_CTRC( SEQCTRC, NROCTRC, SERIECTRC, SUBSERIECTRC,
1844 NROEMPRESA, NROEMPENHO, DTALANCAMENTO, INDEMISSAO,
1845 LINKERP, USUALTERACAO, DTAALTERACAO,
1846 NroFormaPagto, NroCondicaoPagto, ESPECIEDOCTO,
1847 CODMODELO, SITUACAO, --PROCESSADO,
1848 CODSITDOC, CFOP, GERLIVROFISCAL,
1849 SEQGERACAO, SEQEXPEDIDOR, SEQRECEBEDOR, TIPOPAGTOFIN,
1850 SEQSUBCONTRATADO, CTECHAVEACESSOTOMADOR, PRODPREDOMINANTE, CARACTERISCACARGA,
1851 DTAHORAVIAGEM, SEQVALEPEDAGIO )
1852 VALUES(
1853 vnSeqCtrc, vnNumeroNF, vsSerieNF, NULL,
1854 VTBL.NROEMPRESA, VTBL.NROEMPENHO, TRUNC(SYSDATE), 'N',
1855 null, psUsuario, SYSDATE,
1856 VTBL.NROFORMAPAGTO, VTBL.NROCONDICAOPAGTO, 'CTRC',
1857 VTBL.MODELO, 'N', --'S',
1858 '00', vnCfop, VTBL.GERLIVROFISCAL,
1859 vnSeqGeracao, VTBL.SEQEXPEDIDOR, VTBL.SEQRECEBEDOR, VTBL.TIPOPAGTOFIN,
1860 VTBL.SEQSUBCONTRATADO, VTBL.CTECHAVEACESSOTOMADOR, VTBL.PRODPREDOMINANTE, VTBL.CARACTERISCACARGA,
1861 VTBL.DTAHORAVIAGEM, VTBL.SEQVALEPEDAGIO );
1862 --Atualiza tabela de empenho com o valor mínimo do total de serviços
1863 IF vnPDVlrMinimoCTRC > 0 THEN
1864 UPDATE MFT_EMPENHO A
1865 SET A.VLRTOTALSERVICO = A.VLRTOTALSERVICO + (vnPDVlrMinimoCTRC - A.VLRTOTALSERVICO),
1866 A.FRETEVALOR = A.FRETEVALOR + (vnPDVlrMinimoCTRC - A.FRETEVALOR)
1867 WHERE A.NROEMPENHO = VTBL.NROEMPENHO
1868 AND A.VLRTOTALSERVICO < vnPDVlrMinimoCTRC;
1869 END IF;
1870 --mftp_geraRateioCtrc( vnSeqCtrc, pnOk, psMsgErro );
1871 if vsPDGeraFinanc != 'E' then
1872 mftp_geraFinancCtrcC( vnSeqCtrc, psUsuario, pnOk, psMsgErro );
1873 end if;
1874 if pnOk = 1 then
1875 UPDATE MAX_EMPSERIENF
1876 SET NUMERONF = vnNumeroNF
1877 WHERE NROEMPRESA = vnNroEmpSerieNF
1878 AND SERIENF = vsSerieNF;
1879 UPDATE MFT_CTRC
1880 SET PROCESSADO = 'S',
1881 GERAMANIFESTO = 'S'
1882 WHERE SEQCTRC = VNSEQCTRC;
1883 end if;
1884 end if;
1885 if vsSeqCtrcGerados IS NULL THEN
1886 vsSeqCtrcGerados := to_char(vnSeqCtrc);
1887 ELSE
1888 vsSeqCtrcGerados := vsSeqCtrcGerados || ', ' || to_char(vnSeqCtrc);
1889 END IF;
1890 end loop;
1891 --Lançamento de conta corrente
1892 for vt in (
1893 select distinct A.NROCARGA
1894 from MFTV_EMPENHO_DOC a
1895 where A.SEQDOCTO in (select distinct COLUMN_VALUE
1896 from table(cast(c5_ComplexIn.c5InTable(vsSeqCtrcGerados) as c5InStrTable))
1897 where COLUMN_VALUE > 0)
1898 and A.INDTIPODOC = 'C'
1899 and A.STATUS = 'A') loop
1900 mftp_LancaComissao(vt.NroCarga, vnSeqGeracao, 'C', psUsuario);
1901 end loop;
1902 end;
1903 procedure mftp_geraCtrcMan( pnSeqCtrc in Integer,
1904 psUsuAlteracao in varchar2,
1905 pnOk in out Integer,
1906 psMsgErro in out Varchar2)
1907 is
1908 vnNumeroNF MFT_NFPS.NRONFPS%TYPE;
1909 vsSerieNF MFT_NFPS.SERIENFPS%TYPE;
1910 vnNroEmpresa MFT_NFPS.NROEMPRESA%TYPE;
1911 vsSerieCGO MFT_NFPS.SERIENFPS%TYPE;
1912 vsModelo MFT_NFPS.CODMODELO%TYPE;
1913 vsGerLivroFiscal MFT_NFPS.GERLIVROFISCAL%TYPE;
1914 vsPDGeraFinanc varchar(1);
1915 vsSerieCteCGO MFT_NFPS.SERIENFPS%TYPE;
1916 vnNroEmpSerieNF MAX_EMPSERIENF.NROEMPRESA%TYPE;
1917 begin
1918 pnOk := 1;
1919 psMsgErro := NULL;
1920 SELECT CGO.SERIENF, A.NROEMPRESA, (CASE WHEN NVL(B.TIPOEMISCTE, 'I') = 'I' THEN CGO.MODELONF ELSE CGO.MODELOCTE END), CGO.GERLIVROFISCAL, CGO.SERIECTE
1921 INTO vsSerieCGO, vnNroEmpresa, vsModelo, vsGerLivroFiscal, vsSerieCteCGO
1922 FROM MFT_CTRC A, MFT_EMPENHO E, MAX_CODGERALOPER CGO, MAX_EMPRESA B
1923 WHERE A.NROEMPENHO = E.NROEMPENHO
1924 AND E.CGO = CGO.CODGERALOPER
1925 AND A.NROEMPRESA = B.NROEMPRESA
1926 AND A.SEQCTRC = pnSeqCtrc;
1927 SP_BUSCAPARAMDINAMICO('MAXTRANSP', 0,'GERA_FINANC','S','G',
1928 'INDIQUE O MOMENTO DE GERAÇÃO DOS TÍTULOS FINANCEIROS RELACIONADOS AOS CONHECIMENTOS DE TRANSPORTES:
1929G - NA GERAÇÃO DO CTRC;
1930E - NO REGISTRO DA DATA DE ENTREGA DO CTRC.
1931VALOR PADRÃO: G.',
1932 vsPDGeraFinanc);
1933 begin
1934 SELECT C.SERIENF
1935 INTO vsSerieNF
1936 FROM MAX_EMPRESA A, MAX_EMPSERIENF C
1937 WHERE A.NROEMPRESA = C.NROEMPRESA
1938 AND A.NROEMPRESA = vnNroEmpresa
1939 AND C.SERIENF = NVL(DECODE(NVL(A.TIPOEMISCTE,'I'),'I',vsSerieCGO,nvl(vsSerieCteCGO,vsSerieCGO)),
1940 ( SELECT E.SERIENFSAIDA
1941 FROM MAX_EMPRESASEG E
1942 WHERE A.NROSEGMENTOPRINC = E.NROSEGMENTO
1943 AND A.NROEMPRESA = E.NROEMPRESA
1944 AND E.SERIENFSAIDA = C.SERIENF))
1945 /*AND C.SERIENF = NVL(vsSerieCGO,( SELECT E.SERIENFSAIDA
1946 FROM MAX_EMPRESASEG E
1947 WHERE A.NROSEGMENTOPRINC = E.NROSEGMENTO
1948 AND A.NROEMPRESA = E.NROEMPRESA
1949 AND E.SERIENFSAIDA = C.SERIENF)) */;
1950 SELECT C.NUMERONF,
1951 C.NROEMPRESA
1952 INTO vnNumeroNF,
1953 vnNroEmpSerieNF
1954 FROM MAX_EMPRESA A, MAX_EMPSERIENF C
1955 WHERE A.NROEMPRESA = C.NROEMPRESA
1956 AND A.NROEMPRESA = FC5_RETEMPORIGDAEMPVIRTUAL( vnNroEmpresa, vsSerieNF )
1957 AND C.SERIENF = vsSerieNF
1958 FOR UPDATE;
1959 vnNumeroNF := vnNumeroNF +1;
1960 exception when NO_DATA_FOUND then
1961 pnOk := 0;
1962 psMsgErro := 'A série configurada no CGO (Série ' || nvl(vsSerieCteCGO,vsSerieCGO) || ') não está configurada para esta empresa.';
1963 end;
1964 If pnOk = 1 then
1965 UPDATE MFT_CTRC
1966 SET NROCTRC = vnNumeroNF,
1967 SERIECTRC = vsSerieNF,
1968 PROCESSADO = 'S',
1969 CODMODELO = vsModelo,
1970 GERLIVROFISCAL = vsGerLivroFiscal,
1971 GERAMANIFESTO = 'S'
1972 WHERE SEQCTRC = pnSeqCtrc;
1973 UPDATE MAX_EMPSERIENF
1974 SET NUMERONF = vnNumeroNF
1975 WHERE NROEMPRESA = vnNroEmpSerieNF
1976 AND SERIENF = vsSerieNF;
1977 If vsPDGeraFinanc != 'E' then
1978 mftp_geraFinancCtrcC( pnSeqCtrc, psUsuAlteracao, pnOk, psMsgErro );
1979 else
1980 pnOk := 1;
1981 end if;
1982 end if;
1983 end mftp_geraCtrcMan;
1984 procedure mftp_cancelaCtrc(pnSeqCtrc in Integer,
1985 psUsuCancelou in Varchar2,
1986 pnOk in out Integer,
1987 psMsgErro in out Varchar2,
1988 psOrigem in varchar2 default 'C')
1989 is
1990 vnNroEmpenho INTEGER;
1991 begin
1992 if NVL(psOrigem, 'C') != 'I' then
1993 mftp_ConsCancCTRC( pnSeqCtrc, pnOk, psMsgErro );
1994 elsif NVL(psOrigem, 'C') = 'I' then
1995 pnOK:= 1;
1996 end if;
1997 if pnOk = 1 then
1998 select nroempenho into vnNroEmpenho from mft_ctrc where seqctrc = pnSeqCtrc;
1999 mftp_cancFinancCtrc( pnSeqCtrc, psUsuCancelou, pnOk, psMsgErro);
2000 if pnOk = 1 then
2001 mftp_cancRateioCtrc( pnSeqCtrc, pnOk, psMsgErro );
2002 if pnOk = 1 then
2003 mftp_cancEmpenho( vnNroEmpenho, psUsuCancelou, 0, 0, pnOk, psMsgErro );
2004 if pnOk = 1 then
2005 update mft_ctrc
2006 set codsitdoc = 2,
2007 usucancelou = psUsuCancelou,
2008 dtacancelou = sysdate,
2009 situacao = 'C'
2010 where seqctrc = pnSeqCtrc;
2011 end if;
2012 end if;
2013 end if;
2014 end if;
2015 end;
2016 procedure mftp_geraNfps( pnNroEmpresa in Integer,
2017 pnIdUsuario in Integer,
2018 psUsuario in Varchar2,
2019 pnOk out Integer,
2020 psMsgErro out Varchar2) is
2021 /* Procedure responsável pela geração das NFPS do sistema Transportadora
2022 Nesta procedure serão listados todos os empenhos gerados que ainda não tenham nota fiscal
2023 de prestação de serviços vinculada. */
2024 vnSeqNfps MFT_NFPS.SEQNFPS%TYPE;
2025 vnNumeroNF MFT_NFPS.NRONFPS%TYPE;
2026 vsSerieNF MFT_NFPS.SERIENFPS%TYPE;
2027 vnLinkErp MFT_NFPS.LINKERP%TYPE;
2028 vnDiaVenctoIss NUMBER(2);
2029 vdDtaVenctoIss DATE;
2030 vnCfop MFT_NFPS.CFOP%TYPE;
2031 vsPDAgrupaNFSTRemData varchar2(1);
2032 vnPDSeqDestinatarioDiversos MFT_DESTINATARIO.SEQDESTINATARIO%TYPE;
2033 vnSeqGeracao INTEGER;
2034 vsPDOrdemGeraOBSEmpenho max_parametro.valor%type;
2035 vnNroEmpSerieNF max_empserienf.nroempresa%type;
2036 vsModeloCTE max_codgeraloper.modelocte%type;
2037 vsModeloNF max_codgeraloper.modelonf%type;
2038 vsModeloNFE max_codgeraloper.modelonfe%type;
2039 begin
2040 pnOk := 1;
2041 psMsgErro := NULL;
2042 SELECT S_MFT_SEQGERACAO.NEXTVAL
2043 INTO vnSeqGeracao
2044 FROM DUAL;
2045 --Busca o parametro dinamico --
2046 SP_BUSCAPARAMDINAMICO('MAXTRANSP',pnNroEmpresa,'DIAVENCISS','N',10,
2047 'DIA DO VENCIMENTO DO ISS - SERÁ IMPRESSO NA NFST', vnDiaVenctoIss);
2048 SP_BUSCAPARAMDINAMICO('MAXTRANSP',0,'AGRUPA_NFST_REM_DATA','S','N',
2049 'AO GERAR AUTOMATICAMENTE, AGRUPAR AS NFSTs GERADAS POR REMETENTE E DATA DE GERAÇÃO?
2050OBS.: ESTE PROCESSO SERÁ VÁLIDO APENAS QUANDO O REMETENTE FOR O TOMADOR DO SERVIÇO (FRETE PAGO).
2051S - SIM
2052A - AGRUPA IGNORANDO A DATA DE GERAÇÃO
2053N - NÃO (PADRÃO)', vsPDAgrupaNFSTRemData);
2054 SP_BUSCAPARAMDINAMICO('MAXTRANSP',pnNroEmpresa,'COD_DESTINATARIO_DIVERSOS','N',0,
2055 'INFORME O CÓDIGO DO DESTINATÁRIO QUE SERÁ UTILIZADO PARA GERAÇÃO DE CTRCS A PARTIR DE MANIFESTOS DE CARGAS.',
2056 vnPDSeqDestinatarioDiversos);
2057 SP_BUSCAPARAMDINAMICO('MAXTRANSP',pnNroEmpresa,'ORDEM_GERA_OBS_EMPENHO','S','L',
2058 'INFORMA A ORDEM DE GERAÇÃO DA OBSERVAÇÃO PARA NFTS?' || chr(13)||chr(10) ||
2059 'L-GERA OBS NO LANÇAMENTO DO NFTS(PADRÃO).' || chr(13)||chr(10) ||
2060 'E-GERA OBS NA EMISSÃO DO NFTS', vsPDOrdemGeraOBSEmpenho);
2061 for T in (
2062 SELECT LAG(SEQDESTINATARIO) OVER(ORDER BY TIPOPAGTOFRETE, SEQREMETENTE, SEQDESTINATARIO, DTALANCAMENTO) SEQDESTINATARIOANT,
2063 LAG(SEQPESSOA) OVER(ORDER BY TIPOPAGTOFRETE, SEQREMETENTE, SEQDESTINATARIO, DTALANCAMENTO) SEQREMETENTEANT,
2064 LAG(TIPOPAGTOFRETE) OVER(ORDER BY TIPOPAGTOFRETE, SEQREMETENTE, SEQDESTINATARIO, DTALANCAMENTO) TIPOPAGTOFRETEANT,
2065 LAG(DTALANCAMENTO) OVER(ORDER BY TIPOPAGTOFRETE, SEQREMETENTE, SEQDESTINATARIO, DTALANCAMENTO) DTALANCAMENTOANT,
2066 LEAD(SEQDESTINATARIO) OVER(ORDER BY TIPOPAGTOFRETE, SEQREMETENTE, SEQDESTINATARIO, DTALANCAMENTO) SEQDESTINATARIOPROX,
2067 LEAD(SEQPESSOA) OVER(ORDER BY TIPOPAGTOFRETE, SEQREMETENTE, SEQDESTINATARIO, DTALANCAMENTO) SEQREMETENTEPROX,
2068 LEAD(TIPOPAGTOFRETE) OVER(ORDER BY TIPOPAGTOFRETE, SEQREMETENTE, SEQDESTINATARIO, DTALANCAMENTO) TIPOPAGTOFRETEPROX,
2069 LEAD(DTALANCAMENTO) OVER(ORDER BY TIPOPAGTOFRETE, SEQREMETENTE, SEQDESTINATARIO, DTALANCAMENTO) DTALANCAMENTOPROX,
2070 TIPOPAGTOFRETE,
2071 SEQREMETENTE,
2072 NOMEREM,
2073 SEQDESTINATARIO,
2074 NOMEDEST,
2075 NROEMPRESA,
2076 CGO,
2077 SERIE,
2078 SEQPESSOA,
2079 VERSAOPESSOA,
2080 NROCONDICAOPAGTO,
2081 NROFORMAPAGTO,
2082 NROEMPENHO,
2083 GERLIVROFISCAL,
2084 DTALANCAMENTO,
2085 DECODE((vsPDAgrupaNFSTRemData || TIPOPAGTOFRETE), 'SP', vsPDAgrupaNFSTRemData, 'AP', vsPDAgrupaNFSTRemData, 'N') AGRUPAREMDATA,
2086 SERIECTE
2087 FROM (SELECT A.TIPOPAGTOFRETE,
2088 A.SEQREMETENTE,
2089 R.NOMERAZAO NOMEREM,
2090 DECODE((vsPDAgrupaNFSTRemData || A.TIPOPAGTOFRETE), 'SP', vnPDSeqDestinatarioDiversos, 'AP', vnPDSeqDestinatarioDiversos, A.SEQDESTINATARIO) SEQDESTINATARIO,
2091 D.NOMERAZAO NOMEDEST,
2092 A.NROEMPRESA,
2093 C.CODGERALOPER CGO,
2094 C.SERIENF SERIE,
2095 DECODE(A.TIPOPAGTOFRETE, 'A', D.SEQPESSOA, R.SEQPESSOA) SEQPESSOA,
2096 DECODE(A.TIPOPAGTOFRETE, 'A', D.VERSAO, R.VERSAO) VERSAOPESSOA,
2097 DECODE(A.TIPOPAGTOFRETE, 'A', D.NROCONDICAOPAGTO, R.NROCONDICAOPAGTO) NROCONDICAOPAGTO,
2098 DECODE(A.TIPOPAGTOFRETE, 'A', D.NROFORMAPAGTO, R.NROFORMAPAGTO) NROFORMAPAGTO,
2099 A.NROEMPENHO,
2100 TRUNC( A.DTALANCAMENTO ) DTALANCAMENTO,
2101 C.GERLIVROFISCAL,
2102 C.SERIECTE
2103 FROM MFT_EMPENHO A,
2104 MFTV_DESTINATARIO D,
2105 MFTV_REMETENTE R,
2106 MAX_CODGERALOPER C,
2107 MFTX_DADOSNFPS TEMP,
2108 MAX_EMPRESA B
2109 WHERE A.TIPODOCTO = 'E'
2110 AND A.SITUACAO = 'N'
2111 AND D.SEQPESSOA =
2112 DECODE((vsPDAgrupaNFSTRemData || A.TIPOPAGTOFRETE), 'SP', vnPDSeqDestinatarioDiversos, 'AP', vnPDSeqDestinatarioDiversos, A.SEQDESTINATARIO)
2113 AND A.SEQREMETENTE = R.SEQPESSOA
2114 AND A.NROEMPENHO = TEMP.NROEMPENHO
2115 AND TEMP.NROEMPRESA = pnNroEmpresa
2116 AND TEMP.IDUSUARIO = pnIdUsuario
2117 AND C.CODGERALOPER = TEMP.CGO_NFPS
2118 AND B.NROEMPRESA = A.NROEMPRESA
2119 AND NOT EXISTS (SELECT 1
2120 FROM MFT_NFPSEMPENHO B,
2121 MFT_NFPS C
2122 WHERE B.NROEMPENHO = A.NROEMPENHO
2123 AND B.SEQNFPS = C.SEQNFPS
2124 AND C.SITUACAO = 'N'))
2125 ORDER BY TIPOPAGTOFRETE,
2126 SEQREMETENTE,
2127 SEQDESTINATARIO
2128 ) loop
2129 if (T.TIPOPAGTOFRETEANT != T.TIPOPAGTOFRETE) or
2130 (T.TIPOPAGTOFRETEANT is null) or
2131 (T.SEQDESTINATARIOANT != T.SEQDESTINATARIO) or
2132 (T.SEQDESTINATARIOANT is null) or
2133 (T.SEQREMETENTEANT != T.SEQREMETENTE) or
2134 (T.SEQREMETENTEANT is null) or
2135 (T.DTALANCAMENTOANT != T.DTALANCAMENTO and ((vsPDAgrupaNFSTRemData || T.TIPOPAGTOFRETE) = 'SP') ) then
2136 select S_MFT_NFPS.NEXTVAL, s_seqlinkerp.nextval into vnSeqNfps, vnLinkErp from dual;
2137 select a.cfopestado, nvl(a.modelocte, '07'), nvl(a.modelonf, '07'), nvl(a.modelonfe, '07')
2138 into vncfop,
2139 vsModeloCTE,
2140 vsModeloNF,
2141 vsModeloNFE
2142 from max_codgeraloper a
2143 where codgeraloper = t.cgo;
2144 SELECT C.SERIENF, DECODE(C.TIPODOCTO,
2145 'E', DECODE(A.Tipoemisnfe, 'I', vsModeloNF, vsModeloNFE),
2146 'C', DECODE(A.TIPOEMISCTE, 'I', vsModeloNF, vsModeloCTE),
2147 vsModeloNF)
2148 INTO vsSerieNF,
2149 vsModeloNF
2150 FROM MAX_EMPRESA A, MAX_EMPSERIENF C
2151 WHERE A.NROEMPRESA = C.NROEMPRESA
2152 AND A.NROEMPRESA = pnNroEmpresa
2153 AND C.SERIENF = NVL(DECODE(NVL(A.TIPOEMISCTE,'I'),'I',T.SERIE,nvl(T.SERIECTE,T.SERIE)),
2154 ( SELECT E.SERIENFSAIDA
2155 FROM MAX_EMPRESASEG E
2156 WHERE A.NROSEGMENTOPRINC = E.NROSEGMENTO
2157 AND A.NROEMPRESA = E.NROEMPRESA
2158 AND E.SERIENFSAIDA = C.SERIENF))
2159 /*AND C.SERIENF = NVL(T.SERIE,( SELECT E.SERIENFSAIDA
2160 FROM MAX_EMPRESASEG E
2161 WHERE A.NROSEGMENTOPRINC = E.NROSEGMENTO
2162 AND A.NROEMPRESA = E.NROEMPRESA
2163 AND E.SERIENFSAIDA = C.SERIENF))*/;
2164 SELECT C.NUMERONF,
2165 C.NROEMPRESA
2166 INTO vnNumeroNF,
2167 vnNroEmpSerieNF
2168 FROM MAX_EMPRESA A, MAX_EMPSERIENF C
2169 WHERE A.NROEMPRESA = C.NROEMPRESA
2170 AND A.NROEMPRESA = FC5_RETEMPORIGDAEMPVIRTUAL( pnNroEmpresa, vsSerieNF )
2171 AND C.SERIENF = vsSerieNF
2172 FOR UPDATE;
2173 vnNumeroNF := vnNumeroNF+1;
2174 INSERT INTO MFT_NFPS(
2175 SEQNFPS, NROEMPRESA, NRONFPS, SERIENFPS,
2176 SUBSERIENFPS, CGO, DTAHORAEMISSAO, INDEMISSAO,
2177 LINKERP, USUALTERACAO, DTAALTERACAO,
2178 ESPECIEDOCTO, CODSITDOC, SEQPESSOA, VERSAO,
2179 DTALANCAMENTO, NROCONDICAOPAGTO, NROFORMAPAGTO,
2180 CODMODELO, SITUACAO, PROCESSADO, CFOP, GERLIVROFISCAL, AGRUPAREMDATA,
2181 SEQGERACAO )
2182 VALUES(
2183 vnSeqNfps, T.NROEMPRESA, vnNumeroNF, vsSerieNF,
2184 null, T.CGO, NULL, 'N',
2185 vnLinkErp, psUsuario, SYSDATE,
2186 'NFST', '00', T.SEQPESSOA, T.VERSAOPESSOA,
2187 TRUNC(SYSDATE), T.NROCONDICAOPAGTO, T.NROFORMAPAGTO,
2188 vsModeloNF, 'N', 'S', vnCfop, T.GERLIVROFISCAL, T.AGRUPAREMDATA,
2189 vnSeqGeracao );
2190 UPDATE MAX_EMPSERIENF
2191 SET NUMERONF = vnNumeroNF
2192 WHERE NROEMPRESA = vnNroEmpSerieNF
2193 AND SERIENF = vsSerieNF;
2194 end if;
2195 INSERT INTO MFT_NFPSEMPENHO(
2196 SEQNFPSEMPENHO, NROEMPENHO, SEQNFPS )
2197 VALUES(
2198 S_MFT_NFPSEMPENHO.NEXTVAL, T.NROEMPENHO, vnSeqNfps );
2199 if (T.TIPOPAGTOFRETEPROX != T.TIPOPAGTOFRETE) or
2200 (T.TIPOPAGTOFRETEPROX is null) or
2201 (T.SEQDESTINATARIOPROX != T.SEQDESTINATARIO) or
2202 (T.SEQDESTINATARIOPROX is null) or
2203 (T.SEQREMETENTEPROX != T.SEQREMETENTE) or
2204 (T.SEQREMETENTEPROX is null) or
2205 (T.DTALANCAMENTOPROX != T.DTALANCAMENTO and ((vsPDAgrupaNFSTRemData || T.TIPOPAGTOFRETE) = 'SP') ) then
2206 mftp_geraFinancNfps( vnSeqNfps, psUsuario, pnOk, psMsgErro );
2207 vdDtaVenctoIss := TO_DATE(vnDiaVenctoIss || '/' || TO_CHAR(SYSDATE,'MM/YYYY'),'DD/MM/YYYY');
2208 IF TO_CHAR(SYSDATE,'DD') >= vnDiaVenctoIss THEN
2209 vdDtaVenctoIss := ADD_MONTHS(vdDtaVenctoIss,1);
2210 END IF;
2211 if nvl(vsPDOrdemGeraOBSEmpenho, 'L') = 'L' then
2212 update mft_nfps
2213 set OBSERVACAO = (
2214 SELECT
2215 'Entregas realizadas entre ' || TO_CHAR(D.DTAMIN, 'dd/MM/yyyy') || ' e ' || TO_CHAR(D.DTAMAX, 'dd/MM/yyyy') ||
2216 ' - ISS: ' || D.ALIQISS || '% a ser retido em ' || TO_CHAR(vdDtaVenctoIss, 'dd/MM/yyyy') || ' = ' || TRIM(to_char(D.VLRISS, '9999999999990D00'))
2217 FROM (SELECT C.SEQNFPS,
2218 MAX(B.ALIQISS) ALIQISS,
2219 SUM(B.VLRISS) VLRISS,
2220 TRUNC(MIN(D.DTALANCAMENTO)) DTAMIN,
2221 TRUNC(MAX(D.DTALANCAMENTO)) DTAMAX
2222 FROM MFT_EMPENHO B, MFT_NFPSEMPENHO C, MFT_NFPS D
2223 WHERE B.NROEMPENHO = C.NROEMPENHO
2224 AND C.SEQNFPS = D.SEQNFPS
2225 GROUP BY C.SEQNFPS) D
2226 WHERE D.SEQNFPS = vnSeqNfps)
2227 WHERE SEQNFPS = vnSeqNfps;
2228 end if;
2229 end if;
2230 /* RC 69991
2231 if vsSeqNfstGerados IS NULL then
2232 vsSeqNfstGerados := to_char(vnSeqNfps);
2233 else
2234 vsSeqNfstGerados := vsSeqNfstGerados || ',' || to_char(vnSeqNfps);
2235 end if;*/
2236 insert into maxx_selecrowid (sequencia, seqselecao) values (11, vnSeqNfps);
2237 end loop;
2238 --Lançamento de conta corrente
2239 /* RC 69991 for vt in (
2240 select distinct A.NROCARGA
2241 from MFTV_EMPENHO_DOC a
2242 where A.SEQDOCTO in (select distinct COLUMN_VALUE
2243 from table(cast(c5_ComplexIn.c5InTable(vsSeqNfstGerados) as c5InStrTable))
2244 where COLUMN_VALUE > 0)
2245 and A.INDTIPODOC = 'N'
2246 and A.STATUS = 'A') loop
2247 mftp_LancaComissao(vt.NroCarga, vnSeqGeracao, 'N', psUsuario);
2248 end loop; */
2249 for vt in (
2250 select distinct A.NROCARGA
2251 from MFTV_EMPENHO_DOC a,
2252 (select distinct (b.seqselecao) seqdocto from maxx_selecrowid b where b.sequencia = 11) c
2253 where A.SEQDOCTO = c.seqdocto
2254 and A.INDTIPODOC = 'N'
2255 and A.STATUS = 'A') loop
2256 mftp_LancaComissao(vt.NroCarga, vnSeqGeracao, 'N', psUsuario);
2257 end loop;
2258 end mftp_geraNfps;
2259 procedure mftp_geraNfpsMan( pnSeqNfps in Integer,
2260 psUsuAlteracao in varchar2,
2261 pnOk in out Integer,
2262 psMsgErro in out Varchar2)
2263 is
2264 vnNumeroNF MFT_NFPS.NRONFPS%TYPE;
2265 vsSerieNF MFT_NFPS.SERIENFPS%TYPE;
2266 vnNroEmpresa MFT_NFPS.NROEMPRESA%TYPE;
2267 vsSerieCGO MFT_NFPS.SERIENFPS%TYPE;
2268 vsModelo MFT_NFPS.CODMODELO%TYPE;
2269 vsGerLivroFiscal MFT_NFPS.GERLIVROFISCAL%TYPE;
2270 vsSerieCteCGO MFT_NFPS.SERIENFPS%TYPE;
2271 vnNroEmpSerieNF MAX_EMPSERIENF.NROEMPRESA%TYPE;
2272 begin
2273 SELECT CGO.SERIENF, A.NROEMPRESA, (CASE WHEN NVL(B.TIPOEMISCTE, 'I') = 'I' THEN CGO.MODELONF ELSE NVL(CGO.MODELOCTE, CGO.MODELONF) END) MODELO, CGO.GERLIVROFISCAL, CGO.SERIECTE
2274 INTO vsSerieCGO, vnNroEmpresa, vsModelo, vsGerLivroFiscal, vsSerieCteCGO
2275 FROM MFT_NFPS A, MAX_CODGERALOPER CGO, MAX_EMPRESA B
2276 WHERE A.CGO = CGO.CODGERALOPER
2277 AND A.NROEMPRESA = B.NROEMPRESA
2278 AND A.SEQNFPS = pnSeqNfps;
2279 SELECT C.SERIENF
2280 INTO vsSerieNF
2281 FROM MAX_EMPRESA A, MAX_EMPSERIENF C
2282 WHERE A.NROEMPRESA = C.NROEMPRESA
2283 AND A.NROEMPRESA = vnNroEmpresa
2284 AND C.SERIENF = NVL(DECODE(NVL(A.TIPOEMISCTE,'I'),'I',vsSerieCGO,nvl(vsSerieCteCGO,vsSerieCGO)),
2285 ( SELECT E.SERIENFSAIDA
2286 FROM MAX_EMPRESASEG E
2287 WHERE A.NROSEGMENTOPRINC = E.NROSEGMENTO
2288 AND A.NROEMPRESA = E.NROEMPRESA
2289 AND E.SERIENFSAIDA = C.SERIENF))
2290 /*AND C.SERIENF = NVL(vsSerieCGO,( SELECT E.SERIENFSAIDA
2291 FROM MAX_EMPRESASEG E
2292 WHERE A.NROSEGMENTOPRINC = E.NROSEGMENTO
2293 AND A.NROEMPRESA = E.NROEMPRESA
2294 AND E.SERIENFSAIDA = C.SERIENF))*/;
2295 SELECT C.NUMERONF,
2296 C.NROEMPRESA
2297 INTO vnNumeroNF,
2298 vnNroEmpSerieNF
2299 FROM MAX_EMPRESA A, MAX_EMPSERIENF C
2300 WHERE A.NROEMPRESA = C.NROEMPRESA
2301 AND A.NROEMPRESA = FC5_RETEMPORIGDAEMPVIRTUAL( vnNroEmpresa, vsSerieNF )
2302 AND C.SERIENF = vsSerieNF
2303 FOR UPDATE;
2304 vnNumeroNF := vnNumeroNF +1;
2305 UPDATE MFT_NFPS
2306 SET NRONFPS = vnNumeroNF,
2307 SERIENFPS = vsSerieNF,
2308 PROCESSADO = 'S',
2309 CODMODELO = vsModelo,
2310 GERLIVROFISCAL = vsGerLivroFiscal
2311 WHERE SEQNFPS = pnSeqNfps;
2312 UPDATE MAX_EMPSERIENF
2313 SET NUMERONF = vnNumeroNF
2314 WHERE NROEMPRESA = vnNroEmpSerieNF
2315 AND SERIENF = vsSerieNF;
2316 mftp_geraFinancNfps( pnSeqNfps, psUsuAlteracao, pnOk, psMsgErro );
2317 end;
2318 procedure mftp_cancelaNfps(pnSeqNfps in Integer,
2319 psUsuCancelou in Varchar2,
2320 pnOk in out Integer,
2321 psMsgErro in out Varchar2,
2322 psOrigem in varchar2 default 'C')
2323 is
2324 begin
2325 if nvl(psOrigem,'C') != 'I' then
2326 mftp_ConsCancNFPS(pnSeqNfps, pnOk, psMsgErro);
2327 elsif nvl(psOrigem,'C') = 'I' then
2328 pnOK:= 1;
2329 end if;
2330 if pnOk = 1 then
2331 mftp_cancFinancNfps(pnSeqNfps, psUsuCancelou, pnOk, psMsgErro);
2332 if pnOk = 1 then
2333/* FOR T IN
2334 ( SELECT
2335 A.NROEMPENHO, E.NRODOCTO, E.SERIEDOCTO
2336 FROM MFT_NFPSEMPENHO A, MFT_EMPENHO E
2337 WHERE A.NROEMPENHO = E.NROEMPENHO
2338 AND A.SEQNFPS = pnSeqNfps
2339 )LOOP
2340 mftp_cancEmpenho(T.NROEMPENHO, psUsuCancelou, 0, pnOk, psMsgErro);
2341 END LOOP;*/
2342 mftp_cancRateioNfps(pnSeqNfps, pnOk, psMsgErro);
2343 if pnOk = 1 then
2344 update mft_nfps
2345 set codsitdoc = 2,
2346 usucancelou = psUsuCancelou,
2347 dtacancelou = sysdate,
2348 situacao = 'C'
2349 where seqnfps = pnSeqNfps;
2350 end if;
2351 end if;
2352 end if;
2353 end;
2354 procedure mftp_geraFinancCtrcC( vnSeqCTRC in integer,
2355 psUsuAlteracao in varchar2,
2356 pnOk in out Integer,
2357 psMsgErro out Varchar2) is
2358 vnIdUsuario number;
2359 begin
2360 vnIdUsuario := 9999999999;
2361 -- insere na tabela
2362 Insert into mftx_ctrcfinanc ( seqctrc, iduser ) values ( vnSeqCTRC, vnIdUsuario );
2363 -- chama a procedure
2364 pkg_mfttransportadora.mftp_gerafinancctrc( vnIdUsuario,
2365 psusualteracao => psusualteracao,
2366 pnok => pnok,
2367 psmsgerro => psmsgerro);
2368 -- deleta da tabela
2369 delete from mftx_ctrcfinanc a where a.iduser = vnIdUsuario;
2370 end;
2371 procedure mftp_geraFinancCtrc( pnIdUsuario in number,
2372 psUsuAlteracao in varchar2,
2373 pnOk in out Integer,
2374 psMsgErro out Varchar2) is
2375 vnCount integer;
2376 vsPD_DataGeraFinanc max_parametro.valor%type;
2377 vsPD_AgrupaTituloDia max_parametro.valor%type;
2378 vsPD_AgrupaTituloEntrAuto max_parametro.valor%type;
2379 vsPD_CgoEntCtrcRem max_parametro.valor%type;
2380 vsEspecieFinCGO max_codgeraloper.codespeciefin%type;
2381 vnLinkErp integer;
2382 vnSeqTitAgrup integer;
2383 vsNotaTitulo fi_titanotacao.nota%type;
2384 vbEstourou boolean;
2385 vnPD_CgoEntCtrcRem_Fial max_parametro.valor%type;
2386 begin
2387 SP_BUSCAPARAMDINAMICO( 'MAXTRANSP', 0, 'GERA_FINANC', 'S', 'G',
2388 'INDIQUE O MOMENTO DE GERAÇÃO DOS TÍTULOS FINANCEIROS RELACIONADOS AOS CONHECIMENTOS DE TRANSPORTES:
2389 G - NA GERAÇÃO DO CTRC;
2390 E - NO REGISTRO DA DATA DE ENTREGA DO CTRC.
2391 VALOR PADRÃO: G.', vsPD_DataGeraFinanc );
2392 SP_BUSCAPARAMDINAMICO( 'MAXTRANSP', 0, 'AGRUPA_TITULO_DIA', 'S', 'N',
2393 'AGRUPA TÍTULOS REFERENTES A CTRCs NO REGISTRO DE ENTREGA DOS MESMOS? S - SIM / N - NÃO.
2394 OBS.: ESTE PD FUNCIONA EM CONJUNTO COM O PD GERA_FINANC, QUANDO SEU VALOR FOR E.
2395 VALOR PADRÃO = N', vsPD_AgrupaTituloDia );
2396 SP_BUSCAPARAMDINAMICO( 'MAXTRANSP', 0, 'AGRUPA_TITULO_ENTR_AUTO', 'S', 'N',
2397 'AGRUPA TÍTULOS DE OBRIGAÇÃO REFERENTES A CTRCs e NFSTs NA ENTRADA AUTOMÁTICA NO RECEBIMENTO? S/N.
2398 OBS.: ESTE PD FUNCIONARÁ QUANDO A ENTRADA AUTOMÁTICA ESTIVER HABILITADA. O CGO DA ENTRADA NÃO PODERÁ ESTAR MARCADO PARA GERAR FINANCEIRO.
2399 PADRÃO = N', vsPD_AgrupaTituloEntrAuto );
2400 SP_BUSCAPARAMDINAMICO( 'MAXTRANSP', 0,'ESPECIE_TITULO_ENTR_AUTO','S','X',
2401 'INFORME A ESPÉCIE FINANCEIRA UTILIZADA NA INTEGRAÇÃO AUTOMÁTICA DE CTRCs E NFSTs NO RECEBIMENTO.
2402 OBS.: ESTE PD FUNCIONARÁ QUANDO A ENTRADA AUTOMÁTICA ESTIVER HABILITADA. O CGO DA ENTRADA NÃO
2403 PODERÁ GERAR FINANCEIRO. VALOR PADRÃO: X.',
2404 vsEspecieFinCGO );
2405 vnLinkErp := 0;
2406 -- alimenta tabela temporaria (feito assim devido a lentidao)
2407 for SeqTmp in (select distinct (w.seqctrc) seqctrc
2408 from mftx_ctrcfinanc w
2409 where w.iduser = pnIdUsuario)
2410 loop
2411 insert into MFTX_DOCCTRC(seqctrc, nroempresa, nroctrc, seriectrc, vlrtotalservico, cgo,
2412 nrocondicaopagto, nroformapagto, dtaentrega, dtalancamento, linkerp,
2413 tipopagtofrete, seqdestinatario, seqremetente, codespecie,
2414 tipopagtofin, seqexpedidor, seqrecebedor, seqsubcontratado, ctechaveacessotomador,
2415 prodpredominante, caracteriscacarga, dtahoraviagem, seqvalepedagio )
2416 select a.seqctrc, a.nroempresa, a.nroctrc, a.seriectrc, e.vlrtotalservico, e.cgo,
2417 a.nrocondicaopagto, a.nroformapagto, a.dtaentrega, a.dtalancamento, a.linkerp,
2418 e.tipopagtofrete, e.seqdestinatario, e.seqremetente, nvl(c.codespeciefin,f.codespecie) codespecie,
2419 e.tipopagtofin, e.seqexpedidor, e.seqrecebedor, e.seqsubcontratado, e.ctechaveacessotomador,
2420 e.prodpredominante, e.caracteriscacarga, e.dtahoraviagem, e.seqvalepedagio
2421 from mft_ctrc a, mft_empenho e,
2422 max_codgeraloper c, mrl_formapagto f
2423 where a.nroempenho = e.nroempenho
2424 and e.cgo = c.codgeraloper
2425 and a.nroformapagto = f.nroformapagto
2426 and c.gertitfinanceiro = 'S'
2427 and a.seqctrc = SeqTmp.Seqctrc;
2428 end loop;
2429 -- gerando os titulos financeiros (individuais ou agrupados)
2430 for ctrc in (
2431 select
2432 c.nroempresa, to_char(c.nroctrc) nroctrc, c.seriectrc,
2433 c.vlrtotalservico, c.nrocondicaopagto,
2434 decode(vsPD_DataGeraFinanc, 'E', c.dtaentrega, c.dtalancamento) dtalancamento, c.linkerp,
2435 decode(c.tipopagtofin,'E',c.seqexpedidor,'R',c.seqrecebedor,'S',c.seqsubcontratado,decode(c.tipopagtofrete,'A',c.seqdestinatario, c.seqremetente)) seqpessoa,
2436 c.codespecie,
2437 f.especieformapagto, v.qtdParcela,
2438 c.SEQCTRC,
2439 null nroempresarem,
2440 null seqpessoatrans, 'I' IndAgrupado, c.tipopagtofrete
2441 from MFTX_DOCCTRC c, mrl_formapagto f, max_codgeraloper cgo, (
2442 select count(1) qtdParcela, nrocondicaopagto
2443 from madv_condicaopagtovenc
2444 group by nrocondicaopagto) v
2445 where c.NROFORMAPAGTO = f.nroformapagto
2446 and c.NROCONDICAOPAGTO = v.nrocondicaopagto
2447 and c.CGO = cgo.codgeraloper
2448 and vsPD_AgrupaTituloDia = 'N'
2449 union all
2450 select
2451 c.nroempresa,
2452 null nroctrc,
2453 'CTRC',
2454 sum(c.vlrtotalservico), c.nrocondicaopagto,
2455 decode(vsPD_DataGeraFinanc, 'E', c.dtaentrega, c.dtalancamento) dtalancamento, null,
2456 decode(c.tipopagtofin,'E',c.seqexpedidor,'R',c.seqrecebedor,'S',c.seqsubcontratado,decode(c.tipopagtofrete,'A',c.seqdestinatario, c.seqremetente)) seqpessoa,
2457 c.codespecie,
2458 f.especieformapagto, v.qtdParcela,
2459 null seqctrc,
2460 emprem.nroempresa nroempresarem,
2461 emptrans.seqpessoaemp seqpessoatrans, 'G' IndAgrupado, c.tipopagtofrete
2462 from MFTX_DOCCTRC c, mrl_formapagto f, max_codgeraloper cgo,
2463 max_empresa emprem, max_empresa emptrans, (
2464 select count(1) qtdParcela, nrocondicaopagto
2465 from madv_condicaopagtovenc
2466 group by nrocondicaopagto) v
2467 where c.NROFORMAPAGTO = f.nroformapagto
2468 and c.NROCONDICAOPAGTO = v.nrocondicaopagto
2469 and c.CGO = cgo.codgeraloper
2470 and c.SEQREMETENTE = emprem.seqpessoaemp(+)
2471 and c.nroempresa = emptrans.nroempresa(+)
2472 and vsPD_AgrupaTituloDia = 'S'
2473 group by c.nroempresa, c.nrocondicaopagto,
2474 decode(c.tipopagtofrete,'A',c.seqdestinatario, c.seqremetente),
2475 decode(vsPD_DataGeraFinanc, 'E', c.dtaentrega, c.dtalancamento),
2476 c.codespecie,
2477 f.especieformapagto, v.qtdParcela, emprem.nroempresa, emptrans.seqpessoaemp, c.tipopagtofrete,
2478 c.tipopagtofin, c.seqexpedidor, c.seqrecebedor, c.seqsubcontratado
2479 )loop
2480 if vnLinkErp = 0 then
2481 select s_seqlinkerp.nextval into vnLinkErp from dual;
2482 end if;
2483 update mft_ctrc a
2484 set a.linkerp = vnLinkErp,
2485 a.indagrupado = ctrc.indagrupado
2486 where exists (select 1 seqctrc from mftx_ctrcfinanc w where w.iduser = pnIdUsuario and w.seqctrc = a.seqctrc);
2487 if ctrc.nroctrc is null then
2488 select S_MFT_SEQTITULOAGRUP.Nextval into vnSeqTitAgrup from dual;
2489 end if;
2490 mftp_geraFinanceiro(
2491 'I', ctrc.nroempresa, nvl(ctrc.nroctrc,vnSeqTitAgrup), ctrc.seriectrc,
2492 ctrc.vlrtotalservico, ctrc.codespecie, ctrc.nrocondicaopagto,
2493 ctrc.seqpessoa, ctrc.dtalancamento, vnLinkErp,
2494 psUsuAlteracao, 16, NULL, pnOk, psMsgErro );
2495 IF vsPD_AgrupaTituloEntrAuto = 'S' and ctrc.nroempresarem is not null THEN
2496 -- Busca o parametro dinamico -- CGO padrão da nf gerada no sm para o transporte
2497 -- Quando o pagamento é feito pelo remetente
2498 SP_BUSCAPARAMDINAMICO('MAXTRANSP',Ctrc.NROEMPRESAREM,'CGOENTCTRCREM','N',0,
2499 'INFORME O CGO PADRÃO NAS OPERAÇÕES DE ENTRADA AUTOMÁTICA DE CONHECIMENTOS DE TRANSPORTE NA EMPRESA REMETENTE, QUANDO O FRETE FOR "PAGO".
2500 VALOR PADRÃO = 0', vsPD_CgoEntCtrcRem);
2501 SP_BUSCAPARAMDINAMICO('MAXTRANSP',Ctrc.NROEMPRESAREM,'CGOENTCTRCREM_FIAL','N',0,
2502 'INFORME O CGO PADRÃO NAS OPERAÇÕES DE ENTRADA AUTOMÁTICA DE CONHECIMENTOS DE TRANSPORTE NA EMPRESA REMETENTE, QUANDO O FRETE FOR "PAGO"
2503E O DESTINATÁRIO POSSUIR O CNPJ RAIZ DA EMPRESA.
2504VALOR PADRÃO = 0', vnPD_CgoEntCtrcRem_Fial);
2505 if (nvl(vsPD_CgoEntCtrcRem,0) != 0 or nvl(vnPD_CgoEntCtrcRem_Fial,0) != 0) and ctrc.tipopagtofrete != 'A' then
2506 if vsEspecieFinCGO is not null then
2507 if ctrc.nroctrc is null then
2508 select S_MFT_SEQTITULOAGRUP.Nextval into vnSeqTitAgrup from dual;
2509 end if;
2510 mftp_geraFinanceiro(
2511 'I', ctrc.nroempresarem, nvl(ctrc.nroctrc,vnSeqTitAgrup), ctrc.seriectrc,
2512 ctrc.vlrtotalservico, vsEspecieFinCGO, ctrc.nrocondicaopagto,
2513 ctrc.seqpessoatrans, ctrc.dtalancamento, vnLinkErp,
2514 psUsuAlteracao, 16, NULL, pnOk, psMsgErro );
2515 else
2516 pnOk := 0;
2517 psMsgErro := 'A espécie financeira não está configurada para a emissão de títulos na entrada automática de CTRCs';
2518 end if;
2519 end if;
2520 end if;
2521 if pnOk = 1 and psMsgErro IS NULL Then
2522 select count(1)
2523 into vnCount
2524 from fi_inttitulo a
2525 where a.linkerp = vnLinkErp;
2526 If vnCount > 0 then
2527 FOR vtIntTitulo IN (
2528 SELECT A.SEQINTTITULO, A.SEQTITULO
2529 from fi_inttitulo a
2530 where a.linkerp = vnLinkErp )
2531 LOOP
2532 PKG_FIINTEGRACAO.FIP_INTTITULO( vtIntTitulo.SEQINTTITULO, pnOK );
2533 IF vsPD_AgrupaTituloDia = 'S' OR vsPD_AgrupaTituloDia = 'N' then -- RC 80069
2534 vbEstourou := FALSE;
2535 vsNotaTitulo := 'CTRCs: ';
2536 For t in (
2537 SELECT A.NROCTRC
2538 FROM MFT_CTRC A
2539 WHERE A.LINKERP = VNLINKERP
2540 ) Loop
2541 Begin
2542 vsNotaTitulo := vsNotaTitulo || t.nroctrc || ', ';
2543 Exception
2544 when others then
2545 --Se estourar a variável sai do Loop
2546 vbEstourou := TRUE;
2547 exit;
2548 End;
2549 End Loop;
2550 vsNotaTitulo := substr(vsNotaTitulo, 0, length(vsNotaTitulo) - 2 );
2551 If not vbEstourou Then
2552 vsNotaTitulo := vsNotaTitulo || ' - Cargas: ';
2553 For t in (
2554 SELECT DISTINCT NROCARGA OBSCARGA
2555 FROM MFT_CTRC A, MFT_EMPENHO_CARGADF B
2556 WHERE A.NROEMPENHO = B.NROEMPENHO
2557 AND A.LINKERP = VNLINKERP
2558 ) Loop
2559 Begin
2560 vsNotaTitulo := vsNotaTitulo || t.obscarga || ', ';
2561 Exception
2562 when others then
2563 --Se estourar a variável sai do Loop
2564 exit;
2565 End;
2566 End Loop;
2567 vsNotaTitulo := substr(vsNotaTitulo, 0, length(vsNotaTitulo) - 2 );
2568 End If;
2569 select count(1)
2570 into vnCount
2571 from (SELECT 1
2572 FROM MFT_CTRC A,
2573 MFT_EMPENHO_CARGADF B
2574 WHERE A.NROEMPENHO = B.NROEMPENHO
2575 AND A.LINKERP = VNLINKERP
2576 UNION
2577 SELECT 1 FROM MFT_CTRC A WHERE A.LINKERP = VNLINKERP);
2578 If vnCount > 0 Then
2579 INSERT INTO FI_TITANOTACAO( SEQTITULO, NOTA )
2580 values( vtIntTitulo.SEQTITULO, vsNotaTitulo );
2581 End If;
2582 END IF;
2583 END LOOP;
2584 End If;
2585 end if;
2586 end loop;
2587 delete from MFTX_DOCCTRC;
2588 end;
2589 procedure mftp_cancFinancCtrc( pnSeqCtrc in Integer,
2590 psUsuAlteracao in varchar2,
2591 pbOk in out Integer,
2592 psMsgErro out Varchar2) is
2593 vnCount integer;
2594 vnLinkErp integer;
2595 vsAux varchar2(2000);
2596 begin
2597 pbOk := 1;
2598 select linkerp
2599 into vnLinkErp
2600 from mft_ctrc
2601 where seqctrc = pnSeqCtrc;
2602 -- Deleta das tabelas de integração do financeiro, se existir
2603 DELETE FI_INTTITULOOPE
2604 WHERE SEQINTTITULO IN ( SELECT SEQINTTITULO
2605 FROM FI_INTTITULO
2606 WHERE LINKERP = vnLinkErp );
2607 DELETE FI_REJEITADOMTV
2608 WHERE CODLINK IN ( SELECT SEQINTTITULO
2609 FROM FI_INTTITULO
2610 WHERE LINKERP = vnLinkErp );
2611 DELETE FI_REJEITADO
2612 WHERE CODLINK IN ( SELECT SEQINTTITULO
2613 FROM FI_INTTITULO
2614 WHERE LINKERP = vnLinkErp );
2615 DELETE FI_INTTITULO
2616 WHERE LINKERP = vnLinkErp;
2617 for ctrc in (
2618 select distinct
2619 tit.nroempresa,
2620 tit.nrodocumento,
2621 tit.seriedoc,
2622 tit.vlrnominal,
2623 a.nrocondicaopagto,
2624 tit.dtainclusao,
2625 tit.linkerp,
2626 tit.seqpessoa,
2627 tit.codespecie,
2628 v.qtdParcela,
2629 tit.seqtitulo
2630 from fi_titulo tit, mft_ctrc a, mft_empenho e,
2631 (select count(1) qtdParcela, nrocondicaopagto
2632 from madv_condicaopagtovenc
2633 group by nrocondicaopagto) v
2634 where tit.linkerp = a.linkerp
2635 and a.nroempenho = e.nroempenho
2636 and a.nrocondicaopagto = v.nrocondicaopagto
2637 and tit.situacao != 'C'
2638 and tit.linkerp = vnLinkErp
2639 )loop
2640 mftp_geraFinanceiro(
2641 'D', ctrc.nroempresa, ctrc.nrodocumento, ctrc.seriedoc,
2642 ctrc.vlrnominal, ctrc.codespecie, ctrc.nrocondicaopagto,
2643 ctrc.seqpessoa, ctrc.dtainclusao, ctrc.linkerp,
2644 psUsuAlteracao, 16, ctrc.seqtitulo, pbOk, psMsgErro );
2645 end loop;
2646 select count(1)
2647 into vnCount
2648 from fi_rejeitado a
2649 where a.codlink in ( select seqinttitulo
2650 from fi_inttitulo tit
2651 where tit.linkerp = vnLinkErp);
2652 if vnCount > 0 then
2653 pbOk := 0;
2654 select c5_ComplexIn.c5InString(CAST(COLLECT(TO_CHAR(seqinttitulo)) AS
2655 c5InStrTable),', ')
2656 into vsAux
2657 from fi_inttitulo tit
2658 where tit.linkerp = vnLinkErp;
2659 psMsgErro := mftf_retRejFinanc( vsAux );
2660 end if;
2661 end;
2662 procedure mftp_geraFinancNfps( pnSeqNfps in Integer,
2663 psUsuAlteracao in varchar2,
2664 pnOk in out Integer,
2665 psMsgErro in out Varchar2) is
2666 vnCount integer;
2667 begin
2668 for nfps in (
2669 select
2670 n.NROEMPRESA, n.NRONFPS, n.SERIENFPS,
2671 n.VLRTOTALSERVICO, n.NROCONDICAOPAGTO,
2672 n.DTALANCAMENTO, n.LINKERP,
2673 n.SEQPESSOA, n.codespecie,
2674 f.especieformapagto, v.qtdParcela
2675 from mftv_nfpsapp n, mrl_formapagto f, max_codgeraloper cgo, (
2676 select count(1) qtdParcela, nrocondicaopagto
2677 from madv_condicaopagtovenc
2678 group by nrocondicaopagto) v
2679 where n.NROFORMAPAGTO = f.nroformapagto
2680 and n.NROCONDICAOPAGTO = v.nrocondicaopagto
2681 and n.CGO = cgo.codgeraloper
2682 and n.SEQNFPS = pnSeqNfps
2683 )loop
2684 mftp_geraFinanceiro(
2685 'I', nfps.nroempresa, nfps.nronfps, nfps.serienfps,
2686 nfps.vlrtotalservico, nfps.codespecie, nfps.nrocondicaopagto,
2687 nfps.seqpessoa, nfps.dtalancamento, nfps.linkerp,
2688 psUsuAlteracao, 16, NULL, pnOk, psMsgErro );
2689 end loop;
2690 if pnOk = 1 And psMsgErro IS NULL Then
2691 select count(1)
2692 into vnCount
2693 from fi_inttitulo a, mft_nfps b
2694 where a.linkerp = b.linkerp
2695 and b.SEQNFPS = pnSeqNfps;
2696 If vnCount > 0 then
2697 FOR vtIntTitulo IN (
2698 SELECT A.SEQINTTITULO
2699 from fi_inttitulo a, mft_nfps b
2700 where a.linkerp = b.linkerp
2701 and b.SEQNFPS = pnSeqNfps )
2702 LOOP
2703 PKG_FIINTEGRACAO.FIP_INTTITULO( vtIntTitulo.SEQINTTITULO, pnOK );
2704 END LOOP;
2705 update mft_nfps
2706 set processado = 'S'
2707 where seqnfps = pnSeqNfps;
2708 End If;
2709 end if;
2710 end;
2711 procedure mftp_cancFinancNfps( pnSeqNfps in Integer,
2712 psUsuAlteracao in varchar2,
2713 pbOk in out Integer,
2714 psMsgErro out Varchar2) is
2715 vnCount integer;
2716 vnLinkErp integer;
2717 vsAux varchar2(2000);
2718 begin
2719 pbOk := 1;
2720 select linkerp
2721 into vnLinkErp
2722 from mft_nfps
2723 where seqnfps = pnSeqNfps;
2724 -- Deleta das tabelas de integração do financeiro, se existir
2725 DELETE FI_INTTITULOOPE
2726 WHERE SEQINTTITULO IN ( SELECT SEQINTTITULO
2727 FROM FI_INTTITULO
2728 WHERE LINKERP = vnLinkErp );
2729 DELETE FI_REJEITADOMTV
2730 WHERE CODLINK IN ( SELECT SEQINTTITULO
2731 FROM FI_INTTITULO
2732 WHERE LINKERP = vnLinkErp );
2733 DELETE FI_REJEITADO
2734 WHERE CODLINK IN ( SELECT SEQINTTITULO
2735 FROM FI_INTTITULO
2736 WHERE LINKERP = vnLinkErp );
2737 DELETE FI_INTTITULO
2738 WHERE LINKERP = vnLinkErp;
2739 for nfps in (
2740 select
2741 n.NROEMPRESA, n.NRONFPS, n.SERIENFPS,
2742 n.VLRTOTALSERVICO, n.NROCONDICAOPAGTO,
2743 n.DTALANCAMENTO, n.LINKERP,
2744 n.SEQPESSOA, n.codespecie,
2745 f.especieformapagto, v.qtdParcela, tit.seqtitulo
2746 from mftv_nfpsapp n, mrl_formapagto f, max_codgeraloper cgo, fi_titulo tit, (
2747 select count(1) qtdParcela, nrocondicaopagto
2748 from madv_condicaopagtovenc
2749 group by nrocondicaopagto) v
2750 where n.NROFORMAPAGTO = f.nroformapagto
2751 and n.NROCONDICAOPAGTO = v.nrocondicaopagto
2752 and n.CGO = cgo.codgeraloper
2753 and n.LINKERP = tit.linkerp
2754 and n.SEQNFPS = pnSeqNfps
2755 )loop
2756 mftp_geraFinanceiro(
2757 'D', nfps.nroempresa, nfps.nronfps, nfps.serienfps,
2758 nfps.vlrtotalservico, nfps.codespecie, nfps.nrocondicaopagto,
2759 nfps.seqpessoa, nfps.dtalancamento, nfps.linkerp,
2760 psUsuAlteracao, 16, nfps.seqtitulo, pbOk, psMsgErro );
2761 end loop;
2762 select count(1)
2763 into vnCount
2764 from fi_rejeitado a
2765 where a.codlink in ( select seqinttitulo
2766 from fi_inttitulo tit, mft_nfps c
2767 where c.linkerp = tit.linkerp
2768 and c.seqnfps = pnSeqNfps);
2769 if vnCount > 0 then
2770 pbOk := 0;
2771 select c5_ComplexIn.c5InString(CAST(COLLECT(TO_CHAR(seqinttitulo)) AS
2772 c5InStrTable),', ')
2773 into vsAux
2774 from fi_inttitulo tit, mft_nfps c
2775 where c.linkerp = tit.linkerp
2776 and c.seqnfps = pnSeqNfps;
2777 psMsgErro := mftf_retRejFinanc( vsAux );
2778 end if;
2779 end;
2780/* procedure mftp_geraRateio( pnNroEmpenho IN NUMBER,
2781 pnNroDocto IN NUMBER,
2782 psSerieDocto IN VARCHAR2,
2783 pnSeqPessoa IN NUMBER,
2784 pnVersao IN NUMBER,
2785 psUf IN VARCHAR2,
2786 pnVlrTotal IN NUMERIC,
2787 pnVlrBaseIcms IN NUMERIC,
2788 pnAliqIcms IN NUMERIC,
2789 pnVlrIcms IN NUMERIC,
2790 pnNroEmpresa IN NUMBER,
2791 psUsuAlteracao IN VARCHAR2,
2792 pbOk in out Integer,
2793 psMsgErro in out Varchar2 )
2794 is
2795 -- --
2796 vnSeqAuxNotaFiscal MLF_AUXNOTAFISCAL.SEQAUXNOTAFISCAL%TYPE;
2797 begin
2798 SELECT S_SEQAUXNOTAFISCAL.NEXTVAL INTO vnSeqAuxNotaFiscal FROM DUAL;
2799 mftp_geraNfRateioFrete( vnSeqAuxNotaFiscal,
2800 pnNroDocto,
2801 psSerieDocto,
2802 pnSeqPessoa,
2803 pnVersao,
2804 psUf,
2805 pnVlrTotal,
2806 pnVlrBaseIcms,
2807 pnAliqIcms,
2808 pnVlrIcms,
2809 pnNroEmpresa,
2810 TRUNC(SYSDATE),
2811 TRUNC(SYSDATE),
2812 sysdate,
2813 psUsuAlteracao,
2814 pbOk,
2815 psMsgErro);
2816 FOR N IN
2817 (
2818 SELECT
2819 A.SEQAUXNOTAFISCAL
2820 FROM MFT_EMPENHO_CARGADF E, MLF_AUXNOTAFISCAL A, MAX_EMPRESA C
2821 WHERE E.NROEMPRESA = C.NROEMPRESA
2822 AND A.NUMERONF = E.NUMERODF
2823 AND A.SERIENF = E.SERIEDF
2824 AND A.SEQPESSOA = C.SEQPESSOAEMP
2825 AND E.NROEMPENHO = pnNroEmpenho
2826 )LOOP
2827 mftp_geraNfVinculoRateio( vnSeqAuxNotaFiscal, N.SEQAUXNOTAFISCAL );
2828 END LOOP;
2829 PKG_MLF_RECEBIMENTO.SP_RATEIACONHECIMENTOFRETE( vnSeqAuxNotaFiscal );
2830 end;
2831 procedure mftp_cancRateio( pnNroDocto IN NUMBER,
2832 psSerieDocto IN VARCHAR2,
2833 pnSeqPessoa IN NUMBER,
2834 pnNroEmpresa IN NUMBER,
2835 pnOk IN OUT INTEGER,
2836 psMsgErro IN OUT VARCHAR2)
2837 is
2838 begin
2839 FOR N IN
2840 (
2841 SELECT
2842 A.SEQAUXNOTACONHEC
2843 FROM MLF_CONHECIMENTONOTAS A
2844 WHERE A.NUMERONF = pnNroDocto
2845 AND A.SERIENF = psSerieDocto
2846 AND A.SEQPESSOA = pnSeqPessoa
2847 AND A.NROEMPRESA = pnNroEmpresa
2848 AND A.TIPNOTAFISCAL = 'E'
2849 )LOOP
2850 mftp_cancRateioFrete( N.SEQAUXNOTACONHEC, pnOk, psMsgErro );
2851 END LOOP;
2852 end;*/
2853 procedure mftp_geraRateioCtrc( pnSeqCtrc IN NUMBER,
2854 pbOk in out Integer,
2855 psMsgErro out Varchar2 )
2856 is
2857 -- --
2858 vnSeqAuxNotaFiscal MLF_AUXNOTAFISCAL.SEQAUXNOTAFISCAL%TYPE;
2859 -- PARÂMETROS DINÂMICOS --
2860 vnPD_CgoPadrao MAX_CODGERALOPER.CODGERALOPER%TYPE;
2861 vnPD_CgoPadrao_Fial MAX_CODGERALOPER.CODGERALOPER%TYPE;
2862 vnPD_ProdFreteCtrcRem_Fial RF_PRODUTO.SEQPRODUTO%TYPE;
2863 --
2864 vnEmpresaFilial NUMBER;
2865 vnCgoPadrao MAX_CODGERALOPER.CODGERALOPER%TYPE;
2866 vnProdFreteCTRC RF_PRODUTO.SEQPRODUTO%TYPE;
2867 vsPDEmiteSubcontObs varchar2(1);
2868 vsPDEmiteTranspRedesObs varchar2(1);
2869 vsNovaObs varchar2(200);
2870 vnNroEmpresa number;
2871 begin
2872 select max(nroempresa)
2873 into vnNroEmpresa
2874 from mft_ctrc
2875 where seqctrc = pnSeqCtrc;
2876 sp_buscaparamdinamico('MAXTRANSP',
2877 vnNroEmpresa,
2878 'EMITE_SUBCONTRATADO_OBS',
2879 'S',
2880 'N',
2881 'EMITE OS DADOS DO SUBCONTRATADO NAS OBSERVAÇÕES DO CTRC?' ||
2882 CHR(13) || CHR(10) || 'S-SIM' || CHR(13) || CHR(10) ||
2883 'N-NÃO(PADRÃO)',
2884 vsPDEmiteSubcontObs);
2885 sp_buscaparamdinamico('MAXTRANSP',
2886 vnNroEmpresa,
2887 'EMITE_TRANSP_REDESPACHO_OBS',
2888 'S',
2889 'N',
2890 'EMITE OS DADOS DO TRANSPORTADOR REDESPACHO NAS OBSERVAÇÕES DO CTRC?' ||
2891 CHR(13) || CHR(10) || 'S-SIM' || CHR(13) || CHR(10) ||
2892 'N-NÃO(PADRÃO)',
2893 vsPDEmiteTranspRedesObs);
2894 FOR T IN
2895 ( SELECT
2896 C.NROCTRC NROCTRC,
2897 C.SERIECTRC SERIECTRC,
2898 P.SEQPESSOA SEQPESSOA,
2899 P.VERSAO VERSAO,
2900 P.UF UF,
2901 O.VLRTOTALSERVICO VLRTOTALSERVICO,
2902 O.VLRBASEICMS VLRBASEICMS,
2903 O.ALIQICMS ALIQICMS,
2904 O.VLRICMS VLRICMS,
2905 D.NROEMPRESA NROEMPRESA,
2906 C.DTAHORAEMISSAO DTAHORAEMISSAO,
2907 C.USUALTERACAO USUALTERACAO,
2908 O.CGO CGO,
2909 C.NROEMPENHO NROEMPENHO,
2910 C.NROEMPRESA NROEMPRESAC,
2911 O.TIPOPAGTOFRETE TIPOPAGTOFRETE,
2912 O.CST_PIS,
2913 O.CST_COFINS,
2914 O.CST_ICMS,
2915 O.VLRISENTOICMS,
2916 O.VLROUTROSICMS,
2917 O.SEQDESTINATARIO,
2918 C.CTECHAVEACESSO,
2919 C.LINKERP,
2920 O.INDCONSUMIDORFINAL,
2921 O.BASCALCICMSPARTILHA,
2922 O.PERALIQINTPARTILHAICMS,
2923 O.PERPARTILHAICMS,
2924 O.VLRICMSCALCORIGEM,
2925 O.VLRICMSCALCDESTINO,
2926 B.M000_NR_MUN_INI,
2927 B.M000_NR_MUN_FIM
2928 FROM MFT_CTRC C, MFT_EMPENHO O, MFTV_BASECTE B,
2929 MAX_EMPRESA E, GE_PESSOA P, MAX_EMPRESA D
2930 WHERE C.NROEMPENHO = O.NROEMPENHO
2931 AND C.NROEMPRESA = E.NROEMPRESA
2932 AND C.NROCTRC = B.NROCTRC
2933 AND C.SEQCTRC = B.SEQCTRC
2934 AND C.NROEMPRESA = B.NROEMPRESA
2935 AND C.NROEMPENHO = B.NROEMPENHO
2936 AND E.SEQPESSOAEMP = P.SEQPESSOA
2937 AND O.SEQDESTINATARIO = D.SEQPESSOAEMP
2938 AND C.SEQCTRC = pnSeqCtrc
2939 AND O.TIPOPAGTOFRETE = 'A'
2940 UNION
2941 SELECT
2942 C.NROCTRC NROCTRC,
2943 C.SERIECTRC SERIECTRC,
2944 P.SEQPESSOA SEQPESSOA,
2945 P.VERSAO VERSAO,
2946 P.UF UF,
2947 O.VLRTOTALSERVICO VLRTOTALSERVICO,
2948 O.VLRBASEICMS VLRBASEICMS,
2949 O.ALIQICMS ALIQICMS,
2950 O.VLRICMS VLRICMS,
2951 D.NROEMPRESA NROEMPRESA,
2952 C.DTAHORAEMISSAO DTAHORAEMISSAO,
2953 C.USUALTERACAO USUALTERACAO,
2954 O.CGO CGO,
2955 C.NROEMPENHO NROEMPENHO,
2956 C.NROEMPRESA NROEMPRESAC,
2957 O.TIPOPAGTOFRETE TIPOPAGTOFRETE,
2958 O.CST_PIS,
2959 O.CST_COFINS,
2960 O.CST_ICMS,
2961 O.VLRISENTOICMS,
2962 O.VLROUTROSICMS,
2963 O.SEQDESTINATARIO,
2964 C.CTECHAVEACESSO,
2965 C.LINKERP,
2966 O.INDCONSUMIDORFINAL,
2967 O.BASCALCICMSPARTILHA,
2968 O.PERALIQINTPARTILHAICMS,
2969 O.PERPARTILHAICMS,
2970 O.VLRICMSCALCORIGEM,
2971 O.VLRICMSCALCDESTINO,
2972 B.M000_NR_MUN_INI,
2973 B.M000_NR_MUN_FIM
2974 FROM MFT_CTRC C, MFT_EMPENHO O, MFTV_BASECTE B,
2975 MAX_EMPRESA E, GE_PESSOA P, MAX_EMPRESA D
2976 WHERE C.NROEMPENHO = O.NROEMPENHO
2977 AND C.NROEMPRESA = E.NROEMPRESA
2978 AND C.NROCTRC = B.NROCTRC
2979 AND C.SEQCTRC = B.SEQCTRC
2980 AND C.NROEMPRESA = B.NROEMPRESA
2981 AND C.NROEMPENHO = B.NROEMPENHO
2982 AND E.SEQPESSOAEMP = P.SEQPESSOA
2983 AND O.SEQREMETENTE = D.SEQPESSOAEMP
2984 AND C.SEQCTRC = pnSeqCtrc
2985 AND O.TIPOPAGTOFRETE = 'P'
2986 )LOOP
2987 if vsPDEmiteSubcontObs = 'S' then
2988 select max( CHR(13) || CHR(10) || 'Subcontratado CNPJ:' || LPAD(p.nrocgccpf, 12, 0) ||
2989 LPAD(p.digcgccpf, 2, 0) || ' ' || p.nomerazao)
2990 into vsNovaObs
2991 from mft_empenho_cargadf edf, mrl_cargaexped ce, ge_pessoa p
2992 where edf.nroempenho = t.nroempenho
2993 and ce.nrocarga = edf.nrocarga
2994 and p.seqpessoa = ce.seqsubcontratado;
2995 update mft_empenho
2996 set observacoes = observacoes || vsNovaObs
2997 where nroempenho = t.nroempenho;
2998 end if;
2999 if vsPDEmiteTranspRedesObs = 'S' then
3000 select Max(CHR(13) || CHR(10) || 'Transportador de redespacho CNPJ:' ||
3001 LPAD(p.nrocgccpf, 12, 0) || LPAD(p.digcgccpf, 2, 0) || ' ' ||
3002 p.nomerazao)
3003 into vsNovaObs
3004 from mft_empenho_cargadf edf,
3005 mrl_cargaexped ce,
3006 ge_pessoa p
3007 where edf.nroempenho = t.nroempenho
3008 and ce.nrocarga = edf.nrocarga
3009 and p.seqpessoa = ce.seqtranspredesp;
3010 update mft_empenho
3011 set observacoes = observacoes || vsNovaObs
3012 where nroempenho = t.nroempenho;
3013 end if;
3014 IF T.TIPOPAGTOFRETE = 'A' THEN
3015 -- Busca o parametro dinamico -- CGO padrão da nf gerada no sm para o transporte
3016 -- Quando o pagamento é feito pelo destinatário
3017 SP_BUSCAPARAMDINAMICO('MAXTRANSP',0,'CGOENTFRETECN','N',NULL,
3018 'CGO PADRÃO NAS OPERAÇÕES DE ENTRADA AUTOMATICA DE CONHECIMENTOS DE TRANSPORTE, QUANDO PROVENIENTE DE CTRC OU NFPS',
3019 vnPD_CgoPadrao);
3020 ELSIF T.TIPOPAGTOFRETE = 'P' THEN
3021 -- Busca o parametro dinamico -- CGO padrão da nf gerada no sm para o transporte
3022 -- Quando o pagamento é feito pelo remetente
3023 SP_BUSCAPARAMDINAMICO('MAXTRANSP',T.NROEMPRESA,'CGOENTCTRCREM','N',0,
3024 'INFORME O CGO PADRÃO NAS OPERAÇÕES DE ENTRADA AUTOMÁTICA DE CONHECIMENTOS DE TRANSPORTE NA EMPRESA REMETENTE, QUANDO O FRETE FOR "PAGO".
3025 VALOR PADRÃO = 0',
3026 vnPD_CgoPadrao);
3027 SP_BUSCAPARAMDINAMICO('MAXTRANSP',T.NROEMPRESA,'CGOENTCTRCREM_FIAL','N',0,
3028 'INFORME O CGO PADRÃO NAS OPERAÇÕES DE ENTRADA AUTOMÁTICA DE CONHECIMENTOS DE TRANSPORTE NA EMPRESA REMETENTE, QUANDO O FRETE FOR "PAGO"
3029E O DESTINATÁRIO POSSUIR O CNPJ RAIZ DA EMPRESA.
3030VALOR PADRÃO = 0', vnPD_CgoPadrao_Fial);
3031 SELECT COUNT(1)
3032 INTO vnEmpresaFilial
3033 FROM GE_PESSOA A,
3034 MAX_EMPRESA B
3035 WHERE SUBSTR(A.NROCGCCPF,0,8) = SUBSTR(B.NROCGC,0,8)
3036 AND A.SEQPESSOA = T.SEQDESTINATARIO
3037 AND B.NROEMPRESA = T.NROEMPRESA;
3038 IF (vnEmpresaFilial = 0 AND vnPD_CgoPadrao = 0) OR (vnEmpresaFilial > 0 AND vnPD_CgoPadrao_Fial = 0 AND vnPD_CgoPadrao = 0) THEN
3039 EXIT;
3040 END IF;
3041 END IF;
3042 SP_BUSCAPARAMDINAMICO('MAXTRANSP',T.NROEMPRESA,'PRODFRETECTRCREM_FIAL','N',0,
3043 'INFORME SEQ PRODUTO FRETE PADRÃO NAS OPERAÇÕES DE ENTRADA AUTOMÁTICA DE CONHECIMENTOS DE TRANSPORTE NA EMPRESA REMETENTE, QUANDO O FRETE FOR "PAGO"
3044E O DESTINATÁRIO POSSUIR O CNPJ RAIZ DA EMPRESA.
3045VALOR PADRÃO = 0', vnPD_ProdFreteCtrcRem_Fial);
3046 SELECT S_SEQAUXNOTAFISCAL.NEXTVAL INTO vnSeqAuxNotaFiscal FROM DUAL;
3047 IF nvl(vnEmpresaFilial,0) > 0 THEN
3048 IF vnPD_CgoPadrao_Fial > 0 THEN
3049 vnCgoPadrao := vnPD_CgoPadrao_Fial;
3050 ELSE
3051 vnCgoPadrao := vnPD_CgoPadrao;
3052 END IF;
3053 IF vnPD_ProdFreteCtrcRem_Fial > 0 THEN
3054 vnProdFreteCTRC := vnPD_ProdFreteCtrcRem_Fial;
3055 END IF;
3056 ELSE
3057 vnCgoPadrao := vnPD_CgoPadrao;
3058 END IF;
3059 mftp_geraNfRateioFrete( vnSeqAuxNotaFiscal,
3060 t.nroctrc,
3061 t.seriectrc,
3062 t.seqpessoa,
3063 t.versao,
3064 t.uf,
3065 t.vlrtotalservico,
3066 t.vlrbaseicms,
3067 t.aliqicms,
3068 t.vlricms,
3069 t.nroempresa,
3070 NVL(T.DTAHORAEMISSAO,SYSDATE),
3071 TRUNC(NVL(T.DTAHORAEMISSAO,SYSDATE)),
3072 sysdate,
3073 t.usualteracao,
3074 vnCgoPadrao,
3075 null,
3076 null,
3077 null,
3078 null, /*t.cst_pis,*/ -- RC 73369
3079 null,/*t.cst_cofins,*/ -- RC 73369
3080 t.cst_icms,
3081 t.vlrisentoicms,
3082 t.vlroutrosicms,
3083 21, /*APPORIGEM*/
3084 t.ctechaveacesso,
3085 pbOk,
3086 psMsgErro,
3087 vnProdFreteCTRC,
3088 t.linkerp,
3089 NULL,
3090 NULL,
3091 NULL,
3092 t.INDCONSUMIDORFINAL,
3093 t.BASCALCICMSPARTILHA,
3094 t.PERALIQINTPARTILHAICMS,
3095 t.PERPARTILHAICMS,
3096 t.VLRICMSCALCORIGEM,
3097 t.VLRICMSCALCDESTINO,
3098 t.M000_NR_MUN_INI,
3099 t.M000_NR_MUN_FIM);
3100 if pbOk = 1 then
3101 FOR N IN
3102 (
3103 SELECT
3104 A.SEQAUXNOTAFISCAL
3105 FROM MFT_EMPENHO_CARGADF E, MLF_AUXNOTAFISCAL A, MAX_EMPRESA C, MFT_EMPENHO D
3106 WHERE E.NROEMPRESA = C.NROEMPRESA
3107 AND A.NUMERONF = E.NUMERODF
3108 AND A.SERIENF = E.SERIEDF
3109 AND A.SEQPESSOA = C.SEQPESSOAEMP
3110 AND E.NROEMPENHO = D.NROEMPENHO
3111 AND E.NROEMPENHO IN (SELECT NROEMPENHO FROM MFT_CTRC WHERE SEQCTRC = pnSeqCtrc)
3112 AND D.TIPOPAGTOFRETE != 'P'
3113 )LOOP
3114 mftp_geraNfVinculoRateio( vnSeqAuxNotaFiscal, N.SEQAUXNOTAFISCAL );
3115 END LOOP;
3116 PKG_MLF_RECEBIMENTO.SP_RATEIACONHECIMENTOFRETE( vnSeqAuxNotaFiscal );
3117 UPDATE MFT_EMPENHO
3118 SET RATEADO = 'S'
3119 WHERE NROEMPENHO = T.NROEMPENHO;
3120 mftp_intNfSMDef( vnSeqAuxNotaFiscal );
3121 end if;
3122 END LOOP;
3123 end;
3124 procedure mftp_cancRateioCtrc( pnSeqCtrc IN NUMBER,
3125 pbOk in out Integer,
3126 psMsgErro out Varchar2)
3127 is
3128 vsRateado MFT_EMPENHO.RATEADO%TYPE;
3129 begin
3130 SELECT NVL(B.RATEADO,'N')
3131 INTO vsRateado
3132 FROM MFT_CTRC A, MFT_EMPENHO B
3133 WHERE A.SEQCTRC = pnSeqCtrc
3134 AND A.NROEMPENHO = B.NROEMPENHO;
3135 IF vsRateado = 'N' THEN
3136 FOR N IN
3137 (
3138 SELECT
3139 A.SEQAUXNOTAFISCAL
3140 FROM MFT_EMPENHO_CARGADF E, MLF_AUXNOTAFISCAL A, MAX_EMPRESA C
3141 WHERE E.NROEMPRESA = C.NROEMPRESA
3142 AND A.NUMERONF = E.NUMERODF
3143 AND A.SERIENF = E.SERIEDF
3144 AND A.SEQPESSOA = C.SEQPESSOAEMP
3145 AND E.NROEMPENHO IN (SELECT NROEMPENHO FROM MFT_CTRC WHERE SEQCTRC = pnSeqCtrc)
3146 )LOOP
3147 mftp_cancRateioFrete( N.SEQAUXNOTAFISCAL, pbOk, psMsgErro );
3148 END LOOP;
3149 ELSE
3150 FOR N IN
3151 (
3152 SELECT
3153 A.SEQAUXNOTAFISCAL
3154 FROM MFT_CTRC E, MLF_AUXNOTAFISCAL A, MAX_EMPRESA B
3155 WHERE E.NROEMPRESA = B.NROEMPRESA
3156 AND A.NUMERONF = E.NROCTRC
3157 AND A.SERIENF = E.SERIECTRC
3158 AND A.SEQPESSOA = B.SEQPESSOAEMP
3159 AND E.SEQCTRC IN ( pnSeqCtrc)
3160 )LOOP
3161 mftp_cancRateioFrete( N.SEQAUXNOTAFISCAL, pbOk, psMsgErro );
3162 END LOOP;
3163 END IF;
3164 end;
3165 procedure mftp_geraRateioNfps( pnSeqNfps IN NUMBER,
3166 pnOk in out Integer,
3167 psMsgErro in out Varchar2 )
3168 is
3169 -- --
3170 vnSeqAuxNotaFiscal MLF_AUXNOTAFISCAL.SEQAUXNOTAFISCAL%TYPE;
3171 -- PARÂMETROS DINÂMICOS --
3172 vnPD_CgoPadrao MAX_CODGERALOPER.CODGERALOPER%TYPE;
3173 vnDiaVenctoIss NUMBER(2);
3174 vdDtaVenctoIss DATE;
3175 vsPDOrdemGeraOBSEmpenho max_parametro.valor%type;
3176 begin
3177 FOR T IN
3178 ( SELECT
3179 N.NRONFPS,
3180 N.SERIENFPS,
3181 P.SEQPESSOA,
3182 P.VERSAO,
3183 P.UF,
3184 N.VLRTOTALSERVICO,
3185 0 VLRBASEICMS,
3186 0 ALIQICMS,
3187 0 VLRICMS,
3188 0 VLRISENTOSICMS,
3189 0 VLROUTROSICMS,
3190 D.NROEMPRESA,
3191 nvl(N.DTAHORAEMISSAO,sysdate) DTAHORAEMISSAO,
3192 N.USUALTERACAO,
3193 N.CGO,
3194 N.NROEMPRESA NROEMPRESAN,
3195 N.TIPOPAGTOFRETE TIPOPAGTOFRETE,
3196 N.VLRBASEISS,
3197 N.ALIQISS,
3198 N.VLRISS,
3199 N.LINKERP
3200 FROM MFTV_NFPSAPP N, MAX_EMPRESA E, GE_PESSOA P, MAX_EMPRESA D
3201 WHERE N.NROEMPRESA = E.NROEMPRESA
3202 AND E.SEQPESSOAEMP = P.SEQPESSOA
3203 AND N.SEQPESSOA = D.SEQPESSOAEMP
3204 AND N.SEQNFPS = pnSeqNfps
3205 )LOOP
3206 IF T.TIPOPAGTOFRETE = 'A' THEN
3207 -- Busca o parametro dinamico -- CGO padrão da nf gerada no sm para o transporte
3208 -- somente quando é CTRC ou NFST
3209 SP_BUSCAPARAMDINAMICO('MAXTRANSP',0,'CGOENTFRETECN','N',NULL,
3210 'CGO PADRÃO NAS OPERAÇÕES DE ENTRADA AUTOMATICA DE CONHECIMENTOS DE TRANSPORTE, QUANDO PROVENIENTE DE CTRC OU NFPS',
3211 vnPD_CgoPadrao);
3212 ELSIF T.TIPOPAGTOFRETE = 'P' THEN
3213 -- Busca o parametro dinamico -- CGO padrão da nf gerada no sm para o transporte
3214 -- Quando o pagamento é feito pelo remetente
3215 SP_BUSCAPARAMDINAMICO('MAXTRANSP',T.NROEMPRESA,'CGOENTNFSTREM','N',0,
3216 'INFORME O CGO PADRÃO NAS OPERAÇÕES DE ENTRADA AUTOMÁTICA DE NOTAS FISCAIS DE SERVIÇOS DE TRANSPORTE NA EMPRESA REMETENTE, QUANDO O FRETE FOR "PAGO".
3217 VALOR PADRÃO = 0',
3218 vnPD_CgoPadrao);
3219 IF vnPD_CgoPadrao = 0 THEN
3220 EXIT;
3221 END IF;
3222 END IF;
3223 SELECT S_SEQAUXNOTAFISCAL.NEXTVAL INTO vnSeqAuxNotaFiscal FROM DUAL;
3224 mftp_geraNfRateioFrete( vnSeqAuxNotaFiscal,
3225 t.NRONFPS,
3226 t.SERIENFPS,
3227 t.seqpessoa,
3228 t.versao,
3229 t.uf,
3230 t.vlrtotalservico,
3231 t.vlrbaseicms,
3232 t.aliqicms,
3233 t.vlricms,
3234 t.nroempresa,
3235 NVL(T.DTAHORAEMISSAO,SYSDATE),
3236 TRUNC(NVL(T.DTAHORAEMISSAO,SYSDATE)),
3237 sysdate,
3238 t.usualteracao,
3239 vnPD_CgoPadrao,
3240 t.vlrbaseiss,
3241 t.aliqiss,
3242 t.vlriss,
3243 null,
3244 null,
3245 null,
3246 t.vlrisentosicms,
3247 t.vlroutrosicms,
3248 20, /*APPORIGEM*/
3249 null,
3250 pnOk,
3251 psMsgErro,
3252 null,
3253 t.linkerp,
3254 NULL,
3255 NULL,
3256 NULL,
3257 NULL,
3258 NULL,
3259 NULL,
3260 NULL,
3261 NULL,
3262 NULL,
3263 NULL,
3264 NULL);
3265 if pnOk = 1 then
3266 FOR N IN
3267 (
3268 SELECT
3269 A.SEQAUXNOTAFISCAL
3270 FROM MFT_EMPENHO_CARGADF E, MLF_AUXNOTAFISCAL A, MAX_EMPRESA C, MFT_NFPSEMPENHO N
3271 WHERE E.NROEMPRESA = C.NROEMPRESA
3272 AND A.NUMERONF = E.NUMERODF
3273 AND A.SERIENF = E.SERIEDF
3274 AND A.SEQPESSOA = C.SEQPESSOAEMP
3275 AND E.NROEMPENHO = N.NROEMPENHO
3276 AND N.SEQNFPS IN ( pnSeqNfps )
3277/* SELECT
3278 A.SEQAUXNOTAFISCAL
3279 FROM MFT_NFPS E, MLF_AUXNOTAFISCAL A, MAX_EMPRESA C
3280 WHERE E.NROEMPRESA = C.NROEMPRESA
3281 AND A.NUMERONF = E.NRONFPS
3282 AND A.SERIENF = E.SERIENFPS
3283 AND A.SEQPESSOA = C.SEQPESSOAEMP
3284 AND E.SEQNFPS IN ( pnSeqNfps) */
3285 )LOOP
3286 mftp_geraNfVinculoRateio( vnSeqAuxNotaFiscal, N.SEQAUXNOTAFISCAL );
3287 END LOOP;
3288 PKG_MLF_RECEBIMENTO.SP_RATEIACONHECIMENTOFRETE( vnSeqAuxNotaFiscal );
3289 UPDATE MFT_NFPS
3290 SET RATEADO = 'S'
3291 WHERE SEQNFPS = pnSeqNfps;
3292 mftp_intNfSMDef( vnSeqAuxNotaFiscal );
3293 end if;
3294 /*RC122039*/
3295 SP_BUSCAPARAMDINAMICO('MAXTRANSP',t.nroempresa,'DIAVENCISS','N',10,
3296 'DIA DO VENCIMENTO DO ISS - SERÁ IMPRESSO NA NFST', vnDiaVenctoIss);
3297 SP_BUSCAPARAMDINAMICO('MAXTRANSP',t.nroempresa,'ORDEM_GERA_OBS_EMPENHO','S','L',
3298 'INFORMA A ORDEM DE GERAÇÃO DA OBSERVAÇÃO PARA NFTS? ' || chr(13)||chr(10) ||
3299 'L-GERA OBS NO LANÇAMENTO DO NFTS(PADRÃO).' || chr(13)||chr(10) ||
3300 'E-GERA OBS NA EMISSÃO DO NFTS', vsPDOrdemGeraOBSEmpenho);
3301 if nvl(vsPDOrdemGeraOBSEmpenho, 'L') = 'E' then
3302 vdDtaVenctoIss := TO_DATE(vnDiaVenctoIss || '/' || TO_CHAR(SYSDATE,'MM/YYYY'),'DD/MM/YYYY');
3303 IF TO_CHAR(SYSDATE,'DD') >= vnDiaVenctoIss THEN
3304 vdDtaVenctoIss := ADD_MONTHS(vdDtaVenctoIss,1);
3305 END IF;
3306 update mft_nfps
3307 set OBSERVACAO = (
3308 SELECT
3309 'Entregas realizadas entre ' || TO_CHAR(D.DTAMIN, 'dd/MM/yyyy') || ' e ' || TO_CHAR(D.DTAMAX, 'dd/MM/yyyy') ||
3310 ' - ISS: ' || D.ALIQISS || '% a ser retido em ' || TO_CHAR(vdDtaVenctoIss, 'dd/MM/yyyy') || ' = ' || TRIM(to_char(D.VLRISS, '9999999999990D00'))
3311 FROM (SELECT C.SEQNFPS,
3312 MAX(B.ALIQISS) ALIQISS,
3313 SUM(B.VLRISS) VLRISS,
3314 TRUNC(MIN(D.DTALANCAMENTO)) DTAMIN,
3315 TRUNC(MAX(D.DTALANCAMENTO)) DTAMAX
3316 FROM MFT_EMPENHO B, MFT_NFPSEMPENHO C, MFT_NFPS D
3317 WHERE B.NROEMPENHO = C.NROEMPENHO
3318 AND C.SEQNFPS = D.SEQNFPS
3319 GROUP BY C.SEQNFPS) D
3320 WHERE D.SEQNFPS = pnSeqNfps)
3321 WHERE SEQNFPS = pnSeqNfps;
3322 end if;
3323 END LOOP;
3324 end;
3325 procedure mftp_cancRateioNfps( pnSeqNfps IN NUMBER,
3326 pbOk in out Integer,
3327 psMsgErro out Varchar2)
3328 is
3329 vsRateado MFT_NFPS.RATEADO%TYPE;
3330 begin
3331 SELECT NVL(A.RATEADO,'N')
3332 INTO vsRateado
3333 FROM MFT_NFPS A
3334 WHERE A.SEQNFPS = pnSeqNfps;
3335 IF vsRateado = 'N' THEN
3336 FOR N IN
3337 (
3338 SELECT
3339 A.SEQAUXNOTAFISCAL
3340 FROM MFT_EMPENHO_CARGADF E, MLF_AUXNOTAFISCAL A, MAX_EMPRESA C, MFT_NFPSEMPENHO N
3341 WHERE E.NROEMPRESA = C.NROEMPRESA
3342 AND A.NUMERONF = E.NUMERODF
3343 AND A.SERIENF = E.SERIEDF
3344 AND A.SEQPESSOA = C.SEQPESSOAEMP
3345 AND E.NROEMPENHO = N.NROEMPENHO
3346 AND N.SEQNFPS IN ( pnSeqNfps)
3347 )LOOP
3348 mftp_cancRateioFrete( N.SEQAUXNOTAFISCAL, pbOk, psMsgErro );
3349 END LOOP;
3350 ELSE
3351 FOR N IN
3352 (
3353 SELECT
3354 A.SEQAUXNOTAFISCAL
3355 FROM MFT_NFPS E, MLF_AUXNOTAFISCAL A, MAX_EMPRESA B
3356 WHERE E.NROEMPRESA = B.NROEMPRESA
3357 AND A.NUMERONF = E.NRONFPS
3358 AND A.SERIENF = E.SERIENFPS
3359 AND A.SEQPESSOA = B.SEQPESSOAEMP
3360 AND E.SEQNFPS IN ( pnSeqNfps)
3361 )LOOP
3362 mftp_cancRateioFrete( N.SEQAUXNOTAFISCAL, pbOk, psMsgErro );
3363 END LOOP;
3364 END IF;
3365 end;
3366 procedure mftp_geraRateioEmpenho( pnNroEmpenho IN NUMBER,
3367 pnOk in out Integer,
3368 psMsgErro in out Varchar2 )
3369 is
3370 -- --
3371 vnSeqAuxNotaFiscal MLF_AUXNOTAFISCAL.SEQAUXNOTAFISCAL%TYPE;
3372 -- PARÂMETROS DINÂMICOS --
3373 vnPD_CgoPadrao MAX_CODGERALOPER.CODGERALOPER%TYPE;
3374 begin
3375 FOR T IN
3376 ( SELECT
3377 A.NRODOCTO,
3378 A.SERIEDOCTO,
3379 P.SEQPESSOA,
3380 P.VERSAO,
3381 P.UF,
3382 A.VLRTOTALSERVICO,
3383 A.VLRBASEICMS,
3384 A.ALIQICMS,
3385 A.VLRICMS,
3386 D.NROEMPRESA,
3387 A.USUALTERACAO,
3388 A.CGO,
3389 A.TIPOPAGTOFRETE,
3390 A.NROEMPRESA NROEMPRESAE,
3391 A.VLRBASEISS,
3392 A.ALIQISS,
3393 A.VLRISS,
3394 A.CST_PIS,
3395 A.CST_COFINS,
3396 A.CST_ICMS,
3397 A.VLRISENTOICMS,
3398 A.VLROUTROSICMS,
3399 A.INDCONSUMIDORFINAL,
3400 A.BASCALCICMSPARTILHA,
3401 A.PERALIQINTPARTILHAICMS,
3402 A.PERPARTILHAICMS,
3403 A.VLRICMSCALCORIGEM,
3404 A.VLRICMSCALCDESTINO
3405 FROM MFT_EMPENHO A, MAX_EMPRESA E, GE_PESSOA P, MAX_EMPRESA D
3406 WHERE A.NROEMPRESA = E.NROEMPRESA
3407 AND E.SEQPESSOAEMP = P.SEQPESSOA
3408 AND A.SEQDESTINATARIO = D.SEQPESSOAEMP
3409 AND NROEMPENHO = pnNroEmpenho
3410 AND A.TIPOPAGTOFRETE = 'A'
3411 UNION
3412 SELECT
3413 A.NRODOCTO,
3414 A.SERIEDOCTO,
3415 P.SEQPESSOA,
3416 P.VERSAO,
3417 P.UF,
3418 A.VLRTOTALSERVICO,
3419 A.VLRBASEICMS,
3420 A.ALIQICMS,
3421 A.VLRICMS,
3422 D.NROEMPRESA,
3423 A.USUALTERACAO,
3424 A.CGO,
3425 A.TIPOPAGTOFRETE,
3426 A.NROEMPRESA NROEMPRESAE,
3427 A.VLRBASEISS,
3428 A.ALIQISS,
3429 A.VLRISS,
3430 A.CST_PIS,
3431 A.CST_COFINS,
3432 A.CST_ICMS,
3433 A.VLRISENTOICMS,
3434 A.VLROUTROSICMS,
3435 A.INDCONSUMIDORFINAL,
3436 A.BASCALCICMSPARTILHA,
3437 A.PERALIQINTPARTILHAICMS,
3438 A.PERPARTILHAICMS,
3439 A.VLRICMSCALCORIGEM,
3440 A.VLRICMSCALCDESTINO
3441 FROM MFT_EMPENHO A, MAX_EMPRESA E, GE_PESSOA P, MAX_EMPRESA D
3442 WHERE A.NROEMPRESA = E.NROEMPRESA
3443 AND E.SEQPESSOAEMP = P.SEQPESSOA
3444 AND A.SEQREMETENTE = D.SEQPESSOAEMP
3445 AND NROEMPENHO = pnNroEmpenho
3446 AND A.TIPOPAGTOFRETE = 'P'
3447 )LOOP
3448 IF T.TIPOPAGTOFRETE = 'A' THEN
3449 -- Busca o parametro dinamico -- CGO padrão da nf gerada no sm para o transporte
3450 -- Quando o pagamento é feito pelo destinatário
3451 SP_BUSCAPARAMDINAMICO('MAXTRANSP',0,'CGOENTFRETEEM','N',NULL,
3452 'CGO PADRÃO NAS OPERAÇÕES DE ENTRADA AUTOMATICA DE CONHECIMENTOS DE TRANSPORTE, QUANDO PROVENIENTE DE EMPENHO',
3453 vnPD_CgoPadrao);
3454 ELSIF T.TIPOPAGTOFRETE = 'P' THEN
3455 -- Busca o parametro dinamico -- CGO padrão da nf gerada no sm para o transporte
3456 -- Quando o pagamento é feito pelo remetente
3457 SP_BUSCAPARAMDINAMICO('MAXTRANSP',0,'CGOENTNFSTREM','N',0,
3458 'INFORME O CGO PADRÃO NAS OPERAÇÕES DE ENTRADA AUTOMÁTICA DE NOTAS FISCAIS DE SERVIÇOS DE TRANSPORTE NA EMPRESA REMETENTE, QUANDO O FRETE FOR "PAGO".
3459 VALOR PADRÃO = 0',
3460 vnPD_CgoPadrao);
3461 IF vnPD_CgoPadrao = 0 THEN
3462 EXIT;
3463 END IF;
3464 END IF;
3465 SELECT S_SEQAUXNOTAFISCAL.NEXTVAL INTO vnSeqAuxNotaFiscal FROM DUAL;
3466 mftp_geraNfRateioFrete( vnSeqAuxNotaFiscal,
3467 t.NRODOCTO,
3468 t.SERIEDOCTO,
3469 t.seqpessoa,
3470 t.versao,
3471 t.uf,
3472 t.vlrtotalservico,
3473 t.vlrbaseicms,
3474 t.aliqicms,
3475 t.vlricms,
3476 t.nroempresa,
3477 SYSDATE,
3478 TRUNC(SYSDATE),
3479 sysdate,
3480 t.usualteracao,
3481 vnPD_CgoPadrao,
3482 t.VLRBASEISS,
3483 t.ALIQISS,
3484 t.VLRISS,
3485 t.CST_PIS,
3486 t.CST_COFINS,
3487 t.cst_icms,
3488 t.VLRISENTOICMS,
3489 t.VLROUTROSICMS,
3490 20, /*APPORIGEM*/
3491 null,
3492 pnOk,
3493 psMsgErro,
3494 null,
3495 null,
3496 NULL,
3497 NULL,
3498 NULL,
3499 t.INDCONSUMIDORFINAL,
3500 t.BASCALCICMSPARTILHA,
3501 t.PERALIQINTPARTILHAICMS,
3502 t.PERPARTILHAICMS,
3503 t.VLRICMSCALCORIGEM,
3504 t.VLRICMSCALCDESTINO,
3505 NULL,
3506 NULL);
3507 if pnOk = 1 then
3508 FOR N IN
3509 (
3510 SELECT
3511 A.SEQAUXNOTAFISCAL
3512 FROM MFT_EMPENHO_CARGADF E, MLF_AUXNOTAFISCAL A, MAX_EMPRESA C
3513 WHERE E.NROEMPRESA = C.NROEMPRESA
3514 AND A.NUMERONF = E.NUMERODF
3515 AND A.SERIENF = E.SERIEDF
3516 AND A.SEQPESSOA = C.SEQPESSOAEMP
3517 AND E.NROEMPENHO = pnNroEmpenho
3518 )LOOP
3519 UPDATE MLF_AUXNOTAFISCAL A
3520 SET A.TIPFRETETRANSP = DECODE(T.TIPOPAGTOFRETE,'A','F','C')
3521 WHERE A.SEQAUXNOTAFISCAL = N.SEQAUXNOTAFISCAL;
3522 mftp_geraNfVinculoRateio( vnSeqAuxNotaFiscal, N.SEQAUXNOTAFISCAL );
3523 END LOOP;
3524 PKG_MLF_RECEBIMENTO.SP_RATEIACONHECIMENTOFRETE( vnSeqAuxNotaFiscal );
3525 UPDATE MFT_EMPENHO
3526 SET RATEADO = 'S'
3527 WHERE NROEMPENHO = pnNroEmpenho;
3528 mftp_intNfSMDef( vnSeqAuxNotaFiscal );
3529 end if;
3530 END LOOP;
3531 end;
3532 procedure mftp_cancRateioEmpenho( pnNroEmpenho IN NUMBER,
3533 pbOk in out Integer,
3534 psMsgErro out Varchar2)
3535 is
3536 begin
3537 pbOk := 1;
3538 psMsgErro := null;
3539 FOR N IN
3540 (
3541 SELECT
3542 A.SEQAUXNOTAFISCAL
3543 FROM MFT_EMPENHO_CARGADF E, MLF_AUXNOTAFISCAL A, MAX_EMPRESA C
3544 WHERE E.NROEMPRESA = C.NROEMPRESA
3545 AND A.NUMERONF = E.NUMERODF
3546 AND A.SERIENF = E.SERIEDF
3547 AND A.SEQPESSOA = C.SEQPESSOAEMP
3548 AND E.NROEMPENHO = pnNroEmpenho
3549 )LOOP
3550 mftp_cancRateioFrete( N.SEQAUXNOTAFISCAL, pbOk, psMsgErro );
3551 END LOOP;
3552 end;
3553 function mftf_retRejFinanc( psCodLink in Varchar2 )
3554 return Varchar2 is
3555 vsRetorno varchar2(4000);
3556 begin
3557 vsRetorno := null;
3558 for t in(
3559 select a.motivo
3560 from fi_rejeitadomtv a
3561 where a.codlink in ( SELECT COLUMN_VALUE
3562 FROM TABLE(cast(c5_ComplexIn.c5InTable(psCodLink) as c5InStrTable)))
3563 ) loop
3564 if t.motivo is not null then
3565 if vsRetorno is null then
3566 vsRetorno := t.motivo;
3567 else
3568 vsRetorno := vsRetorno || CHR(10) || t.motivo;
3569 end if;
3570 end if;
3571 end loop;
3572 return vsRetorno;
3573 end;
3574 function mftf_StrNotasFiscais(pnNroEmpenho in Integer,
3575 pnElementoIni in Integer Default 0,
3576 pnElementoFim in Integer Default 0)
3577 return varchar2 is
3578 /* função utilizada pra gerar os números das notas fiscais
3579 concatenados, separados por vírgulas.
3580 parâmetros pnElementoIni e pnElementoFim:
3581 - delimitam quais serão os elementos do select que serão retornados;
3582 - se forem iguais a 0, a função pega todos os registros;
3583 - se somente o primeiro parâmetro tiver valor, serão retornados todos
3584 os registros a partir dele. */
3585 vsNumerosDoctos Varchar2(2000);
3586 begin
3587 select c5_ComplexIn.c5InString(CAST(COLLECT(TO_CHAR(NUMERODF)) AS
3588 c5InStrTable),', ',
3589 pnElementoIni,pnElementoFim)
3590 into vsNumerosDoctos
3591 from (
3592 SELECT LPAD(NUMERODF,10,'0') NUMERODF
3593 FROM MFT_EMPENHODF
3594 WHERE NROEMPENHO = pnNroEmpenho
3595 ORDER BY NUMERODF
3596 );
3597 return vsNumerosDoctos;
3598 end mftf_StrNotasFiscais;
3599 function mftf_StrManifestosCTRC(pnNroEmpenho in Integer,
3600 pnElementoIni in Integer Default 0,
3601 pnElementoFim in Integer Default 0)
3602 return varchar2 is
3603 /* função utilizada pra gerar os números dos manifestos
3604 concatenados, separados por vírgulas.
3605 parâmetros pnElementoIni e pnElementoFim:
3606 - delimitam quais serão os elementos do select que serão retornados;
3607 - se forem iguais a 0, a função pega todos os registros;
3608 - se somente o primeiro parâmetro tiver valor, serão retornados todos
3609 os registros a partir dele. */
3610 vsNumerosManifestos Varchar2(2000);
3611 begin
3612 select c5_ComplexIn.c5InString(CAST(COLLECT(TO_CHAR(SEQMANIFESTO)) AS
3613 c5InStrTable),
3614 ',',
3615 pnElementoIni,
3616 pnElementoFim)
3617 into vsNumerosManifestos
3618 from (
3619 SELECT DISTINCT (NVL(B.NROMANIFESTO, A.SEQMANIFESTO)) SEQMANIFESTO
3620 FROM MFT_EMPENHODF A, MFT_MANIFESTO B
3621 WHERE A.NROEMPENHO = pnNroEmpenho
3622 AND A.SEQMANIFESTO = B.SEQMANIFESTO
3623 ORDER BY NVL(B.NROMANIFESTO, A.SEQMANIFESTO)
3624 );
3625 return vsNumerosManifestos;
3626 end mftf_StrManifestosCTRC;
3627 function mftf_DadosImpostos(pnNroEmpresa in integer,
3628 pnNroTributacao in integer,
3629 psTipTributacao in varchar2,
3630 psUfCliente in varchar2,
3631 psUfRemetente in varchar2,
3632 psDado in varchar2,
3633 pnSeqProduto in integer default 0) return number is
3634 /* Função que retorna a alíquota de:
3635 - Percentual Tributado da Base de ICMS (ICMSPERCBASE)
3636 - Alíquota de ICMS (ICMSALIQ)
3637 - Alíquota de PIS (PISALIQ)
3638 - Alíquota de COFINS (COFINSALIQ)
3639 - Percentual de isento da tributação de ICMS (PERISENTO)
3640 - Percentual de outros da tributação de ICMS (PEROUTRO)
3641 - Alíquota de ICMS destino - "Partilha ICMS" (ICMSALIQDEST)
3642 - Alíquota de ICMS para FECP - (PERFECP)
3643 - Tipo Cálculo ICMS Partilha (TIPCALCICMSPART)
3644 - "Simples" = 1
3645 - "Por dentro" = 0
3646 de acordo com a tabela de Tributação por UF.*/
3647 vnPerTributado numeric(5, 2);
3648 vnPerAliquota numeric(5, 2);
3649 vnPerAliqPis numeric(5, 2);
3650 vnPerAliqCofins numeric(5, 2);
3651 vnPerIsento numeric(5, 2);
3652 vnPerOutros numeric(5, 2);
3653 vnPerFECP numeric(5, 2);
3654 vsMsg varchar2(200);
3655 vnPerAliqDest map_tributacaouf.peraliquotadestino%type;
3656 vnTipCalcIcmsPart number;
3657 begin
3658 SELECT F.PERTRIBUTADO,
3659 F.PERALIQUOTA,
3660 DECODE(F.SITUACAONFPIS, '01', NVL(F.PERPISDIF,D.PERPIS), F.PERPISDIF),
3661 DECODE(F.SITUACAONFCOFINS, '01', NVL(F.PERCOFINSDIF,D.PERCOFINS), F.PERCOFINSDIF),
3662 F.PERISENTO,
3663 F.PEROUTRO,
3664 NVL(F.PERALIQUOTADESTINO, NVL(F.PERALIQUOTAST, 0)),
3665 DECODE(NVL(F.TIPOCALCICMSPARTILHA, 'S'), 'S', 1, 0),
3666 DECODE(NVL(D.INDUTILCALCFCP, 'N'), 'S', NVL(F.PERALIQFCPICMS,0), NVL(F.PERALIQFECP, 0) + NVL(F.PERALIQFECOP, 0))
3667 INTO vnPerTributado, vnPerAliquota, vnPerAliqPis,
3668 vnPerAliqCofins,vnPerIsento, vnPerOutros,
3669 vnPerAliqDest,
3670 vnTipCalcIcmsPart,
3671 vnPerFecp
3672 FROM MAX_EMPRESA D, MAP_TRIBUTACAOUF F
3673 WHERE F.UFEMPRESA = psUfRemetente
3674 AND D.NROREGTRIBUTACAO = F.NROREGTRIBUTACAO
3675 AND D.NROEMPRESA = pnNroEmpresa
3676 AND F.TIPTRIBUTACAO = psTipTributacao
3677 AND F.UFCLIENTEFORNEC = psUfCliente
3678 AND F.NROTRIBUTACAO = pnNroTributacao;
3679 IF pnSeqProduto != 0 And vnPerAliqPis IS NULL OR vnPerAliqCofins IS NULL THEN
3680 SELECT A.PERPIS,
3681 A.PERCOFINS
3682 INTO vnPerAliqPis, vnPerAliqCofins
3683 FROM MAX_EMPRESA A
3684 WHERE A.NROEMPRESA = pnNroEmpresa;
3685 END IF;
3686 /* Importante notar os tratamentos para PIS/COFINS:
3687 - Se o CST for igual a 01, busca a aliq padrão da empresa.
3688 - Se for diferente, retorna uma alíquota nula.*/
3689 IF psDado = 'ICMSPERCBASE' Then
3690 return vnPerTributado;
3691 ELSIF psDado = 'ICMSALIQ' Then
3692 return vnPerAliquota;
3693 ELSIF psDado = 'PISALIQ' Then
3694 return vnPerAliqPis;
3695 ELSIF psDado = 'COFINSALIQ' Then
3696 return vnPerAliqCofins;
3697 ELSIF psDado = 'ICMSISENTO' Then
3698 return vnPerIsento;
3699 ELSIF psDado = 'ICMSOUTROS' Then
3700 return vnPerOutros;
3701 ELSIF psDado = 'ICMSALIQDEST' Then
3702 return vnPerAliqDest;
3703 ELSIF psDado = 'TIPCALCICMSPART' Then
3704 return vnTipCalcIcmsPart;
3705 ELSIF psDado = 'PERFECP' Then
3706 return vnPerFECP;
3707 ELSE
3708 return null;
3709 END IF;
3710 exception
3711 when no_data_found then
3712 Select '{Não há tributação configurada entre as UFs ' || psUfRemetente || ' (remetente) e ' || psUfCliente || ' (destinatário) na tributação ' || pnNroTributacao || ' - ' ||
3713 DECODE(psTipTributacao, 'SC', 'Saída contribuinte', 'Saída não-contribuinte') || '.}'
3714 Into vsMsg
3715 From dual;
3716 raise_application_error(-20203, vsMsg);
3717 end mftf_DadosImpostos;
3718 function mftf_CSTImpostos(pnNroEmpresa in integer,
3719 pnNroTributacao in integer,
3720 psTipTributacao in varchar2,
3721 psUfCliente in varchar2,
3722 psUfRemetente in varchar2,
3723 psDado in varchar2,
3724 pnSeqProduto in integer default 0) return varchar2 is
3725 /* Função que retorna o Código Situação Tributária de:
3726 - ICMS (ICMS)
3727 - PIS (PIS)
3728 - COFINS (COFINS)
3729 de acordo com a tabela de Tributação por UF.*/
3730 vsCSTICMS VARCHAR2(3);
3731 vsCSTPIS VARCHAR2(3);
3732 vsCSTCOFINS VARCHAR2(3);
3733 vsMsg varchar2(200);
3734 vnCodNatRec MAP_TRIBUTACAOUF.CODNATREC%TYPE;
3735 begin
3736 SELECT F.SITUACAONF,
3737 F.SITUACAONFPIS,
3738 F.SITUACAONFCOFINS,
3739 F.CODNATREC
3740 INTO vsCSTICMS, vsCSTPIS, vsCSTCOFINS,
3741 vnCodNatRec
3742 FROM MAX_EMPRESA D, MAP_TRIBUTACAOUF F
3743 WHERE F.UFEMPRESA = psUfRemetente
3744 AND D.NROREGTRIBUTACAO = F.NROREGTRIBUTACAO
3745 AND D.NROEMPRESA = pnNroEmpresa
3746 AND F.TIPTRIBUTACAO = psTipTributacao
3747 AND F.UFCLIENTEFORNEC = psUfCliente
3748 AND F.NROTRIBUTACAO = pnNroTributacao;
3749 IF pnSeqProduto != 0 And vsCSTPIS IS NULL AND vsCSTCOFINS IS NULL THEN
3750 SELECT A.SITUACAONFPISSAI,
3751 A.SITUACAONFCOFINSSAI,
3752 A.CODNATREC
3753 INTO vsCSTPIS, vsCSTCOFINS,
3754 vnCodNatRec
3755 FROM MAP_FAMILIA A, MAP_PRODUTO B
3756 WHERE A.SEQFAMILIA = B.SEQFAMILIA
3757 AND B.SEQPRODUTO = pnSeqProduto;
3758 END IF;
3759 IF psDado = 'ICMS' Then
3760 return vsCSTICMS;
3761 ELSIF psDado = 'PIS' Then
3762 return vsCSTPIS;
3763 ELSIF psDado = 'COFINS' Then
3764 return vsCSTCOFINS;
3765 ELSIF psDado = 'CODNATREC' Then
3766 return vnCodNatRec;
3767 ELSE
3768 return null;
3769 END IF;
3770 exception
3771 when no_data_found then
3772 Select '{Não há tributação configurada entre as UFs ' || psUfRemetente || ' (remetente) e ' || psUfCliente || ' (destinatário) na tributação ' || pnNroTributacao || ' - ' ||
3773 DECODE(psTipTributacao, 'SC', 'Saída contribuinte', 'Saída não-contribuinte') || '.}'
3774 Into vsMsg
3775 From dual;
3776 raise_application_error(-20203, vsMsg);
3777 end mftf_CSTImpostos;
3778 function mftf_BuscaCfop( pnCgo in Integer,
3779 pnNroTributacao in Integer,
3780 psIndContribIcms in Varchar2,
3781 psUf in Varchar2,
3782 psUfEmpresa in Varchar2,
3783 pnNroRegimeTrib in max_empresa.nroregtributacao%type )
3784 return number is
3785 vnCfop number(4);
3786 begin
3787 -- Verifica se existe o cfop configurado por tributacao/uf no cgo
3788 SELECT max(CASE
3789 WHEN A.UF = A.UFEMPRESA THEN
3790 A.CFOPESTADO
3791 WHEN A.UF = 'EX' THEN
3792 A.CFOPEXTERIOR
3793 WHEN A.UF != A.UFEMPRESA AND A.UF != 'EX' THEN
3794 A.CFOPFORAESTADO
3795 END)
3796 INTO vnCfop
3797 FROM MAX_CODGERALCFOPUF A
3798 WHERE A.CODGERALOPER = pnCgo
3799 AND A.NROTRIBUTACAO = pnNroTributacao
3800 AND A.INDCONTRIBICMS = psIndContribIcms
3801 AND (A.UF = psUf OR A.UF = 'ZZ') -- RP 125664
3802 AND (A.UFEMPRESA = psUfEmpresa OR A.UFEMPRESA = 'ZZ') -- RP 125664
3803 AND A.NROREGTRIBUTACAO = pnNroRegimeTrib;
3804 if vnCfop is not null then
3805 return vnCfop;
3806 else
3807 -- Verifica se existe o cfop configurado por tributacao no cgo
3808 SELECT max(CASE WHEN psUf = psUFEmpresa THEN
3809 A.CFOPESTADO
3810 WHEN psUf = 'EX' THEN
3811 A.CFOPEXTERIOR
3812 ELSE
3813 A.CFOPFORAESTADO
3814 END)
3815 INTO vnCfop
3816 FROM MAX_CODGERALCFOP A
3817 WHERE A.CODGERALOPER = pnCgo
3818 AND A.NROTRIBUTACAO = pnNroTributacao
3819 AND A.INDCONTRIBICMS = psIndContribIcms;
3820 if vnCfop is not null then
3821 return vnCfop;
3822 else
3823 -- Verifica se existe o cfop configurado no cgo
3824 SELECT CASE
3825 WHEN psUf = psUfEmpresa THEN
3826 A.CFOPESTADO
3827 WHEN psUF = 'EX' THEN
3828 A.CFOPEXTERIOR
3829 WHEN psUF != psUFEmpresa AND psUF != 'EX' THEN
3830 A.CFOPFORAESTADO
3831 END
3832 INTO vnCfop
3833 FROM MAX_CODGERALOPER A
3834 WHERE A.CODGERALOPER = pnCgo;
3835 return vnCfop;
3836 end if;
3837 end if;
3838 end mftf_BuscaCfop;
3839 procedure mftp_geraNfVinculoRateio( pnSeqAuxNotaFiscalF IN NUMBER,
3840 pnSeqAuxNotaFiscalV IN NUMBER)
3841 is
3842 vnNumeroNf MLF_AUXNOTAFISCAL.NUMERONF%TYPE;
3843 vnSeqPessoa MLF_AUXNOTAFISCAL.SEQPESSOA%TYPE;
3844 vsSerieNf MLF_AUXNOTAFISCAL.SERIENF%TYPE;
3845 vsTipNotaFiscal MLF_AUXNOTAFISCAL.TIPNOTAFISCAL%TYPE;
3846 vnNroEmpresa MLF_AUXNOTAFISCAL.NROEMPRESA%TYPE;
3847 vnNumeroNfV MLF_AUXNOTAFISCAL.NUMERONF%TYPE;
3848 vnSeqPessoaV MLF_AUXNOTAFISCAL.SEQPESSOA%TYPE;
3849 vsSerieNfV MLF_AUXNOTAFISCAL.SERIENF%TYPE;
3850 vsTipNotaFiscalV MLF_AUXNOTAFISCAL.TIPNOTAFISCAL%TYPE;
3851 vnNroEmpresaV MLF_AUXNOTAFISCAL.NROEMPRESA%TYPE;
3852 vnSeqAuxConhecimentoNota MLF_CONHECIMENTONOTAS.SEQUENCIA%TYPE;
3853 begin
3854 SELECT
3855 NUMERONF, SEQPESSOA, SERIENF, TIPNOTAFISCAL, NROEMPRESA
3856 INTO
3857 vnNumeroNf, vnSeqPessoa, vsSerieNf, vsTipNotaFiscal, vnNroEmpresa
3858 FROM MLF_AUXNOTAFISCAL
3859 WHERE SEQAUXNOTAFISCAL = pnSeqAuxNotaFiscalF;
3860 SELECT
3861 NUMERONF, SEQPESSOA, SERIENF, TIPNOTAFISCAL, NROEMPRESA
3862 INTO
3863 vnNumeroNfV, vnSeqPessoaV, vsSerieNfV, vsTipNotaFiscalV, vnNroEmpresaV
3864 FROM MLF_AUXNOTAFISCAL
3865 WHERE SEQAUXNOTAFISCAL = pnSeqAuxNotaFiscalV;
3866 SELECT S_SEQAUXCONHECIMENTONOTA.NEXTVAL INTO vnSeqAuxConhecimentoNota FROM DUAL;
3867 INSERT INTO MLF_CONHECIMENTONOTAS(
3868 NUMERONF, SEQPESSOA, SERIENF, TIPNOTAFISCAL, NROEMPRESA,
3869 SEQUENCIA, SEQAUXNOTAFISCAL, SEQAUXNOTACONHEC, SEQPESSOACONHEC, SERIENFCONHEC,
3870 TIPNOTAFISCALCONHEC, NROEMPCONHEC, NUMERONFCONHEC, INDMANUTENCAO)
3871 VALUES (vnNumeroNf, vnSeqPessoa, vsSerieNf, vsTipNotaFiscal, vnNroEmpresa,
3872 vnSeqAuxConhecimentoNota, pnSeqAuxNotaFiscalF, pnSeqAuxNotaFiscalV, vnSeqPessoaV, vsSerieNfV,
3873 vsTipNotaFiscalV, vnNroEmpresaV, vnNumeroNfV, null);
3874 end;
3875 procedure mftp_geraNfRateioFrete( pnSeqAuxNotaFiscal IN NUMBER,
3876 pnNumeroNf IN NUMBER,
3877 psSerieNf IN VARCHAR2,
3878 pnSeqPessoa IN INTEGER,
3879 pnVersaoPessoa IN NUMBER,
3880 psUf IN VARCHAR2,
3881 pnVlrServico IN NUMERIC,
3882 pnVlrBaseIcms IN NUMERIC,
3883 pnAliqIcms IN NUMERIC,
3884 pnVlrIcms IN NUMERIC,
3885 pnNroEmpresa IN NUMBER,
3886 pdDtaHorEmissao IN DATE,
3887 pdDtaSaida IN DATE,
3888 pdDtaLancto IN DATE,
3889 psUsuLancto IN VARCHAR2,
3890 pnCGO IN INTEGER,
3891 pnVlrBaseIss IN INTEGER,
3892 pnAliqIss IN INTEGER,
3893 pnVlrIss IN INTEGER,
3894 psSituacaoNfPis IN VARCHAR2,
3895 psSituacaoNFCofins IN VARCHAR2,
3896 psSituacaoNF IN VARCHAR2,
3897 pnVlrIsentosIcms IN NUMBER,
3898 pnVlrOutrosIcms IN NUMBER,
3899 pnAppOrigem IN INTEGER,
3900 psCTeChaveAcesso in VARCHAR2,
3901 pnOk in out Integer,
3902 psMsgErro in out Varchar2,
3903 pnPDProdFrete IN NUMBER,
3904 pnLinkERP in mlf_auxnotafiscal.linkerp%type,
3905 pnSeqNotaFiscal in number default null,
3906 psChaveCTe in varchar2 default null,
3907 pnTipoCTe IN MLF_AUXNOTAFISCAL.TIPOCTE%TYPE,
3908 psIndConsumidorFinal IN MLF_AUXNOTAFISCAL.INDCONSUMIDORFINAL%TYPE,
3909 pnBasCalcIcmsPartilha IN MLF_AUXNFITEM.BASCALCICMSPARTILHA%TYPE,
3910 pnPerAliqIntPartilhaIcms IN MLF_AUXNFITEM.PERALIQINTPARTILHAICMS%TYPE,
3911 pnPerPartilhaIcms IN MLF_AUXNFITEM.PERPARTILHAICMS%TYPE,
3912 pnVlrIcmsCalcOrigem IN MLF_AUXNFITEM.VLRICMSCALCORIGEM%TYPE,
3913 pnVlrIcmsCalcDestino IN MLF_AUXNFITEM.VLRICMSCALCDESTINO%TYPE,
3914 pnCodMunOrig IN MLF_AUXNOTAFISCAL.CODMUNORIG%TYPE,
3915 pnCodMunDest IN MLF_AUXNOTAFISCAL.CODMUNDEST%TYPE
3916 )
3917 is
3918 -- CAMPOS DO CGO --
3919 vsModeloNf MAX_CODGERALOPER.MODELONF%TYPE;
3920 vsTipPedidoCompra MAX_CODGERALOPER.TIPPEDIDOCOMPRA%TYPE;
3921 vsTipRecebPedido MAX_CODGERALOPER.TIPRECEBPEDIDO%TYPE;
3922 vsGerLivroFiscal MAX_CODGERALOPER.GERLIVROFISCAL%TYPE;
3923 vsRecalCusMedio MAX_CODGERALOPER.RECALCUSMEDIO%TYPE;
3924 vsGerAlteracaoEstq MAX_CODGERALOPER.GERALTERACAOESTQ%TYPE;
3925 vsBxaPedTransfExp MAX_CODGERALOPER.BXAPEDTRANSFEXP%TYPE;
3926 vsTipUso MAX_CODGERALOPER.TIPUSO%TYPE;
3927 vsIndUsaVerbaBonif MAX_CODGERALOPER.INDUSAVERBABONIF%TYPE;
3928 -- PRODUTO --
3929 vnSeqProduto RF_PRODUTO.SEQPRODUTO%TYPE;
3930 vsUndPadrao RF_PRODUTO.UNIDADEPADRAO%TYPE;
3931 vnQtdEmbalagem RF_PRODUTO.QTDDENTROEMB%TYPE;
3932 vnNroTributacao RF_PRODUTO.NROTRIBUTACAO%TYPE;
3933 vnPasso INTEGER;
3934 vnVersaoProduto RF_PRODUTO.VERSAOPROD%TYPE;
3935 vsSituacaoNFPis MAP_FAMILIA.SITUACAONFPIS%TYPE;
3936 vsSituacaoNFCofins MAP_FAMILIA.SITUACAONFCOFINS%TYPE;
3937 vsIndNfe VARCHAR2(1);
3938 vdDtaEmissao DATE;
3939 vsCgoEntradaEmissao VARCHAR2(1);
3940 vsUfEmpresa MAX_EMPRESA.UF%TYPE;
3941 vsUfFornec GE_PESSOA.UF%TYPE;
3942 vnNroRegTributacao MAX_EMPRESA.NROREGTRIBUTACAO%TYPE;
3943 vsTipTributacao VARCHAR2(2);
3944 vnPerIsento MAP_TRIBUTACAOUF.PERISENTO%TYPE;
3945 vsSituacaoNFTrib MAP_TRIBUTACAOUF.SITUACAONF%TYPE;
3946 begin
3947 pnOk := 1;
3948 psMsgErro := null;
3949 vnPasso := 1;
3950 vdDtaEmissao := trunc(pdDtaHorEmissao);
3951 SELECT
3952 A.TIPPEDIDOCOMPRA, A.TIPRECEBPEDIDO,
3953 A.GERLIVROFISCAL, A.RECALCUSMEDIO, A.GERALTERACAOESTQ,
3954 A.BXAPEDTRANSFEXP, A.TIPUSO, A.INDUSAVERBABONIF,
3955 decode(psChaveCTe, null,
3956 DECODE(DECODE(A.TIPCGO || A.TIPUSO, 'EE', 'S', 'N'),'S',
3957 (case when NVL(B.TIPOEMISNFE,'I') = 'I' then 'N' else 'S' end),'N'), 'S'
3958 ),
3959 DECODE(A.TIPCGO || A.TIPUSO, 'EE', 'S', 'N')
3960 INTO
3961 vsTipPedidoCompra, vsTipRecebPedido,
3962 vsGerLivroFiscal, vsRecalCusMedio, vsGerAlteracaoEstq,
3963 vsBxaPedTransfExp, vsTipUso, vsIndUsaVerbaBonif,
3964 vsIndNfe, vsCgoEntradaEmissao
3965 FROM MAX_CODGERALOPER A, MAX_EMPRESA B
3966 WHERE A.CODGERALOPER = pnCGO
3967 AND B.NROEMPRESA = pnNroEmpresa;
3968 if psCTeChaveAcesso is not null then
3969 vsModeloNf := 57;
3970 vsIndNfe := 'S';
3971 else
3972 vsModeloNf := '';
3973 vsIndNfe := '';
3974 end if;
3975 vnPasso := 2;
3976 INSERT INTO MLF_AUXNOTAFISCAL(
3977 SEQAUXNOTAFISCAL, STATUSNF, NUMERONF, SERIENF, TIPNOTAFISCAL,
3978 SEQPESSOA, VERSAOPESSOA, UFORIGEMDESTINO, NROEMPRESA, CODGERALOPER, DTAEMISSAO,
3979 DTASAIDA, MODELONF, TIPPEDIDOCOMPRA, TIPRECEBPEDIDO, GERLIVROFISCAL,
3980 RECALCUSMEDIO, GERALTERACAOESTQ, BXAPEDTRANSFEXP, TIPUSOCGO, INDUSAVERBABONIF,
3981 DTAHORLANCTO, USULANCTO, TIPFRETETRANSP, INDPROCESSAMENTO, VLRRECEBDINHEIRO,
3982 VLRTOTALNF, BASECALCICMS, VLRICMS, VLRPRODUTOS,
3983 VLRDESCONTO, VLRDESCINCOND, BASECALCICMSST, VLRICMSST, VLRDESPTRIBUTADA, VLRFRETENANF,
3984 VLRIPI, BASEICMSSTCALC, VLRICMSSTCALC, VLRDESPFORANF, VLRCOMPROR, VLRABATIMENTO, VLRDESCSUFRAMA,
3985 VLRBASEICMSRETIDO,VLRICMSRETIDO, VLRDESPNTRIBUTADA, VLRFRETEFORANF,
3986 DTARECEBIMENTO, DTAENTRADA, DTAHORENTRADA, APPORIGEM, INDNFE, NFECHAVEACESSO, LINKERP, SEQNOTAFISCAL,
3987 TIPOCTE, INDCONSUMIDORFINAL, VLRTAXASERVADMSUFRAMA, VLRTAXASERVADMSUFRAMACALC, CODMUNORIG, CODMUNDEST,
3988 VLRTOTICMSSN
3989 )
3990 VALUES (pnSeqAuxNotaFiscal, 'V', pnNumeroNf, psSerieNf, 'E',
3991 pnSeqPessoa, pnVersaoPessoa, psUf, pnNroEmpresa, pnCGO, decode(vsCgoEntradaEmissao,'S',null,vdDtaEmissao),
3992 decode(vsCgoEntradaEmissao,'S',trunc(sysdate),pdDtaSaida), vsModeloNf, vsTipPedidoCompra, vsTipRecebPedido, vsGerLivroFiscal,
3993 vsRecalCusMedio, vsGerAlteracaoEstq, vsBxaPedTransfExp, vsTipUso, vsIndUsaVerbaBonif,
3994 pdDtaLancto, psUsuLancto, 'C', 'C', 0,
3995 pnVlrServico, pnVlrBaseIcms, pnVlrIcms, pnVlrServico,
3996 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, decode(pnAppOrigem, 21, 0, pnVlrServico),
3997 trunc(sysdate), trunc(sysdate), sysdate, pnAppOrigem, vsIndNfe, psCTeChaveAcesso, pnLinkERP, pnSeqNotaFiscal,
3998 pnTipoCTe, psIndConsumidorFinal, 0, 0, pnCodMunOrig, pnCodMunDest,
3999 0
4000 );
4001 vnPasso := 3;
4002 if psChaveCTe is null then
4003 SELECT
4004 P.SEQPRODUTO, P.UNIDADEPADRAO, P.QTDDENTROEMB, P.NROTRIBUTACAO, P.VERSAOPROD,
4005 F.SITUACAONFPIS, F.SITUACAONFCOFINS,
4006 E.UF, PS.UF, NVL(FD.NROREGTRIBUTACAO,E.NROREGTRIBUTACAO),
4007 FMAP_TIPTRIBUTACAO(FR.MICROEMPRESA,FR.TIPFORNECEDOR)
4008 INTO
4009 vnSeqProduto, vsUndPadrao, vnQtdEmbalagem, vnNroTributacao, vnVersaoProduto,
4010 vsSituacaoNFPis, vsSituacaoNFCofins,
4011 vsUfEmpresa, vsUfFornec, vnNroRegTributacao,
4012 vsTipTributacao
4013 FROM RF_PRODUTO P, MAX_EMPRESA E, MAP_FAMILIA F,
4014 MAF_FORNECEDOR FR, MAF_FORNECDIVISAO FD, GE_PESSOA PS
4015 WHERE P.SEQPRODUTO = NVL(pnPDProdFrete,E.SEQPRODFRETE)
4016 AND P.NROEMPRESA = E.NROEMPRESA
4017 AND P.SEQFAMILIA = F.SEQFAMILIA
4018 AND E.NROEMPRESA = pnNroEmpresa
4019 AND FR.SEQFORNECEDOR = pnSeqPessoa
4020 AND FD.SEQFORNECEDOR = FR.SEQFORNECEDOR
4021 AND FD.NRODIVISAO = E.NRODIVISAO
4022 AND PS.SEQPESSOA = FR.SEQFORNECEDOR;
4023 else
4024 SELECT
4025 P.SEQPRODUTO, SUBSTR(FUNIDPADRAOVENDA(F.SEQFAMILIA, E.NROSEGMENTOPRINC),1,2) UNIDADEPADRAO,
4026 FPADRAOEMBVENDAEMPR(F.SEQFAMILIA, E.NROEMPRESA) QTDDENTROEMB,
4027 D.NROTRIBUTACAO, A.VERSAO,
4028 F.SITUACAONFPIS, F.SITUACAONFCOFINS,
4029 E.UF, PS.UF, NVL(FD.NROREGTRIBUTACAO,E.NROREGTRIBUTACAO),
4030 FMAP_TIPTRIBUTACAO(FR.MICROEMPRESA,FR.TIPFORNECEDOR)
4031 INTO
4032 vnSeqProduto, vsUndPadrao, vnQtdEmbalagem, vnNroTributacao, vnVersaoProduto,
4033 vsSituacaoNFPis, vsSituacaoNFCofins,
4034 vsUfEmpresa, vsUfFornec, vnNroRegTributacao,
4035 vsTipTributacao
4036 FROM MAP_PRODUTO P, MAX_EMPRESA E, MAP_FAMILIA F, MAP_FAMDIVISAO D, MRL_PRODUTOEMPRESA A,
4037 MAF_FORNECEDOR FR, MAF_FORNECDIVISAO FD, GE_PESSOA PS
4038 WHERE P.SEQPRODUTO = NVL(pnPDProdFrete,E.SEQPRODFRETE)
4039 AND P.SEQFAMILIA = F.SEQFAMILIA
4040 AND E.NROEMPRESA = pnNroEmpresa
4041 AND D.SEQFAMILIA = F.SEQFAMILIA
4042 AND D.NRODIVISAO = E.NRODIVISAO
4043 AND A.SEQPRODUTO = P.SEQPRODUTO
4044 AND A.NROEMPRESA = E.NROEMPRESA
4045 AND FR.SEQFORNECEDOR = pnSeqPessoa
4046 AND FD.SEQFORNECEDOR = FR.SEQFORNECEDOR
4047 AND FD.NRODIVISAO = E.NRODIVISAO
4048 AND PS.SEQPESSOA = FR.SEQFORNECEDOR;
4049 end if;
4050 SELECT nvl(MAX(A.PERISENTO),0),
4051 MAX(A.SITUACAONF)
4052 INTO vnPerIsento,
4053 vsSituacaoNFTrib
4054 FROM MAP_TRIBUTACAOUF A
4055 WHERE A.NROTRIBUTACAO = vnNroTributacao
4056 AND A.NROREGTRIBUTACAO = vnNroRegTributacao
4057 AND A.UFEMPRESA = vsUfEmpresa
4058 AND A.UFCLIENTEFORNEC = vsUfFornec
4059 AND A.TIPTRIBUTACAO = vsTipTributacao;
4060 vnPasso := 4;
4061 INSERT INTO MLF_AUXNFITEM(
4062 SEQAUXNOTAFISCAL, SEQAUXNFITEM, SEQPRODUTOBASE, EMBALAGEM, QTDEMBALAGEM,
4063 SEQPRODUTO, TIPITEM, SEQITEMNF, CODTRIBUTACAO, QUANTIDADE,
4064 VLRITEM, VLRDESCITEM, VLRFUNRURALITEM, VLRDESPTRIBUTITEM, VLRDESPNTRIBUTITEM,
4065 VLRDESPFORANF, VLRTOTISENTO, VLRTOTOUTRA, BASCALCICMS, PERALIQUOTAICMS,
4066 VLRICMS, BASCALCIPI, PERALIQUOTAIPI, VLRIPI, BASCALCICMSST,
4067 PERALIQUOTAICMSST, VLRICMSST, VLRDESCFINANCEIRO, VLRDESCTRANSF, INDADMPRECO,
4068 VLRTOTALITEM, VLRFRETE,VLRBASEISS, PERALIQISS, VLRTOTISS, VERSAO,
4069 SITUACAONFPIS, SITUACAONFCOFINS, SITUACAONF,
4070 BASCALCICMSPARTILHA, PERALIQINTPARTILHAICMS,
4071 PERPARTILHAICMS, VLRICMSCALCORIGEM,
4072 VLRICMSCALCDESTINO, NROPEDIDOSUPRIM)
4073 VALUES (pnSeqAuxNotaFiscal, 1, vnSeqProduto, vsUndPadrao, vnQtdEmbalagem,
4074 vnSeqProduto, 'R', 1, vnNroTributacao, 1,
4075 pnVlrServico, 0, 0, 0, 0,
4076 0, CASE
4077 WHEN (pnAppOrigem = 21 AND pnVlrBaseIcms = 0 and pnVlrOutrosIcms = 0 and vnPerIsento = 100) then nvl(pnVlrServico,0)
4078 ELSE nvl(pnVlrIsentosIcms,0)
4079 END,
4080 CASE
4081 WHEN (pnAppOrigem = 21 AND pnVlrBaseIcms = 0 and pnVlrIsentosIcms = 0 and vnPerIsento != 100) then nvl(pnVlrServico,0)
4082 ELSE nvl(pnVlrOutrosIcms,0)
4083 END,
4084 pnVlrBaseIcms, pnAliqIcms,
4085 pnVlrIcms, 0, 0, 0, 0,
4086 0, 0, 0, 0, 'N',
4087 pnVlrServico, decode(pnAppOrigem, 21, 0, pnVlrServico), pnVlrBaseIss, pnAliqIss, pnVlrIss, vnVersaoProduto,
4088 vsSituacaoNFPis /*psSituacaoNfPis*/, vsSituacaoNFCofins /*psSituacaoNfCofins*/, nvl(vsSituacaoNFTrib,psSituacaoNF), -- RC 73369
4089 pnBasCalcIcmsPartilha, pnPerAliqIntPartilhaIcms,
4090 pnPerPartilhaIcms, pnVlrIcmsCalcOrigem,
4091 pnVlrIcmsCalcDestino, 0);
4092 --Monta a tabela de vencimentos
4093 sp_MontaVencimentoRecebAux(pnSeqAuxNotaFiscal, pnNroEmpresa);
4094 exception when NO_DATA_FOUND then
4095 pnOk := 0;
4096 if vnPasso = 1 then
4097 psMsgErro := 'CGO não configurado. Verifique os parâmetros dinâmicos CGOENTFRETECN e CGOENTlFRETEEM. (Grupo: MAXTRANSP)';
4098 elsif vnPasso = 3 then
4099 psMsgErro := 'Produto padrão de frete não cadastrado na empresa de destino ou não existe a divisão da Empresa cadastrada para a divisão do fornecedor. (Empresa: ' || pnNroEmpresa || ')';
4100 end if;
4101 end;
4102 procedure mftp_cancRateioFrete ( pnSeqAuxNotaFiscalV IN NUMBER,
4103 pbOk in out Integer,
4104 psMsgErro out Varchar2 )
4105 is
4106 vnCount INTEGER;
4107 begin
4108 pbOk := 1;
4109 psMsgErro := NULL;
4110 FOR T IN
4111 (
4112 SELECT
4113 A.SEQAUXNOTAFISCAL,
4114 A.SEQUENCIA,
4115 A.NUMERONF,
4116 A.SEQPESSOA,
4117 A.SERIENF,
4118 A.TIPNOTAFISCAL
4119 FROM MLF_CONHECIMENTONOTAS A
4120 WHERE SEQAUXNOTACONHEC = pnSeqAuxNotaFiscalV
4121 UNION
4122 SELECT
4123 B.SEQAUXNOTAFISCAL,
4124 NULL,
4125 B.NUMERONF,
4126 B.SEQPESSOA,
4127 B.SERIENF,
4128 B.TIPNOTAFISCAL
4129 FROM MLF_AUXNOTAFISCAL B
4130 WHERE B.SEQAUXNOTAFISCAL = pnSeqAuxNotaFiscalV
4131 AND B.MODELONF IN ('07','08')
4132 )LOOP
4133 SELECT count(1)
4134 INTO vnCount
4135 FROM MLF_NOTAFISCAL A
4136 WHERE A.NUMERONF = T.NUMERONF
4137 AND A.SEQPESSOA = T.SEQPESSOA
4138 AND A.SERIENF = T.SERIENF
4139 AND A.TIPNOTAFISCAL = T.TIPNOTAFISCAL;
4140 IF vnCount = 0 Then
4141 DELETE FROM MLF_CONHECIMENTONOTAS
4142 WHERE SEQUENCIA = T.SEQUENCIA;
4143 DELETE FROM MLF_AUXNFITEM
4144 WHERE SEQAUXNOTAFISCAL = T.SEQAUXNOTAFISCAL;
4145 DELETE FROM MLF_AUXNOTAFISCAL
4146 WHERE SEQAUXNOTAFISCAL = T.SEQAUXNOTAFISCAL;
4147 ELSE
4148 pbOk := 0;
4149 psMsgErro := 'Notas Fiscais já liberadas no recebimento. Desintegre antes de cancelar o CTRC/NFPS';
4150 END IF;
4151 END LOOP;
4152 end;
4153 -- Procedure que grava os dados no Financeiro
4154 PROCEDURE mftp_geraFinanceiro(
4155 psIncluiDeleta IN VARCHAR2,
4156 pnNroEmpresa IN FI_INTTITULO.NROEMPRESA%TYPE,
4157 pnNroNota IN FI_INTTITULO.NROTITULO%TYPE,
4158 psSerieNota IN FI_INTTITULO.SERIETITULO%TYPE,
4159 pnVlrTitulo IN FI_INTTITULO.VLRORIGINAL%TYPE,
4160 psCodEspecie IN FI_INTTITULO.CODESPECIE%TYPE,
4161 pnNroCondPagto IN MFT_CTRC.NROCONDICAOPAGTO%TYPE,
4162 pnSeqPessoa IN FI_INTTITULO.CODPESSOA%TYPE,
4163 pdDtaEmissao IN FI_INTTITULO.DTAEMISSAO%TYPE,
4164 pnLinkErp IN MFT_CTRC.LINKERP%TYPE,
4165 psUsuAlteracao IN OR_NFVENCIMENTO.USUALTERACAO%TYPE,
4166 pnCodOperacao IN FI_INTTITULOOPE.CODOPERACAO%TYPE,
4167 pnSeqIntTitulo IN FI_INTTITULO.SEQTITULO%TYPE,
4168 pnOK IN OUT INTEGER,
4169 psMsgErro IN OUT Varchar2)
4170 IS
4171 vnTipoRegistro FI_INTTITULO.TIPOREGISTRO%TYPE;
4172 vnNroEmpresaMae FI_INTTITULO.NROEMPRESAMAE%TYPE;
4173 vnSeqTitulo FI_INTTITULO.SEQINTTITULO%TYPE;
4174 vnSeqIntTitulo FI_INTTITULO.SEQTITULO%TYPE;
4175 vnNroProcesso FI_INTTITULO.NROPROCESSO%TYPE;
4176 vsPdPermDtaProgTit MAX_PARAMETRO.VALOR%TYPE;
4177 vnNroParcela number(3);
4178 vnVlrParcela numeric(15,2);
4179 vnVlrTotGerado numeric(15,2);
4180 vsMsgErro varchar2(2000);
4181 BEGIN
4182 SP_BUSCAPARAMDINAMICO( 'MAXTRANSP', 0, 'PERM_DTAPROG_TIT', 'S', 'N',
4183 'PERMITE DATA PROGRAMADA DO TÍTULO FINANCEIRO SER GERADA AUTOMATICAMENTE COM BASE NA DATA DE VENCIMENTO? N-NÃO(PADRÃO) S-SIM
4184 OBS.: CASO "SIM" A DATA PROGRAMADA SERÁ GERADA NO MOMENTO DA INTEGRAÇÃO DO TÍTULO AO FINANCEIRO.', vsPdPermDtaProgTit );
4185 -- Busca os dados do parametro finaceiro
4186 SELECT NROEMPRESAMAE
4187 INTO vnNroEmpresaMae
4188 FROM FI_PARAMETRO
4189 WHERE NROEMPRESA = pnNroEmpresa;
4190 vnNroParcela := 0;
4191 vnVlrParcela := 0;
4192 vnVlrTotGerado := 0;
4193 vsMsgErro := null;
4194 for t in (
4195 select a.nrocondicaopagto, a.inddtabasefatura, a.dtainicialuso,
4196 a.dtafinaluso, a.nrodiavencto, a.dtavencimento,
4197 percacrfinanceiro, percvalorparcela, indusaprazoadicional,
4198 indcobratxaadmforma, count(1) over() QtdParcela
4199 from madv_condicaopagtovenc a
4200 where a.nrocondicaopagto = pnNroCondPagto
4201 and (a.inddtabasefatura not in (90, 91, 92))
4202 order by 6 )
4203 loop
4204 if t.QtdParcela = 0 then
4205 t.QtdParcela := 1;
4206 end if;
4207 vnNroParcela := vnNroParcela + 1;
4208 vnSeqIntTitulo := FFIP_BUSCASEQ;
4209 if vnNroParcela = t.QtdParcela then
4210 vnVlrParcela := pnVlrTitulo - vnVlrTotGerado;
4211 else
4212 vnVlrParcela := round(pnVlrTitulo * t.percvalorparcela / 100, 2);
4213 end if;
4214 vnVlrTotGerado := vnVlrTotGerado + vnVlrParcela;
4215 -- Verifica se é para incluir ou excluir
4216 If psIncluiDeleta = 'I' Then
4217 vnTipoRegistro := 1;
4218 vnSeqTitulo := FFIP_BUSCASEQ;
4219 vnNroProcesso := FFIP_BUSCASEQ;
4220 Else
4221 vnTipoRegistro := 2;
4222 vnSeqTitulo := pnSeqIntTitulo;
4223 vnNroProcesso := FFIP_BUSCASEQ;
4224 End If;
4225 -- Insere na tabela de títulos
4226 INSERT INTO FI_INTTITULO(
4227 SEQINTTITULO, TIPOREGISTRO,
4228 NROEMPRESAMAE, NROEMPRESA,
4229 CODESPECIE, TIPOCODPESSOA,
4230 CODPESSOA, NROTITULO,
4231 SERIETITULO, NROPARCELA,
4232 NRODOCUMENTO, SERIEDOC,
4233 VLRORIGINAL, DTAEMISSAO,
4234 DTAVENCIMENTO, TIPOVENCORIGINAL,
4235 DTAPROGRAMADA,
4236 TITULOEMITIDO, TITULOCAIXA,
4237 DTAMOVIMENTO, DTACONTABILIZACAO,
4238 SITUACAO, ORIGEM,
4239 SEQTITULO, SEQDEPOSITARIO,
4240 NROPROCESSO, USUALTERACAO,
4241 LINKERP, QTDPARCELA)
4242 VALUES (vnSeqIntTitulo, vnTipoRegistro,
4243 vnNroEmpresaMae, pnNroEmpresa,
4244 psCodEspecie, 1,
4245 pnSeqPessoa, pnNroNota,
4246 psSerieNota, vnNroParcela,
4247 pnNroNota, psSerieNota,
4248 vnVlrParcela, pdDtaEmissao,
4249 pdDtaEmissao + t.nrodiavencto, DECODE(pdDtaEmissao + t.nrodiavencto, pdDtaEmissao, 'V', 'P'),
4250 DECODE(vsPdPermDtaProgTit,'S',Null,pdDtaEmissao + t.nrodiavencto),
4251 'N', 'T',
4252 pdDtaEmissao, pdDtaEmissao,
4253 'N', 'IntTransp',
4254 vnSeqTitulo, 1,
4255 vnNroProcesso, psUsuAlteracao,
4256 pnLinkErp, t.QtdParcela);
4257 If psIncluiDeleta = 'I' Then
4258 -- Insere a operação no título
4259 INSERT INTO FI_INTTITULOOPE ( SEQINTTITULO,
4260 CODOPERACAO,
4261 VLROPERACAO,
4262 SEQTITOPERACAO,
4263 INDREPLICACAO,
4264 INDGEROUREPLICACAO )
4265 SELECT A.SEQINTTITULO,
4266 pnCodOperacao,
4267 A.VLRORIGINAL,
4268 FFIP_BUSCASEQ,
4269 'S',
4270 NULL
4271 FROM FI_INTTITULO A
4272 WHERE A.SEQTITULO = vnSeqTitulo;
4273 End If;
4274 If psIncluiDeleta = 'I' Then
4275 -- Se for inserir Consiste título integrado
4276 PKG_FIINTEGRACAO.FIP_INTCONSTIT( vnSeqIntTitulo, pnOK );
4277 If pnOK = 0 Then
4278 vsMsgErro := 'Títulos gerados no financeiro, porém com inconsistências.';
4279 End If;
4280 Else
4281 -- Se for cancelar integra direto
4282 PKG_FIINTEGRACAO.FIP_INTCANCELATIT( vnSeqIntTitulo, pnOK );
4283 End If;
4284 If pnOK = 0 Then
4285 UPDATE FI_INTTITULO
4286 SET SITUACAO = 'R'
4287 WHERE SEQINTTITULO = vnSeqIntTitulo;
4288 End If;
4289 if psIncluiDeleta = 'D' Then
4290 Exit;
4291 end if;
4292 end loop;
4293 If vsMsgErro IS NOT NULL Then
4294 pnOk := 1;
4295 psMsgErro := vsMsgErro;
4296 end if;
4297 EXCEPTION WHEN OTHERS THEN
4298 RAISE_APPLICATION_ERROR (-20200 , SQLERRM );
4299 END mftp_geraFinanceiro;
4300 /* PROCEDURES DE CONSISTÊNCIA */
4301 /* PROCEDURE QUE CONSISTE SE UM EMPENHO PODE SER CANCELADO */
4302 procedure mftp_ConsCancEmpenho( pnNroEmpenho IN INTEGER,
4303 pnConsDependencias IN INTEGER,
4304 pnConsNfSm IN INTEGER,
4305 pnOk IN OUT INTEGER,
4306 psMsg IN OUT VARCHAR2 )
4307 is
4308 vsTipoDocto MFT_EMPENHO.TIPODOCTO%TYPE;
4309 vsSituacao MFT_EMPENHO.SITUACAO%TYPE;
4310 vnNroDocto MFT_EMPENHO.NRODOCTO%TYPE;
4311 vsSerieDocto MFT_EMPENHO.SERIEDOCTO%TYPE;
4312 vsRateado MFT_EMPENHO.RATEADO%TYPE;
4313 vsTipoPagtoFrete MFT_EMPENHO.TIPOPAGTOFRETE%TYPE;
4314 vnCount INTEGER;
4315 begin
4316 pnOk := 1;
4317 psMsg:= NULL;
4318 SELECT E.TIPODOCTO, E.SITUACAO, E.NRODOCTO, E.SERIEDOCTO, E.RATEADO, E.TIPOPAGTOFRETE
4319 INTO vsTipoDocto, vsSituacao, vnNroDocto, vsSerieDocto, vsRateado, vsTipoPagtoFrete
4320 FROM MFT_EMPENHO E
4321 WHERE E.NROEMPENHO = pnNroEmpenho;
4322 IF vsSituacao = 'C' THEN
4323 pnOk := 0;
4324 psMsg:= 'Empenho já cancelado.';
4325 ELSIF pnConsDependencias = 1 THEN
4326 IF vsTipoDocto = 'C' THEN
4327 SELECT count(1)
4328 INTO vnCount
4329 FROM MFT_CTRC
4330 WHERE NROEMPENHO = pnNroEmpenho
4331 AND SITUACAO != 'C';
4332 IF vnCount > 0 THEN
4333 pnOk := 0;
4334 psMsg:= 'Este Empenho pertence a um CTRC que ainda não foi cancelado. '|| CHR(10) ||' Cancele o CTRC.';
4335 END IF;
4336 ELSIF vsTipoDocto = 'E' THEN
4337 SELECT count(1)
4338 INTO vnCount
4339 FROM MFT_NFPS
4340 WHERE SEQNFPS IN (SELECT SEQNFPS FROM MFT_NFPSEMPENHO WHERE NROEMPENHO = pnNroEmpenho)
4341 AND SITUACAO != 'C';
4342 IF vnCount > 0 THEN
4343 pnOk := 0;
4344 psMsg:= 'Este Empenho pertence a uma NFST que ainda não foi cancelada. '|| CHR(10) ||' Cancele a NFST.';
4345 END IF;
4346 END IF;
4347 END IF;
4348 IF pnOk = 1 AND pnConsNfSm = 1 AND vsTipoDocto = 'E' AND vsRateado = 'S' AND vsTipoPagtoFrete = 'A' THEN
4349 SELECT count(1)
4350 INTO vnCount
4351 FROM MLF_NOTAFISCAL A, MFT_EMPENHO B, MAX_EMPRESA C
4352 WHERE A.NUMERONF = B.NRODOCTO
4353 AND B.NROEMPRESA = C.NROEMPRESA
4354 AND A.SEQPESSOA = C.SEQPESSOAEMP
4355 AND A.SERIENF = B.SERIEDOCTO
4356 AND B.NROEMPENHO = pnNroEmpenho
4357 AND A.TIPNOTAFISCAL = 'E';
4358 IF vnCount > 0 THEN
4359 pnOk := 0;
4360 psMsg:= 'Notas Fiscais já liberadas no recebimento. Desintegre antes de cancelar o CTRC/NFPS.';
4361 END IF;
4362 END IF;
4363 EXCEPTION WHEN OTHERS THEN
4364 pnOk := 0;
4365 psMsg := 'Empenho não encontrado!';
4366 end;
4367 /* PROCEDURE QUE CONSISTE SE UMA NFPS PODE SER CANCELADA */
4368 procedure mftp_ConsCancNFPS( pnSeqNfps IN INTEGER,
4369 pnOk IN OUT INTEGER,
4370 psMsg IN OUT VARCHAR2 )
4371 is
4372 vsProcessado MFT_NFPS.PROCESSADO%TYPE;
4373 vsSituacao MFT_NFPS.SITUACAO%TYPE;
4374 vsIndEmissao MFT_NFPS.INDEMISSAO%TYPE;
4375 vsRateado MFT_NFPS.RATEADO%TYPE;
4376 vnCount integer;
4377 begin
4378 pnOk := 1;
4379 psMsg:= NULL;
4380 SELECT N.SITUACAO, N.PROCESSADO, NVL(N.INDEMISSAO,'N'), N.RATEADO
4381 INTO vsSituacao, vsProcessado, vsIndEmissao, vsRateado
4382 FROM MFT_NFPS N
4383 WHERE N.SEQNFPS = pnSeqNfps;
4384 IF vsSituacao = 'C' THEN
4385 pnOk := 0;
4386 psMsg:= 'NFPS já cancelada.';
4387 ELSIF vsIndEmissao = 'N' THEN
4388 pnOk := 0;
4389 psMsg:= 'É necessário emitir a NFST antes de cancelar.';
4390 END IF;
4391 IF pnOk = 1 AND vsRateado = 'S' THEN
4392 SELECT count(1)
4393 INTO vnCount
4394 FROM MLF_NOTAFISCAL A, MFT_NFPS B, MAX_EMPRESA C
4395 WHERE A.NUMERONF = B.NRONFPS
4396 AND B.NROEMPRESA = C.NROEMPRESA
4397 AND A.SEQPESSOA = C.SEQPESSOAEMP
4398 AND A.SERIENF = B.SERIENFPS
4399 AND B.SEQNFPS = pnSeqNfps
4400 AND A.TIPNOTAFISCAL = 'E';
4401 IF vnCount > 0 THEN
4402 pnOk := 0;
4403 psMsg:= 'Notas Fiscais já liberadas no recebimento. Desintegre antes de cancelar a NFPS.';
4404 END IF;
4405 END IF;
4406 IF pnOk = 1 AND vsSituacao = 'N' AND vsProcessado = 'S' THEN
4407 FOR T IN
4408 ( SELECT
4409 A.NROEMPENHO, E.NRODOCTO, E.SERIEDOCTO
4410 FROM MFT_NFPSEMPENHO A, MFT_EMPENHO E
4411 WHERE A.NROEMPENHO = E.NROEMPENHO
4412 AND A.SEQNFPS = pnSeqNfps
4413 )LOOP
4414 mftp_ConsCancEmpenho(T.NROEMPENHO, 0, 0, pnOk, psMsg);
4415 IF pnOk = 0 THEN
4416 psMsg := psMsg || CHR(10) || 'Empenho: ' || T.NRODOCTO || ' - Série: ' || T.SERIEDOCTO;
4417 EXIT;
4418 END IF;
4419 END LOOP;
4420 END IF;
4421 exception WHEN OTHERS THEN
4422 pnOk := 0;
4423 psMsg := 'NFST não encontrada!';
4424 end;
4425 /* PROCEDURE QUE CONSISTE SE UM CTRC PODE SER CANCELADO */
4426 procedure mftp_ConsCancCTRC( pnSeqCtrc IN INTEGER,
4427 pnOk IN OUT INTEGER,
4428 psMsg IN OUT VARCHAR2 )
4429 is
4430 vsProcessado MFT_CTRC.PROCESSADO%TYPE;
4431 vsSituacao MFT_CTRC.SITUACAO%TYPE;
4432 vsIndEmissao MFT_CTRC.INDEMISSAO%TYPE;
4433 vnLinkErp MFT_CTRC.LINKERP%TYPE;
4434 vsRateado MFT_EMPENHO.RATEADO%TYPE;
4435 vnCount INTEGER;
4436 vsStatusCte MFT_CTRC.STATUSCTE%TYPE;
4437 vsTipDocCtrc MAX_EMPSERIENF.TIPODOCTO%TYPE;
4438 begin
4439 pnOk := 1;
4440 psMsg:= NULL;
4441 SELECT C.SITUACAO, C.PROCESSADO, NVL(C.INDEMISSAO,'N'), C.LINKERP, B.RATEADO, C.STATUSCTE, NVL(A.TIPODOCTO,'N')
4442 INTO vsSituacao, vsProcessado, vsIndEmissao, vnLinkErp, vsRateado, vsStatusCte, vsTipDocCtrc
4443 FROM MFT_CTRC C, MFT_EMPENHO B, MAX_EMPSERIENF A
4444 WHERE C.SEQCTRC = pnSeqCTRC
4445 AND C.NROEMPENHO = B.NROEMPENHO
4446 AND A.NROEMPRESA = C.NROEMPRESA
4447 AND A.SERIENF = C.SERIECTRC;
4448 IF vsSituacao = 'C' AND ((vsTipDocCtrc = 'C' AND vsStatusCte = 7) OR vsTipDocCtrc != 'C') THEN
4449 pnOk := 0;
4450 psMsg:= 'CTRC já cancelada.';
4451 ELSIF vsIndEmissao = 'N' THEN
4452 pnOk := 0;
4453 psMsg:= 'É necessário emitir o CTRC antes de cancelar.';
4454 END IF;
4455 IF pnOk = 1 AND vsRateado = 'S' THEN
4456 SELECT COUNT(1)
4457 INTO vnCount
4458 FROM (
4459 SELECT 1
4460 FROM MLF_NOTAFISCAL A, MFT_CTRC B, MAX_EMPRESA C,
4461 MFT_EMPENHO E, MAX_EMPRESA F
4462 WHERE A.NUMERONF = B.NROCTRC
4463 AND B.NROEMPRESA = C.NROEMPRESA
4464 AND A.SEQPESSOA = C.SEQPESSOAEMP
4465 AND A.SERIENF = B.SERIECTRC
4466 AND B.NROEMPENHO = E.NROEMPENHO
4467 AND E.SEQDESTINATARIO = F.SEQPESSOAEMP
4468 AND A.NROEMPRESA = F.NROEMPRESA
4469 AND B.SEQCTRC = pnSeqCtrc
4470 AND A.TIPNOTAFISCAL = 'E'
4471 AND E.TIPOPAGTOFRETE = 'A'
4472 UNION ALL
4473 SELECT 1
4474 FROM MLF_NOTAFISCAL A, MFT_CTRC B, MAX_EMPRESA C,
4475 MFT_EMPENHO E, MAX_EMPRESA F
4476 WHERE A.NUMERONF = B.NROCTRC
4477 AND B.NROEMPRESA = C.NROEMPRESA
4478 AND A.SEQPESSOA = C.SEQPESSOAEMP
4479 AND A.SERIENF = B.SERIECTRC
4480 AND B.NROEMPENHO = E.NROEMPENHO
4481 AND E.SEQREMETENTE = F.SEQPESSOAEMP
4482 AND A.NROEMPRESA = F.NROEMPRESA
4483 AND B.SEQCTRC = pnSeqCtrc
4484 AND A.TIPNOTAFISCAL = 'E'
4485 AND E.TIPOPAGTOFRETE = 'P');
4486 IF vnCount > 0 THEN
4487 pnOk := 0;
4488 psMsg:= 'Existem Notas Fiscais já liberadas no recebimento. Desintegre antes de cancelar o CTRC.';
4489 END IF;
4490 END IF;
4491 IF pnOk = 1 AND vsSituacao = 'N' AND vsProcessado = 'S' THEN
4492 FOR T IN
4493 ( SELECT
4494 E.NROEMPENHO, E.NRODOCTO, E.SERIEDOCTO
4495 FROM MFT_EMPENHO E, MFT_CTRC C
4496 WHERE C.NROEMPENHO = E.NROEMPENHO
4497 AND C.SEQCTRC = pnSeqCtrc
4498 )LOOP
4499 mftp_ConsCancEmpenho(T.NROEMPENHO, 0, 0, pnOk, psMsg);
4500 IF pnOk = 0 THEN
4501 psMsg := 'Notas Fiscais já liberadas no recebimento. Desintegre antes de cancelar o CTRC.';
4502 EXIT;
4503 END IF;
4504 END LOOP;
4505/* NÃO SERÁ MAIS UTILIZADO AQUI. FOI CRIADA A PROCURE: MFTP_CANCELACTRCAGRUP
4506 IF vsTitAgrup = 'S' AND pnOk = 1 THEN
4507 SELECT COUNT(1)
4508 INTO vnCount
4509 FROM MFT_CTRC A
4510 WHERE A.LINKERP = vnLinkErp
4511 AND A.SITUACAO = 'N';
4512 If vnCount > 1 THEN
4513 SELECT COUNT(1)
4514 INTO vnCount
4515 FROM FI_TITULO A
4516 WHERE A.LINKERP = vnLinkErp
4517 AND A.SITUACAO != 'C';
4518 IF vnCount > 0 THEN
4519 pnOk := 0;
4520 psMsg := 'Título Agrupado com outros CTRCs. É necessário cancelar o título no financeiro.';
4521 END IF;
4522 END IF;
4523 END IF;*/
4524 END IF;
4525 EXCEPTION WHEN OTHERS THEN
4526 pnOk := 0;
4527 psMsg := 'CTRC não encontrado!';
4528 end;
4529 /* PROCEDURE QUE GERA UM NÚMERO DE CONHECIMENTO E SUA SERIE */
4530 procedure mftp_geraNumDoctoEmpenho( pnNroEmpresa IN INTEGER,
4531 pnCgo IN INTEGER,
4532 pnNroDocto OUT INTEGER,
4533 psSerieDOCTO OUT VARCHAR2,
4534 pnOk OUT INTEGER,
4535 psMsgErro OUT VARCHAR2 )
4536 is
4537 vsSerieCGO MFT_EMPENHO.SERIEDOCTO%TYPE;
4538 vsSerieDocto MFT_EMPENHO.SERIEDOCTO%TYPE;
4539 vnNroDocto MFT_EMPENHO.NRODOCTO%TYPE;
4540 vsSerieCteCGO MFT_EMPENHO.SERIEDOCTO%TYPE;
4541 vnNroEmpSerieNF MAX_EMPSERIENF.NROEMPRESA%TYPE;
4542 begin
4543 pnOk := 1;
4544 psMsgErro := null;
4545 SELECT max(CGO.SERIENF), max(CGO.SERIECTE)
4546 INTO vsSerieCGO, vsSerieCteCGO
4547 FROM MAX_CODGERALOPER CGO
4548 WHERE CGO.CODGERALOPER = pnCgo;
4549 begin
4550 SELECT C.SERIENF
4551 INTO vsSerieDocto
4552 FROM MAX_EMPRESA A, MAX_EMPSERIENF C
4553 WHERE A.NROEMPRESA = C.NROEMPRESA
4554 AND A.NROEMPRESA = pnNroEmpresa
4555 AND C.SERIENF = NVL(DECODE(NVL(A.TIPOEMISCTE,'I'),'I',vsSerieCGO,nvl(vsSerieCteCGO,vsSerieCGO)),
4556 ( SELECT E.SERIENFSAIDA
4557 FROM MAX_EMPRESASEG E
4558 WHERE A.NROSEGMENTOPRINC = E.NROSEGMENTO
4559 AND A.NROEMPRESA = E.NROEMPRESA
4560 AND E.SERIENFSAIDA = C.SERIENF))
4561 /*AND C.SERIENF = NVL(vsSerieCGO,( SELECT E.SERIENFSAIDA
4562 FROM MAX_EMPRESASEG E
4563 WHERE A.NROSEGMENTOPRINC = E.NROSEGMENTO
4564 AND A.NROEMPRESA = E.NROEMPRESA
4565 AND E.SERIENFSAIDA = C.SERIENF))*/;
4566 SELECT C.NUMERONF,
4567 C.NROEMPRESA
4568 INTO vnNroDocto,
4569 vnNroEmpSerieNF
4570 FROM MAX_EMPRESA A, MAX_EMPSERIENF C
4571 WHERE A.NROEMPRESA = C.NROEMPRESA
4572 AND A.NROEMPRESA = FC5_RETEMPORIGDAEMPVIRTUAL( pnNroEmpresa, vsSerieDocto )
4573 AND C.SERIENF = vsSerieDocto
4574 FOR UPDATE;
4575 EXCEPTION
4576 when others then
4577 psMsgErro := 'A Série ' || nvl(vsSerieCteCGO,vsSerieCGO) || ' não está configurada para a empresa ' || to_char(vnNroEmpSerieNF) || ' na emissão NF. VERIFIQUE';
4578 pnOk := 0;
4579 end;
4580 vnNroDocto := vnNroDocto +1;
4581 pnNroDocto := vnNroDocto;
4582 psSerieDocto := vsSerieDocto;
4583 UPDATE MAX_EMPSERIENF
4584 SET NUMERONF = vnNroDocto
4585 WHERE NROEMPRESA = vnNroEmpSerieNF
4586 AND SERIENF = vsSerieDocto;
4587 end mftp_geraNumDoctoEmpenho;
4588 function mftf_verificaNumDoctoEmpenho( pnNroEmpresa IN INTEGER,
4589 pnCgo IN INTEGER)
4590 return varchar2 is
4591 vsSerieCGO MFT_EMPENHO.SERIEDOCTO%TYPE;
4592 vnCount integer;
4593 begin
4594 SELECT max(CGO.SERIENF)
4595 INTO vsSerieCGO
4596 FROM MAX_CODGERALOPER CGO
4597 WHERE CGO.CODGERALOPER = pnCgo;
4598 SELECT count(*)
4599 INTO vnCount
4600 FROM MAX_EMPRESA A, MAX_EMPSERIENF C
4601 WHERE A.NROEMPRESA = C.NROEMPRESA
4602 AND A.NROEMPRESA = pnNroEmpresa
4603 AND C.SERIENF = NVL(vsSerieCGO,( SELECT E.SERIENFSAIDA
4604 FROM MAX_EMPRESASEG E
4605 WHERE A.NROSEGMENTOPRINC = E.NROSEGMENTO
4606 AND A.NROEMPRESA = E.NROEMPRESA
4607 AND E.SERIENFSAIDA = C.SERIENF)) ;
4608 If vnCount > 0 then
4609 return 'S';
4610 Else
4611 return 'N';
4612 end if;
4613 end;
4614 procedure mftp_intNFServico( pnSeqNf in Integer,
4615 psUsuAlteracao in varchar2,
4616 pnOk in out Integer,
4617 psMsgErro out Varchar2)
4618 is
4619 begin
4620 mftp_geraNumNFServico( pnSeqNf );
4621 mftp_geraFinancNfServ( pnSeqNf, psUsuAlteracao, pnOk, psMsgErro );
4622 If pnOk = 1 Then
4623 Update MFT_NFSERVICO
4624 Set Processado = 'S'
4625 Where SEQNF = pnSeqNf;
4626 End if;
4627 end;
4628 procedure mftp_integraNfFiscal( pnSeqNf in integer )
4629 is
4630 vnSeqNota rf_auxnotamestr.seqnota%TYPE;
4631 begin
4632 select s_mrl_seqintdoctofiscal.nextval
4633 into vnSeqNota
4634 from dual;
4635 insert into rf_auxnotamestr(
4636 seqnota,
4637 nroempresa,
4638 seqpessoa,
4639 codmodelo,
4640 versao,
4641 dtaemissao,
4642 dtalancamento,
4643 nronota,
4644 serie,
4645 subserie,
4646 entradasaida,
4647 observacao,
4648 ciffob,
4649 vlrtotal,
4650 indoperacao,
4651 notaok,
4652 origem,
4653 codentradasaida,
4654 tipomovimento,
4655 nrocgccpf,
4656 especienf,
4657 usualteracao,
4658 dtaalteracao,
4659 linkerp,
4660 taborigintegra,
4661 cgo,
4662 --indprocintegra,
4663 aidf,
4664 DTAIMPRESSAO,
4665 dtacancelamento,
4666 dtahorlancto,
4667 dtahoremissao,
4668 dtahorsaida,
4669 codsitdoc,
4670 INDORIGEMINSERT
4671 )
4672 select
4673 vnSeqNota,
4674 a.NROEMPRESA,
4675 a.SEQPESSOA,
4676 a.CODMODELO,
4677 a.VERSAOPESSOA,
4678 TRUNC(A.DTAHOREMISSAO),
4679 TRUNC(a.DTAHORGERACAO),
4680 a.NUMERONF,
4681 a.SERIE,
4682 a.SUBSERIE,
4683 'S' ENTRADASAIDA,
4684 A.OBSERVACAO,
4685 '1' CIFFOB,
4686 A.VLRTOTALNF,
4687 'E' INDOPERACAO,
4688 null NOTAOK,
4689 'T' ORIGEM,
4690 decode(b.tipcgo||b.tipuso,'ER',2,1) CODENTRADASAIDA,
4691 DECODE(A.CODSITDOC, 2, 'A', 3, 'A', 'I') TIPOMOVIMENTO,
4692 0 NROCGCCPF,
4693 'NFPS' ESPECIENF,
4694 A.USUALTERACAO USUALTERACAO,
4695 A.DTAALTERACAO DTAALTERACAO,
4696 A.LINKERP LINKERP,
4697 'T' TABORIGINTEGRA,
4698 A.CGO,
4699 A.NROAIDF,
4700 A.DTAHOREMISSAO,
4701 A.DTACANCELAMENTO,
4702 A.DTAHORGERACAO,
4703 A.DTAHOREMISSAO,
4704 A.DTASAIDA,
4705 A.CODSITDOC,
4706 'I'
4707 from mftv_nfservicotopo a, max_codgeraloper b
4708 where a.CGO = b.codgeraloper
4709 and a.SEQNF = pnSeqnf;
4710 insert into rf_auxnotaitem(
4711 seqnota, nroitem,
4712 nroempresa,
4713 codproduto, versaoprod,
4714 cfop,
4715 unidade,
4716 quantidade,
4717 vlrtotal,
4718 --tipotributacao,
4719 usualteracao,
4720 dtaalteracao,
4721 vlritem,
4722 vlrcontabil,
4723 seqtpreciss,
4724 vlriss,
4725 --qtdembalagem,
4726 codtributacao,
4727 vlrbaseiss,
4728 aliqiss,
4729 -- valores zerados (nao utilizados neste processo
4730 vlrisento,
4731 vlroutras,
4732 vlrbaseicmsprop,
4733 vlricms,
4734 vlrbaseicmsst,
4735 vlricmsret,
4736 vlrbaseipi,
4737 vlripi,
4738 vlrisentoipi,
4739 vlroutrosipi,
4740 vlrdesconto,
4741 situacaonfpis,
4742 situacaonfcofins,
4743 aliqpiscalc,
4744 aliqcofinscalc,
4745 basepiscalc,
4746 basecofinscalc,
4747 vlrpiscalc,
4748 vlrcofinscalc
4749 )
4750 SELECT
4751 vnSeqNota,
4752 A.NROITEM,
4753 A.NROEMPRESA,
4754 A.SEQSERVICO,
4755 A.VERSAO,
4756 A.CFOP,
4757 A.UNIDADE,
4758 A.QUANTIDADE,
4759 A.VLRTOTAL,
4760 A.USUALTERACAO,
4761 A.DTAALTERACAO,
4762 A.VLRITEM,
4763 A.VLRCONTABIL,
4764 A.RETENCAOISS,
4765 A.VLRISS,
4766 A.CODTRIBUTACAO,
4767 A.VLRBASEISS,
4768 A.ALIQISS,
4769 0 VLRISENTO,
4770 0 VLROUTRAS,
4771 0 VLRBASEICMSPROP,
4772 0 VLRICMS,
4773 0 VLRBASEICMSST,
4774 0 VLRICMSRET,
4775 0 VLRBASEIPI,
4776 0 VLRIPI,
4777 0 VLRISENTOIPI,
4778 0 VLROUTROSIPI,
4779 0 VLRDESCONTO,
4780 A.CST_PIS,
4781 A.CST_COFINS,
4782 A.ALIQPIS,
4783 A.ALIQCOFINS,
4784 A.VLRBASEPIS,
4785 A.VLRBASECOFINS,
4786 A.ALIQPIS * A.VLRBASEPIS / 100,
4787 A.ALIQCOFINS * A.VLRBASECOFINS / 100
4788 FROM MFTV_NFSERVICOITEM A
4789 WHERE A.SEQNF = pnSeqNF;
4790 end;
4791 procedure mftp_geraFinancNFServ( pnSeqNfps in Integer,
4792 psUsuAlteracao in varchar2,
4793 pnOk in out Integer,
4794 psMsgErro out Varchar2) is
4795 vnCount integer;
4796 begin
4797 for nfps in (
4798 select
4799 j.NROEMPRESA, j.NUMERONF, j.SERIE,
4800 j.VLRTOTALNF, j.NROCONDICAOPAGTO,
4801 j.DTAHORGERACAO, j.LINKERP,
4802 j.SEQPESSOA, j.CODESPECIE, v.qtdParcela
4803 from mftv_nfservicotopo j, (
4804 select count(1) qtdParcela, nrocondicaopagto
4805 from madv_condicaopagtovenc
4806 group by nrocondicaopagto) v
4807 where j.NROCONDICAOPAGTO = v.nrocondicaopagto
4808 and seqnf = pnSeqNfps
4809 )loop
4810 mftp_geraFinanceiro(
4811 'I', nfps.nroempresa, nfps.numeronf, nfps.serie,
4812 nfps.vlrtotalnf, nfps.codespecie, nfps.nrocondicaopagto,
4813 nfps.seqpessoa, nfps.DTAHORGERACAO, nfps.linkerp,
4814 psUsuAlteracao, 16, NULL, pnOk, psMsgErro );
4815 end loop;
4816 if pnOk = 1 and psMsgErro IS NULL Then
4817 select count(1)
4818 into vnCount
4819 from fi_inttitulo a, mft_nfservico b
4820 where a.linkerp = b.linkerp
4821 and b.SEQNF = pnSeqNfps;
4822 If vnCount > 0 then
4823 FOR vtIntTitulo IN (
4824 SELECT A.SEQINTTITULO
4825 from fi_inttitulo a, mft_nfservico b
4826 where a.linkerp = b.linkerp
4827 and b.SEQNF = pnSeqNfps )
4828 LOOP
4829 PKG_FIINTEGRACAO.FIP_INTTITULO( vtIntTitulo.SEQINTTITULO, pnOK );
4830 END LOOP;
4831 End If;
4832 end if;
4833 end;
4834 procedure mftp_cancFinancNfServico( pnSeqNfps in Integer,
4835 psUsuAlteracao in varchar2,
4836 pbOk in out Integer,
4837 psMsgErro out Varchar2) is
4838 vnCount integer;
4839 vnLinkErp integer;
4840 vsAux varchar2(2000);
4841 begin
4842 pbOk := 1;
4843 select linkerp
4844 into vnLinkErp
4845 from mft_nfservico
4846 where seqnf = pnSeqNfps;
4847 -- Deleta das tabelas de integração do financeiro, se existir
4848 DELETE FI_INTTITULOOPE
4849 WHERE SEQINTTITULO IN ( SELECT SEQINTTITULO
4850 FROM FI_INTTITULO
4851 WHERE LINKERP = vnLinkErp );
4852 DELETE FI_REJEITADOMTV
4853 WHERE CODLINK IN ( SELECT SEQINTTITULO
4854 FROM FI_INTTITULO
4855 WHERE LINKERP = vnLinkErp );
4856 DELETE FI_REJEITADO
4857 WHERE CODLINK IN ( SELECT SEQINTTITULO
4858 FROM FI_INTTITULO
4859 WHERE LINKERP = vnLinkErp );
4860 DELETE FI_INTTITULO
4861 WHERE LINKERP = vnLinkErp;
4862 for nfps in (
4863 select
4864 c.NROEMPRESA, c.NUMERONF, c.SERIE,
4865 c.VLRTOTALNF, c.NROCONDICAOPAGTO,
4866 c.SEQPESSOA, c.DTAHORGERACAO, c.LINKERP,
4867 c.SEQNF, c.CODESPECIE,
4868 v.qtdParcela, tit.seqtitulo
4869 from mftv_nfservicotopo c, fi_titulo tit,(
4870 select count(1) qtdParcela, nrocondicaopagto
4871 from madv_condicaopagtovenc
4872 group by nrocondicaopagto) v
4873 where c.NROCONDICAOPAGTO = v.nrocondicaopagto
4874 and c.LINKERP = tit.linkerp
4875 and c.SEQNF = pnSeqNfps
4876 )loop
4877 mftp_geraFinanceiro(
4878 'D', nfps.nroempresa, nfps.numeronf, nfps.serie,
4879 nfps.vlrtotalnf, nfps.codespecie, nfps.nrocondicaopagto,
4880 nfps.seqpessoa, nfps.DTAHORGERACAO, nfps.linkerp,
4881 psUsuAlteracao, 16, nfps.seqtitulo, pbOk, psMsgErro );
4882 end loop;
4883 select count(1)
4884 into vnCount
4885 from fi_rejeitado a
4886 where a.codlink in ( select seqinttitulo
4887 from fi_inttitulo tit, mft_nfservico c
4888 where c.linkerp = tit.linkerp
4889 and c.seqnf = pnSeqNfps);
4890 if vnCount > 0 then
4891 pbOk := 0;
4892 select c5_ComplexIn.c5InString(CAST(COLLECT(TO_CHAR(seqinttitulo)) AS
4893 c5InStrTable),', ')
4894 into vsAux
4895 from fi_inttitulo tit, mft_nfservico c
4896 where c.linkerp = tit.linkerp
4897 and c.seqnf = pnSeqNfps;
4898 psMsgErro := mftf_retRejFinanc( vsAux );
4899 end if;
4900 end;
4901 procedure mftp_geraNumNFServico( pnSeqNf in Integer )
4902 is
4903 vnNumeroNF MFT_NFSERVICO.NUMERONF%TYPE;
4904 vsSerieNF MFT_NFSERVICO.SERIE%TYPE;
4905 vnNroEmpresa MFT_NFSERVICO.NROEMPRESA%TYPE;
4906 vsSerieCGO MFT_NFSERVICO.SERIE%TYPE;
4907 vsModelo MFT_NFSERVICO.CODMODELO%TYPE;
4908 vsGerLivroFiscal MFT_NFSERVICO.GERLIVROFISCAL%TYPE;
4909 vnLinkErp MFT_NFSERVICO.LINKERP%TYPE;
4910 vsNroAidf MFT_NFSERVICO.NROAIDF%TYPE;
4911 vnNroEmpSerieNF MAX_EMPSERIENF.NROEMPRESA%TYPE;
4912 begin
4913 SELECT CGO.SERIENF, A.NROEMPRESA, CGO.MODELONF, CGO.GERLIVROFISCAL
4914 INTO vsSerieCGO, vnNroEmpresa, vsModelo, vsGerLivroFiscal
4915 FROM MFT_NFSERVICO A, MAX_CODGERALOPER CGO
4916 WHERE A.CGO = CGO.CODGERALOPER
4917 AND A.SEQNF = pnSeqNf;
4918 BEGIN
4919 SELECT C.SERIENF, C.NROAIDF
4920 INTO vsSerieNF, vsNroAidf
4921 FROM MAX_EMPRESA A, MAX_EMPSERIENF C
4922 WHERE A.NROEMPRESA = C.NROEMPRESA
4923 AND A.NROEMPRESA = vnNroEmpresa
4924 AND C.SERIENF = NVL(vsSerieCGO,( SELECT E.SERIENFSAIDA
4925 FROM MAX_EMPRESASEG E
4926 WHERE A.NROSEGMENTOPRINC = E.NROSEGMENTO
4927 AND A.NROEMPRESA = E.NROEMPRESA
4928 AND E.SERIENFSAIDA = C.SERIENF));
4929 SELECT C.NUMERONF,
4930 C.NROEMPRESA
4931 INTO vnNumeroNF,
4932 vnNroEmpSerieNF
4933 FROM MAX_EMPRESA A, MAX_EMPSERIENF C
4934 WHERE A.NROEMPRESA = C.NROEMPRESA
4935 AND A.NROEMPRESA = FC5_RETEMPORIGDAEMPVIRTUAL( vnNroEmpresa, vsSerieNF )
4936 AND C.SERIENF = vsSerieNF
4937 FOR UPDATE;
4938 vnNumeroNF := vnNumeroNF +1;
4939 Select s_seqlinkerp.nextval into vnLinkErp from dual;
4940 UPDATE MFT_NFSERVICO
4941 SET NUMERONF = vnNumeroNF,
4942 SERIE = vsSerieNF,
4943 CODMODELO = vsModelo,
4944 GERLIVROFISCAL = vsGerLivroFiscal,
4945 LINKERP = vnLinkErp,
4946 NROAIDF = vsNroAidf
4947 WHERE SEQNF = pnSeqNf;
4948 UPDATE MAX_EMPSERIENF
4949 SET NUMERONF = vnNumeroNF
4950 WHERE NROEMPRESA = vnNroEmpSerieNF
4951 AND SERIENF = vsSerieNF;
4952 EXCEPTION WHEN NO_DATA_FOUND THEN
4953 RAISE_APPLICATION_ERROR(-20100,'Não existe série configurada para este CGO ou a série configurada não está associada a empresa.');
4954 END;
4955 end;
4956 /* PROCEDURE QUE CONSISTE SE UMA NFServico PODE SER CANCELADA */
4957 procedure mftp_ConsCancNFServico( pnSeqNf IN INTEGER,
4958 pnOk IN OUT INTEGER,
4959 psMsg IN OUT VARCHAR2 )
4960 is
4961 vsProcessado MFT_NFSERVICO.PROCESSADO%TYPE;
4962 vsSituacao VARCHAR2(1);
4963 vsIndEmissao MFT_NFSERVICO.INDEMISSAO%TYPE;
4964 vnLinkErp MFT_NFSERVICO.LINKERP%TYPE;
4965 begin
4966 pnOk := 1;
4967 psMsg:= NULL;
4968 SELECT DECODE(N.CODSITDOC, 2, 'C', 3, 'C', 'N'), N.PROCESSADO, NVL(N.INDEMISSAO,'N'), N.LINKERP
4969 INTO vsSituacao, vsProcessado, vsIndEmissao, vnLinkErp
4970 FROM MFT_NFSERVICO N
4971 WHERE N.SEQNF = pnSeqNf;
4972 IF vsSituacao = 'C' THEN
4973 pnOk := 0;
4974 psMsg:= 'NF já cancelada.';
4975 ELSIF vsIndEmissao = 'N' THEN
4976 pnOk := 0;
4977 psMsg:= 'É necessário emitir a NF antes de cancelar.';
4978 END IF;
4979/* SELECT COUNT(1)
4980 INTO vnIntFiscal
4981 FROM RF_NOTAMESTRE A
4982 WHERE A.LINKERP = vnLinkErp;
4983 IF vnIntFiscal > 0 AND vsProcessado = 'S' THEN
4984 pnOk := 0;
4985 psMsg:= 'NF já foi integrada definitivamente para o Fiscal.';
4986 END IF;*/
4987 exception WHEN OTHERS THEN
4988 pnOk := 0;
4989 psMsg := 'NF não encontrada!';
4990 end;
4991 procedure mftp_cancelaNFServico( pnSeqNf in Integer,
4992 psUsuCancelou in Varchar2,
4993 pnOk in out Integer,
4994 psMsgErro in out Varchar2)
4995 is
4996 begin
4997 mftp_ConsCancNFServico(pnSeqNf, pnOk, psMsgErro);
4998 if pnOk = 1 then
4999 mftp_cancFinancNFServico(pnSeqNf, psUsuCancelou, pnOk, psMsgErro);
5000 if pnOk = 1 then
5001 update mft_nfservico
5002 set codsitdoc = 2,
5003 usucancelamento = psUsuCancelou,
5004 dtacancelamento = sysdate
5005 where seqnf = pnSeqNf;
5006 mftp_cancFiscalNFServico(pnSeqNf);
5007 end if;
5008 end if;
5009 end;
5010 procedure mftp_cancFiscalNFServico( pnSeqNf in integer )
5011 is
5012 --vnLinkErp MFT_NFSERVICO.LINKERP%type;
5013 begin
5014/* SELECT LINKERP
5015 INTO vnLinkErp
5016 FROM MFT_NFSERVICO
5017 WHERE SEQNF = pnSeqNf;
5018 DELETE
5019 FROM RF_AUXNOTAITEM A
5020 WHERE A.SEQNOTA IN ( SELECT SEQNOTA
5021 FROM RF_AUXNOTAMESTR
5022 WHERE LINKERP = vnLinkErp );
5023 DELETE
5024 FROM RF_AUXNOTAMESTR
5025 WHERE LINKERP = vnLinkErp;*/
5026 mftp_integraNfFiscal( pnSeqNf );
5027 end;
5028 /* função para busca a quantidade de volume do locus */
5029 function mftf_BuscaQtdVolumeLocus(
5030 pnNroCarga in MFT_EMPENHO_CARGADF.Nrocarga%type,
5031 pnSeqPessoa in GE_PESSOA.Seqpessoa%type,
5032 pnNroEmpresa in MFT_EMPENHO_CARGADF.NROEMPRESA%TYPE,
5033 psDividePorNota in varchar2
5034 )
5035 return number
5036 is
5037 vnQtdVolumeTotCargaDF mfl_dfitem.qtdvolume%type;
5038 vnQtdVolumePessoa mfl_dfitem.qtdvolume%type;
5039 vnPercVolume number(5,2);
5040 vnQtdVolumeLocus mfl_dfitem.qtdvolume%type;
5041 vnQtdeNotasPorCliente integer := 0;
5042 begin
5043 If psDividePorNota = 'S' then
5044 --verifica qtas notas tem na carga para o mesmo cliente
5045 select count(1)
5046 into vnQtdeNotasPorCliente
5047 from MFLV_DFBASEEDITOTAL a
5048 where a.seqpessoa = pnSeqPessoa
5049 and a.nrocarga = pnNroCarga
5050 and a.nroempresa = pnNroEmpresa;
5051 If vnQtdeNotasPorCliente = 0 then
5052 vnQtdeNotasPorCliente := 1;
5053 end if;
5054 Else
5055 vnQtdeNotasPorCliente := 1;
5056 end if;
5057 /*busca o volume total da carga na tabela de nota
5058 (essa busca é necessário para saber a proporção q será executada em cima do
5059 volume do locus (situação qdo q carga possuir duas notas))*/
5060 SELECT NVL(MAX(SUM(B.qtdvolume)),0) QTDVOLUMES
5061 into vnQtdVolumeTotCargaDF
5062 FROM MFT_EMPENHO_CARGADF E,
5063 GE_PESSOA P,
5064 MFT_EMPENHO A,
5065 MFLV_DFBASEEDITOTAL B
5066 WHERE E.NROSERIEECF = B.NROSERIEECF
5067 AND E.SERIEDF = B.SERIEDF
5068 AND E.NUMERODF = B.NUMERODF
5069 AND E.NROEMPRESA = B.NROEMPRESA
5070 AND B.SEQPESSOA = P.SEQPESSOA
5071 AND E.NROEMPENHO = A.NROEMPENHO
5072 AND E.NROCARGA = pnNroCarga
5073 --AND A.SITUACAO = 'X'
5074 AND B.NROEMPRESA = (SELECT NROEMPRESA FROM MAX_EMPRESA WHERE SEQPESSOAEMP = A.SEQREMETENTE)
5075 Group by b.nroempresa;
5076 --busca o volume da nota por seqpessoa
5077 SELECT NVL(MAX(SUM(B.qtdvolume)),0) QTDVOLUMES
5078 into vnQtdVolumePessoa
5079 FROM MFT_EMPENHO_CARGADF E,
5080 GE_PESSOA P,
5081 MFT_EMPENHO A,
5082 MFLV_DFBASEEDITOTAL B
5083 WHERE E.NROSERIEECF = B.NROSERIEECF
5084 AND E.SERIEDF = B.SERIEDF
5085 AND E.NUMERODF = B.NUMERODF
5086 AND E.NROEMPRESA = B.NROEMPRESA
5087 AND B.SEQPESSOA = P.SEQPESSOA
5088 AND E.NROEMPENHO = A.NROEMPENHO
5089 AND E.NROCARGA = pnNroCarga
5090 AND B.seqpessoa = pnSeqPessoa
5091 --AND A.SITUACAO = 'X'
5092 AND B.NROEMPRESA = (SELECT NROEMPRESA FROM MAX_EMPRESA WHERE SEQPESSOAEMP = A.SEQREMETENTE)
5093 Group by b.nroempresa, p.seqpessoa;
5094 --acha a proporção
5095 If vnQtdVolumeTotCargaDF = 0 then
5096 vnQtdVolumeTotCargaDF := 1;
5097 end if;
5098 vnPercVolume := round((vnQtdVolumePessoa / vnQtdVolumeTotCargaDF) * 100 , 2);
5099 --busca a qtde de volume do locus
5100 select fmad_volumecliente(pnNroCarga, pnNroEmpresa, pnSeqPessoa, null)
5101 into vnQtdVolumeLocus
5102 from dual;
5103 /*vnQtdVolumeLocus := 250;*/
5104 --calcula a qtde de volume de acordo com o percentual da nota em cima da carga
5105 return round((vnQtdVolumeLocus * vnPercVolume) / 100) / vnQtdeNotasPorCliente;
5106 end mftf_BuscaQtdVolumeLocus;
5107 procedure mftp_ProcImportTxt( pnIdUser in integer )
5108 is
5109 vnNroCarga integer;
5110 begin
5111 for t in (
5112 SELECT *
5113 FROM MFTV_CARGA_NF_IMPORT A
5114 WHERE A.IDUSER = pnIdUser
5115 )loop
5116 IF T.tiporeg = 'C' THEN
5117 vnNroCarga := t.nrocarga;
5118 INSERT INTO MFT_CARGAIMPORT( NROEMPRESA, NROCARGA, DESCRICAO,
5119 TIPOENTREGA, DTAFATURAMENTO, QTDNFS,
5120 VLRTOTALCARGA, USUIMPORT, DTAIMPORT,
5121 LINHA )
5122 VALUES( T.NROEMPRESACARGA, T.NROCARGA, T.DESCRICAO,
5123 T.TIPOENTREGA, T.DTAFATURAMENTO, T.QTDNFS,
5124 T.VLRTOTALCARGA, T.USUIMPORT, SYSDATE,
5125 T.LINHA );
5126 ELSIF T.tiporeg = 'N' THEN
5127 INSERT INTO MFT_NFIMPORT( NROCARGA, NROEMPRESA, NRONOTA, SERIENF,
5128 MODELO, SEQPESSOA, DTANF, VLRTOTAL,
5129 VLRMERCADORIA, VLRTOTTRIB, VOLUMES, PESOBRUTO,
5130 PESOLIQUIDO, USUIMPORT, DTAIMPORT,
5131 LINHA )
5132 VALUES( vnNroCarga, T.NROEMPRESANF, T.NRONOTA, T.SERIENF,
5133 T.MODELO, T.SEQPESSOA, T.DTANF, T.VLRTOTAL,
5134 T.VLRMERCADORIA, T.VLRTOTTRIB, T.VOLUMES, T.PESOBRUTO,
5135 T.PESOLIQUIDO, T.USUIMPORT, SYSDATE,
5136 T.LINHA );
5137 END IF;
5138 end loop;
5139 DELETE
5140 FROM MFTV_CARGA_NF_IMPORT A
5141 WHERE A.IDUSER = pnIdUser;
5142 end;
5143procedure mftp_geraManifesto(pnNroEmpresa in ge_empresa.nroempresa%type,
5144 pnNroEmpTransbordo in ge_empresa.nroempresa%type,
5145 pnIdUser in integer,
5146 psUsuInclusao in varchar2,
5147 pnOk out number,
5148 psMsgErro out varchar2) is
5149 vnSeqManifesto MFT_MANIFESTO.SEQMANIFESTO%TYPE;
5150 vnContador number;
5151 vsPDBuscaQtdVolumeLocus varchar2(1);
5152 vnTransportador number;
5153 vsTipoEmisMDFe max_empresa.tipoemismdfe%type;
5154 vsSerieNF max_empserienf.serienf%type;
5155 vnNumeroNF max_empserienf.numeronf%type;
5156 vsIndMDFE varchar2(1);
5157 vsObsPadraoMDFe max_empresa.obspadraomdfe%type;
5158 vnQtdRemetente integer;
5159 vnPDSeqRemententeDiversos max_parametro.valor%type;
5160 vnNroEmpSerieNF max_empserienf.nroempresa%type;
5161 vnSeqPercursoAuto mft_manifesto.seqpercurso%type;
5162 vsPDUtilTranspTransbordoMDFE varchar2(1);
5163 vnSeqManifestoTransbordo mft_manifesto.seqmanifesto%type;
5164 vnNroEmpTransbordoRemet mft_manifesto.nroemptransbordoremet%type;
5165 vnTemDF integer;
5166 vnPDDestinatarioDiversos max_parametro.valor%type;
5167 vnAppOrigem mft_manifesto.apporigem%type;
5168 vnSeqPercurso mft_manifesto.seqpercurso%type;
5169 vnSeqCidadeDescarregamento mft_manifesto.seqcidadedescarregamento%type;
5170begin
5171 SP_BUSCAPARAMDINAMICO('MAXTRANSP', pnNroEmpresa, 'BUSCA_QTDVOLUME_LOCUS', 'S', 'N', 'AO GERAR O CTRC, BUSCAR A QUANTIDADE DE VOLUMES DO CLIENTE NA CARGA DO LOCUS (S-SIM, N-NÃO, VALOR PADRÃO:N)? MARCADO COMO NÃO, A GERAÇÃO BUSCARÁ A QUANTIDADE DE VOLUMES DA NOTA FISCAL.', vsPDBuscaQtdVolumeLocus);
5172 SP_BUSCAPARAMDINAMICO('MAXTRANSP',pnNroEmpresa,'COD_REMETENTE_DIVERSOS','N',0,
5173 'INFORME O CÓDIGO DO REMETENTE QUE SERÁ UTILIZADO PARA GERAÇÃO DOS MANIFESTOS DE CARGA A PARTIR DE CTRCS.',
5174 vnPDSeqRemententeDiversos);
5175 SP_BUSCAPARAMDINAMICO('MAXTRANSP',pnNroEmpresa,'COD_REMETENTE_DIVERSOS','N',0,
5176 'INFORME O CÓDIGO DO REMETENTE QUE SERÁ UTILIZADO PARA GERAÇÃO DOS MANIFESTOS DE CARGA A PARTIR DE CTRCS.',
5177 vnPDSeqRemententeDiversos);
5178 SP_BUSCAPARAMDINAMICO('MAXTRANSP', 0, 'UTIL_TRANSP_TRANSBORDO_MDFE', 'S', 'N',
5179 'UTILIZA TRANSPORTADOR TRANSBORDO PARA MDF-E?' || CHR(13) || CHR(10) ||
5180 'S-SIM' || CHR(13) || CHR(10) ||
5181 'N-NÃO(PADRÃO)', vsPDUtilTranspTransbordoMDFE);
5182 --Busca pd q indica se pode ser gerado manifesto para o mesmo destinatário
5183 SP_BUSCAPARAMDINAMICO('MAXTRANSP', pnNroEmpresa, 'GER_MANF_MESM_DEST', 'S', 'N',
5184 'O MANIFESTO DE EMPRESAS DIFERENTES TEM QUE SER GERADO PARA O MESMO DESTINATARIO?',vnPDDestinatarioDiversos);
5185 vsIndMDFE := fmft_manifestomdfe(pnNroEmpresa);
5186 Select nvl(max(A.APPORIGEM), 2 ), max(a.seqcidadedescarregamento)
5187 Into vnAppOrigem , vnSeqCidadeDescarregamento
5188 From MFTX_DADOS_MANIFESTO A
5189 WHERE A.IDUSUARIO = pnIdUser
5190 AND A.NROEMPRESA = pnNroEmpresa;
5191 if vsIndMDFE = 'S' then
5192 begin
5193 Select a.seqpessoa
5194 into vnPDSeqRemententeDiversos
5195 from mftv_remetente a
5196 where a.seqpessoa = vnPDSeqRemententeDiversos;
5197 exception
5198 when no_data_found then
5199 pnOk := 0;
5200 psMsgErro := 'O remetente diversos configurado para ser utilizado na geração de Manifestos de Carga não é válido.'||chr(13)||chr(10)||
5201 'Verifique o parâmetro dinâmico COD_REMETENTE_DIVERSOS.';
5202 return;
5203 end;
5204 end if;
5205 pnOk := 1;
5206 psMsgErro := NULL;
5207 FOR VT IN (
5208 /*Utilizado quando é gerado a partir de carga(Carga Própria)*/
5209 SELECT NVL( E.UF, C.UF ) UF, A.NROCARGA, A.SEQCTRC, A.IDUSUARIO, A.NROEMPRESA,
5210 LAG(NVL(E.UF , C.UF) ) OVER(ORDER BY nvl(E.UF , C.UF)) UFANTERIOR, LAG(A.SEQCTRC) OVER(ORDER BY A.SEQCTRC) CTRCANTERIOR, D.SEQEMBARCACAO, D.INDEMBARCACAO, D.SEQSEGURADORA
5211 FROM MFTX_DADOS_MANIFESTO_CARGA A, MFL_DOCTOFISCAL B, GE_PESSOA C,
5212 MFTX_DADOS_MANIFESTO D, GE_CIDADE E
5213 WHERE A.NROCARGA = B.NROCARGA
5214 AND B.SEQPESSOA = C.SEQPESSOA
5215 AND A.IDUSUARIO = D.IDUSUARIO
5216 AND A.NROEMPRESA = D.NROEMPRESA
5217 AND B.NROEMPRESA = case when vnPDDestinatarioDiversos = 'N' And vnAppOrigem != 3 then
5218 (SELECT NROEMPRESA
5219 FROM MAX_EMPRESA
5220 WHERE SEQPESSOAEMP = nvl(D.SEQREMETENTE, A.SEQREMETENTE)
5221 AND STATUS = 'A')
5222 else
5223 B.NROEMPRESA
5224 end
5225 AND A.IDUSUARIO = pnIdUser
5226 AND A.NROEMPRESA = pnNroEmpresa
5227 AND A.IMPORTADA != 'S'
5228 AND A.SEQCTRC != A.NROCARGA
5229 AND B.STATUSDF = 'V'
5230 AND D.SEQCIDADEDESCARREGAMENTO = E.SEQCIDADE (+)
5231 GROUP BY NVL( E.UF, C.UF ), A.NROCARGA, A.SEQCTRC, A.IDUSUARIO, A.NROEMPRESA, D.SEQEMBARCACAO, D.INDEMBARCACAO, D.SEQSEGURADORA
5232 UNION
5233 /*Utilizado quando é gerado a partir de carga(Carga Própria) - Notas de devolução transferência*/
5234 SELECT NVL( F.UF, C.UF ) UF, A.NROCARGA, A.SEQCTRC, A.IDUSUARIO, A.NROEMPRESA,
5235 LAG(NVL( F.UF, C.UF )) OVER(ORDER BY nvl( F.UF, C.UF )) UFANTERIOR, LAG(A.SEQCTRC) OVER(ORDER BY A.SEQCTRC) CTRCANTERIOR, D.SEQEMBARCACAO, D.INDEMBARCACAO, D.Seqseguradora
5236 FROM MFTX_DADOS_MANIFESTO_CARGA A, MLF_NOTAFISCAL B, GE_PESSOA C,
5237 MFTX_DADOS_MANIFESTO D, MRL_CARGAEXPED E, GE_CIDADE F
5238 WHERE A.NROCARGA = E.NROCARGA
5239 AND B.SEQPESSOA = C.SEQPESSOA
5240 AND A.IDUSUARIO = D.IDUSUARIO
5241 AND A.NROEMPRESA = D.NROEMPRESA
5242 AND B.NROEMPRESA = case when vnPDDestinatarioDiversos = 'N' And vnAppOrigem != 3 then(
5243 SELECT NROEMPRESA
5244 FROM MAX_EMPRESA
5245 WHERE SEQPESSOAEMP = nvl(D.SEQREMETENTE, A.SEQREMETENTE)
5246 AND STATUS = 'A')
5247 else
5248 B.NROEMPRESA
5249 end
5250 AND A.IDUSUARIO = pnIdUser
5251 AND A.NROEMPRESA = pnNroEmpresa
5252 AND A.IMPORTADA != 'S'
5253 AND A.SEQCTRC != A.NROCARGA
5254 AND B.STATUSNF = 'V'
5255 AND D.SEQCIDADEDESCARREGAMENTO = F.SEQCIDADE (+)
5256 AND EXISTS (SELECT 1
5257 FROM MFL_DOCTOFISCAL F, MAX_CODGERALOPER G, MLF_NOTAFISCAL H,
5258 MAX_CODGERALOPER I
5259 WHERE H.NUMERONF = B.NFREFERENCIANRO
5260 AND H.SERIENF = B.NFREFERENCIASERIE
5261 AND H.SEQNF = B.SEQNFREF
5262 AND H.NFREFERENCIANRO = F.NUMERODF
5263 AND H.NFREFERENCIASERIE = F.SERIEDF
5264 AND H.SEQNFREF = F.SEQNF
5265 AND G.CODGERALOPER = B.CODGERALOPER
5266 AND G.TIPDOCFISCAL = 'D'
5267 AND I.CODGERALOPER = H.CODGERALOPER
5268 AND I.TIPDOCFISCAL = 'T'
5269 AND E.NROCARGA = F.NROCARGA
5270 )
5271 GROUP BY NVL( F.UF, C.UF ), A.NROCARGA, A.SEQCTRC, A.IDUSUARIO, A.NROEMPRESA, D.SEQEMBARCACAO, D.INDEMBARCACAO, D.Seqseguradora
5272 UNION
5273 /*Utilizado quando é gerado a partir de carga(Carga Própria) - Notas de devolução automática*/
5274 SELECT NVL( G.UF, C.UF ) UF, A.NROCARGA, A.SEQCTRC, A.IDUSUARIO, A.NROEMPRESA,
5275 LAG(NVL( G.UF, C.UF )) OVER(ORDER BY nvl( G.UF, C.UF )) UFANTERIOR, LAG(A.SEQCTRC) OVER(ORDER BY A.SEQCTRC) CTRCANTERIOR, D.SEQEMBARCACAO, D.INDEMBARCACAO, D.SEQSEGURADORA
5276 FROM MFTX_DADOS_MANIFESTO_CARGA A, MFL_DOCTOFISCAL B, GE_PESSOA C,
5277 MFTX_DADOS_MANIFESTO D, MAX_CODGERALOPER F, GE_CIDADE G
5278 WHERE A.NROCARGA = B.NROINTERNORECEB
5279 AND B.SEQPESSOA = C.SEQPESSOA
5280 AND A.IDUSUARIO = D.IDUSUARIO
5281 AND A.NROEMPRESA = D.NROEMPRESA
5282 AND B.CODGERALOPER = F.CODGERALOPER
5283 AND B.NROEMPRESA = case when vnPDDestinatarioDiversos = 'N' And vnAppOrigem != 3 then(
5284 SELECT NROEMPRESA
5285 FROM MAX_EMPRESA
5286 WHERE SEQPESSOAEMP = nvl(D.SEQREMETENTE, A.SEQREMETENTE)
5287 AND STATUS = 'A')
5288 else
5289 B.NROEMPRESA
5290 end
5291 AND A.IDUSUARIO = pnIdUser
5292 AND A.NROEMPRESA = pnNroEmpresa
5293 AND A.IMPORTADA != 'S'
5294 AND A.SEQCTRC != A.NROCARGA
5295 AND B.STATUSDF = 'V'
5296 AND B.NROCARGA IS NULL
5297 AND F.TIPDOCFISCAL in ('T','D')
5298 and D.SEQCIDADEDESCARREGAMENTO = G.SEQCIDADE (+)
5299 AND EXISTS (SELECT 1
5300 FROM MLF_NOTAFISCAL X, MAD_CARGARECEBNF Y, MAD_CARGARECEB Z,
5301 MAX_EMPRESA E, /*MAX_EMPRESA F,*/ MAX_CODGERALOPER P
5302 WHERE B.NROINTERNORECEB = X.NROINTERNORECEB
5303 AND B.NROEMPRESA = X.NROEMPRESA
5304 --AND B.SEQPESSOA = F.SEQPESSOAEMP
5305 AND B.SEQPESSOA = X.SEQPESSOA
5306 AND X.NROINTERNORECEB = Y.NROCARGARECEB
5307 AND X.NUMERONF = Y.NUMERONF
5308 AND X.SERIENF = Y.SERIENF
5309 AND X.SEQPESSOA = Y.SEQFORNECEDOR
5310 AND X.NROEMPRESA = Y.NROEMPRESA
5311 AND X.SEQAUXNOTAFISCAL = Y.SEQAUXNOTAFISCAL
5312 AND Y.NROCARGARECEB = Z.NROCARGARECEB
5313 AND Y.NROEMPRESA = Z.NROEMPRESA
5314 AND B.NROEMPRESA = E.NROEMPRESA
5315 --AND X.NROEMPRESADEV = F.NROEMPRESA
5316 AND P.CODGERALOPER = X.CODGERALOPER
5317 AND P.TIPDOCFISCAL = 'T'
5318 )
5319 GROUP BY NVL( G.UF, C.UF ), A.NROCARGA, A.SEQCTRC, A.IDUSUARIO, A.NROEMPRESA, D.SEQEMBARCACAO, D.INDEMBARCACAO, D.SEQSEGURADORA
5320 UNION
5321 /*Utilizado quando é gerado a partir de CTE(Prestador de Serviço)*/
5322 SELECT NVL(G.UF, D.UF) UF, A.NROCARGA, A.SEQCTRC, A.IDUSUARIO, A.NROEMPRESA,
5323 LAG(NVL(G.UF, D.UF)) OVER(ORDER BY NVL(G.UF, D.UF) ) UFANTERIOR, LAG(A.SEQCTRC) OVER(ORDER BY A.SEQCTRC) CTRCANTERIOR, C.SEQEMBARCACAO, A.INDEMBARCACAO, A.SEQSEGURADORA
5324 FROM MFTX_DADOS_MANIFESTO_CARGA A, MFT_CTRC B, MFT_EMPENHO C,
5325 GE_PESSOA D, MFT_EMPENHODF E, MFTX_DADOS_MANIFESTO F, GE_CIDADE G
5326 WHERE A.SEQCTRC = B.SEQCTRC
5327 AND B.NROEMPENHO = C.NROEMPENHO
5328 AND C.SEQDESTINATARIO = D.SEQPESSOA
5329 AND C.NROEMPENHO = E.NROEMPENHO
5330 AND A.SEQCTRC = A.NROCARGA
5331 AND A.IDUSUARIO = pnIdUser
5332 AND A.NROEMPRESA = pnNroEmpresa
5333 AND A.IDUSUARIO = F.IDUSUARIO
5334 AND A.NROEMPRESA = F.NROEMPRESA
5335 AND A.SEQCTRC IS NOT NULL
5336 AND F.SEQCIDADEDESCARREGAMENTO = G.SEQCIDADE (+)
5337 GROUP BY NVL(G.UF, D.UF), A.NROCARGA, A.SEQCTRC, A.IDUSUARIO, A.NROEMPRESA, C.SEQEMBARCACAO, A.INDEMBARCACAO, A.Seqseguradora
5338 UNION
5339 /*Utilizado quando é gerado a partir de carga importada*/
5340 SELECT D.UF, A.NROCARGA, A.SEQCTRC, A.IDUSUARIO, A.NROEMPRESA,
5341 LAG(D.UF) OVER(ORDER BY D.UF ) UFANTERIOR, LAG(A.SEQCTRC) OVER(ORDER BY A.SEQCTRC) CTRCANTERIOR, E.SEQEMBARCACAO, E.INDEMBARCACAO, E.SEQSEGURADORA
5342 FROM MFTX_DADOS_MANIFESTO_CARGA A, MFT_NFIMPORT B, MFT_CARGAIMPORT C,
5343 GE_PESSOA D, MFTX_DADOS_MANIFESTO E
5344 WHERE A.NROCARGA = B.NROCARGA
5345 AND B.NROCARGA = C.NROCARGA
5346 AND B.SEQPESSOA = D.SEQPESSOA(+)
5347 AND A.IDUSUARIO = E.IDUSUARIO
5348 AND A.NROEMPRESA = E.NROEMPRESA
5349 AND C.NROEMPRESA = case when vnPDDestinatarioDiversos = 'N' And vnAppOrigem != 3 then(
5350 SELECT NROEMPRESA
5351 FROM MAX_EMPRESA
5352 WHERE SEQPESSOAEMP = nvl(E.SEQREMETENTE, A.SEQREMETENTE)
5353 AND STATUS = 'A')
5354 else
5355 B.NROEMPRESA
5356 end
5357 AND A.IDUSUARIO = pnIdUser
5358 AND A.NROEMPRESA = pnNroEmpresa
5359 AND A.IMPORTADA = 'I'
5360 AND A.SEQCTRC IS NULL
5361 GROUP BY D.UF, A.NROCARGA, A.SEQCTRC, A.IDUSUARIO, A.NROEMPRESA, E.SEQEMBARCACAO, E.INDEMBARCACAO, E.SEQSEGURADORA
5362 UNION
5363 /*Transbordo - Utilizado quando é gerado a partir de NF-e*/
5364 SELECT NVL( C.UF , B.UFCLIENTE ) UF, NULL NROCARGA, NULL SEQCTRC, D.IDUSUARIO, D.NROEMPRESA,
5365 LAG(NVL(C.UF , B.UFCLIENTE ) ) OVER(ORDER BY nvl(C.UF , B.UFCLIENTE)) UFANTERIOR, NULL CTRCANTERIOR,
5366 D.SEQEMBARCACAO, D.INDEMBARCACAO, D.SEQSEGURADORA
5367 FROM MFTV_BASENF_MDFE B, GE_CIDADE C,
5368 MFTX_DADOS_MANIFESTO D, GEX_DADOSTEMPORARIOS X
5369 WHERE D.IDUSUARIO = pnIdUser
5370 AND D.NROEMPRESA = pnNroEmpresa
5371 AND D.IDUSUARIO = X.NUMBER3
5372 AND X.STRING1 = 'MANIFESTODF'
5373 AND X.NUMBER1 = B.SEQMANIFESTO
5374 AND X.NUMBER2 = B.NUMERODF
5375 AND X.STRING2 = B.SERIEDF
5376 AND ( X.STRING3 Is Null Or B.NROSERIEECF = X.STRING3 )
5377 AND X.NROEMPRESA = B.NROEMPRESA
5378 AND D.SEQCIDADEDESCARREGAMENTO = C.SEQCIDADE (+)
5379 AND NOT EXISTS ( SELECT 1 FROM MFTX_DADOS_MANIFESTO_CARGA )
5380 GROUP BY NVL( C.UF , B.UFCLIENTE ), D.IDUSUARIO, D.NROEMPRESA, D.SEQEMBARCACAO, D.INDEMBARCACAO, D.SEQSEGURADORA
5381 ORDER BY 1)
5382 LOOP
5383 if (vnSeqManifesto is null or vsIndMDFE = 'S') and
5384 ((vt.ufanterior is null or vt.uf != vt.ufanterior) Or ((vt.ctrcanterior is null or vt.seqctrc = vt.ctrcanterior) and vt.seqctrc > 0)) then
5385 select S_MFT_MANIFESTO.NextVal into vnSeqManifesto from dual;
5386 SELECT COUNT(DISTINCT A.SEQREMETENTE)
5387 INTO vnQtdRemetente
5388 FROM MFTX_DADOS_MANIFESTO_CARGA A
5389 WHERE A.IDUSUARIO = VT.IDUSUARIO
5390 AND A.NROEMPRESA = VT.NROEMPRESA
5391 AND A.NROCARGA = VT.NROCARGA;
5392 begin
5393 select c.serienf, c.numeronf, c.nroempresa
5394 into vsSerieNF, vnNumeroNF, vnNroEmpSerieNF
5395 from max_empresa a, max_empserienf c
5396 where c.nroempresa = fc5_retemporigdaempvirtual( a.nroempresa, decode(nvl(a.tipoemismdfe,'I'),'I',null,a.seriemdfe) )
5397 and a.nroempresa = pnNroEmpresa
5398 and c.serienf = decode(nvl(a.tipoemismdfe,'I'),'I',null,a.seriemdfe)
5399 for update;
5400 vnNumeroNF := vnNumeroNF+1;
5401 exception
5402 when no_data_found then
5403 select nvl(a.tipoemismdfe, 'I')
5404 into vsTipoEmisMDFe
5405 from max_empresa a
5406 where a.nroempresa = pnNroEmpresa;
5407 if vsTipoEmisMDFe = 'I' then
5408 vnNumeroNF := Null;
5409 vsSerieNF := Null;
5410 else
5411 pnOk := 0;
5412 psMsgErro := 'A série de MDF-e não está configurada para esta empresa.';
5413 end if;
5414 end;
5415 SELECT MAX(X.SEQTRANSPORTADOR)
5416 INTO vnTransportador
5417 FROM MFTX_DADOS_MANIFESTO A,
5418 ( SELECT B.PLACAVEICULO, B.LOCALVEICULO, b.SEQTRANSPORTADOR, D.SEQMOTORISTA
5419 FROM MAD_VEICULO B,
5420 MAD_MOTORISTA D
5421 WHERE B.SEQTRANSPORTADOR = NVL(D.SEQTRANSPORTADOR, B.SEQTRANSPORTADOR)
5422 AND B.STATUS = 'A'
5423 AND D.STATUS = 'A' ) X,
5424 GE_CIDADE C
5425 WHERE A.PLACA = X.PLACAVEICULO
5426 AND C.SEQCIDADE(+) = X.LOCALVEICULO
5427 AND A.IDUSUARIO = VT.IDUSUARIO
5428 AND A.NROEMPRESA = VT.NROEMPRESA
5429 AND A.SEQMOTORISTA = x.SEQMOTORISTA;
5430 INSERT INTO MFT_MANIFESTO
5431 (SEQMANIFESTO,
5432 SEQMOTORISTA,
5433 NROEMPRESA,
5434 SEQREMETENTE,
5435 VERSAOPESSOAREM,
5436 OBSERVACAO,
5437 MARCA,
5438 PLACA,
5439 UF,
5440 LOCAL,
5441 SITUACAO,
5442 DTALANCAMENTO,
5443 AUTOMATICO,
5444 SEQEMBARCACAO,
5445 USUINCLUSAO,
5446 DTAHORAINCLUSAO,
5447 NROEMPTRANSBORDODEST,
5448 INDTRANSBORDOMDFE,
5449 SEQSEGURADORA,
5450 SEQCIDADECARREGAMENTO,
5451 SEQCIDADEDESCARREGAMENTO,
5452 SEQPERCURSO,
5453 SEQENTREGADOR,
5454 SEQROTA,
5455 INDTIPOCARGAPRODPRED,
5456 DESCRICAOPRODPRED,
5457 CODGTINPRODPRED,
5458 CODNCMPRODPRED,
5459 APPORIGEM
5460 )
5461 SELECT vnSeqManifesto,
5462 A.SEQMOTORISTA,
5463 pnNroEmpresa,
5464 CASE WHEN vnQtdRemetente > 1 and vnAppOrigem != 3 THEN
5465 to_number(vnPDSeqRemententeDiversos)
5466 WHEN A.SEQREMETENTE IS NULL THEN
5467 (SELECT MAX(X.SEQREMETENTE)
5468 FROM MFTX_DADOS_MANIFESTO_CARGA X
5469 WHERE X.IDUSUARIO = VT.IDUSUARIO
5470 AND X.NROCARGA = VT.NROCARGA
5471 AND X.NROEMPRESA = VT.NROEMPRESA)
5472 ELSE A.SEQREMETENTE END SEQREMETENTE,
5473 A.VERSAOPESSOAREM,
5474 A.OBSERVACAO,
5475 B.MARCAVEICULO,
5476 B.PLACAVEICULO,
5477 B.UFPLACAVEICULO,
5478 C.CIDADE,
5479 'N',
5480 TRUNC(SYSDATE),
5481 'S',
5482 null,
5483 psUsuInclusao,
5484 SYSDATE,
5485 pnNroEmpTransbordo,
5486 DECODE(pnNroEmpTransbordo, NULL, NULL, 'S'),
5487 Seqseguradora,
5488 A.SEQCIDADECARREGAMENTO,
5489 A.SEQCIDADEDESCARREGAMENTO,
5490 A.SEQPERCURSO,
5491 A.SEQENTREGADOR,
5492 A.SEQROTA,
5493 A.INDTIPOCARGAPRODPRED,
5494 A.DESCRICAOPRODPRED,
5495 A.CODGTINPRODPRED,
5496 A.CODNCMPRODPRED,
5497 A.APPORIGEM
5498 FROM MFTX_DADOS_MANIFESTO A,
5499 MAD_VEICULO B,
5500 GE_CIDADE C
5501 WHERE A.PLACA = B.PLACAVEICULO
5502 AND C.SEQCIDADE(+) = B.LOCALVEICULO
5503 AND B.STATUS = 'A'
5504 AND A.IDUSUARIO = VT.IDUSUARIO
5505 AND A.NROEMPRESA = VT.NROEMPRESA
5506 AND B.SEQTRANSPORTADOR = vnTransportador
5507 AND VT.INDEMBARCACAO = 'N'
5508 AND A.INDEMBARCACAO = 'N'
5509 UNION ALL
5510 SELECT vnSeqManifesto,
5511 NULL SEQMOTORISTA,
5512 pnNroEmpresa,
5513 CASE WHEN vnQtdRemetente > 1 and vnAppOrigem != 3 THEN
5514 to_number(vnPDSeqRemententeDiversos)
5515 WHEN A.SEQREMETENTE IS NULL THEN
5516 (SELECT MAX(X.SEQREMETENTE)
5517 FROM MFTX_DADOS_MANIFESTO_CARGA X
5518 WHERE X.IDUSUARIO = VT.IDUSUARIO
5519 AND X.NROCARGA = VT.NROCARGA
5520 AND X.NROEMPRESA = VT.NROEMPRESA)
5521 ELSE A.SEQREMETENTE END SEQREMETENTE,
5522 A.VERSAOPESSOAREM,
5523 A.OBSERVACAO,
5524 NULL MARCAVEICULO,
5525 NULL PLACAVEICULO,
5526 NULL UFPLACAVEICULO,
5527 NULL CIDADE,
5528 'N',
5529 TRUNC(SYSDATE),
5530 'S',
5531 A.SEQEMBARCACAO,
5532 psUsuInclusao,
5533 SYSDATE,
5534 pnNroEmpTransbordo,
5535 DECODE(pnNroEmpTransbordo, NULL, NULL, 'S'),
5536 SEQSEGURADORA,
5537 A.SEQCIDADECARREGAMENTO,
5538 A.SEQCIDADEDESCARREGAMENTO,
5539 A.SEQPERCURSO,
5540 A.SEQENTREGADOR,
5541 A.SEQROTA,
5542 A.INDTIPOCARGAPRODPRED,
5543 A.DESCRICAOPRODPRED,
5544 A.CODGTINPRODPRED,
5545 A.CODNCMPRODPRED,
5546 A.APPORIGEM
5547 FROM MFTX_DADOS_MANIFESTO A
5548 WHERE A.IDUSUARIO = VT.IDUSUARIO
5549 AND A.NROEMPRESA = VT.NROEMPRESA
5550 AND A.SEQEMBARCACAO = VT.SEQEMBARCACAO
5551 AND VT.INDEMBARCACAO = 'S'
5552 AND A.INDEMBARCACAO = 'S'
5553 ;
5554 if pnOk = 1 then
5555 SELECT MAX(A.OBSPADRAOMDFE)
5556 INTO vsObsPadraoMDFe
5557 FROM MAX_EMPRESA A
5558 WHERE A.NROEMPRESA = pnNroEmpresa;
5559 --* RC 131325 - para gravar SEQPERCURSO na MFT_MANIFESTO
5560 if vsIndMDFE = 'S' then
5561 if vsPDUtilTranspTransbordoMDFE = 'S' then
5562 select nvl(max(a.nroemptransbordoremet), 0)
5563 into vnNroEmpTransbordoRemet
5564 from mft_manifesto a
5565 where a.seqmanifesto in
5566 (select nvl(max(a.seqmanifesto), 0)
5567 from mft_manifesto_carga a
5568 where a.nrocarga = vt.nrocarga
5569 and a.seqmanifesto < vnSeqManifesto);
5570 else
5571 vnNroEmpTransbordoRemet := 0;
5572 end if;
5573 SELECT MAX( P.SEQPERCURSO)
5574 INTO vnSeqPercursoAuto
5575 FROM MFT_MANIFESTO F, GE_PESSOA G, MFT_PERCURSO P, GE_CIDADE C
5576 WHERE G.SEQPESSOA = DECODE(vnNroEmpTransbordoRemet,
5577 0,
5578 F.SEQREMETENTE,
5579 (SELECT A.SEQPESSOAEMP
5580 FROM MAX_EMPRESA A
5581 WHERE A.NROEMPRESA = vnNroEmpTransbordoRemet))
5582 AND NVL(C.UF, G.UF) = P.UFORIGEM
5583 AND P.UFDESTINO = DECODE(pnNroEmpTransbordo,
5584 NULL,
5585 VT.UF,
5586 (SELECT A.UF
5587 FROM GE_PESSOA A, MAX_EMPRESA B
5588 WHERE A.SEQPESSOA = B.SEQPESSOAEMP
5589 AND B.NROEMPRESA = pnNroEmpTransbordo))
5590 AND P.STATUS = 'A'
5591 AND P.PRINCIPAL = 'S'
5592 AND F.SEQMANIFESTO = vnSeqManifesto
5593 AND F.SEQCIDADECARREGAMENTO = C.SEQCIDADE (+);
5594 end if;
5595 IF vnAppOrigem = 3 THEN
5596 SELECT MAX( F.SEQPERCURSO )
5597 INTO vnSeqPercurso
5598 FROM MFT_MANIFESTO F
5599 WHERE F.SEQMANIFESTO = vnSeqManifesto;
5600 IF vnSeqPercurso IS NOT NULL THEN
5601 vnSeqPercursoAuto := vnSeqPercurso;
5602 END IF;
5603 END IF;
5604 --*
5605 UPDATE MFT_MANIFESTO A
5606 SET A.NROMANIFESTO = vnNumeroNF,
5607 A.SERIEMANIFESTO = vsSerieNF,
5608 A.INDMDFE = vsIndMDFE,
5609 A.PROCESSADO = 'S',
5610 A.OBSERVACAO = substr( vsObsPadraoMDFe || DECODE(A.OBSERVACAO, NULL, NULL, ' - ' || A.OBSERVACAO), 0, 250 ),
5611 A.SEQPERCURSO = vnSeqPercursoAuto
5612 WHERE A.SEQMANIFESTO = vnSeqManifesto;
5613 UPDATE MAX_EMPSERIENF
5614 SET NUMERONF = vnNumeroNF
5615 WHERE NROEMPRESA = vnNroEmpSerieNF
5616 AND SERIENF = vsSerieNF;
5617 end if;
5618 SELECT COUNT(1)
5619 INTO vnContador
5620 FROM MFT_MANIFESTO A
5621 WHERE A.SEQMANIFESTO = vnSeqManifesto;
5622 end if;
5623 INSERT INTO MFT_MANIFESTO_CARGA
5624 (SEQMANIFESTO,
5625 NROCARGA,
5626 SEQCTRC,
5627 IMPORTADA,
5628 SEQMANIFESTOORIGEM)
5629 SELECT DISTINCT
5630 vnSeqManifesto,
5631 A.NROCARGA,
5632 A.SEQCTRC,
5633 A.IMPORTADA,
5634 A.SEQMANIFESTOORIGEM
5635 FROM MFTX_DADOS_MANIFESTO_CARGA A,
5636 MAD_VEICULO B,
5637 MFTX_DADOS_MANIFESTO C
5638 WHERE A.IDUSUARIO = VT.IDUSUARIO
5639 AND A.NROEMPRESA = VT.NROEMPRESA
5640 AND A.NROCARGA = VT.NROCARGA
5641 AND A.SEQCTRC = VT.SEQCTRC
5642 AND C.IDUSUARIO = A.IDUSUARIO
5643 AND C.NROEMPRESA = A.NROEMPRESA
5644 AND C.PLACA = B.PLACAVEICULO
5645 AND B.STATUS = 'A'
5646 AND B.SEQTRANSPORTADOR = vnTransportador
5647 AND NOT EXISTS (SELECT 1
5648 FROM MFT_MANIFESTO_CARGA X
5649 WHERE X.NROCARGA = A.NROCARGA
5650 AND X.SEQCTRC = A.SEQCTRC
5651 AND X.SEQMANIFESTO = vnSeqManifesto)
5652 AND VT.INDEMBARCACAO = 'N'
5653 AND A.INDEMBARCACAO = 'N'
5654 UNION ALL
5655 SELECT DISTINCT
5656 vnSeqManifesto,
5657 A.NROCARGA,
5658 A.SEQCTRC,
5659 A.IMPORTADA,
5660 A.SEQMANIFESTOORIGEM
5661 FROM MFTX_DADOS_MANIFESTO_CARGA A,
5662 MFTX_DADOS_MANIFESTO C
5663 WHERE A.IDUSUARIO = VT.IDUSUARIO
5664 AND A.NROEMPRESA = VT.NROEMPRESA
5665 AND A.NROCARGA = VT.NROCARGA
5666 AND A.SEQCTRC = VT.SEQCTRC
5667 AND C.IDUSUARIO = A.IDUSUARIO
5668 AND C.NROEMPRESA = A.NROEMPRESA
5669 AND NOT EXISTS (SELECT 1
5670 FROM MFT_MANIFESTO_CARGA X
5671 WHERE X.NROCARGA = A.NROCARGA
5672 AND X.SEQCTRC = A.SEQCTRC
5673 AND X.SEQMANIFESTO = vnSeqManifesto)
5674 AND VT.INDEMBARCACAO = 'S'
5675 AND A.INDEMBARCACAO = 'S';
5676 --Gera os documentos do Manifesto
5677 INSERT INTO MFT_MANIFESTO_DF
5678 (SEQMANIFESTO,
5679 NUMERODF,
5680 SERIEDF,
5681 NROSERIEECFDF,
5682 CODMODELODF,
5683 DTADF,
5684 VLRTOTAL,
5685 VLRMERCADORIA,
5686 VLRTOTTRIB,
5687 QTDEVOLUME,
5688 PESOBRUTO,
5689 PESOLIQUIDO,
5690 NROCARGA,
5691 NROEMPRESA,
5692 ORIGEM,
5693 SEQCTRC,
5694 NFECHAVEACESSO,
5695 SEQMANIFESTOORIGEM
5696 )
5697 /*Documentos a partir de carga(Carga Própria)*/
5698 SELECT A.SEQMANIFESTO SEQMANIFESTO,
5699 D.NUMERODF NUMERODF,
5700 D.SERIEDF SERIEDF,
5701 D.nroserieecf NROSERIEECFDF,
5702 D.MODELODF CODMODELODF,
5703 NVL(D.DTALANCAMENTO, D.DTAEMISSAO) DTADF,
5704 D.VLRCONTABIL VLRTOTAL,
5705 D.VLRPRODBRUTO VLRMERCADORIA,
5706 D.VLRTOTTRIB,
5707 DECODE(vsPDBuscaQtdVolumeLocus, 'S', PKG_MFTTRANSPORTADORA.MFTF_BUSCAQTDVOLUMELOCUS(D.NROCARGA, D.SEQPESSOA, D.NROEMPRESA, 'S'), D.QTDVOLUME) QTDEVOLUME,
5708 D.PESOBRUTO PESOBRUTO,
5709 D.PESOLIQUIDO PESOLIQUIDO,
5710 A.NROCARGA NROCARGA,
5711 D.NROEMPRESA NROEMPRESA,
5712 'N' ORIGEM,
5713 DECODE(F.TIPOEMITENTEMDFE,'S', A.SEQCTRC, NULL) SEQCTRC,
5714 D.NFECHAVEACESSO,
5715 A.SEQMANIFESTOORIGEM
5716 FROM MFT_MANIFESTO_CARGA A,
5717 MFT_MANIFESTO B,
5718 MFLV_DFBASEEDITOTAL D,
5719 GE_PESSOA E,
5720 MAX_EMPRESA F,
5721 MAX_EMPSERIENF G,
5722 MAX_EMPRESA H
5723 WHERE A.SEQMANIFESTO = B.SEQMANIFESTO
5724 AND A.NROCARGA = D.NROCARGA
5725 AND D.SEQPESSOA = E.SEQPESSOA
5726 AND B.NROEMPRESA = F.NROEMPRESA
5727 AND A.IMPORTADA != 'S' AND A.IMPORTADA != 'I'
5728 AND ((E.UF = VT.UF and vnSeqCidadeDescarregamento is null ) or
5729 vnSeqCidadeDescarregamento is not null )
5730 AND A.NROCARGA = VT.NROCARGA
5731 AND A.SEQCTRC = VT.SEQCTRC
5732 AND B.SEQMANIFESTO = vnSeqManifesto
5733 AND D.NROEMPRESA = H.NROEMPRESA
5734 AND (H.SEQPESSOAEMP IN (SELECT X.SEQREMETENTE
5735 FROM MFTX_DADOS_MANIFESTO_CARGA X
5736 WHERE X.IDUSUARIO = VT.IDUSUARIO
5737 AND X.NROEMPRESA = VT.NROEMPRESA
5738 AND X.NROCARGA = A.NROCARGA
5739 AND vsIndMDFE = 'S')
5740 OR (H.SEQPESSOAEMP = B.SEQREMETENTE AND vsIndMDFE != 'S'))
5741 AND H.STATUS = 'A'
5742 AND (EXISTS (SELECT 1
5743 FROM MFT_EMPENHO_CARGADF X, MFT_CTRC Y,
5744 MAX_EMPRESA Z
5745 WHERE X.NROEMPENHO = Y.NROEMPENHO
5746 AND X.NUMERODF = D.NUMERODF
5747 AND X.SERIEDF = D.SERIEDF
5748 AND X.NROSERIEECF = D.NROSERIEECF
5749 AND X.NROEMPRESA = D.NROEMPRESA
5750 AND X.NROCARGA = D.NROCARGA
5751 AND Y.NROEMPRESA = Z.NROEMPRESA
5752 AND Y.SEQCTRC = VT.SEQCTRC
5753 AND Z.TIPOEMITENTEMDFE = 'S'
5754 AND FMFT_MANIFESTOMDFE(Z.NROEMPRESA) = 'S')
5755 OR EXISTS (SELECT 1
5756 FROM MAX_EMPRESA X
5757 WHERE X.NROEMPRESA = B.NROEMPRESA
5758 AND X.TIPOEMITENTEMDFE = 'P'
5759 AND FMFT_MANIFESTOMDFE(X.NROEMPRESA) = 'S')
5760 OR FMFT_MANIFESTOMDFE(B.NROEMPRESA) = 'N')
5761 AND G.NROEMPRESA = D.NROEMPRESA
5762 AND G.SERIENF = D.SERIEDF
5763 AND G.TIPODOCTO != 'O'
5764 UNION
5765 SELECT A.SEQMANIFESTO SEQMANIFESTO,
5766 D.NUMERODF NUMERODF,
5767 D.SERIEDF SERIEDF,
5768 D.nroserieecf NROSERIEECFDF,
5769 D.MODELODF CODMODELODF,
5770 NVL(D.DTALANCAMENTO, D.DTAEMISSAO) DTADF,
5771 D.VLRCONTABIL VLRTOTAL,
5772 D.VLRPRODBRUTO VLRMERCADORIA,
5773 D.VLRTOTTRIB,
5774 DECODE(vsPDBuscaQtdVolumeLocus, 'S', PKG_MFTTRANSPORTADORA.MFTF_BUSCAQTDVOLUMELOCUS(D.NROCARGA, D.SEQPESSOA, D.NROEMPRESA, 'S'), D.QTDVOLUME) QTDEVOLUME,
5775 D.PESOBRUTO PESOBRUTO,
5776 D.PESOLIQUIDO PESOLIQUIDO,
5777 A.NROCARGA NROCARGA,
5778 D.NROEMPRESA NROEMPRESA,
5779 'N' ORIGEM,
5780 DECODE(F.TIPOEMITENTEMDFE,'S', A.SEQCTRC, NULL) SEQCTRC,
5781 D.NFECHAVEACESSO,
5782 A.SEQMANIFESTOORIGEM
5783 FROM MFT_MANIFESTO_CARGA A,
5784 MFT_MANIFESTO B,
5785 MFLV_DFBASEEDITOTAL D,
5786 GE_PESSOA E,
5787 MAX_EMPRESA F,
5788 MAX_EMPSERIENF G,
5789 MAX_EMPRESA H
5790 WHERE A.SEQMANIFESTO = B.SEQMANIFESTO
5791 AND A.NROCARGA = D.NROINTERNORECEB
5792 AND D.NROCARGA IS NULL
5793 AND EXISTS (SELECT 1
5794 FROM MAX_EMPRESA CC
5795 WHERE CC.SEQPESSOAEMP = D.SEQPESSOA)
5796 AND EXISTS ( SELECT 1
5797 FROM MRL_CARGAEXPED AA
5798 WHERE AA.NROCARGA = A.NROCARGA
5799 AND AA.NROEMPRESA = D.NROEMPRESA
5800 AND D.DTAEMISSAO >= TRUNC( AA.DTAHORGERACAO ) )
5801 AND D.SEQPESSOA = E.SEQPESSOA
5802 AND B.NROEMPRESA = F.NROEMPRESA
5803 AND A.IMPORTADA != 'S' AND A.IMPORTADA != 'I'
5804 AND ((E.UF = VT.UF and vnSeqCidadeDescarregamento is null ) or
5805 vnSeqCidadeDescarregamento is not null )
5806 AND A.NROCARGA = VT.NROCARGA
5807 AND A.SEQCTRC = VT.SEQCTRC
5808 AND B.SEQMANIFESTO = vnSeqManifesto
5809 AND D.NROEMPRESA = H.NROEMPRESA
5810 AND (H.SEQPESSOAEMP IN (SELECT X.SEQREMETENTE
5811 FROM MFTX_DADOS_MANIFESTO_CARGA X
5812 WHERE X.IDUSUARIO = VT.IDUSUARIO
5813 AND X.NROEMPRESA = VT.NROEMPRESA
5814 AND X.NROCARGA = A.NROCARGA
5815 AND vsIndMDFE = 'S')
5816 OR (H.SEQPESSOAEMP = B.SEQREMETENTE AND vsIndMDFE != 'S'))
5817 AND H.STATUS = 'A'
5818 AND (EXISTS (SELECT 1
5819 FROM MFT_EMPENHO_CARGADF X, MFT_CTRC Y,
5820 MAX_EMPRESA Z
5821 WHERE X.NROEMPENHO = Y.NROEMPENHO
5822 AND X.NUMERODF = D.NUMERODF
5823 AND X.SERIEDF = D.SERIEDF
5824 AND X.NROSERIEECF = D.NROSERIEECF
5825 AND X.NROEMPRESA = D.NROEMPRESA
5826 AND X.NROCARGA = D.NROCARGA
5827 AND Y.NROEMPRESA = Z.NROEMPRESA
5828 AND Y.SEQCTRC = VT.SEQCTRC
5829 AND Z.TIPOEMITENTEMDFE = 'S'
5830 AND FMFT_MANIFESTOMDFE(Z.NROEMPRESA) = 'S')
5831 OR EXISTS (SELECT 1
5832 FROM MAX_EMPRESA X
5833 WHERE X.NROEMPRESA = B.NROEMPRESA
5834 AND X.TIPOEMITENTEMDFE = 'P'
5835 AND FMFT_MANIFESTOMDFE(X.NROEMPRESA) = 'S')
5836 OR FMFT_MANIFESTOMDFE(B.NROEMPRESA) = 'N')
5837 AND G.NROEMPRESA = D.NROEMPRESA
5838 AND G.SERIENF = D.SERIEDF
5839 AND G.TIPODOCTO != 'O'
5840 UNION
5841 /*Documentos a partir de CTE (Prestador de Serviço)*/
5842 SELECT A.SEQMANIFESTO SEQMANIFESTO,
5843 E.NUMERODF NUMERODF,
5844 E.SERIEDF SERIEDF,
5845 'NF' NROSERIEECFDF,
5846 E.CODMODELODF,
5847 E.DTADF,
5848 E.VLRTOTAL,
5849 E.VLRMERCADORIA,
5850 E.VLRTOTTRIB,
5851 E.QTDEVOLUME,
5852 E.PESOBRUTO PESOBRUTO,
5853 E.PESOLIQUIDO PESOLIQUIDO,
5854 A.NROCARGA NROCARGA,
5855 C.NROEMPRESA NROEMPRESA,
5856 'C' ORIGEM,
5857 C.SEQCTRC,
5858 E.NFECHAVEACESSO,
5859 A.SEQMANIFESTOORIGEM
5860 FROM MFT_MANIFESTO_CARGA A,
5861 MFT_MANIFESTO B,
5862 MFT_CTRC C,
5863 MFT_EMPENHO D,
5864 MFT_EMPENHODF E,
5865 GE_PESSOA F
5866 WHERE A.SEQMANIFESTO = B.SEQMANIFESTO
5867 AND A.SEQCTRC = C.SEQCTRC
5868 AND C.NROEMPENHO = D.NROEMPENHO
5869 AND D.NROEMPENHO = E.NROEMPENHO
5870 AND D.SEQDESTINATARIO = F.SEQPESSOA
5871 AND A.IMPORTADA != 'S'
5872 AND ((F.UF = VT.UF and vnSeqCidadeDescarregamento is null ) or
5873 vnSeqCidadeDescarregamento is not null )
5874 AND A.SEQCTRC = VT.SEQCTRC
5875 AND B.SEQMANIFESTO = vnSeqManifesto
5876 AND FMFT_MANIFESTOMDFE(D.NROEMPRESA) = 'S'
5877 AND A.NROCARGA = A.SEQCTRC
5878 UNION
5879 /*Documentos a partir de cargas importadas*/
5880 SELECT A.SEQMANIFESTO,
5881 M.NRONOTA,
5882 M.SERIENF,
5883 NULL,
5884 M.MODELO,
5885 M.DTANF,
5886 M.VLRTOTAL,
5887 M.VLRMERCADORIA,
5888 M.VLRTOTTRIB,
5889 M.VOLUMES,
5890 M.PESOBRUTO,
5891 M.PESOLIQUIDO,
5892 M.NROCARGA,
5893 M.NROEMPRESA,
5894 'I' ORIGEM,
5895 NULL,
5896 NULL,
5897 A.SEQMANIFESTOORIGEM
5898 FROM MFT_NFIMPORT M,
5899 MFT_CARGAIMPORT N,
5900 MFT_MANIFESTO_CARGA A,
5901 MFT_MANIFESTO B,
5902 GE_PESSOA E
5903 WHERE N.NROEMPRESA = (SELECT NROEMPRESA
5904 FROM MAX_EMPRESA
5905 WHERE SEQPESSOAEMP = B.SEQREMETENTE
5906 AND STATUS = 'A')
5907 AND M.NROCARGA = N.NROCARGA
5908 AND M.NROCARGA = A.NROCARGA
5909 AND A.SEQMANIFESTO = B.SEQMANIFESTO
5910 AND M.SEQPESSOA = E.SEQPESSOA(+)
5911 AND E.UF(+) = VT.UF
5912 AND A.IMPORTADA = 'I'
5913 AND B.SEQMANIFESTO = vnSeqManifesto
5914 AND B.NROEMPRESA = pnNroEmpresa
5915 UNION
5916 --- DEVOLUÇÃO DE TRANSFERÊNCIA ---
5917 SELECT A.SEQMANIFESTO SEQMANIFESTO,
5918 D.numeronf NUMERODF,
5919 D.serienf SERIEDF,
5920 D.nroserieecf NROSERIEECFDF,
5921 D.MODELONF CODMODELODF,
5922 NVL(D.dtahorlancto, D.dtaemissao) DTADF,
5923 sum (D.vlrcontabil) VLRTOTAL,
5924 sum (D.vlritem) VLRMERCADORIA,
5925 sum (D.VLRTOTTRIB),
5926 DECODE(vsPDBuscaQtdVolumeLocus,
5927 'S',
5928 sum (PKG_MFTTRANSPORTADORA.MFTF_BUSCAQTDVOLUMELOCUS(I.NROCARGA,
5929 D.seqpessoa,
5930 D.nroempresa,
5931 'S')),
5932 sum (D.qtdvolume)) QTDEVOLUME,
5933 sum(D.PESOBRUTO),
5934 sum(D.PESOLIQUIDO),
5935 A.NROCARGA NROCARGA,
5936 D.NROEMPRESA NROEMPRESA,
5937 'N' ORIGEM,
5938 DECODE(F.TIPOEMITENTEMDFE, 'S', A.SEQCTRC, NULL) SEQCTRC,
5939 D.NFECHAVEACESSO,
5940 MAX(A.SEQMANIFESTOORIGEM)
5941 FROM MFT_MANIFESTO_CARGA A,
5942 MFT_MANIFESTO B,
5943 MLFV_NFBASEFISCAL D,
5944 GE_PESSOA E,
5945 MAX_EMPRESA F,
5946 MAX_EMPSERIENF G,
5947 MFL_DOCTOFISCAL H,
5948 MRL_CARGAEXPED I,
5949 MAX_CODGERALOPER J,
5950 MLF_NOTAFISCAL K,
5951 MAX_CODGERALOPER L,
5952 MAX_EMPRESA M
5953 WHERE A.SEQMANIFESTO = B.SEQMANIFESTO
5954 AND A.NROCARGA = I.NROCARGA
5955 AND D.SEQPESSOA = E.SEQPESSOA
5956 AND A.IMPORTADA != 'S'
5957 AND ((E.UF = VT.UF and vnSeqCidadeDescarregamento is null ) or
5958 vnSeqCidadeDescarregamento is not null )
5959 AND A.NROCARGA = VT.NROCARGA
5960 AND A.SEQCTRC = VT.SEQCTRC
5961 AND B.SEQMANIFESTO = vnSeqManifesto
5962 AND D.STATUSNFE IN (4,19)
5963 AND D.NROEMPRESA = M.NROEMPRESA
5964 AND (M.SEQPESSOAEMP IN (SELECT X.SEQREMETENTE
5965 FROM MFTX_DADOS_MANIFESTO_CARGA X
5966 WHERE X.IDUSUARIO = VT.IDUSUARIO
5967 AND X.NROEMPRESA = VT.NROEMPRESA
5968 AND X.NROCARGA = A.NROCARGA
5969 AND vsIndMDFE = 'S') OR
5970 (M.SEQPESSOAEMP = B.SEQREMETENTE AND vsIndMDFE != 'S'))
5971 AND M.STATUS = 'A'
5972 AND (EXISTS
5973 (SELECT 1
5974 FROM MFT_EMPENHO_CARGADF X, MFT_CTRC Y, MAX_EMPRESA Z
5975 WHERE X.NROEMPENHO = Y.NROEMPENHO
5976 AND X.NUMERODF = H.NUMERODF
5977 AND X.SERIEDF = H.SERIEDF
5978 AND X.NROSERIEECF = H.NROSERIEECF
5979 AND X.NROEMPRESA = H.NROEMPRESA
5980 AND X.NROCARGA = H.NROCARGA
5981 AND Y.NROEMPRESA = Z.NROEMPRESA
5982 AND Y.SEQCTRC = VT.SEQCTRC
5983 AND Z.TIPOEMITENTEMDFE = 'S'
5984 AND FMFT_MANIFESTOMDFE(Z.NROEMPRESA) = 'S') OR EXISTS
5985 (SELECT 1
5986 FROM MAX_EMPRESA X
5987 WHERE X.NROEMPRESA = B.NROEMPRESA
5988 AND X.TIPOEMITENTEMDFE = 'P'
5989 AND FMFT_MANIFESTOMDFE(X.NROEMPRESA) = 'S') OR
5990 FMFT_MANIFESTOMDFE(B.NROEMPRESA) = 'N')
5991 AND G.NROEMPRESA = D.NROEMPRESA
5992 AND G.SERIENF = D.SERIENF
5993 AND G.TIPODOCTO != 'O'
5994 AND K.NUMERONF = D.NFREFERENCIANRO
5995 AND K.SERIENF = D.NFREFERENCIASERIE
5996 AND K.SEQNF = D.SEQNFREF
5997 AND K.NFREFERENCIANRO = H.NUMERODF
5998 AND K.NFREFERENCIASERIE = H.SERIEDF
5999 AND K.SEQNFREF = H.SEQNF
6000 AND I.NROCARGA = H.NROCARGA
6001 AND J.CODGERALOPER = D.CODGERALOPER
6002 AND J.TIPDOCFISCAL = 'D'
6003 AND K.NROEMPRESA = F.NROEMPRESA
6004 AND F.SEQPESSOAEMP = H.SEQPESSOA
6005 AND L.CODGERALOPER = K.CODGERALOPER
6006 AND L.TIPDOCFISCAL = 'T'
6007 group by
6008 A.SEQMANIFESTO,
6009 D.numeronf,
6010 D.serienf,
6011 D.nroserieecf,
6012 D.MODELONF,
6013 NVL(D.dtahorlancto, D.dtaemissao),
6014 A.NROCARGA,
6015 D.NROEMPRESA,
6016 'N' ,
6017 DECODE(F.TIPOEMITENTEMDFE, 'S', A.SEQCTRC, NULL) ,
6018 D.NFECHAVEACESSO
6019 UNION
6020 --Transbordo - NFes selecionadas
6021 SELECT A.SEQMANIFESTO,
6022 C.NUMERODF,
6023 C.SERIEDF,
6024 C.NROSERIEECFDF,
6025 C.CODMODELODF,
6026 C.DTADF,
6027 C.VLRTOTAL,
6028 C.VLRMERCADORIA,
6029 C.VLRTOTTRIB,
6030 C.QTDEVOLUME,
6031 C.PESOBRUTO,
6032 C.PESOLIQUIDO,
6033 C.NROCARGA,
6034 C.NROEMPRESA,
6035 DECODE( C.ORIGEM, 'D', 'D', 'N' ),
6036 C.SEQCTRC,
6037 C.NFECHAVEACESSO,
6038 C.SEQMANIFESTO
6039 FROM MFT_MANIFESTO A,
6040 MFT_MANIFESTO_DF C,
6041 GEX_DADOSTEMPORARIOS X
6042 WHERE A.SEQMANIFESTO = vnSeqManifesto
6043 AND X.STRING1 = 'MANIFESTODF'
6044 AND C.SEQMANIFESTO = X.NUMBER1
6045 AND X.NUMBER2 = C.NUMERODF
6046 AND X.STRING2 = C.SERIEDF
6047 AND ( X.STRING3 IS NULL OR X.STRING3 = C.NROSERIEECFDF )
6048 AND NOT EXISTS ( SELECT 1 FROM MFTX_DADOS_MANIFESTO_CARGA )
6049 AND ( vnSeqCidadeDescarregamento IS NOT NULL OR
6050 Exists ( SELECT 1
6051 FROM MFTV_BASENF_MDFE B
6052 WHERE B.UFCLIENTE = VT.UF
6053 AND B.SEQMANIFESTO = X.NUMBER1
6054 AND B.NUMERODF = C.NUMERODF
6055 AND B.SERIEDF = C.SERIEDF
6056 AND ( X.STRING3 IS NULL OR X.STRING3 = B.NROSERIEECF )));
6057 UPDATE MFT_MANIFESTO A
6058 SET A.VLRMERCADORIA = (SELECT SUM(A.VLRMERCADORIA)
6059 FROM MFT_MANIFESTO_DF A
6060 WHERE A.SEQMANIFESTO = vnSeqManifesto)
6061 WHERE A.SEQMANIFESTO = vnSeqManifesto;
6062 END LOOP;
6063 if vsPDUtilTranspTransbordoMDFE = 'S' and vnAppOrigem != 3 then
6064 -- Associação dos Controles de Transbordo
6065 if pnNroEmpTransbordo is not null then
6066 for vt in (select a.seqmanifestodf, a.nfechaveacesso
6067 from mft_manifesto_df a
6068 where a.seqmanifesto = vnSeqManifesto)
6069 loop
6070 update mft_manifesto_df a
6071 set a.indtransbordomdfe = 'S',
6072 a.nroempresatransbordo = pnNroEmpTransbordo
6073 where a.seqmanifestodf = vt.seqmanifestodf;
6074 select nvl(max(1), 0)
6075 into vnTemDF
6076 from mfl_doctofiscal a
6077 where a.nfechaveacesso = vt.nfechaveacesso;
6078 if vnTemDF = 1 then
6079 update mfl_doctofiscal a
6080 set a.indtransbordomdfe = 'S',
6081 a.nroempresatransbordo = pnNroEmpTransbordo
6082 where a.nfechaveacesso = vt.nfechaveacesso;
6083 else
6084 update mlf_notafiscal a
6085 set a.indtransbordomdfe = 'S',
6086 a.nroempresatransbordo = pnNroEmpTransbordo
6087 where a.nfechaveacesso = vt.nfechaveacesso;
6088 end if;
6089 end loop;
6090 else
6091 for vt in (select a.nrocarga
6092 from mftx_dados_manifesto_carga a)
6093 loop
6094 select nvl(max(a.nroemptransbordoremet), 0),
6095 max(a.seqmanifesto)
6096 into vnNroEmpTransbordoRemet,
6097 vnSeqManifestoTransbordo
6098 from mft_manifesto a
6099 where a.seqmanifesto in
6100 (select nvl(max(a.seqmanifesto), 0)
6101 from mft_manifesto_carga a
6102 where a.nrocarga = vt.nrocarga
6103 and a.seqmanifesto < vnSeqManifesto);
6104 if vnNroEmpTransbordoRemet != 0 then
6105 update mft_manifesto a
6106 set a.nroemptransbordoremet = vnNroEmpTransbordoRemet,
6107 a.seqmanifestoorigtransbordo = vnSeqManifestoTransbordo
6108 where a.seqmanifesto = vnSeqManifesto;
6109 update mft_manifesto_df a
6110 set a.nroempresatransbordo = vnNroEmpTransbordoRemet
6111 where a.seqmanifesto = vnSeqManifesto;
6112 update mft_manifesto a
6113 set a.indtransbordomdfe = 'F'
6114 where a.seqmanifesto = vnSeqManifestoTransbordo;
6115 update mft_manifesto_df a
6116 set a.indtransbordomdfe = 'F'
6117 where a.seqmanifesto = vnSeqManifestoTransbordo;
6118 end if;
6119 end loop;
6120 end if;
6121 end if;
6122 DELETE FROM MFT_MANIFESTO A
6123 WHERE NOT EXISTS (SELECT 1
6124 FROM MFT_MANIFESTO_DF X
6125 WHERE X.SEQMANIFESTO = A.SEQMANIFESTO);
6126 DELETE FROM MFTX_DADOS_MANIFESTO A WHERE A.IDUSUARIO = pnIdUser;
6127end mftp_geraManifesto;
6128 procedure mftp_geraManifestoMan( pnSeqManifesto in Integer,
6129 psUsuAlteracao in varchar2,
6130 pnOk in out Integer,
6131 psMsgErro in out Varchar2)
6132 is
6133 vsTipoEmisMDFe max_empresa.tipoemismdfe%type;
6134 vsSerieNF max_empserienf.serienf%type;
6135 vnNumeroNF max_empserienf.numeronf%type;
6136 vnNroEmpresa max_empresa.nroempresa%type;
6137 vnVlrMercadoria mft_manifesto_df.vlrmercadoria%type;
6138 vnNroEmpSerieNF max_empserienf.nroempresa%type;
6139 begin
6140 pnOk := 1;
6141 psMsgErro := NULL;
6142 select max(a.nroempresa)
6143 into vnNroEmpresa
6144 from mft_manifesto a
6145 where a.seqmanifesto = pnSeqManifesto;
6146 begin
6147 select c.serienf, c.numeronf, c.nroempresa
6148 into vsSerieNF, vnNumeroNF, vnNroEmpSerieNF
6149 from max_empresa a, max_empserienf c
6150 where c.nroempresa = fc5_retemporigdaempvirtual( a.nroempresa, decode(nvl(a.tipoemismdfe,'I'),'I',null,a.seriemdfe) )
6151 and a.nroempresa = vnNroEmpresa
6152 and c.serienf = decode(nvl(a.tipoemismdfe,'I'),'I',null,a.seriemdfe)
6153 for update;
6154 vnNumeroNF := vnNumeroNF+1;
6155 exception
6156 when no_data_found then
6157 select nvl(a.tipoemismdfe, 'I')
6158 into vsTipoEmisMDFe
6159 from max_empresa a
6160 where a.nroempresa = vnNroEmpresa;
6161 if vsTipoEmisMDFe = 'I' then
6162 vnNumeroNF := Null;
6163 vsSerieNF := Null;
6164 else
6165 pnOk := 0;
6166 psMsgErro := 'A série de MDF-e não está configurada para esta empresa.';
6167 end if;
6168 end;
6169 if pnOk = 1 then
6170 SELECT SUM(A.VLRMERCADORIA)
6171 INTO vnVlrMercadoria
6172 FROM MFT_MANIFESTO_DF A
6173 WHERE A.SEQMANIFESTO = pnSeqManifesto;
6174 UPDATE MFT_MANIFESTO A
6175 SET A.NROMANIFESTO = vnNumeroNF,
6176 A.SERIEMANIFESTO = vsSerieNF,
6177 A.INDMDFE = fmft_manifestomdfe(A.NROEMPRESA),
6178 A.PROCESSADO = 'S',
6179 A.VLRMERCADORIA = vnVlrMercadoria,
6180 a.USUALTERACAO = psUsuAlteracao
6181 WHERE A.SEQMANIFESTO = pnSeqManifesto;
6182 UPDATE MAX_EMPSERIENF
6183 SET NUMERONF = vnNumeroNF
6184 WHERE NROEMPRESA = vnNroEmpSerieNF
6185 AND SERIENF = vsSerieNF;
6186 end if;
6187 end mftp_geraManifestoMan;
6188procedure mftp_ImpManifestoTransbordo(pnNroEmpresa in max_empresa.nroempresa%type,
6189 pnSeqManifesto in mft_manifesto.seqmanifesto%type,
6190 pnSeqManifestoImp in mft_manifesto.seqmanifesto%type,
6191 psUsuAlteracao in varchar2)
6192is
6193begin
6194 insert into mft_manifesto
6195 (seqmanifesto,
6196 nroempresa,
6197 seqremetente,
6198 versaopessoarem,
6199 situacao,
6200 dtalancamento,
6201 automatico,
6202 geractrc,
6203 processado,
6204 usuinclusao,
6205 nroemptransbordoremet,
6206 indtransbordomdfe,
6207 seqmanifestoorigtransbordo)
6208 select pnSeqManifestoImp,
6209 pnNroEmpresa,
6210 i.seqremetente,
6211 i.versaopessoarem,
6212 'N',
6213 trunc(sysdate),
6214 'N',
6215 'S',
6216 'N',
6217 psUsuAlteracao,
6218 i.nroemptransbordoremet,
6219 'L',
6220 i.seqmanifesto
6221 from mft_manifesto i
6222 where i.seqmanifesto = pnSeqManifesto;
6223 insert into mft_manifesto_df
6224 (seqmanifestodf,
6225 seqmanifesto,
6226 codmodelodf,
6227 numerodf,
6228 seriedf,
6229 subseriedf,
6230 dtadf,
6231 vlrtotal,
6232 vlrmercadoria,
6233 qtdevolume,
6234 pesobruto,
6235 pesoliquido,
6236 status,
6237 nrocarga,
6238 uf,
6239 nroserieecfdf,
6240 nroempresa,
6241 origem,
6242 vlrtottrib,
6243 seqctrc,
6244 nfechaveacesso,
6245 nroempresatransbordo,
6246 indtransbordomdfe)
6247 select s_mft_manifesto_df.nextval,
6248 pnSeqManifestoImp,
6249 d.codmodelodf,
6250 d.numerodf,
6251 d.seriedf,
6252 d.subseriedf,
6253 d.dtadf,
6254 d.vlrtotal,
6255 d.vlrmercadoria,
6256 d.qtdevolume,
6257 d.pesobruto,
6258 d.pesoliquido,
6259 'A',
6260 d.nrocarga,
6261 d.uf,
6262 d.nroserieecfdf,
6263 d.nroempresa,
6264 d.origem,
6265 d.vlrtottrib,
6266 d.seqctrc,
6267 d.nfechaveacesso,
6268 d.nroempresatransbordo,
6269 'L'
6270 from mft_manifesto_df d
6271 where d.seqmanifesto = pnSeqManifesto;
6272 update mft_manifesto a
6273 set a.indtransbordomdfe = 'F'
6274 where a.seqmanifesto = pnSeqManifesto;
6275 update mft_manifesto_df a
6276 set a.indtransbordomdfe = 'F'
6277 where a.seqmanifesto = pnSeqManifesto;
6278end mftp_ImpManifestoTransbordo;
6279procedure mftp_cancelaManifesto(pnSeqManifesto in mft_manifesto.seqmanifesto%type,
6280 psUsuCancelou in ge_usuario.codusuario%type,
6281 pnOk out number,
6282 psMsgErro out Varchar2) is
6283begin
6284 Update MFT_MANIFESTO
6285 Set SITUACAO = 'C',
6286 USUCANCELOU = psUsuCancelou,
6287 DTACANCELOU = TRUNC(SYSDATE)
6288 Where SEQMANIFESTO = pnSeqManifesto;
6289 Update MFT_MANIFESTO_DF
6290 Set STATUS = 'I'
6291 Where SEQMANIFESTO = pnSeqManifesto;
6292 pnOk := 1;
6293 psMsgErro := null;
6294end mftp_cancelaManifesto;
6295procedure mftp_LancaComissao(
6296 pnNroCarga in MFTV_EMPENHO_DOC.NROCARGA%type,
6297 pnSeqGeracao in MFT_CCFRETE.SEQGERACAO%type,
6298 psIndTipoDocto in MFTV_EMPENHO_DOC.INDTIPODOC%type,
6299 psUsuario in MFT_CCFRETE.USULANCTO%type) is
6300begin
6301 --Lançamento de conta corrente
6302 insert into MFT_CCFRETE(
6303 NROEMPRESATRANSP,
6304 NROEMPRESAFAT,
6305 SEQTRANSPORTADOR,
6306 NROCARGA,
6307 DTALANCTO,
6308 DTAHORLANCTO,
6309 USULANCTO,
6310 VALOR,
6311 HISTORICO,
6312 SEQGERACAO )
6313 select A.NROEMPRESADOC,
6314 A.NROEMPRESACARGA,
6315 A.SEQSUBCONTRATADO,
6316 A.NROCARGA,
6317 trunc(SYSDATE),
6318 SYSDATE,
6319 psUsuario,
6320 A.VLRCOMISSAO,
6321 'Valor da comissão conforme configurado na carga de faturamento pelo usuário no sistema SM.',
6322 pnSeqGeracao
6323 from MFTV_EMPENHO_DOC A
6324 where A.NROCARGA = pnNroCarga
6325 and A.INDTIPODOC = psIndTipoDocto
6326 and A.SEQSUBCONTRATADO > 0
6327 and A.VLRCOMISSAO > 0
6328 and A.STATUS = 'A'
6329 and ROWNUM = DECODE(A.VLRCOMISSCARGASM,0,ROWNUM,1)
6330 and (select nvl(sum(b.valor), 0) from mft_ccfrete b where b.nrocarga = pnNroCarga) = 0
6331 group by A.NROEMPRESADOC,
6332 A.NROEMPRESACARGA,
6333 A.SEQSUBCONTRATADO,
6334 A.NROCARGA,
6335 A.VLRCOMISSAO;
6336end mftp_LancaComissao;
6337procedure mftp_EstornoComissao(
6338 pnNroCarga in MFT_CCFRETE.NROCARGA%type,
6339 pnSeqGeracao in MFT_CCFRETE.SEQGERACAO%type,
6340 psUsuario in MFT_CCFRETE.USULANCTO%type) is
6341begin
6342 --Lançamento de conta corrente
6343 insert into MFT_CCFRETE(
6344 NROEMPRESATRANSP,
6345 NROEMPRESAFAT,
6346 SEQTRANSPORTADOR,
6347 NROCARGA,
6348 DTALANCTO,
6349 DTAHORLANCTO,
6350 USULANCTO,
6351 VALOR,
6352 HISTORICO )
6353 select A.NROEMPRESATRANSP,
6354 A.NROEMPRESAFAT,
6355 A.SEQTRANSPORTADOR,
6356 A.NROCARGA,
6357 trunc(SYSDATE),
6358 SYSDATE,
6359 psUsuario,
6360 sum(A.VALOR) * -1,
6361 'Estorno de comissão'
6362 from MFT_CCFRETE A
6363 where A.NROCARGA = pnNroCarga
6364 and A.SEQGERACAO = pnSeqGeracao
6365 and A.TIPOLANCTO = 'A'
6366 group by A.NROEMPRESATRANSP,
6367 A.NROEMPRESAFAT,
6368 A.SEQTRANSPORTADOR,
6369 A.NROCARGA,
6370 trunc(SYSDATE),
6371 SYSDATE;
6372end mftp_EstornoComissao;
6373procedure mftp_FechtoComissao(
6374 psUsuario in MFT_CCFRETE.USULANCTO%type) is
6375 vnSeqLanctoFechto MFT_CCFRETE.SEQLANCTOFECHTO%TYPE;
6376begin
6377 select s_seqlanctoccfrete.nextval
6378 into vnSeqLanctoFechto
6379 from dual;
6380 --Lançamento de conta corrente
6381 insert into MFT_CCFRETE(
6382 SEQLANCTO,
6383 NROEMPRESATRANSP,
6384 SEQTRANSPORTADOR,
6385 DTALANCTO,
6386 DTAHORLANCTO,
6387 USULANCTO,
6388 VALOR,
6389 HISTORICO,
6390 STATUS,
6391 DTAFECHAMENTO,
6392 DTAHORFECHAMENTO,
6393 LINKERP )
6394 select vnSeqLanctoFechto,
6395 max(A.NROEMPRESATRANSP),
6396 max(A.SEQTRANSPORTADOR),
6397 trunc(SYSDATE),
6398 SYSDATE,
6399 psUsuario,
6400 sum(A.VALOR),
6401 max(X.HISTORICO),
6402 'F',
6403 max(trunc(X.DTAFECHAMENTO)),
6404 max(X.DTAFECHAMENTO),
6405 max(X.LINKERP)
6406 from MFT_CCFRETE A,
6407 MFTX_CCFRETE X
6408 where A.ROWID = X.ROWCCFRETE;
6409 update MFT_CCFRETE A
6410 set A.STATUS = 'F',
6411 A.DTAFECHAMENTO = trunc(SYSDATE),
6412 A.DTAHORFECHAMENTO = SYSDATE,
6413 A.SEQLANCTOFECHTO = vnSeqLanctoFechto
6414 where A.ROWID IN (select X.ROWCCFRETE
6415 from MFTX_CCFRETE X);
6416end mftp_FechtoComissao;
6417procedure mftp_BuscaFaixaValorFrete( psTipoFaixaValor in varchar2,
6418 pnSeqRemetente in integer,
6419 pnSeqDestinatario in integer,
6420 psIndAssociaFaixaValor in varchar2,
6421 pnPesoTotal in number,
6422 pnErro out integer,
6423 psMsgErro out varchar2,
6424 pnValorFrete out number,
6425 pnTempoPrev out number )
6426is
6427 vnDistancia MFTV_REMETENTE.DISTANCIA%TYPE;
6428 vnSeqFaixa MFTV_REMETENTE.SEQFAIXA_PESO%TYPE;
6429begin
6430 if psIndAssociaFaixaValor = 'R' then
6431 SELECT DECODE( psTipoFaixaValor, 'E', NULL, A.DISTANCIA) DISTANCIA,
6432 DECODE( psTipoFaixaValor, 'E', A.SEQFAIXA_PESO, A.SEQFAIXA_KM) SEQFAIXA,
6433 'Faixa de Valores '|| DECODE( psTipoFaixaValor, 'E', 'por Peso', 'por Quilometragem') || ' não cadastrada para o remetente: ' || A.SEQPESSOA || ' - ' || A.NOMERAZAO MSG
6434 INTO vnDistancia, vnSeqFaixa, psMsgErro
6435 FROM MFTV_REMETENTE A
6436 WHERE A.SEQPESSOA = pnSeqRemetente;
6437 else
6438 SELECT DECODE( psTipoFaixaValor, 'E', NULL, A.DISTANCIA) DISTANCIA,
6439 DECODE( psTipoFaixaValor, 'E', nvl(A.SEQFAIXA_PESO,-1), nvl(A.SEQFAIXA_KM,-1)) SEQFAIXA,
6440 'Faixa de Valores '|| DECODE( psTipoFaixaValor, 'E', 'por Peso', 'por Quilometragem') || ' não cadastrada para o destinatário: ' || A.SEQPESSOA || ' - ' || A.NOMERAZAO MSG
6441 INTO vnDistancia, vnSeqFaixa, psMsgErro
6442 FROM MFTV_DESTINATARIO A
6443 WHERE A.SEQPESSOA = pnSeqDestinatario;
6444 end if;
6445 SELECT 'Intervalo correspondente ao valor informado ('|| decode( psTipoFaixaValor, 'E', pnPesoTotal, vnDistancia) ||') não encontrado na Faixa de valores : ' || A.SEQFAIXA || ' - ' || A.DESCRICAO
6446 INTO psMsgErro
6447 FROM MFT_FAIXA A
6448 WHERE A.SEQFAIXA = vnSeqFaixa;
6449 if psTipoFaixaValor = 'E' then
6450 SELECT B.VALOR_FRETE, B.TEMPO_PREV
6451 INTO pnValorFrete, pnTempoPrev
6452 FROM MFT_FAIXA A, MFT_FAIXAVALOR B
6453 WHERE A.SEQFAIXA = B.SEQFAIXA
6454 AND A.SEQFAIXA = vnSeqFaixa
6455 AND pnPesoTotal BETWEEN B.FAIXA_INICIAL AND B.FAIXA_FINAL;
6456 elsif psTipoFaixaValor = 'K' then
6457 SELECT B.VALOR_FRETE, B.TEMPO_PREV
6458 INTO pnValorFrete, pnTempoPrev
6459 FROM MFT_FAIXA A, MFT_FAIXAVALOR B
6460 WHERE A.SEQFAIXA = B.SEQFAIXA
6461 AND A.SEQFAIXA = vnSeqFaixa
6462 AND vnDistancia BETWEEN B.FAIXA_INICIAL AND B.FAIXA_FINAL;
6463 end if;
6464 pnErro := 1;
6465 psMsgErro := NULL;
6466exception when no_data_found then
6467 pnErro := 0;
6468end mftp_BuscaFaixaValorFrete;
6469procedure mftp_geraCtrcCompImp( pnSeqCtrcOrigem in integer,
6470 pnCgo in integer,
6471 pnCfop in integer,
6472 psCstIcms in varchar2,
6473 pnVlrBaseIcms in number,
6474 pnAliqIcms in number,
6475 pnVlrIcms in number,
6476 pnVlrIsentoIcms in number,
6477 pnVlrOutrosIcms in number,
6478 psObservacao in varchar2,
6479 psUsuario in varchar2,
6480 pnOk out integer,
6481 psMsgErro out varchar2,
6482 pnSeqCtrcComp out integer
6483 )
6484is
6485 vnNroEmpenhoNovo integer;
6486 vnSeqCtrcNovo integer;
6487begin
6488 pnOk := 1;
6489 psMsgErro := NULL;
6490 SELECT S_MFT_EMPENHO.NEXTVAL
6491 INTO vnNroEmpenhoNovo
6492 FROM DUAL;
6493 INSERT INTO MFT_EMPENHO (
6494 NROEMPENHO, NROEMPRESA, NRODOCTO, SERIEDOCTO,
6495 CGO, SEQDESTINATARIO, VERSAOPESSOADEST, SEQREMETENTE,
6496 VERSAOPESSOAREM, NROTABFRETE, SITUACAO, NATUREZA,
6497 ESPECIE, VLRMERCADORIA, PESO, QUANTIDADE,
6498 FRETEPESO, FRETEVALOR, VLRPEDAGIO, VLRCOLETA,
6499 VLRENTREGA, VLRTAXADIVERSA, VLRGRIS, TIPOPAGTOFRETE,
6500 OBSERVACOES, CST_ICMS, VLRBASEICMS, ALIQICMS,
6501 VLRICMS, VLRBASEISS, ALIQISS, VLRISS,
6502 CST_PIS, VLRBASEPIS, ALIQPIS, CST_COFINS,
6503 VLRBASECOFINS, ALIQCOFINS, VLRTOTALSERVICO, VLRDESCONTO,
6504 SEQMOTORISTA, MARCA, PLACA, UF, LOCAL,
6505 DTALANCAMENTO, USUALTERACAO, DTAALTERACAO, AUTOMATICO,
6506 TIPODOCTO, NOTASFISCAIS, RATEADO, VLRISENTOICMS,
6507 VLROUTROSICMS, OBSERVACOESMAN )
6508 SELECT
6509 vnNroEmpenhoNovo, NROEMPRESA, NULL NRODOCTO, NULL SERIEDOCTO,
6510 pnCgo, SEQDESTINATARIO, VERSAOPESSOADEST, SEQREMETENTE,
6511 VERSAOPESSOAREM, NROTABFRETE, SITUACAO, NATUREZA,
6512 ESPECIE, 0 VLRMERCADORIA, 0 PESO, 0 QUANTIDADE,
6513 0 FRETEPESO, 0 FRETEVALOR, 0 VLRPEDAGIO, 0 VLRCOLETA,
6514 0 VLRENTREGA, 0 VLRTAXADIVERSA, 0 VLRGRIS, TIPOPAGTOFRETE,
6515 psObservacao, psCstIcms, pnVlrBaseIcms, pnAliqIcms,
6516 pnVlrIcms, 0 VLRBASEISS, 0 ALIQISS, 0 VLRISS,
6517 NULL CST_PIS, 0 VLRBASEPIS, 0 ALIQPIS, NULL CST_COFINS,
6518 0 VLRBASECOFINS, 0 ALIQCOFINS, 0 VLRTOTALSERVICO, 0 VLRDESCONTO,
6519 SEQMOTORISTA, MARCA, PLACA, UF, LOCAL,
6520 SYSDATE, psUsuario, SYSDATE, 'S',
6521 TIPODOCTO, NOTASFISCAIS, 'N', pnVlrIsentoIcms,
6522 pnVlrOutrosIcms, NULL OBSERVACOESMAN
6523 FROM MFT_EMPENHO B
6524 WHERE EXISTS ( SELECT 1 FROM MFT_CTRC C
6525 WHERE B.NROEMPENHO = C.NROEMPENHO
6526 AND B.NROEMPRESA = C.NROEMPRESA
6527 AND C.SEQCTRC = pnSeqCtrcOrigem);
6528 SELECT S_MFT_CTRC.NEXTVAL
6529 INTO vnSeqCtrcNovo
6530 FROM DUAL;
6531 INSERT INTO MFT_CTRC (
6532 SEQCTRC, NROFORMAPAGTO, NROCONDICAOPAGTO, NROCTRC,
6533 SERIECTRC, SUBSERIECTRC, NROEMPRESA, NROEMPENHO,
6534 CFOP, INDEMISSAO, DTAHORAEMISSAO, LINKERP,
6535 DTALANCAMENTO, ESPECIEDOCTO, CODMODELO, CODSITDOC,
6536 USUALTERACAO, DTAALTERACAO, DTACANCELOU, USUCANCELOU,
6537 SITUACAO, PROCESSADO, CONTABILIZADO, GERLIVROFISCAL,
6538 DTAENTREGA, SEQGERACAO, COMPLEMENTO, SEQCTRC_LINK )
6539 SELECT
6540 vnSeqCtrcNovo , NROFORMAPAGTO, NROCONDICAOPAGTO, NULL NROCTRC,
6541 NULL SERIECTRC, NULL SUBSERIECTRC, NROEMPRESA, vnNroEmpenhoNovo,
6542 pnCfop, 'N' INDEMISSAO, NULL DTAHORAEMISSAO, NULL LINKERP,
6543 SYSDATE DTALANCAMENTO, ESPECIEDOCTO, CODMODELO, CODSITDOC,
6544 psUsuario, SYSDATE DTAALTERACAO, NULL DTACANCELOU, NULL USUCANCELOU,
6545 'N' SITUACAO, 'N' PROCESSADO, 'N' CONTABILIZADO, GERLIVROFISCAL,
6546 NULL DTAENTREGA, SEQGERACAO, 'S' COMPLEMENTO, SEQCTRC
6547 FROM MFT_CTRC A
6548 WHERE A.SEQCTRC = pnSeqCtrcOrigem;
6549 UPDATE MFT_CTRC
6550 SET SEQCTRC_LINK = vnSeqCtrcNovo
6551 WHERE SEQCTRC = pnSeqCtrcOrigem;
6552 pnSeqCtrcComp := vnSeqCtrcNovo;
6553exception when others then
6554 pnOk := 0;
6555 psMsgErro := 'Erro ao gerar o novo CTRC.
6556 ' || SQLERRM ;
6557end mftp_geraCtrcCompImp;
6558procedure mftp_intNfSMDef( pnSeqAuxNotaFiscal in integer)
6559is
6560 vnSeqConsistencia integer;
6561 vsIntegraNF varchar2(1);
6562begin
6563 select case when b.geracargaauto = 'S' and b.libcargaauto = 'S'
6564 then 'S'
6565 else 'N'
6566 end
6567 INTO vsIntegraNF
6568 from max_codgeraloper b
6569 where b.codgeraloper = ( select a.codgeraloper
6570 from mlf_auxnotafiscal a
6571 where a.seqauxnotafiscal = pnSeqAuxNotaFiscal );
6572 IF vsIntegraNF = 'S' THEN
6573 ------> Gera Vencimento
6574 PKG_MLF_RECEBIMENTO.SP_GERAVENCTODEVOLUCAO(pnSeqAuxNotaFiscal);
6575 update mlf_auxnotafiscal a set
6576 (a.dtavencimento )= (select max(b.dtavencimento)
6577 from MLF_AUXNFVENCIMENTO b
6578 where b.seqauxnotafiscal = pnSeqAuxNotaFiscal)
6579 where a.seqauxnotafiscal = pnSeqAuxNotaFiscal;
6580 -- Consistir a nota
6581 PKG_MLF_RECEBIMENTO.SP_CONSISTEAUXNOTAFISCAL(pnSeqAuxNotaFiscal);
6582 -- Verifica se a nota está inconsistente
6583 vnSeqConsistencia := 0;
6584 SELECT count(seqinconsistencia)
6585 into vnSeqConsistencia
6586 FROM MLF_AUXNFINCONSISTENCIA
6587 WHERE SEQAUXNOTAFISCAL = pnSeqAuxNotaFiscal
6588 and ROWNUM = 1;
6589 -- Se não estiver inconsistente, libera a nota
6590 if vnSeqConsistencia = 0 then
6591 UPDATE MLF_AUXNOTAFISCAL
6592 SET INDPROCESSAMENTO = 'L'
6593 WHERE SEQAUXNOTAFISCAL = pnSeqAuxNotaFiscal;
6594 end if;
6595 END IF;
6596end;
6597procedure mftp_cancelaCtrcAgrup( pnLinkErp in Integer,
6598 psUsuCancelou in Varchar2,
6599 pnOk in out Integer,
6600 psMsgErro in out Varchar2)
6601IS
6602 vsMsgErro varchar2(200);
6603 vnOk integer;
6604BEGIN
6605 pnOk := 1;
6606 psMsgErro := null;
6607 for t in (
6608 select seqctrc, nroctrc
6609 from mft_ctrc
6610 where situacao = 'N'
6611 and linkerp = pnLinkErp
6612 ) loop
6613 mftp_cancelaCtrc( t.seqctrc, psUsuCancelou, vnOk, vsMsgErro );
6614 IF vnOk = 0 THEN
6615 SELECT DECODE( psMsgErro, null, 'CTRC: ' || t.nroctrc ||' - ' || vsMsgErro, psMsgErro || CHR(10) || 'CTRC: ' || t.nroctrc ||' - ' || vsMsgErro )
6616 INTO psMsgErro
6617 FROM DUAL;
6618 END IF;
6619 end loop;
6620 IF psMsgErro IS NULL THEN
6621 pnOk := 1;
6622 ELSE
6623 pnOk := 0;
6624 END IF;
6625END;
6626PROCEDURE MFTP_COPIAMANIFESTO( PSCHAVEABORT IN MFT_MANIFESTO.MDFECHAVEABORT%TYPE,
6627 PNSEQMANIFESTO IN MFT_MANIFESTO.SEQMANIFESTO%TYPE,
6628 PNNROEMPRESA IN MFT_MANIFESTO.NROEMPRESA%TYPE )
6629IS
6630 VNNROMANIFESTO MFT_MANIFESTO.NROMANIFESTO%TYPE;
6631 VSSERIEMANIFESTO MFT_MANIFESTO.SERIEMANIFESTO%TYPE;
6632 VBCOPIAMANIFESTO BOOLEAN;
6633 VNRETORNO INTEGER := 0;
6634 VSSQL CLOB;
6635 VSCOMANDOINSERT VARCHAR2(4000) := NULL;
6636 VSCOMANDOSELECT LONG := NULL;
6637 VSCOMANDOSQL LONG := NULL;
6638 VSTABELA VARCHAR2(50);
6639 VSCOLUNASANAOCLONAR VARCHAR2(250);
6640 VSCOLUNASINSERT VARCHAR2(250);
6641 VNSEQMANIFESTO MFT_MANIFESTO.SEQMANIFESTO%TYPE;
6642 VNNROMANIFESTOORIG MFT_MANIFESTO.NROMANIFESTO%TYPE;
6643 VSSERIEMANIFESTOORIG MFT_MANIFESTO.SERIEMANIFESTO%TYPE;
6644 VNNROEMPSERIENF MAX_EMPSERIENF.NROEMPRESA%TYPE;
6645BEGIN
6646 VBCOPIAMANIFESTO := TRUE;
6647 /*BUSCA INFORMAÇÕES DA CHAVE ABORT*/
6648 IF NOT PSCHAVEABORT IS NULL THEN
6649 VNNROMANIFESTO := FBUSCAINFORMACOESCHAVENFE(PSCHAVEABORT, 'NF');
6650 VSSERIEMANIFESTO := FBUSCAINFORMACOESCHAVENFE(PSCHAVEABORT, 'SERIE');
6651 END IF;
6652 /* VALIDA SE JA EXISTE MANIFESTO COM AS INFORMAÇÕES */
6653 SELECT COUNT(1)
6654 INTO VNRETORNO
6655 FROM MFT_MANIFESTO A
6656 WHERE A.NROMANIFESTO = VNNROMANIFESTO
6657 AND A.SERIEMANIFESTO = VSSERIEMANIFESTO
6658 AND A.NROEMPRESA = PNNROEMPRESA;
6659 IF VNRETORNO = 1 THEN
6660 VBCOPIAMANIFESTO := FALSE;
6661 END IF;
6662 IF VBCOPIAMANIFESTO = TRUE THEN
6663 /* VALIDA SE SERIE DO MANIFESTO ABORT EXISTE E ESTA CONFIGURADA PARA A EMPRESA */
6664 SELECT COUNT(1)
6665 INTO VNRETORNO
6666 FROM MAX_EMPSERIENF A
6667 WHERE A.NROEMPRESA = PNNROEMPRESA
6668 AND DECODE(C5_STRTONUMBER(A.SERIENF), 0, A.SERIENF, TO_NUMBER(A.SERIENF)) = DECODE(C5_STRTONUMBER(VSSERIEMANIFESTO), 0, VSSERIEMANIFESTO, TO_NUMBER(VSSERIEMANIFESTO));
6669 VNNROEMPSERIENF := FC5_RETEMPORIGDAEMPVIRTUAL( PNNROEMPRESA, VSSERIEMANIFESTO );
6670 IF VNRETORNO != 1 THEN
6671 /* CRIA SERIE MANIFESTO ABORT PARA A EMPRESA */
6672 INSERT INTO MAX_EMPSERIENF
6673 (NROEMPRESA, SERIENF, NUMERONF, TEMPLATENF, NROITEMFORMNF, TIPODOCTO, DTAALTERACAO, USUALTERACAO)
6674 VALUES(VNNROEMPSERIENF, DECODE(C5_STRTONUMBER(VSSERIEMANIFESTO), 0, VSSERIEMANIFESTO, TO_NUMBER(VSSERIEMANIFESTO)), VNNROMANIFESTO, 'C:\', 0, 'M', TRUNC(SYSDATE), 'AUT_RET_NDD');
6675 ELSE
6676 UPDATE MAX_EMPSERIENF A
6677 SET A.NUMERONF = VNNROMANIFESTO
6678 WHERE A.NROEMPRESA = VNNROEMPSERIENF
6679 AND DECODE(C5_STRTONUMBER(A.SERIENF), 0, A.SERIENF, TO_NUMBER(A.SERIENF)) = DECODE(C5_STRTONUMBER(VSSERIEMANIFESTO), 0, VSSERIEMANIFESTO, TO_NUMBER(VSSERIEMANIFESTO));
6680 END IF;
6681 /* ATUALIZA SERIE MANIFESTO ABORT PARA A EMPRESA */
6682 UPDATE MAX_EMPRESA A
6683 SET A.SERIEMDFEABORT = DECODE(C5_STRTONUMBER(VSSERIEMANIFESTO), 0, VSSERIEMANIFESTO, TO_NUMBER(VSSERIEMANIFESTO))
6684 WHERE A.NROEMPRESA = PNNROEMPRESA;
6685 /* ======================================== COPIA MANIFESTO ============================= */
6686 SELECT S_MFT_MANIFESTO.NEXTVAL
6687 INTO VNSEQMANIFESTO
6688 FROM DUAL;
6689 /* MFT_MANIFESTO */
6690 VSTABELA := 'MFT_MANIFESTO';
6691 VSCOLUNASANAOCLONAR := '''SEQMANIFESTO''' || ', ' || '''NROMANIFESTO''' || ', ' || '''SERIEMANIFESTO''' || ', ' || '''MDFECHAVEACESSO''' || ', ' || '''STATUSMDFE''' || ', ' || '''MDFECHAVEABORT''';
6692 VSCOLUNASINSERT := 'SEQMANIFESTO, NROMANIFESTO, SERIEMANIFESTO, MDFECHAVEACESSO, STATUSMDFE, MDFECHAVEABORT';
6693 SP_MONTASELECTCOLUNA(VSTABELA, VSCOLUNASANAOCLONAR, 'S', VSSQL);
6694 VSCOMANDOINSERT := ' INSERT INTO ' || VSTABELA || '( ' || VSSQL|| ', ' || VSCOLUNASINSERT || ' ) ' ;
6695 VSCOMANDOSELECT :=
6696 '(SELECT ' || VSSQL || ',' || VNSEQMANIFESTO || ',' || VNNROMANIFESTO || ', ' || VSSERIEMANIFESTO || ',' || CHR(39) || PSCHAVEABORT || CHR(39) || ',' || '3, NULL FROM ' || VSTABELA || ' WHERE SEQMANIFESTO = ' || PNSEQMANIFESTO || ' )';
6697 VSCOMANDOSQL := VSCOMANDOINSERT || VSCOMANDOSELECT;
6698 EXECUTE IMMEDIATE VSCOMANDOSQL;
6699 /* MFT_MANIFESTO_CARGA */
6700 INSERT INTO MFT_MANIFESTO_CARGA(SEQMANIFESTO, NROCARGA)
6701 SELECT VNSEQMANIFESTO, A.NROCARGA
6702 FROM MFT_MANIFESTO_CARGA A
6703 WHERE A.SEQMANIFESTO = PNSEQMANIFESTO;
6704 /* MFT_MANIFESTO_DF */
6705 VSTABELA := 'MFT_MANIFESTO_DF';
6706 VSCOLUNASANAOCLONAR := '''SEQMANIFESTO''' || ', ' || '''SEQMANIFESTODF''';
6707 VSCOLUNASINSERT := 'SEQMANIFESTO, SEQMANIFESTODF';
6708 VSSQL := '';
6709 SP_MONTASELECTCOLUNA(VSTABELA, VSCOLUNASANAOCLONAR, 'S', VSSQL);
6710 VSCOMANDOINSERT := ' INSERT INTO ' || VSTABELA || '( ' || VSSQL|| ', ' || VSCOLUNASINSERT || ' ) ' ;
6711 VSCOMANDOSELECT :=
6712 '(SELECT ' || VSSQL || ',' || VNSEQMANIFESTO || ',' || ' NULL FROM ' || VSTABELA || ' WHERE SEQMANIFESTO = ' || PNSEQMANIFESTO || ' )';
6713 VSCOMANDOSQL := VSCOMANDOINSERT || VSCOMANDOSELECT;
6714 EXECUTE IMMEDIATE VSCOMANDOSQL;
6715 /* Cria Log de clonagem */
6716 SELECT A.NROMANIFESTO,
6717 A.SERIEMANIFESTO
6718 INTO VNNROMANIFESTOORIG,
6719 VSSERIEMANIFESTOORIG
6720 FROM MFT_MANIFESTO A
6721 WHERE A.SEQMANIFESTO = PNSEQMANIFESTO;
6722 SP_GRAVALOGDOCELETRONICO('MDFE',
6723 VNSEQMANIFESTO,'MDF-e clonado pelo processo abort. Originado pelo Manifesto: ' || VNNROMANIFESTOORIG || ' - Série: ' || VSSERIEMANIFESTOORIG || '.');
6724 END IF;
6725END;
6726function mftf_ObsTributacao( pnNroEmpresa in integer,
6727 pnNroTributacao in integer,
6728 psTipTributacao in varchar2,
6729 psUfCliente in varchar2,
6730 psUfRemetente in varchar2
6731 ) return varchar2 is
6732 vsCodObsTribut map_tributacaouf.codobservacaocte%type;
6733 vsObsTribut varchar2(250);
6734 vsMsg varchar2(200);
6735 begin
6736 vsCodObsTribut := null;
6737 vsObsTribut := null;
6738 SELECT F.Codobservacaocte
6739 INTO vsCodObsTribut
6740 FROM MAX_EMPRESA D, MAP_TRIBUTACAOUF F
6741 WHERE D.NROREGTRIBUTACAO = F.NROREGTRIBUTACAO
6742 AND F.UFEMPRESA = psUfRemetente
6743 AND D.NROEMPRESA = pnNroEmpresa
6744 AND F.TIPTRIBUTACAO = psTipTributacao
6745 AND F.UFCLIENTEFORNEC = psUfCliente
6746 AND F.NROTRIBUTACAO = pnNroTributacao;
6747 if vsCodObsTribut is not null then
6748 SELECT C5_COMPLEXIN.C5INSTRING(CAST(COLLECT(SUBSTR(CODOBSERVACAO || '-' || DESCRICAO,1,250)) AS C5INSTRTABLE),' - ')
6749 INTO vsObsTribut
6750 FROM MRL_CADOBSERVACAO
6751 WHERE CODOBSERVACAO IN ( SELECT to_number(COLUMN_VALUE)
6752 FROM TABLE(cast(c5_ComplexIn.c5InTable(vsCodObsTribut) as c5InStrTable)) )
6753 ORDER BY DESCRICAO ;
6754 end if;
6755 return vsObsTribut;
6756 exception
6757 when no_data_found then
6758 Select '{Não há tributação configurada entre as UFs ' || psUfRemetente || ' (remetente) e ' || psUfCliente || ' (destinatário) na tributação ' || pnNroTributacao || ' - ' ||
6759 DECODE(psTipTributacao, 'SC', 'Saída contribuinte',
6760 'SN', 'Saída não-contribuinte',
6761 'Saída devolução' ) || '.}'
6762 Into vsMsg
6763 From dual;
6764 raise_application_error(-20203, vsMsg);
6765 end mftf_ObsTributacao;
6766end PKG_MFTTRANSPORTADORA;
6767
6768
6769/*BODY END*/