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