Além de oferecer 100% de ferramentas e serviços personalizados, nossa equipe tem o foco na alavancagem do seu negócio, informando e auxiliando sua expansão.
Esta alteração afeta o processador de cálculos do AICS que
contempla, por exemplo, o cálculo de impostos e mesmo a
função CalculaStr por scripts.
O processador foi melhorado com a necessidade muito menor
de uso de parênteses adicionais. Atualizando o sistema, você
poderá testar o novo processador pelo menu Arquivo -> Utilitários
-> Testador de expressões. Um resumo das funções disponíveis
seria:
Operações matemáticas: básicas mais:
! -> negação. Ex.: !(valor), se valor = 0, retorna 1, senão 0
= -> igualdade. Ex.: valor1=valor2, se valor1 igual a valor 2, retorna 1, senão 0
> -> maior do que. Ex.: valor1>valor2, se valor1 maior que valor 2, retorna 1, senão 0
< -> menor do que. Ex.: valor1
Outras funções: sin, cos, tan, arctan, sinh, cosh, cotan, exp, ln, log10, log2, sqr,
sqrt, abs, trunc, int, ceil, floor, random, max, min, power
Rotina melhorada para AICS e para os serviços Web do AICS.
O AICS é uma ferramenta de informação completa, podendo ser
usado como o melhor ERP ou o melhor sistema de integração ou
complementação de sistemas internos ou públicos.
Ainda, permite assinatura eletrônica de documentos, como PDFs
ou arquivos XML, podendo se integrar a serviços públicos ou
privados de documentos, por exemplo, Nota Fiscal Eletrônica
Federal ou mesmo municipais, sem alteração do sistema.
Nesta atualização, a BF expandiu os recursos de criação livre de
formulários aceitando imagens embutidas nos descritores. Por exemplo,
pode-se simplesmente copiar as fontes dos formulários elaborados
em praticamente qualquer versão do Delphi e colar nos scripts do
AICS, INCLUINDO as imagens dos botões!
Associado ao novo recurso de repositórios armazenados (STORED
no Centro de Informações), pode-se facilmente criar recursos
avançados e livres de pesquisa ou processamentos como se fossem
sub-sistemas isolados, criados sob demanda (sem nenhuma queda
de recursos não importando o tamanho dos sistemas armazenados).
Acrescente a isso as diversas modalidades de acesso a banco de
dados (são 3!), mais o novo Correio Eletrônico integrado ao ERP,
mais a possibilidade de utilizar uma meia dúzia de servidores de
bancos de dados, mais a possibilidade de executar o sistema,
tanto em servidores quanto em clientes, em Linux, mais o recurso
de multi-conexões a uma infinidade de servidores e mais a versatilidade
do AICS ser pequeno e rápido e você terá certeza de solucionar
qualquer problema em TI na atualidade!
Nota revisada em 24/06/2010.
Esta nota deve ser considerada técnica para a maioria do público.
Os serviços de Nota Fiscal eletrônica, normalmente feitos por chamadas
do tipo webservice (SOAP), podem requerer que os conteúdos em XML
sejam assinados digitalmente.
Recentemente, adicionamos o controle de certificados digitais no AICS e
publicamos a rotina que assina documentos PDF digitalmente. Esta
rotina permite, sem nenhum módulo adicional, gerar documentos e
assiná-los digitalmente pelo sistema.
Nesta atualização do sistema, adicionamos o recurso de assinatura de
arquivos XML. Por exemplo, arquivos gerados para Nota Fiscal
Eletrônica precisam ser assinados. A rotina pode ser chamada por
script e ela MODIFICA o arquivo XML adicionando uma assinatura
a ele (faça uma cópia antes de chamá-la):
Function XMLSign(FileToSign, CertFile, Password, NodeToSign, URI:String):boolean
Onde,
FileToSign -> Nome completo do arquivo XML que deve ser assinado
CertFile -> Caminho do certificado, pode ser um certificado da máquina
instalado no Windows (peça exemplos do que informar a esta chamada)
Password -> Senha do certificado quando em arquivo
NodeToSign ->Nome do nó facultativo a assinar, senão será o documento
URI -> Identificador da assinatura, pode ser em branco
Esta nota pode ser considerada altamente técnica por alguns
usuários.
Na montagem de acessos a dados, os scripts podem utilizar
comandos do tipo TableExecSQL e os nomes dos cursores
passam a ser simples Strings. As atribuições são também
super simples e encapsulam possíveis falhas nas atribuições.
Entretanto, o AICS permite a criação de objetos de acessos
a dados tipo TADOQuery. Estes objetos podem representar
objetos tipo ADO ou outros tipos de objetos de acessos a
dados, depende apenas da versão do AICS utilizada.
Pois bem, no primeiro caso, os comandos de atribuição de
valores são do tipo SetString, SetFloat, SetDateTime etc. Mas,
estes comandos de atribuição requerem o uso de cursores
escondidos a partir dos alias atribuídos em comandos
TableExecSql. Se os cursores forem reais, pode-se atribuir
valores com a sintaxe Cursor.fieldbyname('nome do campo').as...
Onde, o as... pode ser AsString, AsFloat etc. Este comando
NÃO está imune a erros, isto é, se houver um erro no seu
código ou outra falha, o script poderá ser interrompido.
Ainda, se o cursor estiver fechado e for do tipo parâmetros
dinâmicos, a atribuição é ainda mais complicada. Visando
facilitar e encapsular estes comandos, a BF publicou as
atribuições internas que o AICS dispõe aos scripts dos
usuários, relacionados a seguir:
Procedure SetFloatDS(Cursor:DelphiTDataSet;Coluna:string;Valor:Double)
Procedure SetStringDS(Cursor:DelphiTDataSet;Coluna, Valor:string)
Procedure SetIntegerDS(Cursor:DelphiTDataSet;Coluna:string; Valor:longint)
Procedure SetDateTimeDS(Cursor:DelphiTDataSet;Coluna:string; Valor:Double)
Procedure SetLogicalDS(Cursor:DelphiTDataSet;Coluna:string; Valor:boolean)
A grande vantagem destes comandos está em não gerarem erros
e, ainda, os cursores podem ser do tipo aberto (em edição) ou
fechados (com parâmetros).
Recentemente, a Byte Factory adicionou recursos de gerenciamento
de certificados digitais ao AICS. Esta gestão aplica-se, por enquanto,
à assinatura de documentos PDF. Documentos PDF que podem
ser gerados automaticamente pelo sistema, por exemplo.
Entretanto, este recurso de assinaturas pode ser altamente útil no
quotidiano de nossos clientes. Por exemplo, pode-se criar serviços
de rede de assinatura automática a partir de "hot-folders". O AICS
pode ser o ERP mais completo que existe, mas pode complementar
outros serviços de forma inimaginável!
Depende da sua imaginação.
A sintaxe da função de assinatura digital por script é:
Function PDFSign(FileToSign, CertFile, Password:String):boolean
Onde,
FileToSign -> Arquivo PDF que será assinado (o arquivo será modificado,
logo, faça uma cópia se deseja preservar um original sem assinatura)
CertFile -> Caminho para o arquivo do certificado digital (facultativo, se
ausente, o AICS usará o certificado associado ao login atual)
Password -> Se o arquivo de certificado for informado, aqui deverá ser
passada a senha correspondente (senha do certificado e não a senha do
login ou do AICS, cuidado com isso)
É uma característica que facilita a gestão das regras de negócios
em relatórios em geral. O evento Antes de Imprimir, caso
retorne falso (false, por script), passa a fechar a janela do
relatório.
É claro que nada impede que seu evento apresente mensagens
ao usuário explicando o porquê do mesmo não poder ser
impresso.
Por favor, considere esta nota como altamente técnica.
O modelo de scripts do AICS isola rotinas para cada objeto instanciado,
isso permite que um ambiente seja montado para cada tela aberta do sistema,
o que gera segurança entre as regras para cada estrutura.
Entretanto, alguns problemas podem surgir desta característica, tais como:
- Alguns trechos de códigos são replicados em estruturas diferentes,
mesmo desempenhando a mesma função
- Grandes estruturas de objetos precisam ser montados na estrutura principal
para estarem disponíveis para execução a qualquer momento, mesmo que
nunca sejam executados
O primeiro item pode gerar uma complicação na gestão das regras e o
segundo pode gerar lentidão na entrada de algumas telas (máximo de 1
ou 2 segundos), porém, pode gerar maior ocupação de memória do que
o efetivamente necessário à sessão. Ainda, o item 2 pode gerar cópias de
objetos que poderiam ser únicos entre sessões abertas ao mesmo tempo.
Para resolver estes 2 problemas, criamos uma estrutura virtual denominada
STORED que poderá receber procedimentos completos na forma de "programa",
por exemplo, cada procedimento deverá ser completo e independente. Um
exemplo de um procedimento simples seria:
begin
Mostra('Este é um procedimento simples, '+webfields('nome'));
end.
Note que a rotina é completa e não tem visibilidade de qualquer outra
entidade que a executou, é um procedimento autônomo. Portanto, os
procedimentos criados sob a estrutura STORED devem ser chamados
com a nova rotina:
Function ExecStored(Event,Parameter:string):boolean
Por exemplo, poderíamos criar o procedimento acima num evento com
nome "Aviso", neste caso, a chamada em qualquer local do AICS do
procedimento acima e já com o parâmetro, seria simplesmente:
ExecStored('Aviso','nome=Manoel');
O interessante deste modelo é que não haverá cópias do mesmo
procedimento em execução simultânea, isso minimiza o gasto de
recursos do sistema e deixa os procedimentos mais rápidos.
O AICS possui a característica de montar as pesquisas automaticamente, mas
este processo pode ser complexo em alguns casos de tabelas mestre-detalhe e
com ligação cruzada.
Para facilitar este tipo de filtro mais complexo, no centro de informações, para
cada tabela, existe a opção Ativar opção filhos das colunas na aba Avançado.
Esta opção estava, basicamente, sendo válida para relatórios e não para
pesquisas. As pesquisas estavam mais "abertas". Nesta atualização do AICS,
esta opção deverá estar LIGADA e, nas colunas das tabelas filhas, a opção
Exibir em filhos na aba Opções de apresentação deverá também estar
ligada.
Esta nota é altamente técnica e destina-se aos usuários avançados
que utilizam Scripts dentro do BF AICS.
Em algumas aplicações, a existência de repetição de trechos de rotinas
pode ser inevitável. Nem que isso seja devido ao ambiente de cada uma,
pode ser improdutivo apenas declarar as rotinas genéricas na tabela
GLOBAL. Com o objetivo de otimizar as rotinas e, ao mesmo tempo,
evitar repetição, adicionamos uma diretiva de inclusão no pré-processador
do AICS com a seguinte sintaxe:
{$include TABELA.EVENTO}
Por exemplo, se incluirmos a linha:
{$include CADASTRO.ENTRAR}
Em qualquer outra tabela (com certeza não a do CADASTRO, pois este
trecho já estará lá), as rotinas e declareções estarão presentes na montagem
final.
Pelo Centro de Informações do BF AICS, é muito simples definir
um gráfico do tipo XY. Crie uma vista e associe as colunas X e Y.
Na tela na qual a vista está associada, escolha o gráfico na mesma
lista de relatórios e clique no botão de gráfico na barra de ferramentas
do menu de impressão.
Nesta atualização do sistema, permitimos que sejam selecionadas
mais do que uma coluna Y. Por exemplo, pode-se montar uma vista
que conta o nr de fornecedores e clientes por estado. Nas colunas
nr de fornecedores e nr de clientes, marcamos com a opção Y do
gráfico. A coluna do estado vai no X. Qdo o gráfico for emitido,
ele mostrará, para cada estado, a quantidade de clientes e fornecedores
ao mesmo tempo.
A partir deste exemplo, fica fácil expandir e saber que, para qualquer
informação do sistema, fica agora fácil definir gráficos de N curvas
visando comparação visual sem ter que criar um gráfico externo ao
AICS.