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.
Nota para audiência técnica.
Em alguns cenários, mesmo com NF emitida, a edição dos pedidos
e OSs pode ser necessária.
Como essa necessidade é sempre específica dentro da regra local,
abrimos uma nova função callback para personalizar o bloqueio
da edição nesse caso.
A declaração ficou:.
Function AICS_EDITORDERWITHNFE(Codigo,Netcod:String):boolean.
Lembrando que ela pode ser chamada diversas vezes durante a edição.
Basta atualizar o Aics.
Nota destinada à audiência técnica.
Na elaboração de suas rotinas, é muito prático solicitar uma
entrada de dados ao usuário pela função InputBox. Nessa
atualização, criamos um novo "InputBox" com o objetivo de
restringir a listas fixas.
Aproveitando o novo recurso, resumimos as opções atuais
das funções de inputbox existentes.
A rotina padrão é:.
function inputbox(Titulo,Campo,ValorIni:String):String.
E temos as variações:.
function inputboxMemo(Titulo,Campo,ValorIni:String):String.
Permite ler um texto mais longo em formato memo.
function inputpassword(Titulo,Campo:String):String
Permite a entrada de uma senha com caracteres escondidos (*).
function inputboxList(Titulo,Campo,ListIni:String):String.
Que é a novidade, onde permite restringir o resultado às
opções enviadas no parâmetro ListIni, que deve ser
uma string separada por quebras de linha.
Basta atualizar o Aics e usar em suas rotinas locais.
Essa nota é direcionada à audiência técnica.
Na conversão de string para data, a função ctod é
bem genérica, aceitando diversos formatos de datas
e retornando a quantidade de dias.
Nessa atualização, visando facilitar as regras de interpretação
textual pelos bots de atendimento, a função passa a
converter datas textuais visando processamento de
idades ou intervalos de tempo.
O conceito é o mesmo, cada unidade do retorno se
refere a 1 dia. Portanto, os seguintes casos passam a
serem aceitos: ano, mês e dia.
Como ilustração, 1 ano irá retornar 365. 1 ano e meio,
545 (365 dias mais 180). 3 meses, 90 e assim por diante.
Como o retorno é em dias, caso precise da informação
para analisar "anos", basta dividir o resultado por 365.
Função disponível no Aics e nos serviços associados.
Atenção, nota para audiência técnica.
Quando é necessária uma regra sobre os movimentos,
bastava inserir no evento gravar ou após gravar da tabela
de movimentos de materiais (estensai).
Entretanto, quando existe a necessidade de uma regra que
atue sobre todos os desdobramentos de uma movimentação,
nenhum desses eventos satisfaz essa necessidade.
A fim de permitir regras que contemplem todos os
descobramentos de uma movimentação (podendo incluir
lotes, seriais, logs etc), criamos uma rotina callback que
ocorre após todos os dados já finalizados (item a item).
A sintaxe ficou:.
Function AICS_AfterMovEstok(Netcode,Cod_Res,Numero,Tipo:String):boolean.
Todos os parâmetros seguem a mesma nomenclatura das
colunas da tabela Estensai.
Se houver alguma rotina que caia nessa situação, ela deve ser
movida do evento gravar ou após gravar para essa nova
função. Sua declaração pode ser feita em Estensai e/ou no
Estoque, dependendo da visibilidade do objeto que disparou
o evento. Ou, se quiser ser mais genérico, pode ser incluída no
Global-Entrar.
Basta atualizar o Aics antes da implementação.
Nota para audiência técnica e desenvolvedores.
No Aics, existem os procedimentos armazenados, eles
ficam abaixo da tabela virtual STORED. Para executar
esses procedimentos, usam-se chamadas à rotina
ExecStored.
Os eventos do lado do servidor, que são colocados em
System no evento periódico 1 seg, agora podem chamar
o mesmo stored do lado do cliente. O objetivo disso é
uniformizar os robôs existentes.
Essa alteração é pontual, no caso desses rotinas abaixo
da tabela virtual STORED, mesmo no lado do servidor,
o código que será executado é o do lado do cliente.
As diretivas para saber em que ambiente você está são
válidas normalmente (por exemplo, "webaics").
Com essa uniformização, evita-se replicar códigos
praticamente iguais no lado do cliente e servidor.
Basta atualizar o ServAICS. Não há mudanças para
o Aics nessa nota técnica.
Quando novas colunas são criadas em tabelas internas
do AICS, elas estavam sendo instaladas na aba Outros
de cada módulo associado.
Nessa atualização do Aics, essa opção ficou mais flexível.
Agora, mesmo em tabelas e telas nativas, ao criar novas
colunas, você poderá informar em qual aba deseja que
ela seja instalada.
Se a aba não for informada, ficará instalada como
originalmente era, na aba Outros.
Se for informada uma aba já existente, as novas colunas
serão instaladas do final dos elementos nativos para
baixo.
Se for informada uma aba não existente, novas abas
poderão ser criadas para receber os novos objetos.
Basta atualizar o Aics.
Atenção, nota técnica para desenvolvedores.
Já tínhamos a função que executava um relatório em
suas regras locais com a seguinte sintaxe:
Procedure ExecReport(NomeRelat,VistaTab,
Filtro,MensFiltro,Printer:String;Destino:integer).
Pois bem, criamos uma versão avançada dessa rotina
com o objetivo de viabilizar a inclusão em rotinas
longas, por exemplo, na geração de faturas para
inúmeros destinatários.
A sintaxe da nova função é:.
Procedure ExecReportAdv(NomeRelat,VistaTab,Filtro,MensFiltro,
PrinterArq:String;Destino,CodLayout:integer).
Note que há alguns parâmetros novos, PrinterArq passa
a fornecer o nome da impressora destino OU o
nome do arquivo destino, isso em função do valor do
parâmetro "Destino" (1 - tela, 2 - Impressora, 3 - Envio por
email e 4 - Exportação em arquivo) ser 2 ou 4.
O parâmetro CodLayout é a versão visual que será
aplicada, se ele for enviado como 0 (zero), a janela
de seleção de layouts poderá aparecer.
Pela extensão do arquivo, no caso da chamada no Destino
4, o Aics saberá em qual formato gerar os dados.
Para facilitar, as extensões previstas são: PDF, XLS, TXT,
CSV, HTM e TXT.
Basta atualizar o Aics e incluir esse novo recurso em
suas regras locais.
Essa nota destina-se à audiência técnica.
Uma das opções de integração do Aics com dispositivos
é a captura de imagens usando interface Twain.
A sintaxe do comando anterior ainda existe e é bem
simples, basta executar a função Twain, por exemplo:.
MinhaImagem:=Twain; // lê uma imagem.
Essa sintaxe abre a tela de captura, entretanto, na sua
automação local, pode ser que a tela não seja necessária.
Para essa situação, foi criada uma variante dessa função,
bem parecida, bastará chamar TwainAuto que a imagem
já será captutada, sem tela de configuração, como no
exemplo acima, ficaria simplesmente:.
MinhaImagem:=TwainAuto; // lê uma imagem sem
abertura de tela de configuração.
Em ambas as funções o retorno é o nome do arquivo
de imagem (no caminho TMP), o correto é utilizá-lo
(enviar para o servidor de imagens, inserir no seu site
ou o que desejar) e apagar esse arquivo após o uso.
Basta atualizar o Aics.
Novidades no ambiente do usuário devem facilitar o
uso e o desenvolvimento de novos recursos.
O recurso de botões com funções livres criadas nas
regras locais é amplamente aplicado, facilita e organiza
funções especiais.
Nesse nova expansão, estamos permitindo uma sequência
de botões no modo de impressão (ficará também logo
acima dos controle de relatórios) e nos próprios relatórios.
Portanto, passamos a ter mais 2 locais especializados
para instalar as funções dos usuários.
Esse recurso está disponível para as funções anteriores,
após atualizar a tabela de scripts, bastará indicar em
qual local você deseja que o script seja instalado.
Abaixo, informações para a audiência técnica.
Visando dar maior flexibilidade às funções instaladas
no painel de impressão, criamos 2 novas para serem
aplicadas em suas rotinas, a declaração é muito
simples, são:.
function GetSQLPrintFilter:string, que irá retornar uma
expressão SQL contendo o filtro atual da tela e:.
function GetTxtPrintFilter:string, que irá retornar a
explicação textual do filtro aplicado.
Que poderão facilitar exportações, filtros e o que
mais desejar em suas regras locais.
Basta atualizar o AICS.
Nota para audiência técnica.
Imagine que você precisa formatar um documento com
um visual totalmente diferenciado. Nem sempre os recursos
de edição de relatórios ou geração de páginas em HTM
resolvem essas situações.
No formato PDF, que é bem genérico e visa apresentação
de documentos, os recursos gráficos são bem conhecidos.
Uma das opções que permitem personalizar um arquivo
PDF é o preenchimento de formulários, isto é, campos
são marcados como preenchíveis.
Supondo que exista um documento criado no layout
desejado e com essa opção de campos preenchíveis,
quando os campos forem textuais, criamos uma
possibilidade de fixar e dinamizá-los automaticamente
pelo Aics. Em seguida, poderá tomar outros caminhos,
como enviar o PDF por email.
A sintaxe da função é:.
Function FlatenPDF(Origem,Destino:String):boolean.
Sendo Origem o PDF que contém os elementos de
formulário e Destino o PDF final desejado com os
campos preenchidos e já fixos (sem o recurso de
edição). Ambos devem conter o caminho completo.
Durante o processamento, o Aics chamará uma função
que deverá suprir os conteúdos dos campos definidos
no PDF, cuja sintaxe é:
Function AICS_PDFFieldValue(Campo,Valor:String):String.
Sendo que Campo será o nome definido pelo criador
do PDF, Valor irá repetir a mesma informação, a
sua função deverá retornar o texto que irá preencher
o arquivo PDF.
Após isso, o PDF estará gravado e poderá seguir
caminho em sua regra de negócios.
Basta atualizar o Aics para a nova função.