lar - Configurações
Diagrama de layout de dados (1C SKD). Exemplos de uso da função SKD - calcular expressão 1s 8 expressão de campos calculados SKD

O uso adequado de um esquema de composição de dados (DCS) permite:

  • reduzir significativamente o tempo necessário para desenvolver um relatório;
  • elimine a necessidade de criar um manipulador de formulário gerenciado;
  • obtenha um belo resultado com possibilidade de personalização adicional por parte do usuário.

Mas nem todos os desenvolvedores aproveitam ao máximo as capacidades do esquema, já que nem todas as suas configurações são óbvias e intuitivas. Em particular, muitas pessoas sabem que existem campos calculados em 1C SKD, no entanto, não compreendem totalmente o escopo de seu uso e os métodos de trabalhar com eles.

O que é um campo calculado

Na maioria dos casos, a fonte de dados no diagrama de layout é uma consulta. A princípio, dentro da própria consulta você já pode utilizar diversas fórmulas, construções e expressões. Surge uma pergunta natural: por que precisamos de funcionalidade duplicada?

O fato é que o sistema de controle de acesso é algo mais do que apenas exibir o resultado de uma consulta, e isso é claramente visível no formulário de criação do diagrama (Fig. 1).

Os campos calculados permitem realizar determinadas ações com o conjunto de dados gerado:

  • Produza uma matriz de dados recebidos por uma solicitação em uma célula específica, combinando várias linhas em uma;
  • Acesse as funções de exportação do módulo geral;
  • Execute as diversas expressões disponíveis para a linguagem de layout e use as funções especiais EvaluateExpression.

Vamos examinar esta lista.

Matriz de valores em uma célula

Vamos simular uma situação em que é necessário receber todos os números dos documentos de recebimento de uma contraparte em uma célula separada:


Assim, criamos um campo de cálculo adicional em nosso esquema;


Como você pode ver no exemplo acima, não há dificuldades em adicionar e processar campos calculados. Usamos duas funções: Array() e ConnectRows().

Algumas palavras sobre este último. Além do primeiro parâmetro que indica o identificador do array, valores ou valor, ele pode definir mais dois:

  1. Separador de Elementos – indica qual caractere separará um elemento do array ou uma linha de uma tabela de valores de outro (no nosso caso, omitimos este parâmetro e uma quebra de linha foi atribuída por padrão);
  2. Separador de Colunas – caractere usado para separar colunas de uma tabela de valores (ponto e vírgula é usado por padrão).

Acessando as funções de exportação de um módulo comum

As funções de um módulo comum podem atuar como fonte de dados para preencher um campo calculado.

Alguns pontos importantes:

  • A função deve ser exportável;
  • Se uma função estiver localizada em um módulo comum com o conjunto de atributos “Global”, ela é chamada diretamente pelo nome, caso contrário a função deve ser chamada de acordo com o esquema “Nome do módulo compartilhado”. "Nome da função a ser chamada."

Como exemplo de utilização, pegaremos a mesma solicitação de documentos de recebimento e a exibiremos em uma coluna separada. Não descreveremos a solicitação em si, vamos diretamente aos campos calculados:


Assim, vemos que quase qualquer processador de dados pode ser inicializado a partir do sistema de controle de acesso, o que amplia significativamente as possibilidades de utilização do esquema.

Expressões de linguagem de layout

Muitas vezes, no trabalho de um desenvolvedor, surge uma situação em que é necessário exibir o resultado da divisão no campo ACS:

  1. Calcule o custo médio do item;
  2. Todos os tipos de interesse;
  3. Cálculos de rendimentos médios, etc.

Para evitar problemas, nestes casos é aconselhável inserir um teste de divisão por 0 no campo calculado.

Isto pode ser feito usando a construção “Escolha Quando….Então… Caso contrário… Fim”.

No final, algumas palavras sobre a relativamente nova função CalculaExpression(). Com a sua ajuda, em particular, é possível calcular desvios de custo entre as linhas atuais e anteriores, saldo acumulado, etc.

Digamos que você possa obter a Soma do Documento da linha anterior da nossa solicitação especificando o valor Calcular Expressão ("Soma do Documento", "Soma Anterior") no campo "Expressão".

  • 1C-Bitrix
  • Uma das áreas mais importantes do software empresarial são os relatórios. O destino de uma empresa pode depender (e não em sentido figurado!) da facilidade com que é personalizar um relatório existente de acordo com as novas necessidades da empresa (e da legislação) ou criar um novo, seja um relatório para a administração fiscal. ou um diagrama da dependência da demanda por bens em relação à estação do ano e outros fatores. Um sistema de relatórios poderoso e flexível que facilita extrair os dados necessários do sistema, apresentá-los de uma forma compreensível, permitindo ao usuário final reconfigurar um relatório padrão para ver os dados sob uma nova luz - este é o ideal que cada sistema de negócios deve se esforçar.

    Na plataforma 1C:Enterprise, um mecanismo denominado “Sistema de Composição de Dados” (abreviado como DCS) é responsável pela geração de relatórios. Neste artigo tentaremos dar uma breve descrição da ideia e arquitetura do mecanismo ACS e suas capacidades.


    ACS é um mecanismo baseado em uma descrição declarativa de relatórios. O sistema de controle de acesso foi projetado para gerar relatórios e exibir informações com estrutura complexa. A propósito, além de desenvolver relatórios, o mecanismo ACS também é usado em 1C:Enterprise em uma lista dinâmica, uma ferramenta para exibir informações de lista com rica funcionalidade (exibição de listas planas e hierárquicas, design condicional de linhas, agrupamentos, etc. ).

    Um pouco de história

    Na primeira versão da plataforma 1C:Enterprise 8, versão 8.0, os relatórios eram feitos assim:
    1. Uma ou mais consultas foram escritas na linguagem de consulta 1C (linguagem semelhante a SQL, mais sobre isso abaixo).
    2. Foi escrito um código que transferia os resultados das consultas executadas para uma planilha ou gráfico. O código também poderia realizar trabalhos que não poderiam ser realizados em uma consulta - por exemplo, calculava valores usando a linguagem 1C integrada.
    A abordagem é direta, mas não a mais conveniente - há configurações visuais mínimas, tudo tem que ser programado “manualmente”. E um dos trunfos da plataforma completamente nova “1C:Enterprise 8” naquela época era a minimização na solução de aplicação da quantidade de código que tinha que ser escrito manualmente, em particular, através do design visual. Seria lógico seguir o mesmo caminho no mecanismo de denúncia. Isto foi feito através do desenvolvimento de um novo mecanismo – o Sistema de Composição de Dados.

    Uma das ideias que basearam o sistema de controle de acesso foi a flexibilidade e customização de relatórios, acessíveis tanto ao desenvolvedor quanto ao usuário final. Idealmente, eu gostaria de dar ao usuário final acesso ao mesmo conjunto de ferramentas de design de relatórios que o desenvolvedor. Seria lógico criar um conjunto único de ferramentas disponíveis para todos. Pois bem, como as ferramentas requerem a participação do usuário final, isso significa que o uso de programação nelas deve ser reduzido ao mínimo (é melhor eliminá-lo completamente), e as configurações visuais devem ser aproveitadas ao máximo.

    Formulação do problema

    A tarefa da equipe de desenvolvimento era criar um sistema de relatórios baseado não em algorítmico (ou seja, por meio da escrita de código), mas em uma abordagem declarativa para a criação de relatórios. E acreditamos que o problema foi resolvido com sucesso. Em nossa experiência, cerca de 80% dos relatórios necessários podem ser implementados usando ACS sem uma única linha de código (exceto para escrever fórmulas para campos calculados), principalmente por meio de configurações visuais.
    O desenvolvimento da primeira versão do SDS demorou cerca de 5 pessoas-ano.

    Duas línguas

    Existem duas linguagens envolvidas na criação de relatórios. Uma é uma linguagem de consulta usada para recuperar dados. A segunda é a linguagem de expressão de composição de dados, destinada a escrever expressões utilizadas em diversas partes do sistema, por exemplo, em configurações de composição de dados, para descrever expressões de campos do usuário.

    Linguagem de consulta

    A linguagem de consulta é baseada em SQL e é fácil de aprender para quem tem conhecimento em SQL. Solicitação de exemplo:

    É fácil ver análogos das seções padrão para consultas SQL - SELECT, FROM, GROUP BY, ORDER BY.

    Ao mesmo tempo, a linguagem de consulta contém um número significativo de extensões destinadas a refletir as especificidades dos problemas financeiros e económicos e a maximizar a redução de esforços para desenvolver soluções de aplicação:

    • Acessando campos usando um ponto. Se os campos de uma tabela são do tipo referência (armazenam links para objetos de outra tabela), o desenvolvedor pode referenciá-los no texto da solicitação através de “.”, e o sistema não limita o número de níveis de aninhamento de tais links (por exemplo, Pedido do Cliente. Contrato. Organização. Telefone).
    • Formação multidimensional e multinível de resultados. Os totais e subtotais são formados levando em consideração o agrupamento e a hierarquia, os níveis podem ser percorridos em qualquer ordem com a soma e é garantida a correta construção dos totais de acordo com as dimensões de tempo.
    • Suporte para tabelas virtuais. As tabelas virtuais fornecidas pelo sistema permitem obter dados quase prontos para a maioria das tarefas do aplicativo, sem a necessidade de criar consultas complexas. Assim, uma tabela virtual pode fornecer dados sobre saldos de produtos por períodos em um determinado momento. Ao mesmo tempo, as tabelas virtuais aproveitam ao máximo as informações armazenadas, por exemplo, totais previamente calculados, etc.
    • Tabelas temporárias. A linguagem de consulta permite usar tabelas temporárias em consultas. Com a ajuda deles, você pode melhorar o desempenho da consulta, em alguns casos reduzir o número de bloqueios e facilitar a leitura do texto da consulta.
    • Solicitações em lote. Para tornar mais conveniente o trabalho com tabelas temporárias, a linguagem de consulta suporta o trabalho com consultas em lote - assim, a criação de uma tabela temporária e seu uso são colocados em uma consulta. Uma solicitação em lote é uma sequência de solicitações separadas por ponto e vírgula (";"). As solicitações do lote são executadas uma após a outra. O resultado da execução de uma solicitação em lote, dependendo do método usado, será o resultado retornado pela última solicitação no lote ou uma matriz de resultados de todas as consultas no lote na sequência em que as consultas no lote seguem .
    • Recuperando representações de campos de referência. Cada tabela de objetos (na qual é armazenado um livro de referência ou documento) possui um campo virtual - “Visualizar”. Este campo contém uma representação textual do objeto e facilita o trabalho do criador do relatório. Portanto, para um documento, este campo contém todas as informações principais - o nome do tipo de documento, seu número e data (por exemplo, “Venda 000000003 de 06/07/2017 17:49:14”), salvando o desenvolvedor de escrevendo um campo calculado.
    • e etc.
    O mecanismo de solicitação modifica automaticamente a solicitação, levando em consideração as funções às quais pertence o usuário em cujo nome a solicitação é executada (ou seja, o usuário verá apenas os dados que tem o direito de ver) e as opções funcionais (ou seja, de acordo com aqueles configurados na funcionalidade da solução do aplicativo).

    Existem também extensões especiais de linguagem de consulta para sistemas de controle de acesso. A expansão é realizada usando instruções sintáticas especiais entre chaves e colocadas diretamente no corpo da solicitação. Usando extensões, o desenvolvedor determina quais operações o usuário final poderá realizar ao personalizar o relatório.

    Por exemplo:

    • ESCOLHER. Esta frase descreve os campos que o usuário poderá selecionar para saída. Após esta palavra-chave, são listados os aliases dos campos da lista de seleção da consulta principal que estarão disponíveis para configuração, separados por vírgula. Exemplo: (SELECIONAR Item, Armazém)
    • ONDE. São descritos os campos nos quais o usuário pode aplicar a seleção. Esta proposta utiliza campos de tabela. O uso de aliases de campo da lista de seleção não é permitido. Cada parte da união pode conter seu próprio elemento WHERE. Exemplos: (WHERE Item.*, Armazém), (WHERE Document.Date >= &StartDate, Document.Date<= &ДатаКонца}
    • e etc.
    Exemplo de uso de extensões:

    Linguagem de expressão de composição de dados

    A linguagem de expressão de composição de dados foi projetada para escrever expressões usadas, em particular, para descrever expressões de campos personalizados. SKD permite definir campos personalizados em um relatório usando suas próprias expressões ou conjuntos de opções com condições para sua seleção (análogo a CASE em SQL). Os campos personalizados são semelhantes aos campos calculados. Eles podem ser configurados tanto no configurador quanto no modo 1C:Enterprise, mas as funções dos módulos comuns não podem ser usadas em expressões de campos personalizados. Portanto, os campos personalizados destinam-se ao usuário e não ao desenvolvedor.

    Exemplo:

    O processo de criação de um relatório sobre o sistema de controle de acesso

    Ao criar um relatório, precisamos criar um layout que defina como os dados serão exibidos no relatório. Você pode criar um layout com base em um diagrama de layout de dados. Um diagrama de layout de dados descreve a essência dos dados fornecidos ao relatório (de onde obter os dados e como seu layout pode ser controlado). O esquema de composição de dados é a base sobre a qual todos os tipos de relatórios podem ser gerados. O esquema de composição de dados pode conter:
    • solicitar texto com instruções para o sistema de composição de dados;
    • descrição de múltiplos conjuntos de dados;
    • descrição detalhada dos campos disponíveis;
    • descrever relacionamentos entre vários conjuntos de dados;
    • descrição dos parâmetros de aquisição de dados;
    • descrição de layouts e agrupamentos de campos;
    • e etc.

    Por exemplo, você pode adicionar uma consulta ao esquema de composição de dados como um conjunto de dados e chamar o construtor de consulta, que permite criar graficamente uma consulta de complexidade arbitrária:

    O resultado do lançamento do designer de consulta será o texto da consulta (na linguagem de consulta 1C:Enterprise). Este texto pode ser ajustado manualmente se necessário:

    Pode haver vários conjuntos de dados em um esquema de layout de dados, os conjuntos de dados podem ser vinculados de qualquer maneira no layout, campos calculados podem ser adicionados, parâmetros de relatório podem ser especificados, etc. Vale a pena mencionar uma característica interessante do mecanismo de consulta em 1C:Enterprise. As consultas são finalmente traduzidas em um dialeto de SQL específico para o SGBD com o qual o aplicativo opera diretamente. Em geral, tentamos usar ao máximo os recursos dos servidores SGBD (estamos limitados pelo fato de usarmos apenas os recursos que estão disponíveis simultaneamente em todos os SGBDs suportados pela plataforma 1C:Enterprise - MS SQL, Oracle, IBM DB2 , PostgreSQL). Assim, no nível da consulta em campos calculados, só podemos usar as funções que são traduzidas para SQL.

    Mas no nível do esquema de composição de dados, já podemos adicionar campos personalizados e usar funções neles na linguagem de desenvolvimento 1C integrada (incluindo aquelas escritas por nós), o que expande bastante os recursos dos relatórios. Tecnicamente, é assim - tudo o que pode ser traduzido em SQL é traduzido em SQL, a consulta é executada no nível do SGBD, os resultados da consulta são colocados na memória do servidor de aplicação 1C e o SKD calcula os valores para cada registro ​​de campos calculados cujas fórmulas são escritas na linguagem 1C.


    Adicionando campos personalizados

    Você pode adicionar um número arbitrário de tabelas e gráficos ao relatório:


    Designer de relatório


    Relatório de tempo de execução

    Usando o SKD, o usuário pode adicionar seleções complexas ao relatório (que serão adicionadas à solicitação nos lugares certos), design condicional (permitindo que os campos exibidos sejam formatados de forma diferente - com fonte, cor, etc., dependendo de seus valores ) e muito mais. .

    O processo de construção e geração de um relatório pode ser descrito resumidamente da seguinte forma:

    • O desenvolvedor em tempo de design com a ajuda de um designer (ou em tempo de execução usando código) determina o esquema de layout de dados:
      • Texto da solicitação/solicitações
      • Descrição dos campos calculados
      • Relacionamentos entre solicitações (se houver vários deles)
      • Opções de relatório
      • Configurações padrão
      • Etc.
    • As configurações acima são salvas no layout
    • O usuário abre o relatório
      • Possivelmente faz configurações adicionais (por exemplo, altera valores de parâmetros)
      • Clica no botão “Gerar”
    • As configurações do usuário são aplicadas ao esquema de composição de dados definido pelo desenvolvedor.
    • Um layout intermediário de composição de dados é formado, contendo instruções sobre de onde receber os dados. Em particular, as consultas especificadas no layout são ajustadas. Assim, os campos que não são utilizados no relatório são retirados da solicitação (isso é feito para minimizar a quantidade de dados recebidos). Todos os campos que participam de fórmulas de campos calculados são adicionados à consulta.
    • O processador de composição de dados entra em ação. O processador de layout executa consultas, vincula conjuntos de dados, calcula valores para campos e recursos calculados e realiza agrupamentos. Em suma, faz todos os cálculos que não foram realizados no nível do SGBD.
    • O processador de saída de dados lança uma solicitação de execução e exibe os dados recebidos em uma planilha, gráfico, etc.


    O processo de geração de um relatório usando o mecanismo ACS

    Tentamos minimizar a quantidade de dados de relatório transferidos do servidor para o aplicativo cliente. Ao exibir dados em um documento de planilha, ao abrir um documento de planilha, transferimos do servidor apenas as linhas que o usuário vê no início do documento. À medida que o usuário avança nas linhas do documento, os dados ausentes são baixados do servidor para o cliente.

    Configurações personalizadas

    Todas as ferramentas ACS estão disponíveis tanto para o desenvolvedor quanto para o usuário final. Mas a prática tem mostrado que o usuário final muitas vezes fica intimidado pela abundância de recursos da ferramenta. Além disso, na maioria dos casos, o usuário final não precisa de todo o poder das configurações - basta que ele tenha acesso rápido para configurar um ou dois parâmetros do relatório (por exemplo, período e contraparte). A partir de uma determinada versão da plataforma, o desenvolvedor do relatório tem a oportunidade de marcar quais configurações de relatório estão disponíveis para o usuário. Isso é feito usando a caixa de seleção “Incluir nas configurações do usuário”. Além disso, as configurações do relatório agora possuem um sinalizador “Modo de exibição”, que assume um dos três valores:
    • Acesso rápido. A configuração será exibida diretamente na parte superior da janela do relatório.
    • Ordinário. A configuração estará disponível através do botão “Configurações”.
    • Não disponível. A configuração não estará disponível para o usuário final.


    Configurando o modo de exibição em tempo de design


    Exibir a configuração no modo de acesso rápido em tempo de execução (no botão Gerar)

    Planos de desenvolvimento

    Uma das nossas áreas prioritárias no desenvolvimento de sistemas de controle de acesso é a simplificação das configurações do usuário. Nossa experiência mostra que, para alguns usuários finais, trabalhar com as configurações do usuário ainda é uma tarefa importante. Levamos isso em consideração e estamos trabalhando nesse sentido. Assim, também será mais fácil para os desenvolvedores trabalharem com sistemas de controle de acesso, porque Nós, como antes, queremos fornecer uma ferramenta única para configurar relatórios tanto para o desenvolvedor quanto para o usuário final.

    Faça login no site como estudante

    Faça login como aluno para acessar os materiais escolares

    Sistema de composição de dados 1C 8.3 para iniciantes: contando os resultados (recursos)

    O objetivo desta lição será:

    • Escreva um relatório que exiba uma lista de produtos (diretório de alimentos), seu conteúdo calórico e sabor.
    • Agrupe os produtos por cor.
    • Saiba mais sobre resumo (recursos) e campos calculados.

    Criar um novo relatório

    Como nas lições anteriores, abrimos o banco de dados " Delicatessen"no configurador e crie um novo relatório através do menu" Arquivo"->"Novo...":

    Tipo de documento - relatório externo:

    No formulário de configuração do relatório, escreva o nome " Lição 3" e pressione o botão " Diagrama de composição de dados abertos":

    Deixe o nome do esquema padrão e clique no botão " Preparar":

    Adicionando uma solicitação por meio do construtor

    Na aba " Conjunto de dados"clique verde sinal de mais e selecione " Adicionar conjunto de dados – consulta":

    Em vez de escrever o texto da solicitação manualmente, nós o executamos novamente construtor de consulta:

    Na "guia" Tabelas"arraste a mesa" Comida"da primeira coluna para a segunda:

    Selecione na tabela " Comida"campos que iremos solicitar. Para isso, arraste e solte os campos" Nome", "Gosto", "Cor" E " Conteúdo calórico"da segunda coluna para a terceira:

    Aconteceu assim:

    Aperte o botão " OK" - o texto da solicitação foi gerado automaticamente:

    Criando configurações de apresentação de relatório

    Vá para a guia " Configurações" e clique em varinha mágica, chamar designer de configurações:

    Selecione o tipo de relatório " Lista..." e pressione o botão " Avançar":

    Arraste da coluna da esquerda para a direita os campos que serão exibidos na lista e clique em " Avançar":

    Arraste da coluna esquerda para o campo direito " Cor" - isso vai acontecer agrupamento linhas no relatório. Clique em " OK":

    E aqui está o resultado do trabalho do designer. Hierarquia do nosso relatório:

    • o relatório como um todo
    • agrupamento "Cor"
    • entradas detalhadas - linhas com nomes de alimentos

    Salvar o relatório (botão disquete) E sem fechar Abriremos imediatamente o configurador em modo de usuário. Aconteceu assim:

    Alterando a ordem das colunas

    Mas vamos vamos mudar a ordem colunas (setas para cima e para baixo) para que fique como na figura abaixo:

    Vamos salvar o relatório e abri-lo novamente em modo usuário:

    Ótimo, isso é muito melhor.

    Vamos resumir o conteúdo calórico

    Seria bom resumir o conteúdo calórico dos alimentos por grupo. Para ver a soma do conteúdo calórico de todos os produtos, digamos, brancos ou amarelos. Ou descubra o conteúdo calórico total de todos os produtos do banco de dados.

    Para tanto, existe um mecanismo de cálculo de recursos.

    Vá para a guia " Recursos"e arraste o campo" Conteúdo calórico"(vamos resumir) da coluna da esquerda para a direita.

    Neste caso, no campo, selecione a expressão na lista suspensa " Quantidade (calorias)", já que o total será a soma de todos os elementos incluídos no total:

    Salvamos e geramos um relatório:

    Agora temos resultados para cada um dos grupos e para o relatório como um todo.

    Vamos resumir (média) em termos de calorias

    Agora vamos fazer com que apareça em outra coluna média conteúdo calórico dos produtos por grupos e no relatório como um todo.

    Você não pode tocar na coluna “Calorias” existente - o total já está exibido nela, então vamos criar outro campo, que será uma cópia exata do campo "Calorias".

    Para criar tal campo “virtual”, usaremos o mecanismo campos calculados.

    Vá para a guia " Campos calculados" e pressione verde sinal de mais:

    Em uma coluna " Caminho de dados"escrevemos o nome do novo campo ( perfeitamente, sem espaços). Que seja chamado de " Conteúdo médio de calorias", e na coluna" Expressão"escrevemos o nome de um campo existente com base no qual o novo campo será calculado. Escrevemos lá " Conteúdo calórico". Coluna " Cabeçalho" será preenchido automaticamente.

    Adicionamos um novo campo (" Conteúdo médio de calorias"), mas não aparecerá no relatório por si só - você precisa ligar novamente designer de configurações("varinha mágica") ou adicione este campo manualmente.

    Vamos fazê-lo segundo caminho. Para fazer isso, vá até a aba " Configurações", selecione " Relatório"(afinal, queremos adicionar o campo como um todo ao relatório), selecione a aba na parte inferior" Campos selecionados"e arraste o campo" Conteúdo médio de calorias"da coluna da esquerda para a direita:

    Aconteceu assim:

    Salvamos e geramos um relatório:

    O campo apareceu e vemos que seus valores são os valores do campo “Calorias”. Ótimo!

    Para fazer isso, usaremos novamente o mecanismo que já conhecemos recursos(resumindo). Vá para a guia " Recursos"e arraste o campo" Conteúdo médio de calorias"da coluna da esquerda para a direita:

    Além disso, na coluna " Expressão"escolher" Média (calorias médias)":

    Salvamos e geramos um relatório:

    Vemos que para os grupos, ou seja, para cada cor, e para o relatório como um todo, o valor médio foi calculado de forma absolutamente correta. Mas eles estão presentes entradas extras para produtos individuais (não grupos) que gostaria de remover do relatório.

    Você sabe por que eles apareceram (valores não por grupo)? Porque quando adicionamos o campo " Conteúdo médio de calorias"nas configurações do relatório, na segunda etapa selecionamos todo o relatório e esse novo campo acabou no elemento " Detalhado registros".

    Vamos corrigir o erro. Para fazer isso, volte para a aba " Configurações", selecione " Entradas detalhadas" primeiro de cima (etapa 2) e depois " Entradas detalhadas"de baixo (etapa 3), vá para o marcador" Selecionado Campos" e veremos na coluna da direita o elemento " Auto".

    Elemento " Auto" - este não é um campo. São vários campos que caem aqui automaticamente com base em configurações de nível superior.

    Para ver quais são esses campos, clique no elemento " Auto" certo botão e selecione " Expandir":

    Elemento " Auto" expandido para os seguintes campos:

    E aqui está o nosso campo" Conteúdo médio de calorias"que veio aqui do ponto" Relatório" quando o arrastamos para lá. Apenas vamos remover marque a caixa ao lado deste campo para remover sua saída.

    CalcularExpressãoé uma função ACS bastante difícil de entender e os exemplos de aplicação nas informações de referência são bastante escassos. Este artigo discute exemplos que certamente serão úteis para todos os desenvolvedores:

    1. total acumulado no agrupamento;
    2. total acumulado em uma tabela cruzada;
    3. obtendo o valor anterior;
    4. Saída PM em uma linha.

    1. Obtenção de indicador pelo regime de competência

    Vamos obter a quantidade de mercadorias como um total acumulado no nível do agrupamento. Para fazer isso, crie um campo calculado (veja a Figura 1).
    Na aba "Recursos", defina a função para o campo calculado:
    CalculaExpression("Soma(QuantidadeTurnover)", "Primeiro", "Atual")
    que somará o número de produtos do primeiro registro ao atual (ver Figura 2).

    Se a quantidade total acumulada de um item precisar ser obtida no nível de registros detalhados, definimos a função CalculaExpression para o campo calculado na guia “Campos calculados” (ver Figura 3).
    Dependendo do nível de obtenção do total acumulado, criamos um agrupamento (ver Figura 4): ao nível dos recursos - agrupamento por mercadorias, ao nível do controlo remoto - agrupamento de registos detalhados.
    Figura 4. Agrupamentos de relatórios com totais acumulados

    2. Obtendo o valor do indicador da linha anterior

    Vamos obter a taxa de câmbio da data e da data anterior. Para fazer isso, crie um campo calculado e escreva a seguinte expressão no campo de expressão (veja a Figura 5):
    CalculaExpression("Taxa", "Anterior", "Anterior")
    que levará o valor anterior da taxa de câmbio para a linha atual, o último parâmetro da função limita o recebimento de dados.
    Como estamos trabalhando no nível de registros detalhados, vamos imediatamente para a aba “Configurações” e criamos um agrupamento - registros detalhados.

    3. Obtenção de um indicador como um total acumulado em uma tabela cruzada

    Vamos obter a quantidade de mercadorias pelo regime de competência por período. Para fazer isso, crie um campo calculado (veja a Figura 1). Na aba “Recursos”, especificamos a seguinte expressão para o campo calculado (ver Figura 6):
    CalculaExpression("Soma(QuantidadeTurnover)", "Período", "Primeiro", "Atual")
    que no nível do agrupamento calculará a quantidade de mercadorias no intervalo da primeira linha até a atual no contexto do período de cada item.
    Na aba “Configurações”, crie uma tabela agrupando por item em uma linha e agrupando por período em uma coluna (ver Figura 7).

    4. Saída de dados tabulares em uma linha

    Métodos para exibir dados tabulares em uma linha, incluindo o método que usa a função CalculaExpression, são discutidos no artigo

    1. Calcular (Avaliar)- destina-se a avaliar uma expressão no contexto de algum agrupamento. A função é utilizada para compatibilidade com versões anteriores da plataforma. Recomenda-se usar a função CalculaExpression.

    Sintaxe:
    Calcular(Expressão, Agrupamento, CalculationType)

    Opções:

    • Expressão(Linha). Contém uma expressão calculada;
    • Agrupamento(Linha). Contém o nome do agrupamento no contexto do qual a expressão será avaliada. Se uma string vazia for usada como nome do agrupamento, o cálculo será realizado no contexto do agrupamento atual. Se a string GrandTotal for usada como nome do grupo, o cálculo será realizado no contexto do total geral. Caso contrário, o cálculo será realizado no contexto do grupo pai com o mesmo nome.
      Por exemplo:
      Soma(Sales.SumTurnover) / Calcular("Soma(Sales.SumTurnover)", "Total").
      Neste exemplo, o resultado será a razão entre o valor do campo "Vendas.ValorTurnover" do registro de agrupamento e o valor do mesmo campo em todo o layout.
    • Tipo de cálculo(Linha). Se este parâmetro estiver definido como "TotalTotal", a expressão será calculada para todos os registros do agrupamento. Caso o valor do parâmetro seja “Agrupamento”, os valores serão calculados para o registro do grupo de agrupamento atual.
    2. Avaliar Expressão (EvalExpression) - destina-se a avaliar uma expressão no contexto de algum agrupamento. A função leva em consideração a seleção de agrupamentos, mas não leva em conta as seleções hierárquicas. A função não pode ser aplicada a um agrupamento na seleção de grupo desse agrupamento.

    Sintaxe:
    CalculaExpression(Expressão, Agrupamento, CalculationType, Início, Fim, Classificação, HierarchicalSort, ProcessingIdenticalOrderValues)

    Opções:

    • Expressão(Linha). Contém uma expressão calculada;
    • Agrupamento(Linha). Contém o nome do agrupamento no contexto do qual a expressão será avaliada. Se uma string vazia for usada como nome do agrupamento, o cálculo será realizado no contexto do agrupamento atual. Se a string GrandTotal for usada como nome do grupo, o cálculo será realizado no contexto do total geral. Caso contrário, o cálculo será realizado no contexto do agrupamento pai com esse nome;
    • Tipo de cálculo(Linha). Se este parâmetro estiver definido como "TotalTotal", a expressão será calculada para todos os registros do agrupamento. Caso o valor do parâmetro seja “Agrupamento”, os valores serão calculados para o registro do grupo de agrupamento atual. Se o parâmetro estiver definido como "Agrupamento sem recursos", ao calcular a função para um registro de grupo por recurso, a expressão será avaliada para o primeiro registro de grupo do agrupamento original. Ao avaliar a função CalculaExpression com o valor "GroupingNonResource" para registros de grupos que não são agrupamentos por recurso, a função é avaliada da mesma forma que seria avaliada com o valor do parâmetro "Grouping". O construtor de layout de composição de dados, ao gerar um layout de composição de dados ao gerar um campo - um recurso pelo qual o agrupamento é realizado, para o layout, gera para o layout uma expressão calculada usando a função CalculaExpression com o parâmetro "GroupingNon-Resource" especificado. Para outros recursos agrupados por recurso, são retornadas expressões de recursos normais. Se o parâmetro estiver definido como "Hierarquia", então a expressão deverá ser avaliada para o registro hierárquico pai, se houver, e para todo o agrupamento, se não houver registro hierárquico pai. O construtor de layout, ao gerar uma expressão para o campo % no Grupo de Hierarquia, gera uma expressão contendo o relacionamento da expressão de recurso com a função CalculaExpression para a expressão de recurso que está sendo calculada para o agrupamento atual com tipo de cálculo Hierarquia.
    • Começar. Indica de qual registro o fragmento deve começar, em qual função de expressão agregada deve ser calculada e de qual registro obter valores de campo fora das funções agregadas. Uma string contendo um dos seguintes:
      • "Primeiro" É necessário obter o primeiro registro de agrupamento. Após a palavra entre colchetes, você pode especificar uma expressão, cujo resultado será usado como deslocamento desde o início do agrupamento. O valor resultante deve ser um número inteiro maior que zero. Por exemplo, Primeiro(3) – recebendo o terceiro registro do início do agrupamento. Se o primeiro registro estiver fora do agrupamento, considera-se que não há registros. Por exemplo, se houver 3 registros e você quiser obter Primeiro(4), considera-se que não há registros.
      • "Durar" Você precisa obter o último registro de agrupamento. Após a palavra entre colchetes, você pode especificar uma expressão cujo resultado será usado como deslocamento do final do agrupamento. O valor resultante deve ser um número inteiro maior que zero. Por exemplo, Last(3) – recebendo o terceiro registro do final do grupo. Se o último registro estiver fora do agrupamento, considera-se que não há registros. Por exemplo, se houver 3 registros e você quiser obter Last(4), considera-se que não há registros.
      • "Anterior" Você precisa obter o registro de agrupamento anterior. Após a palavra entre colchetes, você pode especificar uma expressão, cujo resultado será usado como um deslocamento do registro de agrupamento atual. Por exemplo, Anterior(2) – obtendo o anterior do registro anterior. Se o registro anterior estiver fora do agrupamento (por exemplo, o segundo registro de agrupamento requer a obtenção de Anterior(3)), então o primeiro registro de agrupamento será obtido. Ao receber o registro anterior para o total do agrupamento, obtém-se o primeiro registro.
      • "Próximo" Você precisa obter o próximo registro de agrupamento. Após a palavra entre colchetes, você pode especificar uma expressão, cujo resultado será usado como um deslocamento a partir do registro de agrupamento atual. Por exemplo, Next(2) – obtendo o próximo do próximo registro. Se o próximo registro ultrapassar o agrupamento, considera-se que não há registros. Por exemplo, se houver 3 entradas e a terceira entrada receber Next, considera-se que não há entradas. Quando é recebido o próximo registro para o total do agrupamento, considera-se que não há registro.
      • "Atual". Você precisa obter o registro atual. Ao recuperar um total de agrupamento, o primeiro registro é obtido.
      • "Valor Limite". A necessidade de obter um registro pelo valor especificado. Após a palavra LimitingValue entre parênteses, é necessário indicar a expressão com cujo valor deseja iniciar o fragmento, o primeiro campo de ordenação. O primeiro registro cujo valor do campo de ordenação for maior ou igual ao valor especificado será retornado como registro. Por exemplo, se o campo Período for usado como campo de ordenação e tiver os valores 01/01/2010, 01/02/2010, 01/03/2010, e você quiser obter o LimitingValue(DateTime(2010 , 1, 15)), então será obtido um registro com a data 01/02 2010.
    • Fim. Indica para qual registro o fragmento deve continuar, no qual a expressão agregada deve ser calculada. Uma string contendo um dos seguintes:
      • "Primeiro"
      • "Durar"
      • "Anterior"
      • "Próximo"
      • "Atual".
      • "Valor Limite".
    • Ordenação. Uma string que lista as expressões, separadas por vírgulas, na direção em que a sequência deve ser ordenada. Se não for especificado, a ordenação será executada da mesma forma que para o agrupamento para o qual a expressão é avaliada. Após cada expressão, você pode especificar a palavra-chave Ascendente, para ordenar em ordem crescente, Decrescente, para ordenar em ordem decrescente, Ordenação Automática, para ordenar os campos de referência pelos campos pelos quais deseja ordenar o objeto que está sendo referenciado. A palavra Ordem automática pode ser usada tanto com a palavra Crescente quanto com a palavra Decrescente.
    • Classificação Hierárquica. Semelhante à classificação. Usado para organizar registros hierárquicos. Se não for especificado, o compositor de layout gera a ordenação de acordo com a ordenação especificada no parâmetro Sort.
    • Processando os mesmos valores do pedido. Uma string contendo um dos seguintes:
      • "Juntos" significa que uma sequência de registros ordenados é usada para determinar os registros anteriores e seguintes;
      • “Separadamente” significa que os registros anteriores e seguintes são determinados com base nos valores das expressões de ordenação;
      Por exemplo, se a sequência resultante for ordenada por data:
      1. 01 de janeiro de 2001 Ivanov M. 10
      2. 02 de janeiro de 2001 Petrov S. 20
      3. 02 de janeiro de 2001 Sidorov R. 30
      4. 03 de janeiro de 2001 Petrov S. 40
      Ao utilizar o processamento de valores idênticos da ordem “Separadamente”, o anterior para o registro 3 será o registro 2, e ao utilizar “Juntos” - o registro 1. E o fragmento do registro atual para o registro 2 para “Separadamente” será o registro 2, e para “Juntos” - registros 2 e 3. Assim, o total do registro atual para “Separadamente” será 20, e para “Juntos” - 50. Quando “Juntos” for especificado no Início e Parâmetros finais, não é possível especificar um deslocamento para as posições “Primeiro”, “Último”, “Anterior”, “Próximo”. O valor padrão é "Separado".
    Exemplo:
    Obtenção da relação entre o valor do campo "Sales.AmountTurnover" de um registro de agrupamento e o valor do mesmo campo em todo o layout:
    Soma(Sales.SumTurnover) / CalculaExpression("Sum(Sales.SumTurnover)", "Total").

    Este exemplo calcula o valor da hierarquia atual:
    Escolha
    Quando Nível() > 0
    Então EvaluateExpression("Referência", "Hierarquia")
    Caso contrário, Nulo
    Fim

    Notas:
    A função leva em consideração a seleção de agrupamentos, mas não leva em conta as seleções hierárquicas. A função não pode ser aplicada a um agrupamento na seleção de grupo desse agrupamento. Por exemplo, ao selecionar o agrupamento Nomenclatura, não é possível utilizar a expressão CalculaExpression("Sum(SumTurnover)", "TotalTotal") > 1000 . Mas tal expressão pode ser usada na seleção hierárquica. Se o registro final preceder o registro inicial, considera-se que não há registros para cálculo de dados detalhados e cálculo de funções agregadas. Ao calcular expressões de intervalo para um total geral (o parâmetro Grouping está definido como "GrossTotal"), presume-se que não há registros para calcular dados detalhados e calcular funções agregadas. Ao gerar uma expressão para a função CalculaExpression, o compositor de layout, se a expressão de ordenação contém campos que não podem ser usados ​​no agrupamento, substitui a função CalculaExpression por NULL.

    3. Avalie a expressão com Group Array (EvalExpression With Group Array) - a função retorna um array, cada elemento contém o resultado do cálculo de uma expressão para agrupamento pelo campo especificado.

    Sintaxe:
    CalculaExpressionWithGroupArray (Expressão, GroupFieldExpressions, SelectRecords, SelectGroups)

    Opções:

    • Expressão(String) - a expressão a ser avaliada. Por exemplo, "Valor(Valor do faturamento)";
    • FieldExpressionsGrupos
    • Seleção de Registros
    • Seleção de Grupos- seleção aplicada a registros de grupo. Por exemplo: "Valor(Valor do faturamento) > &Parâmetro1".
    Exemplo:
    Maximum(CalculateExpressionWithGroupArray("Valor(ValorTurnover)", "Contraparte"));


    O construtor de layout, ao gerar expressões para exibição de um campo customizado cuja expressão contém apenas a função CalculaArrayWithGroup, gera a expressão de exibição para que os dados exibidos pelas visualizações e os dados sejam ordenados.
    Por exemplo, para um campo personalizado com a expressão:
    CalculaExpressionWithGroupArray("Valor(ValorTurnover)", "Contraparte")
    O construtor de layout irá gerar a seguinte expressão para saída:
    ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.AmountTurnover)), Amount(DataSet.AmountTurnover)", "DataSet.Account"), "2")))

    4. Calcule a expressão com GroupValueTable (EvalExpressionWithGroupValueTable) - a função retorna uma tabela de valores, cada elemento contém o resultado do cálculo de uma expressão para agrupamento pelo campo especificado.

    Sintaxe:
    CalculaExpressionWithGroupValueTable (Expressão, Expressões GroupField, Seleção de Registros, Seleção de Grupo)

    Opções:

    • Expressão(String) - a expressão a ser avaliada. Uma linha pode conter múltiplas expressões separadas por vírgulas. Após cada expressão pode haver uma palavra-chave opcional AS e o nome da coluna da tabela de valores. Por exemplo: "Contraparte, Valor (Valor Rotativo) Como Volume de Vendas."
    • FieldExpressionsGrupos- expressões de agrupamento de campos, separadas por vírgulas. Por exemplo, “Contraparte, Parte”;
    • Seleção de Registros- uma expressão aplicada a registros detalhados. Por exemplo, "Sinalizador de exclusão = Falso". Se este parâmetro utilizar uma função agregada, ocorrerá um erro na composição dos dados;
    • Seleção de Grupos- seleção aplicada a registros de grupo. Por exemplo: "Valor(Valor do faturamento) > &Parâmetro1".
    Exemplo:
    CalculaExpressionWithGroupValueTable("Conta AS Contraparte, Amount(AmountTurnover) AS SalesVolume", "Conta")

    O resultado desta função será uma tabela de valores com colunas Contraparte e Volume de Vendas, que conterá as contrapartes com seus volumes de vendas.
    O compositor de layout, ao gerar um layout, converte os parâmetros da função em termos de campos de layout de composição de dados. Por exemplo, o campo Conta será convertido em DataSet.Account.
    Por exemplo, um campo personalizado com a expressão:
    CalculaExpressionWithGroupValueTable("Conta, Valor(Valor do faturamento)", "Conta")
    O construtor de layout irá gerar a seguinte expressão para saída:
    ConnectRows(GetPart(Order(CalculateExpressionWithGroupingValueTable("DataSet.Account, DataSet.AccountRepresentation, Sum(DataSet.AmountTurnover), View(DataSet.AmountTurnover), DataSet.OrderingField", "DataSet.Account"), "5, 1, 3" ), "2, 4"))

    5. Nível - a função foi concebida para obter o nível de gravação atual.

    Sintaxe:
    Nível()

    Exemplo:
    Nível()

    6. Número de sequência - obtenha o próximo número de série.

    Sintaxe:
    NúmeroPorPedido()

    Exemplo:
    NúmeroPorPedido()

    7. SequenceNumberInGrouping - retorna o próximo número de sequência no agrupamento atual.

    Exemplo:
    NúmeroByOrderInGroup()

    8. Formato - obtém uma string formatada do valor passado.

    Sintaxe:
    Formato(Valor, FormatString)

    Opções:

    • Significado- a expressão que precisa ser formatada;
    • FormatString- a string de formato é definida de acordo com a string de formato 1C:Enterprise.
    Exemplo:
    Formato(Faturas de Consumíveis.Valor do Documento, "NPV=2")

    9. BeginOfPeriod

    Sintaxe:
    StartPeriod(Data, PeriodType)

    Opções:

    • data(Data de). Data especificada;
    • Tipo de período
    Exemplo:
    StartPeriod(DateTime(2002, 10, 12, 10, 15, 34), "Mês")
    Resultado: 01/10/2002 0:00:00

    10. Fim do período - a função foi projetada para selecionar uma data específica a partir de uma determinada data.

    Sintaxe:
    EndPeriod(Data, PeriodType)

    Opções:

    • data(Data de). Data especificada;
    • Tipo de período(Linha). Contém um dos seguintes valores: Minuto; Hora; Dia; Uma semana; Mês; Trimestre; Ano; Década; Meio ano.
    Exemplo:
    EndPeriod(DateTime(2002, 10, 12, 10, 15, 34), "Semana")
    Resultado: 13/10/2002 23:59:59

    11. AdicionarKDate (DataAdicionar) - a função foi projetada para adicionar um determinado valor à data.

    Sintaxe:
    AddToDate(Expressão, IncrementType, Magnitude)

    Opções:

    • Expressão(Data de). Data original;
    • TipoAmpliação(Linha). Contém um dos seguintes valores: Minuto; Hora; Dia; Uma semana; Mês; Trimestre; Ano; Década; Meio ano.
    • Magnitude(Número). Quanto a data precisa ser aumentada, a parte fracionária é ignorada.
    Exemplo:
    AddToDate(DateTime(2002, 10, 12, 10, 15, 34), "Mês", 1)
    Resultado: 12/11/2002 10:15:34

    12. Diferença de data - a função foi projetada para obter a diferença entre duas datas.

    Sintaxe:
    DataDiferença(Expressão1, Expressão2, TipoDiferença)

    Opções:

    • Expressão1(Data de). Data subtraída;
    • Expressão2(Data de). Data original;
    • TipoDiferença(Linha). Contém um dos valores: Segundo; Minuto; Hora; Dia; Mês; Trimestre; Ano.
    Exemplo:
    DATADIFERENÇA(DATETIME(2002, 10, 12, 10, 15, 34),
    DATETIME(2002, 10, 14, 9, 18, 06), "DIA")
    Resultado: 2

    13. Substring - esta função foi projetada para extrair uma substring de uma string.

    Sintaxe:
    Substring (String, Posição, Comprimento)

    Opções:

    • Linha(Linha). A string da qual a substring é extraída;
    • Posição(Número). A posição do caractere a partir do qual começa a substring a ser extraída da string;
    • Comprimento(Número). Comprimento da substring alocada.
    Exemplo:
    SUBSTRING(Contas.Endereço, 1, 4)

    14. Comprimento da corda - a função foi projetada para determinar o comprimento de uma string.

    Sintaxe:
    StringLength(String)

    Parâmetro:

    • Linha(Linha). Uma string cujo comprimento é especificado.
    Exemplo:
    Linha(Contrapartes.Endereço)

    15. Ano- esta função foi projetada para extrair o ano de um valor do tipo Data.

    Sintaxe:
    Ano (Data)

    Parâmetro:

    • data(Data de). A data em que o ano é determinado.
    Exemplo:
    ANO(Despesa.Data)

    16. Trimestre - esta função foi projetada para extrair o número do trimestre de um valor do tipo Data. O número do quarto normalmente varia de 1 a 4.

    Sintaxe:
    Trimestre (Data)

    Parâmetro:

    • data(Data de). A data em que o trimestre é determinado
    Exemplo:
    TRIMESTRE(Despesa.Data)

    17. Mês - esta função foi projetada para extrair o número do mês de um valor do tipo Data. O número do mês normalmente varia de 1 a 12.

    Sintaxe:
    Data do mês)

    Parâmetro:

    • data(Data de). A data em que o mês é determinado.
    Exemplo:
    MÊS(Despesa.Data)

    18. Dia do ano (DayOfYear) - esta função foi projetada para obter o dia do ano a partir de um valor do tipo Data. O dia do ano normalmente varia de 1 a 365 (366).

    Sintaxe:
    Dia do Ano (Data)

    Parâmetro:

    • data(Data de). A data em que o dia do ano é determinado.
    Exemplo:
    DIAANO(ContaDespesa.Data)

    19. Dia- esta função foi projetada para obter o dia do mês a partir de um valor do tipo Data. O dia do mês normalmente varia de 1 a 31.

    Sintaxe:
    Dia (Data)

    Parâmetro:

    • data(Data de). A data em que o dia do mês é determinado.
    Exemplo:
    DIA(Despesa.Data)

    20. Semana - esta função foi projetada para obter o número da semana do ano a partir de um valor do tipo Data. As semanas do ano são numeradas a partir de 1.

    Sintaxe:
    Semana (Data)

    Parâmetro:

    • data(Data de). A data em que os números da semana são determinados.
    Exemplo:
    SEMANA(Despesa.Data)

    21. Dia da semana - esta função foi projetada para obter o dia da semana a partir de um valor do tipo Data. O dia normal da semana varia de 1 (segunda-feira) a 7 (domingo).

    Sintaxe:
    Dia da semana (data)

    Parâmetro:

    • data(Data de). A data em que o dia da semana é determinado.
    Exemplo:
    DIA DA SEMANA (Data da Fatura de Despesa)

    22. Hora- esta função foi projetada para obter a hora do dia a partir de um valor do tipo Data. A hora do dia varia de 0 a 23.

    Sintaxe:
    Hora (Data)

    Parâmetro:

    • data(Data de). A data em que a hora do dia é determinada.
    Exemplo:
    HORA(Despesa.Data)

    23. Minuto - esta função foi projetada para obter o minuto da hora a partir de um valor do tipo Data. O minuto da hora varia de 0 a 59.

    Sintaxe:
    Minuto (Data)

    Parâmetro:

    • data(Data de). A data pela qual o minuto da hora é determinado.
    Exemplo:
    MINUTO(Despesa.Data)

    24. Segundo - esta função foi projetada para obter o segundo de um minuto de um valor do tipo Data. O segundo de um minuto varia de 0 a 59.

    Sintaxe:
    Segundo (Data)

    Parâmetro:

    • data(Data de). A data pela qual os segundos do minuto são determinados.
    Exemplo:
    SEGUNDO (Data de Validade)

    25. Elenco - esta função foi projetada para extrair um tipo de uma expressão que pode conter um tipo composto. Se a expressão contiver um tipo diferente do tipo requerido, NULL será retornado.

    Sintaxe:
    Expressar(Expressão, TipoIndicação)

    Opções:

    • Expressão- expressão a ser convertida;
    • Indicação de tipo(Linha). Contém uma string de tipo. Por exemplo, "Número", "String" etc. Além dos tipos primitivos, esta linha pode conter o nome da tabela. Neste caso, será feita uma tentativa de expressar uma referência à tabela especificada.
    Exemplo:
    Expressar(Data.Props1, "Número(10,3)")

    26. É Nulo (É Nulo) - esta função retorna o valor do segundo parâmetro se o valor do primeiro parâmetro for NULL. Caso contrário, será retornado o valor do primeiro parâmetro.

    Sintaxe:
    ÉNulo(Expressão1, Expressão2)

    Opções:

    • Expressão1- valor a ser verificado;
    • Expressão2- valor de retorno se Expressão1 for NULL.
    Exemplo:
    SimNULL(Valor(Vendas.ValorTurnover), 0)

    27.ACos- calcula o cosseno do arco em radianos.

    Sintaxe:
    ACos (Expressão)

    Parâmetro:

    • Expressão(Número). O valor do cosseno (no intervalo -1...1) pelo qual o ângulo é determinado.
    28.ASin- calcula o arco seno em radianos.

    Sintaxe:
    ASin(Expressão)

    Parâmetro:

    • Expressão(Número). O valor do seno (no intervalo -1...1) pelo qual o ângulo é determinado.
    29.ATan- calcula o arco tangente em radianos.

    Sintaxe:
    ATan(Expressão)

    Parâmetro:

    • Expressão(Número). O valor da tangente pelo qual o ângulo é determinado.
    30.Cos- calcula o cosseno.

    Sintaxe:
    Cos(Expressão)

    Parâmetro:

    • Expressão
    31. Exp.- elevando o número e a uma potência.

    Sintaxe:
    Exp(Expressão)

    Parâmetro:

    • Expressão(Número). O significado do diploma.
    32.Registro- calcula o logaritmo natural.

    Sintaxe:
    Registro (Expressão)

    Parâmetro:

    • Expressão
    33.Log10- calcula o logaritmo de X na base 10.

    Sintaxe:
    Log10 (Expressão)

    Parâmetro:

    • Expressão(Número). O número original é maior que 0.
    34. Poxa- exponenciação.

    Sintaxe:
    Pow(Base, Indicador)

    Opções:

    • Base(Número). A base da operação de exponenciação.
    • Índice(Número). Expoente.
    35. Pecado- calcula o seno.

    Sintaxe:
    Pecado (Expressão)

    Parâmetro:

    • Expressão(Número). Especificado em radianos.
    36. Quadrado- calcula a raiz quadrada.

    Sintaxe:
    Sqrt(Expressão)

    Parâmetro:

    • Expressão(Número). Número não negativo.
    37. Bronzeado- calcula a tangente.

    Sintaxe:
    Bronzeado (Expressão)

    Parâmetro:

    • Expressão(Número). O valor do seno pelo qual o ângulo é determinado.
    38. Rodada- arredonda o número original para a profundidade de bits necessária. O modo de arredondamento é padrão (1,5 como 2).

    Sintaxe:
    Env (Expressão, Profundidade de bits)

    Opções:

    • Expressão(Número). Número original;
    • Profundidade de bits(Número). O número de casas decimais para arredondar.
    39. Internacional- corta a parte fracionária de um número.

    Sintaxe:
    Objeto (Expressão)

    Parâmetro:

    • Expressão(Número). Um número fracionário.
    40. Funções de módulos comuns

    Uma expressão do mecanismo de composição de dados pode conter chamadas para funções de módulos de configuração global comum. Nenhuma sintaxe adicional é necessária para chamar tais funções.

    Exemplo:
    Nome Abreviado (Documentos.Link, Documentos.Data, Documentos.Número)

    Neste exemplo, a função "AbbreviatedName" será chamada a partir do módulo de configuração geral.
    Observe que o uso de funções comuns do módulo só é permitido se o parâmetro apropriado do processador de composição de dados for especificado.
    Além disso, funções de módulos comuns não podem ser usadas em expressões de campos personalizados.

    41. Ressentimento - esta função retorna uma representação em string do valor passado de um tipo não primitivo. Para valores de tipo primitivo, retorna o próprio valor.

    <Пустое значение>".

    Exemplo:
    Apresentação(Contraparte)

    42. Corda - esta função converte o valor passado em uma string.

    Se um array ou tabela de valores for usado como parâmetro, a função retorna uma string contendo uma representação em string de todos os elementos do array, separados pelos caracteres ";". Se algum elemento tiver uma representação de string vazia, então a string "<Пустое значение>".

    Exemplo:
    Linha(DataVendas)

    43. Valor é preenchido

    Para valores NULL, Indefinido sempre retorna False.
    Para valores booleanos, sempre retorna True.
    Para outros tipos, retorna True se o valor for diferente do valor padrão para o tipo determinado.

    Exemplo:
    ValueFilled(DataEntrega)

    44. NívelInGroup - esta função obtém o nível de gravação atual relativo ao agrupamento.

    Pode ser utilizado para obter o nível de aninhamento de um registro em um agrupamento hierárquico.

    Exemplo:
    NívelInGroup()

    45. Tipo de valor

    Sintaxe:
    ValueType(Expressão)

    Parâmetro:

    • Expressão(Linha). Tipo de valor de string.
    Retorna um valor do tipo Type contendo o tipo de valor do parâmetro de função.

     


    Ler:



    O que é um SSD e como instalá-lo?

    O que é um SSD e como instalá-lo?

    O desempenho e a vida útil de um SSD dependem principalmente da memória flash NAND e do firmware do controlador. Eles são os principais componentes...

    Como colocar acento em uma letra no Word

    Como colocar acento em uma letra no Word

    Ao trabalhar no Word, um dia você terá que enfrentar a necessidade de adicionar um acento. Você pode, é claro, destacar a vogal tônica em negrito...

    Como converter imagens para o formato PNG?

    Como converter imagens para o formato PNG?

    O formato de imagem JPG possui uma taxa de compactação maior que o PNG e, portanto, as imagens com esta extensão têm menos peso. A fim de reduzir...

    Problemas técnicos e suas soluções v

    Problemas técnicos e suas soluções v

    Muito bem, espero que ajude. Blockhead de fato permaneceu estabelecido desde os dias de OCO... Bons estudiosos da tradição estão em contato próximo com o universo....

    imagem de feed RSS