![Page 1: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/1.jpg)
1
Python + DelphiUm relacionamento que está dando certo (Python Cases)
Fernando Macedo
![Page 2: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/2.jpg)
2
Quem? Fernando Macedo
◦ Desenvolvedor Delphi/Python◦ Bacharel em Sistemas de Informação (Faculdade
Impacta de Tecnologia)◦ Mestrando em Gestão do Conhecimento e Sistemas
Inteligentes (IPEN-USP)◦ Membro da APyB
![Page 3: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/3.jpg)
3
Onde? Esys Colibri
◦ 23 anos de experiência◦ 15.000 clientes◦ 35.000 PDVs instalados◦ 100 revendedores em todo o País◦ Suporte 24/7 em todo o Brasil◦ Atualização constante às novas leis
![Page 4: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/4.jpg)
4
O que?
Caso da Esys na utilização de Python no Colibri 8
Integração entre Python e Delphi
![Page 5: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/5.jpg)
5
Cenário Software PDV
◦ Mesa◦ Balcão◦ Ficha◦ Entrega
Contexto◦ Empresa tradicional - 23 anos◦ Aplicação comercial◦ Ambiente Windows
(MS, C# e Delphi)◦ Nova versão
![Page 6: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/6.jpg)
6
Os problemas Módulo de relatórios
◦ Formatação embutida no aplicativo◦ Manutenção difícil
Integração com terceiros
◦ Implementações específicas
![Page 7: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/7.jpg)
7
{ Layout da linha levando em conta qtd fracionada }
TmpStr := '%s%-2.0f ' + Trim(strFormatDesc);
if QtdeFracionada then
TmpStr := '%s%3.3f ' + Trim(strFormatDesc);
TmpStr := Format(TmpStr, [strTagIni, fQuantidade, strDescr]);
lstMarchador.Add(TrimAcentos(Tmpstr) + strTagFim);
sLineMarchadorAgrup:= sLineMarchadorAgrup+';'+TrimAcentos(Tmpstr) + strTagFim;
if dmVenda.qryColibriBN_LUGARMESA.AsBoolean then
TmpStr := TmpStr + FormatFloat(' #0', MyMaterial[i].LugarMesa);
TmpStr := TmpStr + strTagFim;
lstRemota.Add(TrimAcentos(TmpStr));
Relatórios texto: Antes
![Page 8: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/8.jpg)
8
O desafio dos relatórios Premissas
◦ Gerar a mesma configuração de arquivos;◦ Simples;◦ Suportar troca em run-time;◦ Suportar loops aninhados, do tipo mestre-detalhe;◦ Mesma origem dos dados para os relatórios visuais;◦ Ter toda a infra construída em dias, e não em
meses.
![Page 9: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/9.jpg)
9
Por que Python?
Expressividade Legibilidade de código Codificação rápida Vasta coleção de bibliotecas Recurso X, Y, Z
![Page 10: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/10.jpg)
10
A linguagem certa
E não sabendo que era impossível, Python foi lá e fez!
Solução da infra em 2 dias!
Ganhou moral.
![Page 11: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/11.jpg)
11
Resultados
Premissas atendidas
Plus: Extensão e customização por clientes
![Page 12: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/12.jpg)
12
Depois{% extends "relatorio-base.template" %}{% set pag = impressaoNumero %}{% set tot = impressaoTotal%} {%- block relatorio %}{% block cabecalho scoped -%}{% filter compexp %}Conta {{venda.codigoDoTicket}} {{'=' * 5}} {{pag}}/{{tot}}{% endfilter %}Mov.: {{dataContabil}} - Imp.: {{data}} - {{hora}}hPDV: {{maquina|semAcentos}}Caixa: {{caixa|semAcentos}}Garcom: {{garcom|semAcentos}}SEQ: {{venda.sequencia}}{%- endblock cabecalho %} %- block corpo -%}{{ render_cancelado() }}{% for item in itens -%}{{ render_item(item) }}{% endfor -%}{{ render_cancelado() }}{%- endblock corpo %}
![Page 13: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/13.jpg)
13
Integração
Desktop GUI◦ http://www.python.org/about/apps/
Scripting
Extending◦ Upgrade tecnológico
![Page 14: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/14.jpg)
14
DriverPython
![Page 15: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/15.jpg)
15
Uso do P4Dtype
EngineDoPython = class
private class var
_Eng: TPythonEngine;
_IO: TPythonInputOutput;
_Dir: string;
private const
NOME_DLL = 'python27.dll';
NOME_BIBLIOTECA = 'python27.zip';
public
[...]
class procedure AdicionarDiretorioAoPath(umDiretorio: string);
class property Engine: TPythonEngine read ObterEngine;
class property DirDoPython: string read _DirDoPython write _DirDoPython;
class property Iniciado: Boolean read ObterIniciado;
class property IO: TPythonInputOutput read _IO;
end;
![Page 16: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/16.jpg)
16
Uso do P4Dclass constructor EngineDoPython.Create;
begin
_Eng := TPythonEngine.Create(nil);
_IO := TPythonInputOutput.Create(nil);
_Eng.DllName := NOME_DLL;
_Eng.PyFlags := _Eng.PyFlags + [pfIgnoreEnvironmentFlag];
_Eng.IO := _IO;
end;
class procedure EngineDoPython.Iniciar;
begin
_Eng.DllPath := arquivos.NormalizarPasta(DiretorioDoPython);
arquivos.ExecutarNaPasta(DiretorioDoPython,
procedure begin
_Eng.LoadDll();
SysModule.path.append(_Eng.DllPath);
SysModule.path.append(_Eng.DllPath + NOME_BIBLIOTECA);
end);
end;
![Page 17: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/17.jpg)
17
O que pode ser feito?
Módulos *.pyd
Executar códigos Python;
Expor classes Delphi ao Python;
![Page 18: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/18.jpg)
18
Problemas e riscos CTypes
◦ Manifesto
Pessoal◦ Disseminar conhecimento à equipe
Continuidade do projeto Python4Delphi◦ Suporte a futuras versões
![Page 19: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/19.jpg)
19
Minhas impressões A ilusão de que verificação de tipos em
tempo de compilação resolve todos os problemas
Python◦ Oferece alto nível de abstração◦ Escreve-se menos código◦ Maior produtividade◦ Python não se põe entre o desenvolvedor e o
problema
![Page 20: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/20.jpg)
20
Links
http://code.google.com/p/python4delphi/
http://code.google.com/p/pyscripter/
![Page 22: Python + Delphi: Um relacionamento que está dando certo](https://reader035.vdocuments.pub/reader035/viewer/2022062418/556a6a5fd8b42ab0468b4d00/html5/thumbnails/22.jpg)
22