Histórico da Página
Impressão de Carteirinha
Características do Requisito
Linha de Produto: | Microsiga Protheus | ||||
Segmento: | Saúde | ||||
Módulo: | Plano de Saúde | ||||
Rotina: |
| ||||
Ponto de Entrada: | PIMRN360PLRRN360. | ||||
País(es): | Todos | ||||
Banco(s) de Dados: | Todos | ||||
Tabelas Utilizadas: | BA1 - Beneficiarios | ||||
Sistema(s) Operacional(is): | Todos | ||||
Versões/Release: | 11.80 | ||||
Versão Corrigida: | 11.80 | ||||
Versão Expedida: | 11.80 |
Descrição
Implementado melhoria para impressão da carteirinha em papel via remote ou pelo portal do beneficiário.
Procedimento para Utilização
Nesta rotina foi disponibilizado o Ponto de Entrada (PIMRN360PLRRN360), onde o cliente pode configurar o layout do cartão conforme sua preferência.
Para impressão via remote:
- Acesse o menu /Atualizações/Cartão Identific./Lotes de Cartão (PLSA262)
- Informe os parâmetros solicitados e click em exportar. Obs.: Tipo Geração = Impressão
3. Click no botão Confirmar e confirmar a tela com Sim a tela abaixo.
4. Selecione a impressora e click em OK.
Para Impressão via Porta do Beneficiário.
- Acesse o menu /Principal/ Imprimir Carteirinha.
- Informe os parâmetros solicitados.
- Click em Confirmar para a impressão.
Ponto de Entrada
Descrição: | Permite mudar o formato da impressão da carteirinha. | ||||||||||||||||
Localização: | Atualizações/Cartão Identific./Lotes de Cartão | ||||||||||||||||
Eventos: | Impressão de carteirinha | ||||||||||||||||
Programa Fonte: | PIMRN360PLRRN360 | ||||||||||||||||
Função: | Plano de Saúde | ||||||||||||||||
Retorno: |
|
Exemplo:
#INCLUDE "PROTHEUS.CH"
#INCLUDE "PLSMGER.CH"
#INCLUDE "TOPCONN.CH"
#INCLUDE "TBICONN.CH"
#INCLUDE "fileio.ch"
#DEFINE IMP_PDF 6
#DEFINE lSrvUnix IsSrvUnix()
//-------------------------------------------------------------------
/*/{Protheus.doc} PIMRN360PLRRN360
Ponto de entrada para impressao de Carteirinha do beneficiário. Regras
definidas na RN-360
@author PLS TEAM
@version P11
@since 15.10.15
/*/
//-------------------------------------------------------------------
user function PIMRN360PLRRN360()
local cMatric := paramixb[1]
local aDados := paramixb[2]
local lWeb := paramixb[3]
local cPathSrv := paramixb[4]
local nLinMax := 0
local nColMax := 0
local nLinIni := 0
local nColIni := 0
local nColA4 := 0
local nX := 0
local nWeb := 0
local nTweb := 1
local nLweb := 0
local nLwebC := 0
local cFileLogo := getNewPar("MV_PLSRELO","")
local cFileName := ''
local cMsg := ''
local cRel := "carbene"
local lContinua := .t.
local oFont02 := nil
local oFont02n := nil
local oFont03n := nil
local oFont05n := nil
local oPrint := nil
local aRet := {}
cTitulo := "Carteirinha do Beneficiário"
//quando for chamada web aciona a funcao para validacao e busca dos dados a serem impresso (lote de carteirinha)
if lWeb
aRet := PLSA261INC(SubStr(cMatric,1,4),cMatric,getNewPar("MV_PLSMP1V","4"),.t.,,.t.,.t.)
if aRet[1]
aDados := aRet[4]
endIf
endIf
//em montagem ou alteracao do layout do relatorio usar esta matriz
/*aDados := { { replicate('A',30),; //01 - nome do beneficiario
replicate('B',21),; //02 - numero da matricula
replicate('C',10),; //03 - data de ascimento do beneficiario
replicate('D',15),; //04 - numero do cartao naciona de saude CNS
replicate('E',12),; //05 - numero do registro do plano ou do cad. do plano na ans
replicate('F',56),; //06 - segmentacao assistencial do plano
replicate('G',6),; //07 - codigo do registro da operadora na ans
replicate('H',30)+replicate('P',15)+replicate('X',30),; //08 - informacao de contato com a operadora
replicate('I',40)+replicate('P',15)+replicate('X',30),; //09 - informacao de contato com a ans
replicate('J',10),; //10 - data de termino da cobertura parcial temporaria
replicate('L',13),; //11 - padrao de acomodacao
replicate('M',17),; //12 - tipo de contratacao
replicate('N',19),; //13 - area de abrangencia geografica
replicate('O',22),; //14 - nome do produto
replicate('P',60),; //15 - nome fantasia da operadora
replicate('Q',20),; //16 - nome fantasia da administradora de beneficios
replicate('R',40),; //17 - nome da p. juridica contratante do plano coletivo ou emp.
replicate('S',10),; //18 - data de inicio da vigencia do plano
replicate('T',10) } } //19 - informacoes
*/
//verifica se tem registro a ser impresso
if len(aDados) == 0
if !lWeb
msgAlert("Não é possível realizar a impressão!")
else
cMsg := "Não é possível realizar a impressão!"
endIf
lContinua := .f.
endIf
if lContinua
//preparando para impressao
nLinMax := 2275
nColMax := 3270
//estilo de fontes
oFont02 := TFont():New("courier new", 10, 10, , .F., , , , .T., .F.) // Normal
oFont02n:= TFont():New("courier new", 10, 10, , .T., , , , .T., .F.) // Negrito
oFont03n:= TFont():New("courier new", 10, 10, , .F., , , , .T., .F.) // Negrito
oFont05n:= TFont():New("Arial", 20, 20, , .T., , , , .T., .F.) // Negrito
//define o arquivo para impressao
if lWeb
cFileName := cRel+lower(CriaTrab(NIL,.F.))+".pdf"
else
cFileName := cRel+CriaTrab(NIL,.F.)
endIf
//New ( < cFilePrintert >, [ nDevice], [ lAdjustToLegacy], [ cPathInServer], [ lDisabeSetup ], [ lTReport], [ @oPrintSetup], [ cPrinter], [ lServer], [ lPDFAsPNG], [ lRaw], [ lViewPDF] )
nH := PLSAbreSem("PPLSIMPCAR.SMF")
if lWeb
oPrint := FWMSPrinter():New( cFileName,,.f.,cPathSrv,.t.,,@oPrint,,,.f.,.f.)
else
oPrint := FWMSPrinter():New( cFileName,,.f.,cPathSrv,.t.,,,,,.f.,,)
endIf
PLSFechaSem(nH,"PPLSIMPCAR.SMF")
if lSrvUnix
ajusPath(@oPrint)
endIf
oPrint:lServer := lWeb
oPrint:cPathPDF := cPathSrv
nTweb := 3.9
nLweb := 10
nLwebC := -3
nWeb := 25
nColMax := iIf(lWeb,2980,3100)
oPrint:setLandscape()// Modo paisagem
oPrint:setPaperSize(9)// Papél A4
//Device
if lWeb
oPrint:setDevice(IMP_PDF)
else
oPrint:Setup()
if !(oPrint:nModalResult == 1)// Botao cancelar da janela de config. de impressoras.
return
endif
endif
//Carrega e Imprime Logotipo da Empresa
fLogoEmp(@cFileLogo)
//dados a serem impressos
For nX := 1 To Len(aDados)
nLinIni := 080
nColIni := 080
nColA4 := 000
//Inicia uma nova pagina
oPrint:startPage()
//Box Principal
oPrint:box((nLinIni + 0000)/nTweb, (nColIni + 0000)/nTweb, (nLinIni + nLinMax)/nTweb, (nColIni + nColMax)/nTweb)
nColA4 := -0335
//titulo
oPrint:Say((nLinIni + 0080)/nTweb, ((nColIni + nColMax)*0.47)/nTweb, "Carteirinha", oFont05n,,,, 2)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 60, 80)
//linha abaixo do titulo
AddTBrush(oPrint, (nLinIni + 190)/nTweb, (nColIni + 0010)/nTweb, (nLinIni + 191)/nTweb, (nColIni + nColMax)/nTweb)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 110, 80)
//box marcando a frente do cartao
oPrint:box((nLinIni + 145)/nTweb, (nColIni + 280)/nTweb, (nLinIni + 700)/nTweb, (nColIni + 1430)/nTweb)
//Tem que estar abaixo do RootPath - logomarca
if file(cFilelogo)
//logo
oPrint:SayBitmap((nLinIni + 160)/nTweb, (nColIni + 300)/nTweb, cFileLogo, (155)/nTweb, (090)/nTweb)
//01 - nome do beneficiario
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 500)/nTweb, aDados[nX,1], oFont02n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 55, 80)
//02 - numero da matricula
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 500)/nTweb, aDados[nX,2], oFont02n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//caso nao tenha logo muda a posicao do nome e matricula
else
//01 - nome do beneficiario
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,1], oFont02n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//02 - numero da matricula
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,2], oFont02n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
endIf
//03 - data de ascimento do beneficiario
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,3], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//04 - numero do cartao naciona de saude CNS
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,4], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//05 - numero do registro do plano ou do cad. do plano na ans
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,5], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//06 - segmentacao assistencial do plano
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,6], oFont03n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//07 - codigo do registro da operadora na ans
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,7], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//08 - informacao de contato com a operadora
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, allTrim(left(aDados[nX,8],30)) + iif(!empty(allTrim(left(aDados[nX,8],30))),', ','') , oFont03n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 30, 80)
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, allTrim(subStr(aDados[nX,8],31,15)) + iif(!empty(allTrim(subStr(aDados[nX,8],31,15))),' - ','') + allTrim(subStr(aDados[nX,8],46,30)), oFont03n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//09 - informacao de contato com a ans
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, allTrim(left(aDados[nX,9],40)) + iif(!empty(allTrim(left(aDados[nX,9],40))),', ',''), oFont03n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 30, 80)
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, allTrim(subStr(aDados[nX,9],41,15)) + iif(!empty(allTrim(subStr(aDados[nX,9],41,15))),' - ','') + allTrim(subStr(aDados[nX,8],56,30)), oFont03n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 100, 80)
//indicacao para corte entre frente e versao
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 250)/nTweb, replicate('-',130), oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 100, 80)
//box marcando o verso do cartao
oPrint:box((nLinIni + 145)/nTweb, (nColIni + 280)/nTweb, (nLinIni + 700)/nTweb, (nColIni + 1430)/nTweb)
//10 - data de termino da cobertura parcial temporaria
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,10], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//11 - padrao de acomodacao
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,11], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//12 - tipo de contratacao
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,12], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//13 - area de abrangencia geografica
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[1,13], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//14 - nome do produto
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,14], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//15 - nome fantasia da operadora
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,15], oFont03n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//16 - nome fantasia da administradora de beneficios
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,16], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//17 - nome da p. juridica contratante do plano coletivo ou emp.
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,17], oFont03n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//18 - data de inicio da vigencia do plano
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,18], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//19 - informacoes
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,19], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//Finaliza a pagina
oPrint:endPage()
next
//imprime quando web e mostra o preview no remote
if lWeb
oPrint:Print()
else
oPrint:Preview()
endIf
endIf
return( { cFileName, cMsg } )
...