RCA001 — Extrato de Contratos
Fonte
- Form:
source/RCA001/URCA001.pas,source/RCA001/URCA001.dfm - DataModule:
source/RCA001/UdmRCA001.pas,source/RCA001/UdmRCA001.dfm - Package:
source/RCA001/RCA001.dpk
Objetivo
Relatório central da Captacao de Leite: emite extratos financeiros e de producao ligados aos contratos com produtores. Oferece 8 modelos diferentes — desde o extrato analitico completo do produtor (com credito/debito/contas pendentes e recibo) ate relatorios gerenciais agregados por motorista, linha de captacao ou produtor. Fonte unica de demonstrativos de fechamento de contrato entregues aos produtores.
Modelos de Relatorio
Selecionados pelo combobox "Modelo" (campo TP_MODELO em tabFILTRO). Conforme o modelo escolhido, o handler btnImprimir.OnClick monta um SQL diferente, carrega um .rtm especifico e grava um registro em RELATORIO via GravaRelatorio.
Modelo 1: Extrato de Contratos
Quando usado: combo "Modelo" = "Extrato de Contratos" (valor N, default).
Layout analitico completo por contrato (RCA001.rtm). Mostra cabecalho com empresa, endereco e dados do produtor; total recebido, transferencias de entrada/saida, devolucoes, condenacoes, indenizacao, quitacao; credito (pagamentos recebidos), debitos (impostos, descontos, adiantamentos, insumos, frete), analise de qualidade do leite (gordura, proteina, CCS, CBT) e recibo juridico em extenso. E o relatorio entregue ao produtor no fechamento mensal.
SQL Base (dataset Contrato):
SELECT EMP.NM_EMPRESA, C.CD_EMPRESA, C.NR_CONTRATO, C.DT_COMPETENCIA, C.CD_PESSOA,
C.CD_ENDERECO, EP.DS_ENDERECO, FE.DT_FECHAMENTO, C.DT_ABERTURA,
CASE WHEN C.ST_CONTRATOLEITE = 'V' THEN 'Valido'
WHEN C.ST_CONTRATOLEITE = 'C' THEN 'Cancelado'
WHEN C.ST_CONTRATOLEITE = 'F' THEN 'Fechado' END ST_CONTRATO,
C.CD_FORMAPAGTO, C.DT_VENCTOPAGTO, C.VL_FRETE, C.VL_DESPESA,
P.NM_PESSOA||' - '||P.CD_PESSOA NM_PESSOA, P.NR_CNPJCPF,
FPG.DS_FORMAPAGTO,
MUNICIPIO.DS_MUNICIPIO||' - '||MUNICIPIO.SG_ESTADO DS_MUNICIPIO,
COALESCE(EP.NR_FONE, EP.NR_CELULAR, EP.NR_FAX) NR_FONE,
(SELECT DS_OBSERVACAO FROM PARMLEITE WHERE CD_EMPRESA = C.CD_EMPRESA) DS_MENSAGEM,
MIN((SELECT EMB.CD_MOTORISTA FROM EMBARQUE EMB
WHERE EMB.NR_EMBARQUE = ML.NR_EMBARQUE
AND EMB.CD_EMPRESA = ML.CD_EMPRESA
/* filtro opcional de motorista */)) CD_MOTORISTA,
CI.OQT_INCENTIVO QT_INCENTIVO,
'Recebi de '||EMP.NM_EMPRESA||', a importancia... de R$ '||FE.VL_SALDO||
' ('||VL.O_VALOR||'), referente ao meu fornecimento de '||FE.QT_FECHAMENTO||
' litros de Leite cru in natura durante o mes de '||M.O_DS_MES||' de '||
COPIA_TEXTO(C.DT_COMPETENCIA, 4, 7)||'. ...' RECIBO,
((SELECT OQT_SALDO FROM SALDO_CONTRATOLEITE('C', C.CD_EMPRESA, C.NR_CONTRATO, NULL)) +
(SELECT OQT_SALDO FROM SALDO_CONTRATOLEITE('T', C.CD_EMPRESA, C.NR_CONTRATO, NULL))) QT_RECEBIDA,
CAST(NULL AS VARCHAR(25)) NR_RELATORIO,
RD.DS_ENDERECO EDS_ENDERECO, RD.DS_MUNICIPIO||'/'||RD.SG_ESTADO EDS_MUNICIPIO,
RD.NR_CEP ENR_CEP, RD.DS_EMAIL EDS_EMAIL, RD.DS_SITE EDS_SITE,
RD.NR_CNPJCPF ENR_CNJPCPF, RD.NR_INSCEST ENR_INSCEST,
COALESCE(RD.NR_FONE, RD.NR_FAX, RD.NR_CELULAR) ENR_FONE,
PF.DS_LOGOTIPO
FROM CONTRATOLEITE C
INNER JOIN PESSOA P ON (C.CD_PESSOA = P.CD_PESSOA)
INNER JOIN ENDERECOPESSOA EP ON (EP.CD_PESSOA = C.CD_PESSOA AND EP.CD_ENDERECO = C.CD_ENDERECO)
INNER JOIN FORMAPAGTO FPG ON (FPG.CD_FORMAPAGTO = C.CD_FORMAPAGTO)
INNER JOIN MUNICIPIO ON (MUNICIPIO.CD_MUNICIPIO = EP.CD_MUNICIPIO)
INNER JOIN EMPRESA ON (EMPRESA.CD_EMPRESA = C.CD_EMPRESA)
INNER JOIN PARMFATUR PF ON (PF.CD_EMPRESA = EMPRESA.CD_EMPRESA)
LEFT JOIN RETORNA_DADOSCADASTRAIS(EMPRESA.CD_PESSOA, NULL) RD ON (1=1)
LEFT JOIN FECHAMENTOCONTRATO FE ON (FE.CD_EMPRESA = C.CD_EMPRESA
AND FE.NR_CONTRATO = C.NR_CONTRATO
AND FE.DT_CANCELAMENTO IS NULL
AND FE.NR_SEQUENCIAL = (SELECT MAX(NR_SEQUENCIAL)
FROM FECHAMENTOCONTRATO
WHERE CD_EMPRESA = C.CD_EMPRESA
AND NR_CONTRATO = C.NR_CONTRATO
AND DT_CANCELAMENTO IS NULL))
INNER JOIN EMPRESA EMP ON (EMP.CD_EMPRESA = C.CD_EMPRESA)
INNER JOIN MOVTOLEITE ML ON (ML.CD_EMPRCONTRATO = C.CD_EMPRESA
AND ML.NR_CONTRATO = C.NR_CONTRATO)
INNER JOIN CAPTACAOLEITE CPL ON (CPL.CD_EMPREMBARQUE = C.CD_EMPRESA
AND CPL.NR_PLACA = ML.NR_PLACA
AND CPL.NR_EMBARQUE = ML.NR_EMBARQUE)
INNER JOIN ROTACAPTACAO R ON (R.NR_PLACA = CPL.NR_PLACA
AND R.CD_LINHACAPTACAO = CPL.CD_LINHACAPTACAO)
INNER JOIN LINHACAPTACAO LP ON (LP.CD_LINHACAPTACAO = R.CD_LINHACAPTACAO)
LEFT JOIN MES_EXTENSO('01.'||REPLACE(C.DT_COMPETENCIA,'/','.')) M ON (1=1)
LEFT JOIN VALOR_EXTENSO(FE.VL_SALDO) VL ON (1=1)
LEFT JOIN CALCULA_INCENTIVOPRODUCAO(C.CD_EMPRESA, C.NR_CONTRATO, NULL, NULL) CI ON (1=1)
/* WHERE dinamico: ML.ST_MOVTOLEITE, CD_EMPRESA, DT_COMPETENCIA,
CD_PESSOA IN (...), NR_CONTRATO IN (...),
CD_MOTORISTA IN (...), CD_LINHACAPTACAO */
GROUP BY ...
ORDER BY NM_PESSOA | CD_PESSOA | DS_MUNICIPIO
Sub-relatorios auxiliares populados via AfterScroll do tabLEITE (no modelo "R") e tabLEITEAfterScroll: tabCREDITO, tabDEBITO, tabContasPendente, tabMovimentacao, tabAnalise, tabResumo, tabINCENTIVO, tabDemonstrativo.
Layout: dist/Relatorios/RCA001.rtm (ou Custom/RCA001.rtm).
Modelo 2: Extrato de Contratos / Incentivos
Quando usado: combo "Modelo" = "Extrato de Contratos / Incentivos" (valor E).
Variante do Modelo 1 com secao adicional de incentivos/bonificacoes por analise (gordura, proteina, volume). SQL base identico ao Modelo 1; diferenca esta no layout .rtm que inclui a regiao de incentivos alimentada por tabINCENTIVO e tabDemonstrativo via procedures CALCULA_INCENTIVOANALISE / CALCULA_INCENTIVOPRODUCAO.
Layout: dist/Relatorios/RCA001_E.rtm.
Modelo 3: Compra de Leite por Motorista
Quando usado: combo "Modelo" = "Compra de Leite por Motorista" (valor M).
Planilha diaria (dias 1 a 31) da competencia agrupada por motorista e linha de captacao. Cada linha do relatorio e um motorista; colunas mostram litros coletados por dia do mes. Usado para controle operacional da frota.
SQL Base (dataset tabCOMPRAMOT):
SELECT SUM(V.V_QT_DIA1) V_QT_DIA1, ... SUM(V.V_QT_DIA31) V_QT_DIA31,
V.V_NM_MOTORISTA, V.V_NR_PLACAMOTORISTA,
CAST(NULL AS VARCHAR(2)) NM_PRODUTOR,
V.V_TP_MOTIVOLEITE,
V.V_DS_LINHACAPTACAO, V.V_CD_LINHACAPTACAO,
SUM(V.QT_TOTALEMPRESA) QT_TOTALEMPRESA,
NM_EMPRESA, DS_ENDERECO, DS_MUNICIPIOBAIRRO, NR_FONE, DS_SITE,
DS_LOGOTIPO, DS_EMAIL, NR_INSCESTAD, NR_CPFCNPJ, ODT_COMPETENCIA,
CAST(NULL AS VARCHAR(25)) NR_RELATORIO
FROM VIEW_RCA001(:CD_EMPRESA, NULL, 'M', :FILTRO) V
GROUP BY V.V_TP_MOTIVOLEITE, V.V_DS_LINHACAPTACAO, V.V_CD_LINHACAPTACAO,
V.V_NM_MOTORISTA, V.V_NR_PLACAMOTORISTA, NM_EMPRESA,
DS_ENDERECO, DS_MUNICIPIOBAIRRO, NR_FONE, DS_SITE, DS_LOGOTIPO,
DS_EMAIL, NR_INSCESTAD, NR_CPFCNPJ, ODT_COMPETENCIA
ORDER BY V.V_CD_LINHACAPTACAO, V.V_NM_MOTORISTA
Layout: dist/Relatorios/RCA001_M.rtm.
Modelo 4: Compra de Leite por Produtor
Quando usado: combo "Modelo" = "Compra de Leite por Produtor" (valor P).
Mesma matriz diaria (dias 1 a 31) do Modelo 3, porem agrupada por produtor (CD_PESSOA). Quando o checkbox "Quebra por Motorista" esta marcado (QB_MOTORISTA = 'T'), acrescenta quebra intermediaria por motorista (V_NM_MOTORISTA).
SQL Base (dataset tabCOMPRAMOT):
SELECT SUM(V.V_QT_DIA1) V_QT_DIA1, ... SUM(V.V_QT_DIA31) V_QT_DIA31,
/* se Quebra por Motorista: V.V_NR_PLACAMOTORISTA, V.V_TP_MOTIVOLEITE, */
(LIST(DISTINCT ' '||V.V_CD_LINHACAPTACAO||' - '||V.V_DS_LINHACAPTACAO)) V_DS_LINHACAPTACAO,
SUM(V.QT_TOTALEMPRESA) QT_TOTALEMPRESA,
NM_EMPRESA, DS_ENDERECO, DS_MUNICIPIOBAIRRO, NR_FONE, DS_SITE,
DS_LOGOTIPO, DS_EMAIL, NR_INSCESTAD, NR_CPFCNPJ,
CD_PRODUTOR||' - '||V.NM_PRODUTOR NM_PRODUTOR,
ODT_COMPETENCIA,
CAST(NULL AS VARCHAR(25)) NR_RELATORIO
FROM VIEW_RCA001(:CD_EMPRESA, NULL, 'M', :FILTRO) V
GROUP BY V.V_TP_MOTIVOLEITE, /* se Quebra: V.V_NR_PLACAMOTORISTA, */
NM_EMPRESA, DS_ENDERECO, DS_MUNICIPIOBAIRRO, NR_FONE, DS_SITE,
DS_LOGOTIPO, DS_EMAIL, CD_PRODUTOR, NR_INSCESTAD, NR_CPFCNPJ,
V.NM_PRODUTOR, ODT_COMPETENCIA
/* se Quebra: , V.V_NM_MOTORISTA */
ORDER BY NM_PRODUTOR /* se Quebra: , V.V_NM_MOTORISTA */
Layout: dist/Relatorios/RCA001_P.rtm.
Modelo 5: Contratos - Sintetico
Quando usado: combo "Modelo" = "Contratos - Sintetico" (valor S).
Lista 1 linha por contrato do periodo (sem detalhamento de movimentos). Rapido para visao geral de contratos fechados/validos.
SQL Base (dataset Contrato):
SELECT DISTINCT EMP.NM_EMPRESA, CL.CD_EMPRESA, CL.NR_CONTRATO, CL.DT_COMPETENCIA,
CL.CD_PESSOA, CL.CD_ENDERECO, EP.DS_ENDERECO, FE.DT_FECHAMENTO, CL.DT_ABERTURA,
CASE WHEN CL.ST_CONTRATOLEITE = 'V' THEN 'Valido'
WHEN CL.ST_CONTRATOLEITE = 'C' THEN 'Cancelado'
WHEN CL.ST_CONTRATOLEITE = 'F' THEN 'Fechado' END ST_CONTRATO,
((100.00*300)*0) QT_INCENTIVO,
CL.CD_FORMAPAGTO, CL.DT_VENCTOPAGTO, CL.VL_FRETE, CL.VL_DESPESA,
P.NM_PESSOA||' - '||P.CD_PESSOA NM_PESSOA, P.NR_CNPJCPF,
FPG.DS_FORMAPAGTO,
MUNICIPIO.DS_MUNICIPIO||' - '||MUNICIPIO.SG_ESTADO DS_MUNICIPIO,
COALESCE(EP.NR_FONE, EP.NR_CELULAR, EP.NR_FAX) NR_FONE,
(SELECT DS_OBSERVACAO FROM PARMLEITE WHERE CD_EMPRESA = CL.CD_EMPRESA) DS_MENSAGEM,
(SELECT MIN(EMB.CD_MOTORISTA) FROM EMBARQUE EMB
INNER JOIN MOVTOLEITE MV ON (EMB.NR_EMBARQUE = MV.NR_EMBARQUE
AND EMB.CD_EMPRESA = MV.CD_EMPRESA)
WHERE MV.NR_CONTRATO = CL.NR_CONTRATO
AND MV.CD_EMPRESA = CL.CD_EMPRESA /* filtro motorista */) CD_MOTORISTA,
'' RECIBO,
CAST(NULL AS NUMERIC(15,2)) QT_RECEBIDA,
CAST(NULL AS VARCHAR(25)) NR_RELATORIO,
RD.DS_ENDERECO EDS_ENDERECO, ..., PF.DS_LOGOTIPO
FROM CONTRATOLEITE CL
INNER JOIN PRODUTORLEITE PL ON (PL.CD_PESSOA = CL.CD_PESSOA AND PL.CD_ENDERECO = CL.CD_ENDERECO)
INNER JOIN PESSOA P ON (CL.CD_PESSOA = P.CD_PESSOA)
INNER JOIN ENDERECOPESSOA EP ON (EP.CD_PESSOA = CL.CD_PESSOA AND EP.CD_ENDERECO = CL.CD_ENDERECO)
INNER JOIN FORMAPAGTO FPG ON (FPG.CD_FORMAPAGTO = CL.CD_FORMAPAGTO)
INNER JOIN MUNICIPIO ON (MUNICIPIO.CD_MUNICIPIO = EP.CD_MUNICIPIO)
LEFT JOIN FECHAMENTOCONTRATO FE ON (FE.CD_EMPRESA = CL.CD_EMPRESA
AND FE.NR_CONTRATO = CL.NR_CONTRATO
AND FE.DT_CANCELAMENTO IS NULL
AND FE.NR_SEQUENCIAL = (SELECT MAX(NR_SEQUENCIAL) ...))
INNER JOIN EMPRESA EMP ON (EMP.CD_EMPRESA = CL.CD_EMPRESA)
INNER JOIN PARMFATUR PF ON (PF.CD_EMPRESA = EMP.CD_EMPRESA)
LEFT JOIN RETORNA_DADOSCADASTRAIS(EMP.CD_PESSOA, NULL) RD ON (1=1)
LEFT JOIN MOVTOLEITE MV ON (MV.NR_CONTRATO = CL.NR_CONTRATO AND MV.CD_EMPRESA = CL.CD_EMPRESA)
LEFT JOIN EMBARQUE EMB ON (EMB.NR_EMBARQUE = MV.NR_EMBARQUE AND EMB.CD_EMPRESA = MV.CD_EMPRESA)
LEFT JOIN PESSOA MOT ON (MOT.CD_PESSOA = EMB.CD_MOTORISTA)
INNER JOIN CAPTACAOLEITE CPL ON (CPL.CD_EMPREMBARQUE = CL.CD_EMPRESA
AND CPL.NR_PLACA = MV.NR_PLACA
AND CPL.NR_EMBARQUE = MV.NR_EMBARQUE)
INNER JOIN ROTACAPTACAO R ON (R.NR_PLACA = CPL.NR_PLACA
AND R.CD_LINHACAPTACAO = CPL.CD_LINHACAPTACAO)
INNER JOIN LINHACAPTACAO LP ON (LP.CD_LINHACAPTACAO = R.CD_LINHACAPTACAO)
/* filtro: CL.ST_CONTRATOLEITE, CL.DT_COMPETENCIA, pessoa/contrato/motorista/linha */
Layout: dist/Relatorios/RCA001_S.rtm.
Modelo 6: Extrato de Contratos - Simples
Quando usado: combo "Modelo" = "Extrato de Contratos - Simples" (valor R).
Extrato resumido por produtor com credito, debito, saldo, contas pendentes, analise e dados bancarios (Banco, Agencia, Conta Corrente) e rota de captacao — mais enxuto que o Modelo 1.
SQL Base (dataset tabLEITE):
SELECT EDS_ENDERECO, EDS_MUNICIPIO, ENR_CEP, EDS_EMAIL, EDS_SITE, ENR_CNJPCPF,
ENR_INSCEST, ENR_FONE, DS_LOGOTIPO, NM_PESSOA, DS_ENDERECO, DS_MUNICIPIO,
NR_CNPJCPF, NR_FONE, DT_COMPETENCIA, NR_CONTRATO, VL_SALDO, VL_CREDITO,
VL_DEBITO, VL_PRECO, QT_FECHAMENTO, ST_CONTRATOLEITE, VL_TOTALIMPOSTO,
TP_MOVTOLEITE, CD_PESSOA, QT_INCENTIVO, NR_RELATORIO,
DT_COMPINICIAL, DT_COMPFINAL,
CD_BANCOPESSOA, DS_BANCOPESSOA, CD_AGENCIAPESSOA, NR_CONTACORPESSOA,
CAST(LIST(DS_ROTACAPTACAO) AS DOM_VARCHAR500) DS_ROTACAPTACAO,
CAST(LIST(CD_LINHACAPTACAO) AS DOM_VARCHAR32) CD_LINHACAPTACAO,
CAST(LIST(DS_LINHACAPTACAO) AS DOM_VARCHAR500) DS_LINHACAPTACAO
FROM (
SELECT DISTINCT
RD.DS_ENDERECO EDS_ENDERECO, ...,
(SELECT DS_LOGOTIPO FROM PARMFATUR WHERE CD_EMPRESA = CL.CD_EMPRESA) DS_LOGOTIPO,
P.NM_PESSOA, E.DS_ENDERECO, MP.DS_MUNICIPIO||MP.SG_ESTADO DS_MUNICIPIO,
P.NR_CNPJCPF, E.NR_FONE, CL.DT_COMPETENCIA, CL.NR_CONTRATO,
F.VL_SALDO, F.VL_CREDITO, F.VL_DEBITO, F.VL_PRECO, F.QT_FECHAMENTO,
CL.ST_CONTRATOLEITE, F.VL_TOTALIMPOSTO,
CASE WHEN ML.TP_MOVTOLEITE = 'C' THEN 'Recebimento'
WHEN ML.TP_MOVTOLEITE = 'E' THEN 'Transferencia de Entrada'
WHEN ML.TP_MOVTOLEITE = 'S' THEN 'Transferencia de Saida'
WHEN ML.TP_MOVTOLEITE = 'D' THEN 'Devolucao' END TP_MOVTOLEITE,
CL.CD_PESSOA, CI.OQT_INCENTIVO QT_INCENTIVO,
CAST(NULL AS VARCHAR(25)) NR_RELATORIO,
/* DT_COMPINICIAL / DT_COMPFINAL calculadas a partir de CL.DT_COMPETENCIA */
COALESCE(BP.CD_BANCO, 0) CD_BANCOPESSOA,
COALESCE(BP.DS_BANCO, 'SEM BANCO') DS_BANCOPESSOA,
COALESCE(AP.CD_AGENCIA, 0) CD_AGENCIAPESSOA,
COALESCE(CCP.NR_CONTACOR, 0) NR_CONTACORPESSOA,
COALESCE(R.DS_ROTACAPTACAO, 'Sem Rota de Captacao de Leite') DS_ROTACAPTACAO,
LP.CD_LINHACAPTACAO,
COALESCE(LP.DS_LINHACAPTACAO, '---') DS_LINHACAPTACAO
FROM CONTRATOLEITE CL
INNER JOIN PRODUTORLEITE PL ON (PL.CD_PESSOA = CL.CD_PESSOA AND PL.CD_ENDERECO = CL.CD_ENDERECO)
INNER JOIN FECHAMENTOCONTRATO F ON (F.CD_EMPRESA = CL.CD_EMPRESA
AND F.NR_CONTRATO = CL.NR_CONTRATO
AND F.DT_CANCELAMENTO IS NULL)
INNER JOIN MOVTOLEITE ML ON (ML.CD_EMPRCONTRATO = CL.CD_EMPRESA
AND ML.NR_CONTRATO = CL.NR_CONTRATO
AND F.NR_SEQUENCIAL = (SELECT MAX(NR_SEQUENCIAL)
FROM FECHAMENTOCONTRATO
WHERE CD_EMPRESA = CL.CD_EMPRESA
AND NR_CONTRATO = CL.NR_CONTRATO))
INNER JOIN EMPRESA ON (EMPRESA.CD_EMPRESA = CL.CD_EMPRESA)
LEFT JOIN RETORNA_DADOSCADASTRAIS(EMPRESA.CD_PESSOA, NULL) RD ON (1=1)
INNER JOIN PESSOA P ON (P.CD_PESSOA = CL.CD_PESSOA)
INNER JOIN ENDERECOPESSOA E ON (E.CD_PESSOA = CL.CD_PESSOA AND E.CD_ENDERECO = CL.CD_ENDERECO)
INNER JOIN MUNICIPIO MP ON (MP.CD_MUNICIPIO = E.CD_MUNICIPIO)
LEFT JOIN EMBARQUE EMB ON (EMB.NR_EMBARQUE = ML.NR_EMBARQUE AND EMB.CD_EMPRESA = ML.CD_EMPRESA)
LEFT JOIN PESSOA MOT ON (MOT.CD_PESSOA = EMB.CD_MOTORISTA)
LEFT JOIN CONTACORPESSOA CCP ON (CCP.CD_PESSOA = P.CD_PESSOA
AND CCP.NR_CONTACOR = (SELECT FIRST 1 NR_CONTACOR
FROM CONTACORPESSOA
WHERE CD_PESSOA = CCP.CD_PESSOA))
LEFT JOIN BANCO BP ON (BP.CD_BANCO = CCP.CD_BANCO)
LEFT JOIN AGENCIA AP ON (AP.CD_AGENCIA = CCP.CD_AGENCIA)
INNER JOIN CAPTACAOLEITE CPL ON (CPL.CD_EMPREMBARQUE = CL.CD_EMPRESA
AND CPL.NR_PLACA = ML.NR_PLACA
AND CPL.NR_EMBARQUE = ML.NR_EMBARQUE)
INNER JOIN ROTACAPTACAO R ON (R.NR_PLACA = CPL.NR_PLACA
AND R.CD_LINHACAPTACAO = CPL.CD_LINHACAPTACAO)
INNER JOIN LINHACAPTACAO LP ON (LP.CD_LINHACAPTACAO = R.CD_LINHACAPTACAO)
LEFT JOIN CALCULA_INCENTIVOPRODUCAO(CL.CD_EMPRESA, CL.NR_CONTRATO, NULL, NULL) CI ON (1=1)
/* filtro WHERE ML.ST_MOVTOLEITE, CD_EMPRESA, DT_COMPETENCIA, CD_PESSOA IN, NR_CONTRATO IN, CD_MOTORISTA IN, CD_LINHACAPTACAO */
)
GROUP BY EDS_ENDERECO, ..., NR_CONTACORPESSOA
Antes de imprimir, o sistema pergunta "Deseja Imprimir os Debitos Pendentes do Produtor?" — se "Nao", oculta a regiao regionContasPendentes.
Layout: dist/Relatorios/RCA001_R.rtm.
Modelo 7: Total Entregue por Produtor
Quando usado: combo "Modelo" = "Total Entregue por Produtor" (valor T).
Consolidado simples por produtor no periodo: pessoa + endereco completo + quantidade total de leite entregue (soma de QT_LEITE). Usado para conferencia rapida de producao por fornecedor. Ignora movimentos cancelados (ST_MOVTOLEITE <> 'C').
SQL Base (chamado por GeraRelatorio):
SELECT DISTINCT
CL.CD_PESSOA, P.NM_PESSOA,
SUM(ML.QT_LEITE) QT_LEITE,
CL.CD_EMPRESA||' - '||EMPRESA.NM_EMPRESA CD_EMPRESA,
CAST(NULL AS VARCHAR(25)) NR_RELATORIO,
P.NR_CNPJCPF,
EP.DS_ENDERECO, EP.NR_ENDERECO, EP.DS_BAIRRO, EP.NR_CEP,
M.DS_MUNICIPIO, EP.DS_COMPLEMENTO,
P.DS_OBSERVACAO, LP.CD_LINHACAPTACAO,
COALESCE(EP.DS_ENDERECO,'')||COALESCE(', '||EP.NR_ENDERECO,'')||
COALESCE(' - '||EP.DS_COMPLEMENTO,'')||COALESCE(' - '||EP.DS_BAIRRO,'') DS_ENDERECOCOMPLETO
FROM CAPTACAOLEITE LP
INNER JOIN MOVTOLEITE ML ON (ML.CD_EMPRESA = LP.CD_EMPREMBARQUE AND ML.NR_EMBARQUE = LP.NR_EMBARQUE)
INNER JOIN EMBARQUE EMB ON (EMB.CD_EMPRESA = ML.CD_EMPRESA AND EMB.NR_EMBARQUE = ML.NR_EMBARQUE)
INNER JOIN CONTRATOLEITE CL ON (CL.CD_EMPRESA = ML.CD_EMPRCONTRATO AND CL.NR_CONTRATO = ML.NR_CONTRATO)
INNER JOIN PRODUTORLEITE PL ON (PL.CD_PESSOA = CL.CD_PESSOA AND PL.CD_ENDERECO = CL.CD_ENDERECO)
INNER JOIN PESSOA P ON (P.CD_PESSOA = CL.CD_PESSOA)
LEFT JOIN PESSOA MOT ON (MOT.CD_PESSOA = EMB.CD_MOTORISTA)
INNER JOIN EMPRESA ON (EMPRESA.CD_EMPRESA = CL.CD_EMPRESA)
INNER JOIN ENDERECOPESSOA EP ON (EP.CD_PESSOA = PL.CD_PESSOA AND EP.CD_ENDERECO = PL.CD_ENDERECO)
INNER JOIN MUNICIPIO M ON (M.CD_MUNICIPIO = EP.CD_MUNICIPIO)
WHERE ML.ST_MOVTOLEITE <> 'C'
/* filtro: CL.CD_EMPRESA, CL.DT_COMPETENCIA, CL.CD_PESSOA IN, CL.NR_CONTRATO IN, MOT.CD_PESSOA IN, LP.CD_LINHACAPTACAO */
GROUP BY CL.CD_PESSOA, P.NM_PESSOA, CL.CD_EMPRESA, EMPRESA.NM_EMPRESA, P.NR_CNPJCPF,
EP.DS_ENDERECO, EP.NR_ENDERECO, EP.DS_COMPLEMENTO, EP.DS_BAIRRO, EP.NR_CEP,
M.DS_MUNICIPIO, P.DS_OBSERVACAO, LP.CD_LINHACAPTACAO, DS_ENDERECOCOMPLETO
ORDER BY P.NM_PESSOA
Layout: dist/Relatorios/RCA001_T.rtm (via GeraRelatorio).
Modelo 8: Total Entregue por Linha de Captacao
Quando usado: combo "Modelo" = "Total Entregue por Linha de Captacao" (valor L).
Sumario por linha de captacao: total de leite, preco medio contratado, numero de produtores ativos e media por produtor. Filtra contratos por ST_CONTRATOLEITE = 'V' (se Situacao="Aberto") ou 'F' (se "Fechado").
SQL Base (chamado por GeraRelatorio):
SELECT LP.CD_LINHACAPTACAO||' - '||LP.DS_LINHACAPTACAO NM_LINHACAPTACAO,
CL.CD_EMPRESA||' - '||EMPRESA.NM_EMPRESA CD_EMPRESA,
SUM(ML.QT_LEITE) TT_LEITE,
AVG(CL.VL_CONTRATADO) VL_PRECO,
COUNT(DISTINCT PL.CD_PESSOA) QT_PRODUTORES,
CAST(SUM(ML.QT_LEITE) / COALESCE(NULLIF(COUNT(DISTINCT PL.CD_PESSOA),0),1) AS DOM_NUMERIC15_2) QT_LEITE,
CAST(NULL AS VARCHAR(25)) NR_RELATORIO
FROM EMBARQUE EMB
INNER JOIN CAPTACAOLEITE CP ON (CP.NR_EMBARQUE = EMB.NR_EMBARQUE
AND CP.CD_EMPREMBARQUE = EMB.CD_EMPRESA
AND CP.NR_PLACA = EMB.NR_PLACA)
INNER JOIN MOVTOLEITE ML ON (ML.CD_EMPRESA = CP.CD_EMPREMBARQUE AND ML.NR_EMBARQUE = CP.NR_EMBARQUE)
INNER JOIN CONTRATOLEITE CL ON (CL.CD_EMPRESA = ML.CD_EMPRCONTRATO
AND CL.NR_CONTRATO = ML.NR_CONTRATO
AND CL.ST_CONTRATOLEITE = :ST /* 'V' se Aberto, 'F' se Fechado */)
INNER JOIN PRODUTORLEITE PL ON (PL.CD_PESSOA = CL.CD_PESSOA AND PL.CD_ENDERECO = CL.CD_ENDERECO)
INNER JOIN PESSOA P ON (P.CD_PESSOA = CL.CD_PESSOA)
INNER JOIN LINHACAPTACAO LP ON (CP.CD_LINHACAPTACAO = LP.CD_LINHACAPTACAO)
LEFT JOIN PESSOA MOT ON (MOT.CD_PESSOA = EMB.CD_MOTORISTA)
INNER JOIN EMPRESA ON (EMPRESA.cd_empresa = CL.CD_EMPRESA)
WHERE ML.ST_MOVTOLEITE <> 'C'
/* filtro: empresa, periodo, pessoa IN, contrato IN, motorista IN, linha captacao */
GROUP BY LP.CD_LINHACAPTACAO, LP.DS_LINHACAPTACAO, CL.CD_EMPRESA, EMPRESA.NM_EMPRESA
ORDER BY LP.CD_LINHACAPTACAO
Layout: dist/Relatorios/RCA001_L.rtm (via GeraRelatorio).
Filtros
Campos simples:
- Empresa (Lista de Empresas do usuario —
EMPRESAUSUARIO) F9 — obrigatorio - Competencia (mes/ano no formato MM/AAAA) — obrigatorio exceto no Modelo "Extrato de Contratos" (
N); para modelosM,P,R,T,Lo periodo e expandido paraBETWEEN primeiro e ultimo dia do mes - Modelo (combo) — seleciona entre os 8 modelos acima
- Situacao (combo) — "Aberto" (
A) / "Fechado" (F); default "Fechado". Define filtro do estado de contrato/movimento:- Modelo "R" Simples:
ML.ST_MOVTOLEITE = 'N'(Fechado) ou'A'(Aberto) - Modelos "P"/"M": idem acima
- Modelo "S" Sintetico:
CL.ST_CONTRATOLEITE = 'V'(Aberto) ou'F'(Fechado) - Modelo "T":
CL.ST_CONTRATOLEITE <> 'F'(Aberto) ou= 'F'(Fechado)
- Modelo "R" Simples:
- Ordenacao (combo, so aparece no Modelo "N") — Nome Pessoa (
N) / Código Pessoa (E) / Nome Municipio (M); default "Nome Pessoa" - Rota (codigo da Linha de Captacao) F9 — lookup em
LINHACAPTACAO - Dia de Pagamento (1 a 31) — filtra por
EXTRACT(DAY FROM PL.DT_PAGAMENTO) - Quebra por Motorista (checkbox, so aparece no Modelo "P") — acrescenta quebra por motorista na matriz diaria
Filtros de grid (multi-selecao via F9):
- Pessoas (gridPessoa) F9 — Lista de Produtores de Leite (
PRODUTORLEITE); multi-selecao de produtores a incluir no relatorio (filtraCD_PESSOA IN (...)) - Contratos (gridContrato) — multi-selecao de contratos especificos (
NR_CONTRATO IN (...)) - Motoristas (gridMotorista) F9 — Lista de Motoristas (
MOTORISTAviaPESSOA); multi-selecao de motoristas (CD_MOTORISTA IN (...))
Parametros que Influenciam
| Tabela | Campo | Efeito |
|---|---|---|
| PARMLEITE | DS_OBSERVACAO | Mensagem institucional impressa no rodape do extrato (coluna DS_MENSAGEM nos Modelos 1, 2 e 5). |
| PARMFATUR | DS_LOGOTIPO | Logotipo da empresa impresso no cabecalho do relatorio (todos os modelos). |
| USUARIOEMPRESA | CD_EMPRESA + CD_USUARIO | Restringe F9 de Empresa apenas as empresas as quais o usuario logado tem acesso. |
Perguntas Frequentes
P: Qual é a finalidade da tela RCA001? R: A tela RCA001 é utilizada para gerar relatórios referentes aos contratos de leite. Ela oferece oito modelos de relatório: Extrato de Contratos, Compra de Leite por Motorista, Compra de Leite por Produtor, Contratos Sintético, Extrato de Contratos Simples, Total Entregue por Produtor, Total Entregue por Linha de Captação e Extrato de Contratos com Incentivos. O usuário define os filtros desejados (empresa, competência, situação, rota, produtores, motoristas, contratos) e pressiona Imprimir (F8) para gerar o relatório.
P: Como selecionar os diferentes modelos de relatório disponíveis? R: No campo "Modelo", selecione a opção desejada entre as oito disponíveis. Cada modelo gera um relatório com agrupamentos e informações diferentes. Por exemplo, "Compra de Leite por Motorista" agrupa os dados por motorista, enquanto "Total Entregue por Linha de Captação" agrupa por linha de coleta. O campo "Ordenação" (visível apenas para o modelo "Extrato de Contratos") permite ordenar por Nome da Pessoa, Código da Pessoa ou Nome do Município.
P: Como filtrar o relatório por uma linha de captação específica? R: Preencha o campo "Rota" com o código da linha de captação desejada. Pressione F9 no campo para abrir a lista de linhas de captação cadastradas. Caso deseje filtrar também por dia de pagamento, preencha o campo "Dia de Pagamento" com o número do dia (entre 1 e 31).
P: Ao tentar imprimir, o sistema apresenta a mensagem "A Empresa deve ser Informada!". Como devo proceder? R: O campo "Empresa" é obrigatório para a emissão do relatório. Informe um código de empresa válido no campo correspondente. Utilize a tecla F9 para pesquisar as empresas disponíveis para o seu usuário.
P: O sistema exibe a mensagem "A Data de Competência deve ser informada!". Quando isso acontece? R: Esta mensagem aparece quando o campo "Competência" não está preenchido e o modelo de relatório selecionado é diferente de "Extrato de Contratos". Para todos os demais modelos, é obrigatório informar o período de competência no formato MM/AAAA.
P: Recebi a mensagem "O Relatório não retornou Registros! Verifique os Filtros.". O que devo fazer? R: Esta mensagem indica que não foram encontrados dados que correspondam aos filtros aplicados. Revise os critérios de filtragem (empresa, competência, produtores, contratos, rotas) e amplie ou ajuste o intervalo para incluir registros existentes no sistema.
P: Ao selecionar o modelo "Extrato de Contratos Simples", o sistema pergunta "Deseja Imprimir os Débitos Pendentes do Produtor?". O que significa? R: Trata-se de uma confirmação do sistema antes da impressão. Ao clicar em "Sim", o relatório incluirá uma seção com as contas pendentes do produtor. Ao clicar em "Não", essa seção será ocultada no relatório.
P: Ao informar um produtor, recebo a mensagem "O Produtor não Está Cadastrado. Verifique! [TCA001]". Como resolver? R: O código informado não corresponde a um produtor de leite ativo no sistema. Verifique se o código está correto e se o produtor está cadastrado e com status ativo na tela Cadastro de Produtores de Leite (TCA001).
P: O sistema apresenta a mensagem "Motorista não Está Cadastrado! Verifique [TTR005]". O que devo fazer? R: O código do motorista informado não foi encontrado ou o motorista não está ativo. Acesse a tela Cadastro de Motoristas (TTR005) para verificar se o motorista está cadastrado e com status ativo.
P: Recebi a mensagem "A Linha de Captação não está cadastrado! Verifique [TCA005]". Como resolver? R: O código informado no campo "Rota" não corresponde a nenhuma linha de captação cadastrada. Acesse a tela Cadastro de Linhas de Captação (TCA005) para verificar os códigos existentes ou cadastrar uma nova linha.
P: O sistema apresenta a mensagem "A Empresa não está Cadastrada! Verifique [ADM002]". O que significa? R: O código de empresa informado não existe no sistema ou o usuário atual não possui acesso a esta empresa. Verifique o código na tela Cadastro de Empresas/Usuários (ADM002) e confirme que seu usuário possui permissão de acesso.
P: Ao preencher o campo "Dia de Pagamento", recebo a mensagem "Informe Apenas Números!". Como corrigir? R: O campo "Dia de Pagamento" aceita apenas valores numéricos. Remova quaisquer caracteres não numéricos e informe apenas o número do dia desejado.
P: Recebi a mensagem "O Dia Informado Deve ser Positivo!" ou "O Dia Informado Deve Maior que Zero!" ao preencher o dia de pagamento. O que fazer? R: O valor informado no campo "Dia de Pagamento" deve ser um número entre 1 e 31. Informe um valor positivo e maior que zero.
P: O sistema exibe "O Dia Informado Deve ser Menor que 31!" ao preencher o dia de pagamento. Como resolver? R: O valor informado excede o limite máximo de 31 dias. Informe um número entre 1 e 31 no campo "Dia de Pagamento".
Mensagens exibidas
Levantadas de source/RCA001/ pela camada 0 (commit 96fc51e236).
Mais 13 mensagens com texto literal no código: RCA001.
Tabelas de Escrita (INSERT/UPDATE/DELETE)
Nenhuma — RCA001 e um relatorio puramente consumidor. A unica gravacao (via GravaRelatorio) e o registro de auditoria em RELATORIO (feito pelo framework jReport, nao pelo módulo).
Tabelas de Leitura (SELECT)
| Tabela | Operacoes |
|---|---|
| AGENCIA | SELECT |
| ANALISE | SELECT |
| ANALISELEITE | SELECT |
| BANCO | SELECT |
| CAPTACAOLEITE | SELECT |
| CONTACORPESSOA | SELECT |
| CONTAS | SELECT |
| CONTASHISTORICO | SELECT |
| CONTRATOLEITE | SELECT |
| EMBARQUE | SELECT |
| EMPRESA | SELECT |
| ENDERECOPESSOA | SELECT |
| FECHAMENTOCONTRATO | SELECT |
| FECHAMENTODEBITO | SELECT |
| FORMAPAGTO | SELECT |
| HISTORICO | SELECT |
| ITEM | SELECT |
| LINHACAPTACAO | SELECT |
| MOTORISTA | SELECT |
| MOVTOLEITE | SELECT |
| MUNICIPIO | SELECT |
| PARMFATUR | SELECT |
| PARMLEITE | SELECT |
| PESSOA | SELECT |
| PRODUTORLEITE | SELECT |
| ROTACAPTACAO | SELECT |
| USUARIOEMPRESA | SELECT |
Procedures Chamadas
| Procedure | Tabelas Acessadas |
|---|---|
| CALCULA_INCENTIVOANALISE | ANALISE, ANALISELEITE, INCENTIVOPRODUCAO, RESULTADOANALISE (SELECT) |
| CALCULA_INCENTIVOPRODUCAO | CONTRATOLEITE, FECHAMENTOCONTRATO, INCENTIVOPRODUCAO, MOVTOLEITE (SELECT) |
| FORMATA_ANALISE | ANALISE, ANALISELEITE, ITEMTABDESCLEITE, TABDESCLEITE (SELECT) |
| MES_EXTENSO | - |
| RETORNA_DADOSCADASTRAIS | ENDERECOPESSOA, ESTADO, MUNICIPIO, PAISBACEN, PESSOA, PESSOAFISICA (SELECT) |
| SALDO_CONTRATOLEITE | CONTRATOLEITE, FECHAMENTOCONTRATO, MOVTOFECHAMENTOCONTR, MOVTOLEITE (SELECT) |
| VALOR_EXTENSO | - |
| VIEW_RCA001 | CAPTACAOLEITE, CONTRATOLEITE, EMBARQUE, EMPRESA, LINHACAPTACAO, MOVTOLEITE, PESSOA, PRODUTORLEITE, ROTACAPTACAO (SELECT) |
Tabelas via Procedures (acesso indireto)
| Tabela | Operacoes |
|---|---|
| ANALISE | SELECT |
| ANALISELEITE | SELECT |
| AREACOMERCIAL | SELECT |
| CAPTACAOLEITE | SELECT |
| COMPLEMENTOLEITE | SELECT |
| CONDENACAOLEITE | SELECT |
| CONTAS | SELECT |
| CONTRATOLEITE | SELECT |
| EMPRESA | SELECT |
| ENDERECOPESSOA | SELECT |
| ESTADO | SELECT |
| ESTRUTURAPROPRIEDADERURAL | SELECT |
| FECHAMENTOCONTRATO | SELECT |
| FORMAPAGTO | SELECT |
| GRUPOPCP | SELECT |
| IMPOSTO | SELECT |
| IMPOSTONOTA | SELECT |
| INCENTIVOPRODUCAO | SELECT |
| ITEMTABDESCLEITE | SELECT |
| LINHACAPTACAO | SELECT |
| MOVTOFECHAMENTOCONTR | SELECT |
| MOVTOLEITE | SELECT |
| MOVTOLEITENOTA | SELECT |
| MUNICIPIO | SELECT |
| NOTA | SELECT |
| PAISBACEN | SELECT |
| PARMFATUR | SELECT |
| PARMLEITE | SELECT |
| PESSOA | SELECT |
| PESSOAFISICA | SELECT |
| PRODUTORESTRUTURA | SELECT |
| PRODUTORLEITE | SELECT |
| REGIAOCOMERCIAL | SELECT |
| RESULTADOANALISE | SELECT |
| ROTACAPTACAO | SELECT |
| TABDESCLEITE | SELECT |
| TRANSFERENCIALEITE | SELECT |
Dependencias Aferentes (quem alimenta esta tela)
Telas que escrevem em tabelas lidas por RCA001. Top 30 (de 583 telas consumidoras — ver IMPACT-MAP para lista completa).
| Tela | Título | Tabelas em Comum |
|---|---|---|
| CNF001 | Consulta de Notas Fiscais | CONTAS, EMBARQUE, EMPRESA, ITEM, PESSOA |
| MCA012 | Consulta/Alteracao de Lancamento diario de Leite | CAPTACAOLEITE, CONTRATOLEITE, EMPRESA, MOVTOLEITE, PESSOA |
| MNF001 | Recebimento de Notas Fiscais de Compra | EMBARQUE, EMPRESA, ENDERECOPESSOA, ITEM, PESSOA |
| MNF011 | Alteracao de Comissoes | CONTAS, EMPRESA, ENDERECOPESSOA, ITEM, PESSOA |
| MNF030 | (sem titulo) | EMBARQUE, EMPRESA, ENDERECOPESSOA, ITEM, PESSOA |
| MPD010 | Ordem de Carregamento | EMBARQUE, EMPRESA, FORMAPAGTO, MUNICIPIO, PESSOA |
| RNF005 | Demonstrativo de Notas Fiscais | EMPRESA, HISTORICO, ITEM, MOTORISTA, PESSOA |
| TFA006 | Tabelas de Preco | EMPRESA, FORMAPAGTO, ITEM, PARMFATUR, PESSOA |
| CNF012 | Consulta de CTRC | CONTAS, EMPRESA, ITEM, PESSOA |
| CPD008 | (sem titulo) | CONTAS, EMPRESA, ITEM, PESSOA |
| MCA004 | Fechamento de Contratos | CONTAS, EMPRESA, FECHAMENTOCONTRATO, FECHAMENTODEBITO |
| MCA013 | (sem titulo) | CONTAS, EMPRESA, FECHAMENTOCONTRATO, FECHAMENTODEBITO |
| MCB015 | Envio de Email | EMPRESA, FORMAPAGTO, MUNICIPIO, PESSOA |
| MFC009 | Alteracao de Duplicatas | CONTAS, CONTASHISTORICO, HISTORICO, PESSOA |
| MFC019 | Reparcelamento de Contas | CONTAS, CONTASHISTORICO, EMPRESA, PESSOA |
| MPD011 | Confirmacao Ordem Carregamento | CONTAS, EMBARQUE, EMPRESA, PESSOA |
| MPD046 | (sem titulo) | CONTAS, EMPRESA, ITEM, PESSOA |
| MRC019 | Ordem de Carregamento Recapadora | EMBARQUE, EMPRESA, MUNICIPIO, PESSOA |
| MRC020 | Confirmacao de Ordem de Carregamento Recapadora | CONTAS, EMBARQUE, EMPRESA, PESSOA |
| MRC048 | Montagem Ordem Carregamento Automatica - Pre-Faturamento | EMBARQUE, EMPRESA, MUNICIPIO, PESSOA |
| MRC049 | Faturamento Automatico de Ordem de Carregamento | CONTAS, EMBARQUE, EMPRESA, PESSOA |
| RNF002 | Comissao sobre Notas Fiscais | EMPRESA, HISTORICO, ITEM, PESSOA |
| RNF004 | Relacao de Notas Fiscais | EMPRESA, ITEM, MUNICIPIO, PESSOA |
| RNF040 | Vendas Agrupadas por Produtos | EMPRESA, ITEM, MUNICIPIO, PESSOA |
| CCO001 | Consulta de Cotacoes | EMPRESA, ITEM, PESSOA |
| CFC001 | Contas / Cheques / Adiantamentos | CONTASHISTORICO, HISTORICO, PESSOA |
| CNF002 | Troca de Mercadorias | EMPRESA, ITEM, PESSOA |
| CNF005 | Analise de Produtos para Compra | EMPRESA, ITEM, PESSOA |
| CNF008 | Demonstrativo de Margens sobre Vendas | EMPRESA, ITEM, PESSOA |
| CNF011 | Consulta de NFS-e | EMPRESA, ITEM, PESSOA |
Aferentes diretas do dominio Captacao (principais alimentadores): MCA001 Contratos (CONTRATOLEITE), MCA002 Movtos de Leite (MOVTOLEITE), MCA004 Fechamento de Contratos (FECHAMENTOCONTRATO, FECHAMENTODEBITO, CONTAS), MCA012 Lancamento diario de Leite (MOVTOLEITE, CAPTACAOLEITE), CAP001 Parametros de Captacao (PARMLEITE), TCA001 Produtor de Leite (PRODUTORLEITE), TCA005 Linha de Captacao (LINHACAPTACAO), MCA003 Embarque (EMBARQUE), TTR005 Motorista (MOTORISTA).
+553 telas demais alimentam tabelas comuns (PESSOA, EMPRESA, MUNICIPIO, ITEM, CONTAS) — ver
docs/screens/IMPACT-MAP.mdpara lista exaustiva.
Dependencias Eferentes (quem consome dados desta tela)
Nenhuma — RCA001 nao escreve em tabelas de negocio (apenas gera arquivos .raf de relatorio e grava metadata de auditoria em RELATORIO via framework). Nao ha telas que consumam dados produzidos por este módulo.
Regras de Negocio
- Empresa obrigatoria — validacao no inicio do
btnImprimir.OnClick(W-0000: A Empresa deve ser Informada!). F9 usaEMPRESAUSUARIOfiltrando pelo usuario logado. - Competencia obrigatoria para modelos nao-"N" — quando o modelo nao e "Extrato de Contratos" (
N), a competencia e obrigatoria; caso nao preenchida, exibeW-0000: A Data de Competencia deve ser informada!. - Dia de Pagamento — aceita apenas numero inteiro entre 1 e 31; validacao no
tabFILTRODIA_PAGTOValidate. - Validacao de Produtor — ao digitar codigo no grid de Pessoas, verifica existencia em
PESSOA INNER JOIN PRODUTORLEITEcomST_ATIVO = 'S'. Se nao encontrado:W-0000: O Produtor nao Esta Cadastrado. Verifique! [TCA001]. - Validacao de Motorista — consulta
PESSOA INNER JOIN MOTORISTAcomST_ATIVA = 'S'. Se nao encontrado:W-0000: Motorista nao Esta Cadastrado! Verifique [TTR005]. - Validacao de Rota — consulta
LINHACAPTACAO.CD_LINHACAPTACAO. Se nao encontrada:W-0000: A Linha de Captacao nao esta cadastrado! Verifique [TCA005]. - Registro de Relatório — todo relatorio gerado (qualquer modelo) registra metadata em RELATORIO via
GravaRelatorio(transaction, nm_relatorio, sql, now, cd_empresa, cd_usuario). ONR_RELATORIOretornado substitui o placeholderCAST(NULL AS VARCHAR(25))no SQL viaStringReplace. - Arquivamento fisico — cada relatorio e salvo como
.rafemsessao.Path\Relatórios\<nm_relatorio>_<NR_RELATORIO>.rafantes de ser exibido no visualizador (CarregaVisualizador). - Layout customizavel — o arquivo
.rtme buscado primeiro emsessao.Path\Custom\<nm_relatorio>.RTM; se nao existir, usasessao.Path\<nm_relatorio>.RTM. Permite customizacao do layout por cliente sem mudar o deploy padrao. - Quebra por Motorista so no Modelo "P" — checkbox
chkQuebraMotoristaso fica visivel quandoTP_MODELO = 'P'(Compra de Leite por Produtor). - Ordenacao so no Modelo "N" — o combo "Ordenacao" so fica visivel para o Modelo padrao (
N- Extrato de Contratos); os demais modelos tem ordenacao fixa no SQL. - Modelo "R" pergunta sobre Debitos Pendentes — antes de imprimir o Extrato Simples, a tela exibe
C-0000: Deseja Imprimir os Debitos Pendentes do Produtor?; se "Nao", oculta a regiaoregionContasPendentesdo layout. - AfterScroll carrega detalhe por contrato (Modelo R) — quando
tabLEITEmuda de registro, o eventotabLEITEAfterScrollrecarregatabMovimentacao,tabCREDITO,tabDEBITOetabContasPendentepara o contrato corrente. E este mecanismo que alimenta as regioes de sub-relatorio. - Filtro de Situacao se comporta diferente por modelo — "Aberto"/"Fechado" aplica a
ML.ST_MOVTOLEITE(A/N) nos modelos R/P/M e aCL.ST_CONTRATOLEITE(V/F ou<>F) nos modelos S/T.
Datasets e SQL
| Dataset | Papel |
|---|---|
tabFILTRO | ClientDataSet em memoria com filtros da UI (CD_EMPRESA, DT_COMPETENCIA, CD_ROTA, TP_MODELO, ST_CONTRATO, ST_ORDENACAO, DIA_PAGTO, QB_MOTORISTA). |
cdsPessoa | ClientDataSet com lista de produtores selecionados via F9 no grid "Pessoas". |
cdsContrato | ClientDataSet com contratos selecionados no grid "Contratos". |
tabMOTORISTA | Motoristas selecionados no grid "Motoristas". |
Contrato | Dataset principal dos modelos 1/2 (Extrato analitico) e 5 (Sintetico). Popula o relatorio Extrato ou Sintetico. |
tabLEITE | Dataset principal do modelo 6 (Simples). Ao scroll, carrega sub-queries de debito/credito/pendentes/movimentação. |
tabCOMPRAMOT | Dataset dos modelos 3 e 4 (Matriz diaria por motorista/produtor) — usa VIEW_RCA001. |
tabCREDITO | Sub-relatorio: pagamentos/creditos do produtor (CONTAS com TP_CONTAS='R'). |
tabDEBITO | Sub-relatorio: descontos/debitos (CONTAS com TP_CONTAS='P'). |
tabContasPendente | Contas em aberto do produtor (sem baixa). |
tabAnalise | Analise de qualidade do leite (gordura, proteina, CCS, CBT) via FORMATA_ANALISE. |
tabResumo | Totais agregados do contrato (QT_RECEBIDA, QT_TRANSFENTRADA, QT_TRANSFSAIDA, QT_CONDENADO, QT_DEVOLUCAO, VL_PRECO, VL_IMPOSTO, VL_FRETE, VL_DESPESA, VL_SALDO). |
tabINCENTIVO / tabDemonstrativo | Incentivos calculados via CALCULA_INCENTIVOANALISE / CALCULA_INCENTIVOPRODUCAO (Modelo "E"). |
tabMovimentacao | Detalhamento dia-a-dia de movimentação do contrato. |
tabContas | Contas consolidadas (credito/debito/total) do contrato. |
Reports ReportBuilder: Extrato (Modelo N/E), Sintetico (S), CompraMot (M), CompraProd (P), Relatório (R). Modelos T e L delegam para helper GeraRelatorio (framework jReport).
Modelos de Relatório
Selecionados pelo combobox "Modelo" (campo TP_MODELO em tabFILTRO). Conforme o modelo escolhido, o handler btnImprimir.OnClick monta um SQL diferente, carrega um .rtm especifico e grava um registro em RELATORIO via GravaRelatorio.
Modelo 1: Extrato de Contratos
Quando usado: combo "Modelo" = "Extrato de Contratos" (valor N, default).
Layout analitico completo por contrato (RCA001.rtm). Mostra cabecalho com empresa, endereco e dados do produtor; total recebido, transferencias de entrada/saida, devolucoes, condenacoes, indenizacao, quitacao; credito (pagamentos recebidos), debitos (impostos, descontos, adiantamentos, insumos, frete), analise de qualidade do leite (gordura, proteina, CCS, CBT) e recibo juridico em extenso. E o relatorio entregue ao produtor no fechamento mensal.
SQL Base (dataset Contrato):
SELECT EMP.NM_EMPRESA, C.CD_EMPRESA, C.NR_CONTRATO, C.DT_COMPETENCIA, C.CD_PESSOA,
C.CD_ENDERECO, EP.DS_ENDERECO, FE.DT_FECHAMENTO, C.DT_ABERTURA,
CASE WHEN C.ST_CONTRATOLEITE = 'V' THEN 'Valido'
WHEN C.ST_CONTRATOLEITE = 'C' THEN 'Cancelado'
WHEN C.ST_CONTRATOLEITE = 'F' THEN 'Fechado' END ST_CONTRATO,
C.CD_FORMAPAGTO, C.DT_VENCTOPAGTO, C.VL_FRETE, C.VL_DESPESA,
P.NM_PESSOA||' - '||P.CD_PESSOA NM_PESSOA, P.NR_CNPJCPF,
FPG.DS_FORMAPAGTO,
MUNICIPIO.DS_MUNICIPIO||' - '||MUNICIPIO.SG_ESTADO DS_MUNICIPIO,
COALESCE(EP.NR_FONE, EP.NR_CELULAR, EP.NR_FAX) NR_FONE,
(SELECT DS_OBSERVACAO FROM PARMLEITE WHERE CD_EMPRESA = C.CD_EMPRESA) DS_MENSAGEM,
MIN((SELECT EMB.CD_MOTORISTA FROM EMBARQUE EMB
WHERE EMB.NR_EMBARQUE = ML.NR_EMBARQUE
AND EMB.CD_EMPRESA = ML.CD_EMPRESA
/* filtro opcional de motorista */)) CD_MOTORISTA,
CI.OQT_INCENTIVO QT_INCENTIVO,
'Recebi de '||EMP.NM_EMPRESA||', a importancia... de R$ '||FE.VL_SALDO||
' ('||VL.O_VALOR||'), referente ao meu fornecimento de '||FE.QT_FECHAMENTO||
' litros de Leite cru in natura durante o mes de '||M.O_DS_MES||' de '||
COPIA_TEXTO(C.DT_COMPETENCIA, 4, 7)||'. ...' RECIBO,
((SELECT OQT_SALDO FROM SALDO_CONTRATOLEITE('C', C.CD_EMPRESA, C.NR_CONTRATO, NULL)) +
(SELECT OQT_SALDO FROM SALDO_CONTRATOLEITE('T', C.CD_EMPRESA, C.NR_CONTRATO, NULL))) QT_RECEBIDA,
CAST(NULL AS VARCHAR(25)) NR_RELATORIO,
RD.DS_ENDERECO EDS_ENDERECO, RD.DS_MUNICIPIO||'/'||RD.SG_ESTADO EDS_MUNICIPIO,
RD.NR_CEP ENR_CEP, RD.DS_EMAIL EDS_EMAIL, RD.DS_SITE EDS_SITE,
RD.NR_CNPJCPF ENR_CNJPCPF, RD.NR_INSCEST ENR_INSCEST,
COALESCE(RD.NR_FONE, RD.NR_FAX, RD.NR_CELULAR) ENR_FONE,
PF.DS_LOGOTIPO
FROM CONTRATOLEITE C
INNER JOIN PESSOA P ON (C.CD_PESSOA = P.CD_PESSOA)
INNER JOIN ENDERECOPESSOA EP ON (EP.CD_PESSOA = C.CD_PESSOA AND EP.CD_ENDERECO = C.CD_ENDERECO)
INNER JOIN FORMAPAGTO FPG ON (FPG.CD_FORMAPAGTO = C.CD_FORMAPAGTO)
INNER JOIN MUNICIPIO ON (MUNICIPIO.CD_MUNICIPIO = EP.CD_MUNICIPIO)
INNER JOIN EMPRESA ON (EMPRESA.CD_EMPRESA = C.CD_EMPRESA)
INNER JOIN PARMFATUR PF ON (PF.CD_EMPRESA = EMPRESA.CD_EMPRESA)
LEFT JOIN RETORNA_DADOSCADASTRAIS(EMPRESA.CD_PESSOA, NULL) RD ON (1=1)
LEFT JOIN FECHAMENTOCONTRATO FE ON (FE.CD_EMPRESA = C.CD_EMPRESA
AND FE.NR_CONTRATO = C.NR_CONTRATO
AND FE.DT_CANCELAMENTO IS NULL
AND FE.NR_SEQUENCIAL = (SELECT MAX(NR_SEQUENCIAL)
FROM FECHAMENTOCONTRATO
WHERE CD_EMPRESA = C.CD_EMPRESA
AND NR_CONTRATO = C.NR_CONTRATO
AND DT_CANCELAMENTO IS NULL))
INNER JOIN EMPRESA EMP ON (EMP.CD_EMPRESA = C.CD_EMPRESA)
INNER JOIN MOVTOLEITE ML ON (ML.CD_EMPRCONTRATO = C.CD_EMPRESA
AND ML.NR_CONTRATO = C.NR_CONTRATO)
INNER JOIN CAPTACAOLEITE CPL ON (CPL.CD_EMPREMBARQUE = C.CD_EMPRESA
AND CPL.NR_PLACA = ML.NR_PLACA
AND CPL.NR_EMBARQUE = ML.NR_EMBARQUE)
INNER JOIN ROTACAPTACAO R ON (R.NR_PLACA = CPL.NR_PLACA
AND R.CD_LINHACAPTACAO = CPL.CD_LINHACAPTACAO)
INNER JOIN LINHACAPTACAO LP ON (LP.CD_LINHACAPTACAO = R.CD_LINHACAPTACAO)
LEFT JOIN MES_EXTENSO('01.'||REPLACE(C.DT_COMPETENCIA,'/','.')) M ON (1=1)
LEFT JOIN VALOR_EXTENSO(FE.VL_SALDO) VL ON (1=1)
LEFT JOIN CALCULA_INCENTIVOPRODUCAO(C.CD_EMPRESA, C.NR_CONTRATO, NULL, NULL) CI ON (1=1)
/* WHERE dinamico: ML.ST_MOVTOLEITE, CD_EMPRESA, DT_COMPETENCIA,
CD_PESSOA IN (...), NR_CONTRATO IN (...),
CD_MOTORISTA IN (...), CD_LINHACAPTACAO */
GROUP BY ...
ORDER BY NM_PESSOA | CD_PESSOA | DS_MUNICIPIO
Sub-relatorios auxiliares populados via AfterScroll do tabLEITE (no modelo "R") e tabLEITEAfterScroll: tabCREDITO, tabDEBITO, tabContasPendente, tabMovimentacao, tabAnalise, tabResumo, tabINCENTIVO, tabDemonstrativo.
Layout: dist/Relatórios/RCA001.rtm (ou Custom/RCA001.rtm).
Modelo 2: Extrato de Contratos / Incentivos
Quando usado: combo "Modelo" = "Extrato de Contratos / Incentivos" (valor E).
Variante do Modelo 1 com secao adicional de incentivos/bonificacoes por analise (gordura, proteina, volume). SQL base identico ao Modelo 1; diferenca esta no layout .rtm que inclui a regiao de incentivos alimentada por tabINCENTIVO e tabDemonstrativo via procedures CALCULA_INCENTIVOANALISE / CALCULA_INCENTIVOPRODUCAO.
Layout: dist/Relatórios/RCA001_E.rtm.
Modelo 3: Compra de Leite por Motorista
Quando usado: combo "Modelo" = "Compra de Leite por Motorista" (valor M).
Planilha diaria (dias 1 a 31) da competencia agrupada por motorista e linha de captacao. Cada linha do relatorio e um motorista; colunas mostram litros coletados por dia do mes. Usado para controle operacional da frota.
SQL Base (dataset tabCOMPRAMOT):
SELECT SUM(V.V_QT_DIA1) V_QT_DIA1, ... SUM(V.V_QT_DIA31) V_QT_DIA31,
V.V_NM_MOTORISTA, V.V_NR_PLACAMOTORISTA,
CAST(NULL AS VARCHAR(2)) NM_PRODUTOR,
V.V_TP_MOTIVOLEITE,
V.V_DS_LINHACAPTACAO, V.V_CD_LINHACAPTACAO,
SUM(V.QT_TOTALEMPRESA) QT_TOTALEMPRESA,
NM_EMPRESA, DS_ENDERECO, DS_MUNICIPIOBAIRRO, NR_FONE, DS_SITE,
DS_LOGOTIPO, DS_EMAIL, NR_INSCESTAD, NR_CPFCNPJ, ODT_COMPETENCIA,
CAST(NULL AS VARCHAR(25)) NR_RELATORIO
FROM VIEW_RCA001(:CD_EMPRESA, NULL, 'M', :FILTRO) V
GROUP BY V.V_TP_MOTIVOLEITE, V.V_DS_LINHACAPTACAO, V.V_CD_LINHACAPTACAO,
V.V_NM_MOTORISTA, V.V_NR_PLACAMOTORISTA, NM_EMPRESA,
DS_ENDERECO, DS_MUNICIPIOBAIRRO, NR_FONE, DS_SITE, DS_LOGOTIPO,
DS_EMAIL, NR_INSCESTAD, NR_CPFCNPJ, ODT_COMPETENCIA
ORDER BY V.V_CD_LINHACAPTACAO, V.V_NM_MOTORISTA
Layout: dist/Relatórios/RCA001_M.rtm.
Modelo 4: Compra de Leite por Produtor
Quando usado: combo "Modelo" = "Compra de Leite por Produtor" (valor P).
Mesma matriz diaria (dias 1 a 31) do Modelo 3, porem agrupada por produtor (CD_PESSOA). Quando o checkbox "Quebra por Motorista" esta marcado (QB_MOTORISTA = 'T'), acrescenta quebra intermediaria por motorista (V_NM_MOTORISTA).
SQL Base (dataset tabCOMPRAMOT):
SELECT SUM(V.V_QT_DIA1) V_QT_DIA1, ... SUM(V.V_QT_DIA31) V_QT_DIA31,
/* se Quebra por Motorista: V.V_NR_PLACAMOTORISTA, V.V_TP_MOTIVOLEITE, */
(LIST(DISTINCT ' '||V.V_CD_LINHACAPTACAO||' - '||V.V_DS_LINHACAPTACAO)) V_DS_LINHACAPTACAO,
SUM(V.QT_TOTALEMPRESA) QT_TOTALEMPRESA,
NM_EMPRESA, DS_ENDERECO, DS_MUNICIPIOBAIRRO, NR_FONE, DS_SITE,
DS_LOGOTIPO, DS_EMAIL, NR_INSCESTAD, NR_CPFCNPJ,
CD_PRODUTOR||' - '||V.NM_PRODUTOR NM_PRODUTOR,
ODT_COMPETENCIA,
CAST(NULL AS VARCHAR(25)) NR_RELATORIO
FROM VIEW_RCA001(:CD_EMPRESA, NULL, 'M', :FILTRO) V
GROUP BY V.V_TP_MOTIVOLEITE, /* se Quebra: V.V_NR_PLACAMOTORISTA, */
NM_EMPRESA, DS_ENDERECO, DS_MUNICIPIOBAIRRO, NR_FONE, DS_SITE,
DS_LOGOTIPO, DS_EMAIL, CD_PRODUTOR, NR_INSCESTAD, NR_CPFCNPJ,
V.NM_PRODUTOR, ODT_COMPETENCIA
/* se Quebra: , V.V_NM_MOTORISTA */
ORDER BY NM_PRODUTOR /* se Quebra: , V.V_NM_MOTORISTA */
Layout: dist/Relatórios/RCA001_P.rtm.
Modelo 5: Contratos - Sintetico
Quando usado: combo "Modelo" = "Contratos - Sintetico" (valor S).
Lista 1 linha por contrato do periodo (sem detalhamento de movimentos). Rapido para visao geral de contratos fechados/validos.
SQL Base (dataset Contrato):
SELECT DISTINCT EMP.NM_EMPRESA, CL.CD_EMPRESA, CL.NR_CONTRATO, CL.DT_COMPETENCIA,
CL.CD_PESSOA, CL.CD_ENDERECO, EP.DS_ENDERECO, FE.DT_FECHAMENTO, CL.DT_ABERTURA,
CASE WHEN CL.ST_CONTRATOLEITE = 'V' THEN 'Valido'
WHEN CL.ST_CONTRATOLEITE = 'C' THEN 'Cancelado'
WHEN CL.ST_CONTRATOLEITE = 'F' THEN 'Fechado' END ST_CONTRATO,
((100.00*300)*0) QT_INCENTIVO,
CL.CD_FORMAPAGTO, CL.DT_VENCTOPAGTO, CL.VL_FRETE, CL.VL_DESPESA,
P.NM_PESSOA||' - '||P.CD_PESSOA NM_PESSOA, P.NR_CNPJCPF,
FPG.DS_FORMAPAGTO,
MUNICIPIO.DS_MUNICIPIO||' - '||MUNICIPIO.SG_ESTADO DS_MUNICIPIO,
COALESCE(EP.NR_FONE, EP.NR_CELULAR, EP.NR_FAX) NR_FONE,
(SELECT DS_OBSERVACAO FROM PARMLEITE WHERE CD_EMPRESA = CL.CD_EMPRESA) DS_MENSAGEM,
(SELECT MIN(EMB.CD_MOTORISTA) FROM EMBARQUE EMB
INNER JOIN MOVTOLEITE MV ON (EMB.NR_EMBARQUE = MV.NR_EMBARQUE
AND EMB.CD_EMPRESA = MV.CD_EMPRESA)
WHERE MV.NR_CONTRATO = CL.NR_CONTRATO
AND MV.CD_EMPRESA = CL.CD_EMPRESA /* filtro motorista */) CD_MOTORISTA,
'' RECIBO,
CAST(NULL AS NUMERIC(15,2)) QT_RECEBIDA,
CAST(NULL AS VARCHAR(25)) NR_RELATORIO,
RD.DS_ENDERECO EDS_ENDERECO, ..., PF.DS_LOGOTIPO
FROM CONTRATOLEITE CL
INNER JOIN PRODUTORLEITE PL ON (PL.CD_PESSOA = CL.CD_PESSOA AND PL.CD_ENDERECO = CL.CD_ENDERECO)
INNER JOIN PESSOA P ON (CL.CD_PESSOA = P.CD_PESSOA)
INNER JOIN ENDERECOPESSOA EP ON (EP.CD_PESSOA = CL.CD_PESSOA AND EP.CD_ENDERECO = CL.CD_ENDERECO)
INNER JOIN FORMAPAGTO FPG ON (FPG.CD_FORMAPAGTO = CL.CD_FORMAPAGTO)
INNER JOIN MUNICIPIO ON (MUNICIPIO.CD_MUNICIPIO = EP.CD_MUNICIPIO)
LEFT JOIN FECHAMENTOCONTRATO FE ON (FE.CD_EMPRESA = CL.CD_EMPRESA
AND FE.NR_CONTRATO = CL.NR_CONTRATO
AND FE.DT_CANCELAMENTO IS NULL
AND FE.NR_SEQUENCIAL = (SELECT MAX(NR_SEQUENCIAL) ...))
INNER JOIN EMPRESA EMP ON (EMP.CD_EMPRESA = CL.CD_EMPRESA)
INNER JOIN PARMFATUR PF ON (PF.CD_EMPRESA = EMP.CD_EMPRESA)
LEFT JOIN RETORNA_DADOSCADASTRAIS(EMP.CD_PESSOA, NULL) RD ON (1=1)
LEFT JOIN MOVTOLEITE MV ON (MV.NR_CONTRATO = CL.NR_CONTRATO AND MV.CD_EMPRESA = CL.CD_EMPRESA)
LEFT JOIN EMBARQUE EMB ON (EMB.NR_EMBARQUE = MV.NR_EMBARQUE AND EMB.CD_EMPRESA = MV.CD_EMPRESA)
LEFT JOIN PESSOA MOT ON (MOT.CD_PESSOA = EMB.CD_MOTORISTA)
INNER JOIN CAPTACAOLEITE CPL ON (CPL.CD_EMPREMBARQUE = CL.CD_EMPRESA
AND CPL.NR_PLACA = MV.NR_PLACA
AND CPL.NR_EMBARQUE = MV.NR_EMBARQUE)
INNER JOIN ROTACAPTACAO R ON (R.NR_PLACA = CPL.NR_PLACA
AND R.CD_LINHACAPTACAO = CPL.CD_LINHACAPTACAO)
INNER JOIN LINHACAPTACAO LP ON (LP.CD_LINHACAPTACAO = R.CD_LINHACAPTACAO)
/* filtro: CL.ST_CONTRATOLEITE, CL.DT_COMPETENCIA, pessoa/contrato/motorista/linha */
Layout: dist/Relatórios/RCA001_S.rtm.
Modelo 6: Extrato de Contratos - Simples
Quando usado: combo "Modelo" = "Extrato de Contratos - Simples" (valor R).
Extrato resumido por produtor com credito, debito, saldo, contas pendentes, analise e dados bancarios (Banco, Agencia, Conta Corrente) e rota de captacao — mais enxuto que o Modelo 1.
SQL Base (dataset tabLEITE):
SELECT EDS_ENDERECO, EDS_MUNICIPIO, ENR_CEP, EDS_EMAIL, EDS_SITE, ENR_CNJPCPF,
ENR_INSCEST, ENR_FONE, DS_LOGOTIPO, NM_PESSOA, DS_ENDERECO, DS_MUNICIPIO,
NR_CNPJCPF, NR_FONE, DT_COMPETENCIA, NR_CONTRATO, VL_SALDO, VL_CREDITO,
VL_DEBITO, VL_PRECO, QT_FECHAMENTO, ST_CONTRATOLEITE, VL_TOTALIMPOSTO,
TP_MOVTOLEITE, CD_PESSOA, QT_INCENTIVO, NR_RELATORIO,
DT_COMPINICIAL, DT_COMPFINAL,
CD_BANCOPESSOA, DS_BANCOPESSOA, CD_AGENCIAPESSOA, NR_CONTACORPESSOA,
CAST(LIST(DS_ROTACAPTACAO) AS DOM_VARCHAR500) DS_ROTACAPTACAO,
CAST(LIST(CD_LINHACAPTACAO) AS DOM_VARCHAR32) CD_LINHACAPTACAO,
CAST(LIST(DS_LINHACAPTACAO) AS DOM_VARCHAR500) DS_LINHACAPTACAO
FROM (
SELECT DISTINCT
RD.DS_ENDERECO EDS_ENDERECO, ...,
(SELECT DS_LOGOTIPO FROM PARMFATUR WHERE CD_EMPRESA = CL.CD_EMPRESA) DS_LOGOTIPO,
P.NM_PESSOA, E.DS_ENDERECO, MP.DS_MUNICIPIO||MP.SG_ESTADO DS_MUNICIPIO,
P.NR_CNPJCPF, E.NR_FONE, CL.DT_COMPETENCIA, CL.NR_CONTRATO,
F.VL_SALDO, F.VL_CREDITO, F.VL_DEBITO, F.VL_PRECO, F.QT_FECHAMENTO,
CL.ST_CONTRATOLEITE, F.VL_TOTALIMPOSTO,
CASE WHEN ML.TP_MOVTOLEITE = 'C' THEN 'Recebimento'
WHEN ML.TP_MOVTOLEITE = 'E' THEN 'Transferencia de Entrada'
WHEN ML.TP_MOVTOLEITE = 'S' THEN 'Transferencia de Saida'
WHEN ML.TP_MOVTOLEITE = 'D' THEN 'Devolucao' END TP_MOVTOLEITE,
CL.CD_PESSOA, CI.OQT_INCENTIVO QT_INCENTIVO,
CAST(NULL AS VARCHAR(25)) NR_RELATORIO,
/* DT_COMPINICIAL / DT_COMPFINAL calculadas a partir de CL.DT_COMPETENCIA */
COALESCE(BP.CD_BANCO, 0) CD_BANCOPESSOA,
COALESCE(BP.DS_BANCO, 'SEM BANCO') DS_BANCOPESSOA,
COALESCE(AP.CD_AGENCIA, 0) CD_AGENCIAPESSOA,
COALESCE(CCP.NR_CONTACOR, 0) NR_CONTACORPESSOA,
COALESCE(R.DS_ROTACAPTACAO, 'Sem Rota de Captacao de Leite') DS_ROTACAPTACAO,
LP.CD_LINHACAPTACAO,
COALESCE(LP.DS_LINHACAPTACAO, '---') DS_LINHACAPTACAO
FROM CONTRATOLEITE CL
INNER JOIN PRODUTORLEITE PL ON (PL.CD_PESSOA = CL.CD_PESSOA AND PL.CD_ENDERECO = CL.CD_ENDERECO)
INNER JOIN FECHAMENTOCONTRATO F ON (F.CD_EMPRESA = CL.CD_EMPRESA
AND F.NR_CONTRATO = CL.NR_CONTRATO
AND F.DT_CANCELAMENTO IS NULL)
INNER JOIN MOVTOLEITE ML ON (ML.CD_EMPRCONTRATO = CL.CD_EMPRESA
AND ML.NR_CONTRATO = CL.NR_CONTRATO
AND F.NR_SEQUENCIAL = (SELECT MAX(NR_SEQUENCIAL)
FROM FECHAMENTOCONTRATO
WHERE CD_EMPRESA = CL.CD_EMPRESA
AND NR_CONTRATO = CL.NR_CONTRATO))
INNER JOIN EMPRESA ON (EMPRESA.CD_EMPRESA = CL.CD_EMPRESA)
LEFT JOIN RETORNA_DADOSCADASTRAIS(EMPRESA.CD_PESSOA, NULL) RD ON (1=1)
INNER JOIN PESSOA P ON (P.CD_PESSOA = CL.CD_PESSOA)
INNER JOIN ENDERECOPESSOA E ON (E.CD_PESSOA = CL.CD_PESSOA AND E.CD_ENDERECO = CL.CD_ENDERECO)
INNER JOIN MUNICIPIO MP ON (MP.CD_MUNICIPIO = E.CD_MUNICIPIO)
LEFT JOIN EMBARQUE EMB ON (EMB.NR_EMBARQUE = ML.NR_EMBARQUE AND EMB.CD_EMPRESA = ML.CD_EMPRESA)
LEFT JOIN PESSOA MOT ON (MOT.CD_PESSOA = EMB.CD_MOTORISTA)
LEFT JOIN CONTACORPESSOA CCP ON (CCP.CD_PESSOA = P.CD_PESSOA
AND CCP.NR_CONTACOR = (SELECT FIRST 1 NR_CONTACOR
FROM CONTACORPESSOA
WHERE CD_PESSOA = CCP.CD_PESSOA))
LEFT JOIN BANCO BP ON (BP.CD_BANCO = CCP.CD_BANCO)
LEFT JOIN AGENCIA AP ON (AP.CD_AGENCIA = CCP.CD_AGENCIA)
INNER JOIN CAPTACAOLEITE CPL ON (CPL.CD_EMPREMBARQUE = CL.CD_EMPRESA
AND CPL.NR_PLACA = ML.NR_PLACA
AND CPL.NR_EMBARQUE = ML.NR_EMBARQUE)
INNER JOIN ROTACAPTACAO R ON (R.NR_PLACA = CPL.NR_PLACA
AND R.CD_LINHACAPTACAO = CPL.CD_LINHACAPTACAO)
INNER JOIN LINHACAPTACAO LP ON (LP.CD_LINHACAPTACAO = R.CD_LINHACAPTACAO)
LEFT JOIN CALCULA_INCENTIVOPRODUCAO(CL.CD_EMPRESA, CL.NR_CONTRATO, NULL, NULL) CI ON (1=1)
/* filtro WHERE ML.ST_MOVTOLEITE, CD_EMPRESA, DT_COMPETENCIA, CD_PESSOA IN, NR_CONTRATO IN, CD_MOTORISTA IN, CD_LINHACAPTACAO */
)
GROUP BY EDS_ENDERECO, ..., NR_CONTACORPESSOA
Antes de imprimir, o sistema pergunta "Deseja Imprimir os Debitos Pendentes do Produtor?" — se "Nao", oculta a regiao regionContasPendentes.
Layout: dist/Relatórios/RCA001_R.rtm.
Modelo 7: Total Entregue por Produtor
Quando usado: combo "Modelo" = "Total Entregue por Produtor" (valor T).
Consolidado simples por produtor no periodo: pessoa + endereco completo + quantidade total de leite entregue (soma de QT_LEITE). Usado para conferencia rapida de producao por fornecedor. Ignora movimentos cancelados (ST_MOVTOLEITE <> 'C').
SQL Base (chamado por GeraRelatorio):
SELECT DISTINCT
CL.CD_PESSOA, P.NM_PESSOA,
SUM(ML.QT_LEITE) QT_LEITE,
CL.CD_EMPRESA||' - '||EMPRESA.NM_EMPRESA CD_EMPRESA,
CAST(NULL AS VARCHAR(25)) NR_RELATORIO,
P.NR_CNPJCPF,
EP.DS_ENDERECO, EP.NR_ENDERECO, EP.DS_BAIRRO, EP.NR_CEP,
M.DS_MUNICIPIO, EP.DS_COMPLEMENTO,
P.DS_OBSERVACAO, LP.CD_LINHACAPTACAO,
COALESCE(EP.DS_ENDERECO,'')||COALESCE(', '||EP.NR_ENDERECO,'')||
COALESCE(' - '||EP.DS_COMPLEMENTO,'')||COALESCE(' - '||EP.DS_BAIRRO,'') DS_ENDERECOCOMPLETO
FROM CAPTACAOLEITE LP
INNER JOIN MOVTOLEITE ML ON (ML.CD_EMPRESA = LP.CD_EMPREMBARQUE AND ML.NR_EMBARQUE = LP.NR_EMBARQUE)
INNER JOIN EMBARQUE EMB ON (EMB.CD_EMPRESA = ML.CD_EMPRESA AND EMB.NR_EMBARQUE = ML.NR_EMBARQUE)
INNER JOIN CONTRATOLEITE CL ON (CL.CD_EMPRESA = ML.CD_EMPRCONTRATO AND CL.NR_CONTRATO = ML.NR_CONTRATO)
INNER JOIN PRODUTORLEITE PL ON (PL.CD_PESSOA = CL.CD_PESSOA AND PL.CD_ENDERECO = CL.CD_ENDERECO)
INNER JOIN PESSOA P ON (P.CD_PESSOA = CL.CD_PESSOA)
LEFT JOIN PESSOA MOT ON (MOT.CD_PESSOA = EMB.CD_MOTORISTA)
INNER JOIN EMPRESA ON (EMPRESA.CD_EMPRESA = CL.CD_EMPRESA)
INNER JOIN ENDERECOPESSOA EP ON (EP.CD_PESSOA = PL.CD_PESSOA AND EP.CD_ENDERECO = PL.CD_ENDERECO)
INNER JOIN MUNICIPIO M ON (M.CD_MUNICIPIO = EP.CD_MUNICIPIO)
WHERE ML.ST_MOVTOLEITE <> 'C'
/* filtro: CL.CD_EMPRESA, CL.DT_COMPETENCIA, CL.CD_PESSOA IN, CL.NR_CONTRATO IN, MOT.CD_PESSOA IN, LP.CD_LINHACAPTACAO */
GROUP BY CL.CD_PESSOA, P.NM_PESSOA, CL.CD_EMPRESA, EMPRESA.NM_EMPRESA, P.NR_CNPJCPF,
EP.DS_ENDERECO, EP.NR_ENDERECO, EP.DS_COMPLEMENTO, EP.DS_BAIRRO, EP.NR_CEP,
M.DS_MUNICIPIO, P.DS_OBSERVACAO, LP.CD_LINHACAPTACAO, DS_ENDERECOCOMPLETO
ORDER BY P.NM_PESSOA
Layout: dist/Relatórios/RCA001_T.rtm (via GeraRelatorio).
Modelo 8: Total Entregue por Linha de Captacao
Quando usado: combo "Modelo" = "Total Entregue por Linha de Captacao" (valor L).
Sumario por linha de captacao: total de leite, preco medio contratado, numero de produtores ativos e media por produtor. Filtra contratos por ST_CONTRATOLEITE = 'V' (se Situacao="Aberto") ou 'F' (se "Fechado").
SQL Base (chamado por GeraRelatorio):
SELECT LP.CD_LINHACAPTACAO||' - '||LP.DS_LINHACAPTACAO NM_LINHACAPTACAO,
CL.CD_EMPRESA||' - '||EMPRESA.NM_EMPRESA CD_EMPRESA,
SUM(ML.QT_LEITE) TT_LEITE,
AVG(CL.VL_CONTRATADO) VL_PRECO,
COUNT(DISTINCT PL.CD_PESSOA) QT_PRODUTORES,
CAST(SUM(ML.QT_LEITE) / COALESCE(NULLIF(COUNT(DISTINCT PL.CD_PESSOA),0),1) AS DOM_NUMERIC15_2) QT_LEITE,
CAST(NULL AS VARCHAR(25)) NR_RELATORIO
FROM EMBARQUE EMB
INNER JOIN CAPTACAOLEITE CP ON (CP.NR_EMBARQUE = EMB.NR_EMBARQUE
AND CP.CD_EMPREMBARQUE = EMB.CD_EMPRESA
AND CP.NR_PLACA = EMB.NR_PLACA)
INNER JOIN MOVTOLEITE ML ON (ML.CD_EMPRESA = CP.CD_EMPREMBARQUE AND ML.NR_EMBARQUE = CP.NR_EMBARQUE)
INNER JOIN CONTRATOLEITE CL ON (CL.CD_EMPRESA = ML.CD_EMPRCONTRATO
AND CL.NR_CONTRATO = ML.NR_CONTRATO
AND CL.ST_CONTRATOLEITE = :ST /* 'V' se Aberto, 'F' se Fechado */)
INNER JOIN PRODUTORLEITE PL ON (PL.CD_PESSOA = CL.CD_PESSOA AND PL.CD_ENDERECO = CL.CD_ENDERECO)
INNER JOIN PESSOA P ON (P.CD_PESSOA = CL.CD_PESSOA)
INNER JOIN LINHACAPTACAO LP ON (CP.CD_LINHACAPTACAO = LP.CD_LINHACAPTACAO)
LEFT JOIN PESSOA MOT ON (MOT.CD_PESSOA = EMB.CD_MOTORISTA)
INNER JOIN EMPRESA ON (EMPRESA.cd_empresa = CL.CD_EMPRESA)
WHERE ML.ST_MOVTOLEITE <> 'C'
/* filtro: empresa, periodo, pessoa IN, contrato IN, motorista IN, linha captacao */
GROUP BY LP.CD_LINHACAPTACAO, LP.DS_LINHACAPTACAO, CL.CD_EMPRESA, EMPRESA.NM_EMPRESA
ORDER BY LP.CD_LINHACAPTACAO
Layout: dist/Relatórios/RCA001_L.rtm (via GeraRelatorio).