Jogar na pasta Templates\Impressao\Ginfes Na proxima atualização, pegar o último modelo da Ginfes e criar um campo calculado para colocar no campo da nota "Retenções Federais", e somar todas as retenções ----------------------------------------------------- 10/11/2017 Autor: Theo Brito Comentário: Tive que modificar o a impressão da NFSe, pois a descrição do serviço estava vindo do Codigo de Serviço e não da Atividade. Fiz para ficar o mais parecido possível com a Nota Oficial da Prefeitura. Sendo Assim: Antes de Jogar o ModeloImpressao.rtm, será necessário algumas alterações no mesmo: 1.Clique em Calc, depois botão direito do mouse e escolha "Modules". Depois "Events", procure por OnCreate: const ARQLISTA = '\ListaServicos.txt'; ARQATIVIDADES = '\ListaAtividades.txt'; var _arquivo, _arquivoAtividades: string; _cidades: TStringList; begin ListaServicos := TStringList.Create; ListaMunicipios := TStringList.Create; ListaAtividades := TStringList.Create; ModoImpressao := StrToIntDef(Trim(Config['ModoImpressao']), -1); _DiretorioTemplates := Trim(Config['DiretorioTemplates']); _BrasaoMunicipio := Trim(Config['BrasaoMunicipio']); _LogotipoEmitente := Trim(Config['LogotipoEmitente']); _ArquivoMunicipios := Trim(Config['ArquivoMunicipios']); _NomeCidade := Trim(Config['NomeCidade']); _NomePadrao := Trim(Config['NomePadrao']); // Pegar lista de serviços do padrão ou da cidade // Caso municipio for Fortaleza pegar a lista de atividades if _DiretorioTemplates <> '' then begin _arquivo := _DiretorioTemplates + '..\' + _NomePadrao + ARQLISTA; if FileExists(_arquivo) then ListaServicos.LoadFromFile(_arquivo) else begin _arquivo := _DiretorioTemplates + '..\' + _NomeCidade + ARQLISTA; if FileExists(_arquivo) then ListaServicos.LoadFromFile(_arquivo); end; if (UpperCase(_NomeCidade) = 'FORTALEZA') then begin _arquivoAtividades := _DiretorioTemplates + '..\' + _NomePadrao + ARQATIVIDADES; if FileExists(_arquivoAtividades) then ListaAtividades.LoadFromFile(_arquivoAtividades) else begin _arquivoAtividades := _DiretorioTemplates + '..\' + _NomeCidade + ARQATIVIDADES; if FileExists(_arquivoAtividades) then ListaAtividades.LoadFromFile(_arquivoAtividades); end; end else begin _arquivoAtividades := _DiretorioTemplates + '..\' + _NomeCidade + ARQATIVIDADES; if FileExists(_arquivoAtividades) then ListaAtividades.LoadFromFile(_arquivoAtividades ); end; end; if FileExists(_ArquivoMunicipios) then ListaMunicipios.LoadFromFile(_ArquivoMunicipios); if _BrasaoMunicipio <> '' then begin if FileExists(_BrasaoMunicipio) then begin ImageBrasaoNFSe.Picture.LoadFromFile(_BrasaoMunicipio); ImageBrasaoRPS.Picture.LoadFromFile(_BrasaoMunicipio); end; end else begin ImageBrasaoNFSe.Picture.LoadFromFile(_DiretorioTemplates + '..\Impressao\'+_Nomepadrao+'\'+_NomeCidade+'.jpg'); ImageBrasaoRPS.Picture.LoadFromFile(_DiretorioTemplates + '..\Impressao\'+_Nomepadrao+'\'+_NomeCidade+'.jpg'); end; if _LogotipoEmitente <> '' then begin if FileExists(_LogotipoEmitente) then ImageLogotipoEmitente.Picture.LoadFromFile(_LogotipoEmitente); end; { Obter o índice da cidade (para obter as frases da cidade) } _cidades := TStringList.Create; _cidades.Text := StringReplace(NOMES_CIDADES_PADRAO, '|', chr(13)+chr(10)); IdxCidade := _cidades.IndexOf(UpperCase(_NomeCidade)); _cidades.Free; end; //------------------------------------------------------------------------------------- 2. Clique em Calc, botão direito e escolha "Modules", depois clique em "Programs" e procure "function ComporDescricaoAtividade", fica assim: function ComporDescricaoAtividade(aItemListaAtividade: String): String; var _Lista: TStringList; _Codigo : string; _aux : Integer; begin _Codigo := aItemListaAtividade; If Trim(_Codigo) <> '' then begin _aux:= pos('/',_Codigo); if _aux <> 0 then begin _Codigo := Copy( _Codigo, _aux+1, length(_Codigo)-_aux); Result := ListaAtividades.Values[Trim(_Codigo)]; end else Result := ListaAtividades.Values[Trim(_Codigo)]; end; end; //------------------------------------------------------------------------------ 3. Clique em Calc, botão direito e escolha "Modules", depois clique em "Event Handlers" e procure "DBListaServicoOnGet", fica assim: const ARQATIVIDADES = '\ListaAtividades.txt'; var _Codigo : String; _CodigoTributacao : String; _arquivo, _arquivoAtividades, _NomeCidade, _DescricaoAtividade: string; begin _NomeCidade := Trim(Config['NomeCidade']); _DiretorioTemplates := Trim(Config['DiretorioTemplates']); _arquivoAtividades := _DiretorioTemplates + '..\' + _NomeCidade + ARQATIVIDADES; _Codigo := Trim(Text); _CodigoTributacao := Trim(DadosImpressao['CodigoTributacaoMunicipio']); FormataItemListaServico(_Codigo); FormataItemListaServico(_CodigoTributacao); if (UpperCase(_NomeCidade) = 'FORTALEZA') and (DadosImpressao['CodigoCnae'] <> '') then Text := _Codigo + ' / ' + DadosImpressao['CodigoCnae'] + ' - ' + ComporDescricaoAtividade(DadosImpressao['CodigoCnae']) else if (UpperCase(_NomeCidade) = 'DIADEMA') and (DadosImpressao['CodigoTributacaoMunicipio'] <> '') then Text := _Codigo + ' / ' + _CodigoTributacao + ' - ' + ComporDescricaoServico(_CodigoTributacao) else if ( FileExists(_arquivoAtividades) ) and (_CodigoTributacao <> '') then begin _DescricaoAtividade := ComporDescricaoAtividade(_CodigoTributacao); if ( Trim(_DescricaoAtividade ) <> '' ) then Text := _Codigo + ' / ' + _CodigoTributacao + ' - ' + _DescricaoAtividade else Text := _Codigo + ' / ' + _CodigoTributacao + ' - ' + ComporDescricaoServico(_Codigo); end else Text := _Codigo + ' / ' + _CodigoTributacao + ' - ' + ComporDescricaoServico(_Codigo); end; //---------------------------------------------------------------------------------- 4.Clique em Calc, botão direito e escolha "Modules", depois clique em "Event Handlers" e procure "RetencoesFederaisOnCalc", fica assim: begin Value := ''; if( DBValorPis.text <> '' ) then Value := FormatarMoeda( DBValorPis.text ); if( DBValorCofins.text <> '' ) then Value := FormatarMoeda( CurrToStr( StrToCurr( StringReplace(Value,'.', '') ) + StrToCurr( StringReplace(DBValorCofins.text,'.', '') ) )); if( DBValorIr.text <> '' ) then Value := FormatarMoeda( CurrtoStr( StrToCurr( StringReplace(Value,'.','') ) + StrToCurr( StringReplace(DBValorIr.text,'.','') ) )); if( DBValorInss.text <> '' ) then Value := FormatarMoeda( CurrToStr( StrToCurr( StringReplace(Value,'.','') ) + StrToCurr( StringReplace(DBValorInss.text,'.','') ) )); if( DBValorCsll.text <> '' ) then Value := FormatarMoeda( CurrToStr( StrToCurr( StringReplace(Value,'.','') ) + StrToCurr( StringReplace(DBValorCsll.text,'.','') ) )); end; //--------------------------------------------------------------------------------------- 5. Clique em Calc, depois globals/programs, formataCEP fica assim: function FormataCEP(const aCEP: string): string; var i: integer; aux: string; begin aux := aCEP; for i := 1 to 8 - Length(aCEP) do begin aux := '0' + aux; end; if aux <> '' then Result := FormatMaskText('99999-999;0;*', Trim(aux)) else Result := ''; end; //--------------------------------------------------------------------------------------- Jogar na pasta Templates\Impressao\Ginfes o arquivo ModeloImpressao.rtm. por ultimo jogar as pastas das cidades na pasta: Templates\