Aulas de informática

Recurso da função substring(). Recurso da função substring() usando o construtor de consultas

Na linguagem de consulta 1C:Enterprise, a função SUBSTRING() V formato SUBSTRING(<Исходная строка>, <Начало>, <Длина>) pode ser aplicado a dados de string e permite selecionar um fragmento<Исходной строки>, começando com o número do caractere<Начало>(os caracteres em uma linha são numerados a partir de 1) e comprimento<Длина>personagens. O resultado do cálculo da função SUBSTRING() possui um tipo string de comprimento variável, e o comprimento será considerado ilimitado se<Исходная строка>tem comprimento e parâmetro ilimitados<Длина>não é uma constante ou maior que 1024.

Cálculo da função SUBSTRING() no servidor SQL:
Na versão cliente-servidor do trabalho, a função SUBSTRING() é implementada usando a função SUBSTRING() da instrução SQL correspondente, passada ao servidor de banco de dados SQL Server, que calcula o tipo de resultado da função SUBSTRING() utilizando regras complexas dependendo do tipo e valores de seus parâmetros, bem como dependendo do contexto em que é utilizado.

Na maioria dos casos, essas regras não afetam a execução de uma consulta 1C:Enterprise, porém, há casos em que o comprimento máximo da string de resultado calculada pelo SQL Server é essencial para a execução da consulta. É importante ter em mente que em alguns contextos ao utilizar a função SUBSTRING(), o comprimento máximo do seu resultado pode ser igual ao comprimento máximo de uma string de comprimento limitado, que no SQL Server é de 4000 caracteres. Isso pode fazer com que a solicitação seja encerrada inesperadamente.

Por exemplo, a solicitação:
Código 1C v 8.x SELECIONAR
ESCOLHA

OUTRO NULO
O FIM COMO UMA APRESENTAÇÃO,
ESCOLHA
WHEN Tipo = &EndereçoLegalIndividual
ENTÃO SUBSTRING(Representação, 0, 200)
OUTRO NULO
TERMINAR COMO Apresentação1
DE
ORDENAR POR
Desempenho,
Desempenho1
termina de forma anormal com a mensagem Erro DBMS:
Provedor Microsoft OLE DB para SQL Server: Aviso: O processador de consulta não pôde produzir um plano de consulta a partir do otimizador porque o comprimento total de todas as colunas na cláusula GROUP BY ou ORDER BY excede 8.000 bytes.
HRESULT=80040E14, SQLSTATE=42000, nativo=8618

Isso ocorre porque o Microsoft SQL Server calcula o comprimento máximo da string resultante da expressão:
Código 1C v 8.x SELEÇÃO
WHEN Tipo = &EndereçoLegalIndividual
ENTÃO SUBSTRING(Representação, 0, 200)
OUTRO NULO
O FIM COMO UMA APRESENTAÇÃO,
equivale a 4.000 caracteres. Portanto, o comprimento de um registro que consiste em dois desses campos excede os 8.000 bytes permitidos para a operação de classificação.

Devido à peculiaridade descrita da execução da função SUBSTRING() no SQL Server, não é recomendado usar a função SUBSTRING() para converter strings de comprimento ilimitado em strings de comprimento limitado. Em vez disso, é melhor usar o operador de conversão EXPRESS(). Em particular, o exemplo acima pode ser reescrito como:
Código 1C v 8.x SELECIONAR
ESCOLHA
WHEN Tipo = &EndereçoLegalIndividual
OUTRO NULO
O FIM COMO UMA APRESENTAÇÃO,
ESCOLHA
WHEN Tipo = &EndereçoLegalIndividual
ENTÃO EXPRESS(Representação AS String(200))
OUTRO NULO
TERMINAR COMO Apresentação1
DE
Cadastro de informações Informações de contato COMO Informações de contato
ORDENAR POR
Desempenho,
Desempenho1

Existem poucos mecanismos para trabalhar com strings em consultas 1C. Primeiro, as linhas podem ser adicionadas. Em segundo lugar, você pode obter uma substring de uma string. Em terceiro lugar, as strings podem ser comparadas, inclusive por padrão. Provavelmente isso é tudo o que pode ser feito com strings.

Adição de string

Para adicionar linhas em uma consulta, a operação “+” é usada. Você só pode adicionar strings de comprimento limitado.

SELECIONE "Nome: " + Contrapartes. Nome AS Coluna 1 DO Diretório. Contrapartes AS Contrapartes ONDE Contrapartes. Link = &Link

Função de substring

SUBSTRING(<Строка>, <НачальнаяПозиция>, <Длина>)

Um análogo da função Environment() do modelo de objeto. A função Substring() pode ser aplicada a dados de string e permite selecionar um fragmento <Строки> , começando com o número do caractere <НачальнаяПозиция> (os caracteres em uma linha são numerados a partir de 1) e comprimento <Длина> personagens. O resultado do cálculo da função tem um tipo de string de comprimento variável, e o comprimento será considerado ilimitado se <Строка> tem comprimento e parâmetro ilimitados <Длина> não é uma constante ou maior que 1024.

Se o comprimento da string for menor que o especificado no segundo parâmetro, a função retornará uma string vazia.

Atenção! Não é recomendado usar a função SUBSTRING() para converter strings de comprimento ilimitado em strings de comprimento limitado. Em vez disso, é melhor usar o operador de conversão EXPRESS().

Função semelhante

Se precisarmos ter certeza de que um atributo string atende a determinados critérios, nós o comparamos:

SELECIONE Contrapartes. Nome AS Coluna 1 DO Diretório. Contrapartes AS Contrapartes WHERE Contrapartes. Nome = "Gazprom"

Mas e se você precisar de uma comparação mais sutil? Não apenas igualdade ou desigualdade, mas semelhança com um determinado padrão? É exatamente para isso que a função SIMILAR foi criada.

LIKE — Operador para verificar a semelhança de uma string com um padrão. Análogo de LIKE em SQL.

O operador SIMILAR permite comparar o valor da expressão especificada à esquerda com a string padrão especificada à direita. O valor da expressão deve ser do tipo string. Se o valor da expressão corresponder ao padrão, o resultado do operador será TRUE, caso contrário será FALSE.

Os seguintes caracteres na string do modelo são caracteres de serviço e têm um significado diferente do caractere da string:

  • % (porcentagem): uma sequência contendo qualquer número de caracteres arbitrários;
  • _ (sublinhado): um caractere arbitrário;
  • […] (um ou mais caracteres entre colchetes): qualquer caractere único listado entre colchetes. A enumeração pode conter intervalos, por exemplo a-z, significando um caractere arbitrário incluído no intervalo, incluindo as extremidades do intervalo;
  • [^...] (entre colchetes um sinal de negação seguido por um ou mais caracteres): qualquer caractere único diferente daqueles listados após o sinal de negação.

Qualquer outro símbolo significa si mesmo e não carrega nenhuma carga adicional. Se um dos caracteres listados precisar ser escrito como ele mesmo, ele deverá ser precedido por<Спецсимвол>. Eu mesmo<Спецсимвол>(qualquer caractere adequado) é definido na mesma instrução após a palavra-chave SPECIAL CHARACTER.

A linguagem de consulta em 1C 8 é um análogo simplificado da conhecida “linguagem de programação estruturada” (como é mais frequentemente chamada SQL). Mas em 1C ele é usado apenas para leitura de dados, um modelo de dados de objeto é usado para alterar dados.

Outra diferença interessante é a sintaxe russa. Embora na verdade você possa usar construções em inglês.

Solicitação de exemplo:

ESCOLHER
Bancos.Nome,
Bancos.CorrAccount
DE
Directory.Banks COMO Bancos

Este pedido permitir-nos-á ver informação sobre o nome e conta de correspondente de todos os bancos existentes na base de dados.

A linguagem de consulta é a maneira mais simples e eficaz de obter informações. Como pode ser visto no exemplo acima, na linguagem de consulta você precisa usar nomes de metadados (esta é uma lista de objetos do sistema que compõem a configuração, ou seja, diretórios, documentos, registros, etc.).

Descrição das construções da linguagem de consulta

Estrutura de consulta

Para obter os dados, basta utilizar as construções “SELECT” e “FROM”. A solicitação mais simples é assim:

SELECIONE * DE Diretórios.Nomenclatura

Onde “*” significa selecionar todos os campos da tabela, e Directories.Nomenclature – o nome da tabela no banco de dados.

Vejamos um exemplo mais complexo e geral:

ESCOLHER
<ИмяПоля1>COMO<ПредставлениеПоля1>,
Soma(<ИмяПоля2>) COMO<ПредставлениеПоля2>
DE
<ИмяТаблицы1>COMO<ПредставлениеТаблицы1>
<ТипСоединения>COMPOSTO<ИмяТаблицы2>COMO<ПредставлениеТаблицы2>
POR<УсловиеСоединениеТаблиц>

ONDE
<УсловиеОтбораДанных>

Agrupar por
<ИмяПоля1>

ORDENAR POR
<ИмяПоля1>

RESULTADOS
<ИмяПоля2>
POR
<ИмяПоля1>

Nesta consulta, selecionamos os dados dos campos “FieldName1” e “FieldName1” das tabelas “TableName1” e “TableName”, atribuímos sinônimos aos campos usando o operador “HOW” e os conectamos usando uma determinada condição “TableConnectionCondition ”.

A partir dos dados recebidos, selecionamos apenas os dados que atendem à condição de “WHERE” “Condição de seleção de dados”. Em seguida, agrupamos a solicitação pelo campo “Nome do campo1”, enquanto somamos “Nome do campo2”. Criamos totais para o campo “Nome do Campo1” e o campo final “Nome do Campo2”.

A última etapa é classificar a solicitação usando a construção ORDER BY.

Projetos gerais

Vejamos as estruturas gerais da linguagem de consulta 1C 8.2.

PRIMEIROn

Usando este operador, você pode obter o número n dos primeiros registros. A ordem dos registros é determinada pela ordem na consulta.

SELECIONE OS 100 PRIMEIROS
Bancos.Nome,
Bancos. Código AS BIC
DE
Directory.Banks COMO Bancos
ORDENAR POR
Bancos.Nome

A solicitação receberá os 100 primeiros registros do diretório “Bancos”, ordenados em ordem alfabética.

PERMITIDO

Este design é relevante para trabalhar com o mecanismo. A essência do mecanismo é restringir a leitura (e outras ações) aos usuários de registros específicos em uma tabela de banco de dados, e não da tabela como um todo.

Se um usuário tentar utilizar uma consulta para ler registros que lhe são inacessíveis, ele receberá uma mensagem de erro. Para evitar isso, você deve utilizar a construção “ALLOWED”, ou seja, a requisição irá ler apenas os registros que lhe são permitidos.

SELECIONE PERMITIDO
Repositório de informações adicionais. Link
DE
Diretório.Repositório de informações adicionais

VÁRIOS

Usar “DIFERENTE” evitará que linhas duplicadas entrem no resultado da consulta 1C. Duplicação significa que todos os campos de solicitação correspondem.

SELECIONE OS 100 PRIMEIROS
Bancos.Nome,
Bancos. Código AS BIC
DE
Directory.Banks COMO Bancos

Tabela Vazia

Esta construção é usada muito raramente para combinar consultas. Ao ingressar, pode ser necessário especificar uma tabela aninhada vazia em uma das tabelas. O operador “EmptyTable” é ideal para isso.

Exemplo da ajuda 1C 8:

SELECIONE Link.Número, TABELA VAZIA.(Nº, Item, Quantidade) COMO Composição
DO Documento. Fatura de Despesas
COMBINE TUDO
SELECIONE Link.Number, Contents.(LineNumber, Produto, Quantidade)
DE Documento.Fatura Documento.Fatura.Composição.*

É NULO

Um recurso muito útil que permite evitar muitos erros. YesNULL() permite substituir o valor NULL pelo valor desejado. Muito utilizado para verificar a presença de um valor em tabelas unidas, por exemplo:

ESCOLHER
Referência da nomenclatura Link,
IsNULL(Item Restante.QuantidadeRemanescente,0) AS QuantidadeRemanescente
DE


Pode ser usado de outras maneiras. Por exemplo, se para cada linha não se sabe em qual tabela o valor existe:

ISNULL(FaturaRecebida.Data, FaturaEmitida.Data)

COMO é um operador que nos permite atribuir um nome (sinônimo) a uma tabela ou campo. Vimos um exemplo de uso acima.

Essas construções são muito semelhantes - elas permitem obter uma representação em string do valor desejado. A única diferença é que REPRESENTATION converte qualquer valor em um tipo string, enquanto REPRESENTATIONREF converte apenas valores de referência. REPRESENTAÇÃO DE REFERÊNCIA é recomendada para uso em consultas de sistema de composição de dados para otimização, a menos, é claro, que o campo de dados de referência seja planejado para ser usado em seleções.

ESCOLHER
View(Link), //string, por exemplo “Relatório antecipado nº 123 datado de 10/10/2015
View(DeletionMark) AS DeleteMarkText, //string, “Sim” ou “Não”
ViewReferences(DeletionMark) AS DeleteMarkBoolean //booleano, True ou False
DE
Documento.Relatório Avançado

EXPRESSAR

Express permite converter valores de campo para o tipo de dados desejado. Você pode converter um valor em um tipo primitivo ou em um tipo de referência.

Expresso para um tipo de referência é usado para restringir os tipos de dados solicitados em campos de tipo complexo, geralmente usados ​​para otimizar o desempenho do sistema. Exemplo:

EXPRESS(TableCost.Subconto1 AS Directory.Cost Items).Tipo de ActivityForTaxAccountingCosts

Para tipos primitivos, esta função é frequentemente usada para limitar o número de caracteres em campos de comprimento ilimitado (tais campos não podem ser comparados). Para evitar o erro " Parâmetros inválidos na operação de comparação. Você não pode comparar campos
comprimento ilimitado e campos de tipos incompatíveis
", você precisa expressar esses campos da seguinte forma:

EXPRESS(Comentário AS Linha(150))

DATA DIFERENÇA

Obtenha 267 videoaulas em 1C gratuitamente:

Um exemplo de uso de IS NULL em uma solicitação 1C:

ESCOLHA DE
Referência
CONEXÃO ESQUERDA RegisterAccumulations.ProductsInWarehouses.Remaining AS Produto Restante
Software NomenclatureRef.Link = MercadoriasVendidasCommitteesRemains.Nomenclature
ONDE NÃO Produtos Restantes QuantidadeRemanescente É NULO

O tipo de dados em uma consulta pode ser determinado usando as funções TYPE() e VALUETYPE() ou usando o operador lógico REFERENCE. As duas funções são semelhantes.

Valores predefinidos

Além de usar parâmetros passados ​​em consultas na linguagem de consulta 1C, você pode usar valores predefinidos ou . Por exemplo, transferências, diretórios predefinidos, planos de contas e assim por diante. Para isso, é utilizada a construção “Value()”.

Exemplo de uso:

WHERE Nomenclatura.Tipo de Nomenclatura = Valor(Diretório.Tipos de Nomenclatura.Produto)

WHERE Contrapartes.Tipo de informações de contato = Valor(Enumeração.Tipos de informações de contato.Telefone)

ONDE Saldos de contas. Conta contábil = Valor (Plano de contas. Lucro. Perda de lucros)

Conexões

Existem 4 tipos de conexões: ESQUERDA, CERTO, COMPLETO, INTERNO.

CONEXÃO ESQUERDA E DIREITA

As junções são usadas para vincular duas tabelas com base em uma condição específica. Recurso quando ASSOCIAÇÃO À ESQUERDAé que pegamos a primeira tabela especificada em sua totalidade e vinculamos condicionalmente a segunda tabela. Os campos da segunda tabela que não puderam ser vinculados pela condição são preenchidos com o valor NULO.

Por exemplo:

Irá retornar toda a tabela de Contrapartes e preencher o campo “Banco” apenas nos locais onde a condição “Contrapartes.Nome = Bancos.Nome” for atendida. Se a condição não for atendida, o campo Banco será definido como NULO.

RIGHT JOIN na linguagem 1C absolutamente semelhante Conexão ESQUERDA, com exceção de uma diferença - em DIREITO DE CONEXÃO A tabela “principal” é a segunda, não a primeira.

CONEXÃO COMPLETA

CONEXÃO COMPLETA difere da esquerda e da direita porque exibe todos os registros de duas tabelas e conecta apenas aqueles que podem ser conectados por condição.

Por exemplo:

DE

CONEXÃO COMPLETA
Directory.Banks COMO Bancos

POR

A linguagem de consulta retornará ambas as tabelas completamente somente se a condição para unir os registros for atendida. Ao contrário de uma junção esquerda/direita, é possível que NULL apareça em dois campos.

JUNÇÃO INTERNA

JUNÇÃO INTERNA difere do completo porque exibe apenas os registros que podem ser conectados de acordo com uma determinada condição.

Por exemplo:

DE
Diretório Contrapartes AS Clientes

JUNÇÃO INTERNA
Directory.Banks COMO Bancos

POR
Clientes.Nome = Bancos.Nome

Esta consulta retornará apenas linhas em que o banco e a contraparte tenham o mesmo nome.

Associações

As construções JOIN e JOIN ALL combinam dois resultados em um. Aqueles. o resultado da execução de dois será “fundido” em um, comum.

Ou seja, o sistema funciona exatamente como os normais, apenas para uma tabela temporária.

Como usar INDEX BY

Contudo, um ponto deve ser levado em consideração. A construção de um índice em uma tabela temporária também leva tempo para ser concluída. Portanto, é aconselhável usar a construção “ ” somente se houver certeza de que haverá mais de 1-2 registros na tabela temporária. Caso contrário, o efeito pode ser o oposto – o desempenho dos campos indexados não compensa o tempo necessário para construir o índice.

ESCOLHER
Taxas de câmbio Última seção transversal Moeda AS Moeda,
Taxas de câmbio Última seção transversal.
Taxas de moeda PUT
DE
Registro de informações.Taxas de moeda.Última fatia (&Período,) Taxas de moeda ASÚltima fatia
ÍNDICE POR
Moeda
;
ESCOLHER
PreçosNomenclatura.Nomenclatura,
PreçosNomenclaturas.Preço,
PreçosNomenclaturas.Moeda,
Taxas de câmbio.Taxa
DE
Cadastro de Informações.Preços de Nomenclatura.Última Fatia(&Período,
Nomenclatura B (&Nomenclatura) AND PriceType = &PriceType) AS PriceNomenclature
LEFT JOIN Taxas de câmbio AS Taxas de câmbio
Preços de softwareNomenclaturas.Moeda = Taxas de moeda.Moeda

Agrupamento

A linguagem de consulta 1C permite que você use funções agregadas especiais ao agrupar os resultados da consulta. O agrupamento também pode ser usado sem funções agregadas para “eliminar” duplicatas.

Existem as seguintes funções:

Quantidade, Quantidade, Número de diferentes, Máximo, Mínimo, Média.

Exemplo 1:

ESCOLHER
Vendas de bens e serviços. Nomenclatura,
SOMA(Vendas de MercadoriasServiçosBens.Quantidade) AS Quantidade,
SOMA(Vendas de MercadoriasServiçosBens.Valor) AS Valor
DE

Agrupar por
Vendas de Bens e Bens de Serviços. Nomenclatura

A solicitação recebe todas as linhas com mercadorias e as resume por quantidade e valores por item.

Exemplo nº 2

ESCOLHER
Bancos.Código,
QUANTIDADE(DIFERENTES Banks.Link) COMO Número de duplicatas
DE
Directory.Banks COMO Bancos
Agrupar por
Bancos.Código

Este exemplo exibirá uma lista de BICs no diretório “Bancos” e mostrará quantas duplicatas existem para cada um deles.

Resultados

Os resultados são uma forma de obter dados de um sistema com estrutura hierárquica. Funções agregadas podem ser usadas para campos de resumo, assim como para agrupamentos.

Uma das maneiras mais populares de usar os resultados na prática é a baixa de mercadorias em lote.

ESCOLHER




DE
Documento. Venda de Bens e Serviços. Bens COMO Vender Bens e Serviços Bens
ORDENAR POR

RESULTADOS
SOMA(Quantidade),
SOMA(Soma)
POR
Nomenclatura

O resultado da consulta será o seguinte hierárquico:

Resultados gerais

Se você precisar obter os totais de todos os “totais”, use o operador “GENERAL”.

ESCOLHER
Vendas de bens e serviços. Nomenclatura AS Nomenclatura,
Vendas de Bens e Serviços. Link Documento AS,
Vendas de bens e serviços. Quantidade AS Quantidade,
Vendas de bens e serviços. Valor AS Valor
DE
Documento. Venda de Bens e Serviços. Bens COMO Vender Bens e Serviços Bens
ORDENAR POR
Vendas de Bens e Bens de Serviços. Link. Data
RESULTADOS
SOMA(Quantidade),
SOMA(Soma)
POR
SÃO COMUNS,
Nomenclatura

Como resultado da execução da solicitação, obtemos o seguinte resultado:

Em que 1 nível de agrupamento é a agregação de todos os campos necessários.

Organizando

O operador ORDER BY é usado para classificar o resultado de uma consulta.

A classificação por tipos primitivos (string, número, booleano) segue as regras usuais. Para campos de tipo de referência, a classificação ocorre pela representação interna do link (o identificador exclusivo), em vez de por código ou por representação de referência.

ESCOLHER

DE
Diretório.Nomenclatura AS Nomenclatura
ORDENAR POR
Nome

A solicitação exibirá uma lista de nomes no diretório de nomenclatura, classificados em ordem alfabética.

Pedido automático

O resultado de uma consulta sem classificação é um conjunto de linhas apresentado de forma caótica. Os desenvolvedores da plataforma 1C não garantem que as linhas serão geradas na mesma sequência ao executar consultas idênticas.

Se precisar exibir registros de tabela em uma ordem constante, você deverá usar a construção Auto-Order.

ESCOLHER
Nomenclatura.Nome AS Nome
DE
Diretório.Nomenclatura AS Nomenclatura
PEDIDO AUTOMÁTICO

Mesas virtuais

As tabelas virtuais em 1C são um recurso exclusivo da linguagem de consulta 1C que não é encontrado em outras sintaxes semelhantes. Uma tabela virtual é uma maneira rápida de obter informações de perfil dos registros.

Cada tipo de registro possui seu próprio conjunto de tabelas virtuais, que podem diferir dependendo das configurações do registro.

  • corte do primeiro;
  • corte deste último.
  • sobras;
  • revoluções;
  • saldos e rotatividade.
  • movimentos do subconto;
  • revoluções;
  • velocidade Dt Kt;
  • sobras;
  • saldos e rotatividade
  • subconto.
  • base;
  • dados gráficos;
  • período de validade real.

Para o desenvolvedor da solução, os dados são retirados de uma tabela (virtual), mas na verdade a plataforma 1C retira de várias tabelas, transformando-as no formato desejado.

ESCOLHER
Produtos em Armazéns Restos e Faturamento.Nomenclatura,
ProdutosEmArmazénsRemanescenteAndTurnover.QuantidadeInicialRemanescente,
ProdutosEmArmazénsRestosEFuturo.QuantidadeFuturo,
MercadoriasEmArmazénsRestosEFuturo.QuantidadeEntrada,
ProdutosEm ArmazénsRestosEFuturo.QuantidadeConsumo,
ProdutosEmArmazénsRestosEFuturo.QuantidadeFinalResto
DE
RegistrarAcumulações.MercadoriasEmArmazéns.RestosEFuturo COMO MercadoriasEmArmazénsRestosEFuturo

Esta consulta permite recuperar rapidamente uma grande quantidade de dados.

Opções de mesa virtual

Um aspecto muito importante do trabalho com tabelas virtuais é o uso de parâmetros. Os parâmetros da tabela virtual são parâmetros especializados para seleção e configuração.

Para tais tabelas, considera-se incorreto utilizar a seleção na construção “WHERE”. Além de a consulta ficar abaixo do ideal, é possível receber dados incorretos.

Um exemplo de uso desses parâmetros:

Registo de Acumulações. Mercadorias em Armazéns. Saldos e Movimentos (& Início do Período, & Fim do Período, Mês, Movimentos e Fronteiras do Período, Nomenclatura = & Nomenclatura Obrigatória)

Algoritmo para tabelas virtuais

Por exemplo, a tabela virtual mais utilizada do tipo “Restos” armazena dados de duas tabelas físicas – saldos e movimentos.

Ao utilizar uma tabela virtual, o sistema realiza as seguintes manipulações:

  1. Obtemos o valor calculado mais próximo em termos de data e medidas na tabela de totais.
  2. “Somamos” o valor da tabela de movimentos ao valor da tabela de totais.


Essas ações simples podem melhorar significativamente o desempenho do sistema como um todo.

Usando o Construtor de Consultas

Construtor de consultas– uma ferramenta integrada ao sistema 1C Enterprise que facilita muito o desenvolvimento de consultas de banco de dados.

O construtor de consultas possui uma interface bastante simples e intuitiva. No entanto, vamos examinar mais detalhadamente o uso do construtor de consulta.

O construtor do texto de consulta é iniciado a partir do menu de contexto (botão direito do mouse) no local desejado no código do programa.

Descrição do construtor de solicitação 1C

Vejamos cada guia do designer com mais detalhes. A exceção é a aba Builder, que é tema para outra discussão.

Guia Tabelas e Campos

Esta guia especifica a fonte de dados e os campos que precisam ser exibidos no relatório. Em essência, as construções SELECT.. FROM são descritas aqui.

A fonte pode ser uma tabela de banco de dados física, uma tabela de registro virtual, tabelas temporárias, consultas aninhadas, etc.

No menu de contexto das tabelas virtuais, você pode definir os parâmetros da tabela virtual:

Guia Conexões

A aba é utilizada para descrever conexões de diversas tabelas e criar construções com a palavra CONNECTION.

Guia Agrupamento

Nesta aba, o sistema permite agrupar e resumir os campos obrigatórios do resultado da tabela. Descreve o uso das construções GROUP BY, SUM, MINIMUM, AVERAGE, MAXIMUM, QUANTITY, NUMBER OF DIFFERENT.

Guia Condições

Responsável por tudo que vem no texto da solicitação após a construção do WHERE, ou seja, por todas as condições impostas aos dados recebidos.

Guia Avançado

Aba Adicionalmente repleto de todos os tipos de parâmetros que são muito importantes. Vejamos cada uma das propriedades.

Agrupamento Selecionando registros:

  • Primeiro n– um parâmetro que retorna apenas N registros para a consulta (o operador FIRST)
  • Sem duplicatas– garante a unicidade dos registros recebidos (operador DIFERENTE)
  • Permitido– permite selecionar apenas os registros que o sistema permite selecionar levando em consideração (construção PERMITIDA)

Agrupamento Tipo de solicitação determina qual será o tipo de solicitação: recuperação de dados, criação de tabela temporária ou destruição de tabela temporária.

Abaixo há uma bandeira Bloqueie os dados recebidos para modificação posterior. Permite ativar a possibilidade de definir o bloqueio de dados, o que garante a segurança dos dados desde o momento da sua leitura até à sua alteração (relevante apenas para o modo Bloqueio automático, design FOR CHANGE).

Guia Junções/Aliases

Nesta guia do designer de consulta, você pode definir a capacidade de unir diferentes tabelas e aliases (a construção HOW). As tabelas estão indicadas no lado esquerdo. Se você definir os sinalizadores opostos à tabela, a construção UNITE será usada, caso contrário - UNITE ALL (diferenças entre os dois métodos). No lado direito é indicada a correspondência dos campos nas diferentes tabelas, se a correspondência não for especificada a consulta retornará NULL.

Guia Pedido

Especifica a ordem em que os valores são classificados (ORDER BY) - decrescente (DESC) ou crescente (ASC).

Há também uma bandeira interessante - Pedido automático(no pedido - PEDIDO AUTOMÁTICO). Por padrão, o sistema 1C exibe os dados em uma ordem “caótica”. Se você definir esse sinalizador, o sistema classificará os dados por dados internos.

Guia Lote de Consultas

Na aba do designer de consultas, você pode criar novas e também utilizá-las como navegação. No texto da solicitação, os pacotes são separados pelo símbolo “;” (vírgula).

Botão “Consulta” no designer de consultas

No canto inferior esquerdo do designer de solicitações há um botão Solicitar, com o qual você pode visualizar o texto da solicitação a qualquer momento:

Nesta janela você pode fazer ajustes na solicitação e executá-la.


Usando o console de consulta

O Query Console é uma maneira simples e conveniente de depurar consultas complexas e obter informações rapidamente. Neste artigo, tentarei descrever como usar o Query Console e fornecer um link para fazer download do Query Console.

Vamos dar uma olhada mais de perto nesta ferramenta.

Baixe o console de consulta 1C

Primeiro de tudo, para começar a trabalhar com o console de consulta, você precisa baixá-lo de algum lugar. Os tratamentos costumam ser divididos em dois tipos – formas controladas e convencionais (ou, às vezes, são chamados de 8.1 e 8.2/8.3).

Tentei combinar essas duas visualizações em um processamento - o formulário desejado abre no modo de operação desejado (no modo gerenciado, o console só funciona no modo grosso).

Descrição do console de consulta 1C

Vamos começar examinando o console de consulta com uma descrição do painel principal de processamento:

No cabeçalho do console de consulta, você pode ver o tempo de execução da última consulta com precisão de milissegundos, o que permite comparar diferentes designs em termos de desempenho.

O primeiro grupo de botões da barra de comando é responsável por salvar as consultas atuais em um arquivo externo. Isso é muito conveniente; você sempre pode voltar a escrever uma solicitação complexa. Ou, por exemplo, armazene uma lista de exemplos típicos de determinados designs.

À esquerda, no campo “Solicitação”, você pode criar novas solicitações e salvá-las em uma estrutura em árvore. O segundo grupo de botões é responsável por gerenciar a lista de solicitações. Com ele você pode criar, copiar, excluir e mover uma solicitação.

  • Executarsolicitar– execução e resultados simples
  • Executar pacote– permite visualizar todas as consultas intermediárias em um lote de consultas
  • Visualizando tabelas temporárias– permite que você veja os resultados que as consultas temporárias retornam em uma tabela

Parâmetros de solicitação:

Permite definir os parâmetros atuais da solicitação.

Na janela de parâmetros de consulta, é interessante o seguinte:

  • Botão Obter da solicitação encontra automaticamente todos os parâmetros da solicitação para conveniência do desenvolvedor.
  • Bandeira Parâmetros comuns para todas as solicitações– quando instalado, seu processamento não limpa os parâmetros ao passar de solicitação em solicitação na lista geral de solicitações.

Defina um parâmetro com uma lista de valoresÉ muito simples, basta ao escolher um valor de parâmetro, clicar no botão limpar valor (cruz), o sistema solicitará que você selecione o tipo de dado, onde você precisa selecionar “Lista de Valores”:

Também no painel superior há um botão para acessar as configurações do console de consulta:

Aqui você pode especificar parâmetros para consultas de salvamento automático e parâmetros de execução de consultas.

O texto da solicitação é inserido no campo de solicitação do console. Isso pode ser feito simplesmente digitando um teste de consulta ou chamando uma ferramenta especial - o designer de consulta.

O designer de consultas 1C 8 é chamado no menu de contexto (botão direito do mouse) quando você clica no campo de entrada:

Este menu também possui funções úteis como limpar ou adicionar quebras de linha (“|”) à solicitação ou receber o código da solicitação neste formato conveniente:

Solicitação = Nova Solicitação;
Solicitação.Text = ”
|SELECIONAR
| Moedas.Link
|DE
| Diretório.Moedas AS Moedas”;
RequestResult = Request.Execute();

O campo inferior do console de consulta exibe o campo de resultado da consulta, por isso este processamento foi criado:



Além disso, o console de consultas, além da lista, pode exibir dados na forma de uma árvore - para consultas contendo totais.

Otimização de consulta

Um dos pontos mais importantes para aumentar a produtividade da empresa 1C 8.3 é otimizaçãosolicitações de. Este ponto também é muito importante quando passando na certificação. Abaixo falaremos sobre motivos típicos para desempenho de consulta não ideal e métodos de otimização.

Seleções em uma tabela virtual usando a construção WHERE

É necessário aplicar filtros nos detalhes da tabela virtual somente através dos parâmetros do VT. Sob nenhuma circunstância você deve usar a construção WHERE para seleção em uma tabela virtual; isso é um erro grave do ponto de vista da otimização. No caso de seleção através de WHERE, de fato, o sistema receberá TODOS os registros e só então selecionará os necessários.

CERTO:

ESCOLHER

DE
Registro de acumulações. Liquidações mútuas com participantes de organizações. Saldos (
,
Organização = &Organização
E Individual = &Individual) COMO Liquidações mútuas com participantes de organizações Saldos

ERRADO:

ESCOLHER
Liquidações mútuas com participantes de organizações Saldos Montante Saldo
DE
Cadastro de Acumulações. Liquidações mútuas com participantes de organizações. Saldos (,) COMO Liquidações mútuas com participantes de organizações. Saldos
ONDE
Liquidações mútuas com participantes de saldos de organizações Organização = & Organização
E Liquidações mútuas com participantes de saldos de organizações. Individual = &Individual

Obtendo o valor de um campo de tipo complexo usando um ponto

Ao receber dados de tipo complexo em uma consulta através de um ponto, o sistema conecta com left join exatamente tantas tabelas quantos forem os tipos possíveis no campo do tipo complexo.

Por exemplo, é altamente indesejável para otimização acessar o campo de registro de registro – registrador. O registrador possui um tipo de dados composto, entre os quais estão todos os tipos de documentos possíveis que podem gravar dados no registrador.

ERRADO:

ESCOLHER
Conjunto de registros.Recorder.Date,
RecordSet.Quantidade
DE
RegisterAccumulations.ProductsOrganizations AS SetRecords

Ou seja, de fato, tal consulta acessará não uma tabela, mas 22 tabelas de banco de dados (este registro possui 21 tipos de registradores).

CERTO:

ESCOLHER
ESCOLHA
QUANDO ProdutosOrg.Registrar LINK Documento.Vendas de Produtos e Serviços
ENTÃO EXPRESSA(ProdutosOrganização.Registrar Documento AS.Vendas de MercadoriasServiços).Data
QUANDO GoodsOrg.Registrar LINK Documento.Recebimento de MercadoriasServiços
ENTÃO EXPRESSA(GoodsOrg.Registrar AS Document.Receipt of GoodsServices).Data
TERMINA COMO DATA,
ProdutosOrg.Quantidade
DE
RegisterAccumulations.GoodsOrganizations AS GoodsOrganization

Ou a segunda opção é adicionar essas informações aos detalhes, por exemplo, no nosso caso, adicionar uma data.

CERTO:

ESCOLHER
ProdutosOrganizações.Data,
ProdutosOrganizações.Quantidade
DE
Registro de Acumulações Bens de Organizações COMO Bens de Organizações

Subconsultas em uma condição de junção

Para otimização, é inaceitável usar subconsultas em condições de junção; isso retarda significativamente a consulta. É aconselhável usar VT nesses casos. Para se conectar, é necessário utilizar apenas metadados e objetos VT, previamente indexados por campos de conexão.

ERRADO:

ESCOLHER …

ASSOCIAÇÃO À ESQUERDA (
SELECIONE EM RegisterInformation.Limits
ONDE …
GRUPO POR...
) POR …

CERTO:

ESCOLHER …
Limites PUT
DE Informações Registrar.Limites
ONDE …
GRUPO POR...
ÍNDICE POR...;

ESCOLHER …
DO Documento Vendas de Bens e Serviços
Limites de LEFT JOIN
POR …;

Unindo Registros com Tabelas Virtuais

Existem situações em que, ao conectar uma mesa virtual a outras, o sistema não funciona de forma otimizada. Neste caso, para otimizar o desempenho da consulta, você pode tentar colocar a tabela virtual em uma tabela temporária, não esquecendo de indexar os campos unidos na consulta da tabela temporária. Isso se deve ao fato de que os VTs geralmente estão contidos em diversas tabelas físicas do SGBD; como resultado, uma subconsulta é compilada para selecioná-los e o problema acaba sendo semelhante ao ponto anterior.

Usando seleções baseadas em campos não indexados

Um dos erros mais comuns ao escrever consultas é usar condições em campos não indexados, isso contradiz regras de otimização de consulta. O SGBD não pode executar uma consulta de maneira ideal se a consulta incluir seleção em campos não indexáveis. Se você usar uma tabela temporária, também precisará indexar os campos de conexão.

Deve haver um índice adequado para cada condição. Um índice adequado é aquele que satisfaz os seguintes requisitos:

  1. O índice contém todos os campos listados na condição.
  2. Esses campos estão no início do índice.
  3. Essas seleções são consecutivas, ou seja, valores que não estão envolvidos na condição de consulta não ficam “entalados” entre eles.

Se o SGBD não selecionar os índices corretos, toda a tabela será verificada - isso terá um impacto muito negativo no desempenho e pode levar ao bloqueio prolongado de todo o conjunto de registros.

Usando OR lógico em condições

Isso é tudo, este artigo abordou os aspectos básicos da otimização de consultas que todo especialista 1C deveria conhecer.

Um curso em vídeo gratuito muito útil sobre desenvolvimento e otimização de consultas, Eu recomendo fortemente para iniciantes e muito mais!

Vejamos o resto agora.

Funções para trabalhar com strings em consultas 1C

Existem poucas funções e operadores para trabalhar com dados de string em consultas 1C.

Em primeiro lugar, podem ser adicionadas strings nas consultas. Para fazer isso, use o operador “+”:

Solicitar. Texto = "SELECIONE
" "Linha: " " + Fonte.Nome
;

Em segundo lugar, você pode selecionar parte da linha. Para fazer isso, use a função SUBSTRUÇÃO. A função é semelhante à linguagem 1C integrada. Possui três parâmetros:

  1. Sequência de origem.
  2. O número do caractere com o qual a linha selecionada deve começar.
  3. Personagens.

Solicitar. Texto= "ESCOLHER
SUBSTRING("
"Linha: " ", 4, 3) COMO Resultado"; // Resultado: ok

Função É NULO

NULL é um tipo de dados especial na plataforma 1C:Enterprise. É também o único valor possível deste tipo. NULL pode aparecer em consultas em diversos casos: ao conectar fontes de consulta, se um valor correspondente não foi encontrado em uma das tabelas; ao acessar os detalhes de um objeto inexistente; se NULL foi especificado na lista de campos de consulta (por exemplo, ao combinar resultados de seleção de várias tabelas), etc.

Porque NULL não é nulo, nem uma string vazia, nem mesmo um valor Indefinido, muitas vezes é útil substituí-lo por algum tipo de dados mais útil. É para isso que a função foi projetada. É NULO.

Possui dois parâmetros:

  1. O valor que está sendo verificado.
  2. O valor para substituir o primeiro parâmetro se for NULL.

Solicitar. Texto= "ESCOLHER
ISNULL (Fonte.Remainder, 0) AS Restante"
; // Se o resultado da requisição for o campo resto = NULL,
// então ele será substituído por 0, e você poderá realizar operações matemáticas com ele

Funções DESEMPENHO E INTRODUÇÃOLINKS

Essas funções são projetadas para obter representações de strings de vários valores. Ou seja, eles convertem referências, números, booleanos, etc. em texto simples. A diferença entre eles é que a função DESEMPENHO converte qualquer tipo de dados em texto (string) e a função INTRODUÇÃOLINKS- apenas vincula e retorna os valores restantes como estão, não convertidos.

Solicitar. Texto= "ESCOLHER
REPRESENTAÇÃO(TRUE) COMO Booleano,
REPRESENTAÇÃO (4) COMO UM NÚMERO,
REPRESENTAÇÃO (Fonte.Link) COMO Link,
REPRESENTAÇÃO(DATETIME(2016,10,07)) AS Data"
;
// Boolean = "Sim", Número = "4", Link = "Documento Nº da ordem de recebimento de dinheiro.... de..."
// Data = "07.10.2016 0:00:00"

Solicitar. Texto= "ESCOLHER
REPRESENTATIONREFERENCE(TRUE) AS Booleano,
REPRESENTAÇÃOREFERÊNCIA(4) COMO NÚMERO
APRESENTANDOLINK(Fonte.Link) COMO Link,
REPRESENTATIONREFERENCE(DATETIME(2016,10,07)) AS Data"
;
// Boolean = TRUE, Number = 4, Link = "Documento Nº da ordem de recebimento de dinheiro.... de..."
// Data=07.10.2016 0:00:00

Funções TIPO E VALORES DE TIPO

Função TIPO retorna o tipo de dados da plataforma 1C:Enterprise.

Solicitar. Texto= "ESCOLHER
TIPO (Número)
TIPO (Sequência),
TIPO (Documento. Ordem de pagamento de despesas)"
;

Função VALORES DE TIPO retorna o tipo do valor passado para ele.

Solicitar. Texto= "ESCOLHER
VALORES TIPO (5) COMO Número,
TIPO ("
"Linha" ") Como corda,
TIPO (Fonte.Link) COMO Referência
Da fonte Directory.Source AS"
;
//Número=Número, String=String, Diretório = DirectoryLink.Source

Essas funções são convenientes de usar, por exemplo, quando você precisa descobrir se um campo recebido em uma solicitação é algum tipo de valor. Por exemplo, vamos obter as informações de contato das contrapartes do registro de informações ContactInformation (os contatos não apenas das contrapartes, mas também de organizações, indivíduos, etc. são armazenados lá):

Solicitar. Texto= "ESCOLHER

DE

ONDE
VALORES TIPO(ContactInformation.Object) = TIPO(Diretório.Contrapartes)"
;

Função SIGNIFICADO

Função Significado permite que você use objetos de configuração 1C diretamente em uma solicitação, sem usar .

Vamos adicionar mais uma condição ao exemplo anterior. Você só precisa obter os números de telefone de suas contrapartes.

Solicitar. Texto= "ESCOLHER
ContactInformation.Introdução
DE
Cadastro de informações Informações de contato COMO Informações de contato
ONDE
VALORES TIPO(ContactInformation.Object) = TIPO(Diretório.Contrapartes)
E ContactInfo.Type = VALUE(Enum.ContactInfoTypes.Phone)"
;

Deve-se notar que esta função só pode ser usada com valores predefinidos, ou seja, com valores que podem ser acessados ​​diretamente do configurador. Ou seja, a função SIGNIFICADO não pode ser usado com elementos de diretório criados por usuários, mas pode trabalhar com enumerações, com elementos de diretório predefinidos, com valores Link Vazio.

Operador LINK

Operador LINK foi projetado para verificar os valores retornados por uma solicitação para ver se eles pertencem a um tipo de referência específico. A mesma tarefa pode ser realizada usando funções TIPO E VALORES DE TIPO(que têm um escopo mais amplo e foram discutidos acima).

Por exemplo, a tarefa de selecionar informações de contato das contrapartes poderia ser resolvida desta forma:

Solicitar. Texto= "ESCOLHER
ContactInformation.Introdução
DE
Cadastro de informações Informações de contato COMO Informações de contato
ONDE
ContactInformation.Object LINK Diretório.Contrapartes"
;

Operador EXPRESSAR

Operador EXPRESSAR usado em consultas 1C em dois casos:

  • quando você precisa alterar as características de um tipo primitivo;
  • quando você precisa transformar um campo com um tipo de dados composto em um campo com um único tipo.

Os tipos de dados primitivos incluem: número, string, data, booleano. Alguns desses tipos de dados possuem características adicionais. Tipo Número tem comprimento e precisão, tipo Linha - comprimento ou ilimitado.

Operador EXPRESSAR permite alterar não o tipo de dados, mas características adicionais. Por exemplo, ele pode transformar uma string com comprimento ilimitado em uma string com comprimento limitado. Isso pode ser útil se você precisar agrupar os resultados da consulta por esse campo. Você não pode agrupar por campos com comprimento ilimitado, então convertemos em uma string com comprimento de 200 caracteres.

Solicitar. Texto= "ESCOLHER
QUANTIDADE (Diferentes chegadas de bens e serviços. Link) AS Link
DE
Documento Recebimento de Mercadorias e Serviços COMO Recebimento de Mercadorias e Serviços
Agrupar por
EXPRESS(Recebimento de mercadorias e serviços. Comentário AS ROW (200))"
;

Em alguns casos, as consultas a campos com um tipo de dados composto podem não ser processadas de maneira ideal pela plataforma 1C. Isso resulta em tempos de consulta mais longos, por isso pode ser útil converter antecipadamente um tipo composto em um tipo único.

Solicitar. Texto= "ESCOLHER
EXPRESSO (Movimento de giro de mercadorias. Documento do pedido AS. Pedido do cliente). Data AS Data do pedido,
Movimento de Mercadorias Rotatividade.Nomenclatura
DE
CadastroAcumulações.Movimentação de Mercadorias.Fluxo de Negócios AS Movimento de MercadoriasFluxo de Negócios
ONDE
Movimento de mercadorias Volume de negócios.Ordem LINK Documento.Encomenda do cliente"
;

Operadores ESCOLHA E É NULO

Operador ESCOLHA semelhante ao operador SE na linguagem 1C integrada, mas tem funcionalidade um tanto reduzida.

Digamos que queremos receber informações de contato do cadastro de informações ContactInformation e, ao mesmo tempo, indicar em um campo de solicitação separado se pertencem a uma contraparte ou a um indivíduo.

Solicitar. Texto= "ESCOLHER
ContactInformation.Introdução,
ESCOLHA
QUANDO VALORES TIPO(ContactInformation.Object) = TIPO(Diretório.Contrapartes)
ENTÃO "
Contraparte "
OUTRA ESCOLHA
QUANDO VALORES TIPO(ContactInformation.Object) = TIPO(Diretório.Individuais)
ENTÃO "
Individual"
OUTRO "Outra pessoa" "
FIM
TERMINAR COMO PROPRIETÁRIO
DE
Registro de informações. Informações de contato como informações de contato"
;

Como pode ser visto no exemplo, no design ESCOLHA sempre há uma condição após a palavra QUANDO; valor aplicado se a condição for verdadeira após a palavra ENTÃO e o valor aplicado se a condição não for atendida, após a palavra DE OUTRA FORMA. Todos os três elementos de design ESCOLHA são obrigatórios. Omitir elemento DE OUTRA FORMA, da mesma forma que ao usar o operador SE na linguagem 1C integrada, isso é impossível. Também da operadora ESCOLHA não há análogo do design ELSEIF, mas você pode investir um ESCOLHA em outro, como foi feito em nosso exemplo.

Operador É NULO usado em design ESCOLHA para comparar um campo de consulta com o tipo NULL.

Solicitar. Texto= "ESCOLHER
ESCOLHA
QUANDO O VALOR É NULO ENTÃO 0
OUTRO Significado
FIM"
;

Além disso, o operador É NULO pode ser usado em condições de consulta, como em uma frase ONDE.

Na linguagem de consulta 1C:Enterprise, a função SUBSTRING() V formato SUBSTRING(<Исходная строка>, <Начало>, <Длина>) pode ser aplicado a dados de string e permite selecionar um fragmento<Исходной строки>, começando com o número do caractere<Начало>(os caracteres em uma linha são numerados a partir de 1) e comprimento<Длина>personagens. O resultado do cálculo da função SUBSTRING() possui um tipo string de comprimento variável, e o comprimento será considerado ilimitado se<Исходная строка>tem comprimento e parâmetro ilimitados<Длина>não é uma constante ou maior que 1024.

Cálculo da função SUBSTRING() no servidor SQL:
Na versão cliente-servidor do trabalho, a função SUBSTRING() é implementada usando a função SUBSTRING() da instrução SQL correspondente, passada ao servidor de banco de dados SQL Server, que calcula o tipo de resultado da função SUBSTRING() utilizando regras complexas dependendo do tipo e valores de seus parâmetros, bem como dependendo do contexto em que é utilizado.

Na maioria dos casos, essas regras não afetam a execução de uma consulta 1C:Enterprise, porém, há casos em que o comprimento máximo da string de resultado calculada pelo SQL Server é essencial para a execução da consulta. É importante ter em mente que em alguns contextos ao utilizar a função SUBSTRING(), o comprimento máximo do seu resultado pode ser igual ao comprimento máximo de uma string de comprimento limitado, que no SQL Server é de 4000 caracteres. Isso pode fazer com que a solicitação seja encerrada inesperadamente.

Por exemplo, a solicitação:
Código 1C v 8.x SELECIONAR
ESCOLHA

OUTRO NULO
O FIM COMO UMA APRESENTAÇÃO,
ESCOLHA
WHEN Tipo = &EndereçoLegalIndividual
ENTÃO SUBSTRING(Representação, 0, 200)
OUTRO NULO
TERMINAR COMO Apresentação1
DE

ORDENAR POR
Desempenho,
Desempenho1
termina de forma anormal com a mensagem Erro DBMS:
Provedor Microsoft OLE DB para SQL Server: Aviso: O processador de consulta não pôde produzir um plano de consulta a partir do otimizador porque o comprimento total de todas as colunas na cláusula GROUP BY ou ORDER BY excede 8.000 bytes.
HRESULT=80040E14, SQLSTATE=42000, nativo=8618

Isso ocorre porque o Microsoft SQL Server calcula o comprimento máximo da string resultante da expressão:
Código 1C v 8.x SELEÇÃO
WHEN Tipo = &EndereçoLegalIndividual
ENTÃO SUBSTRING(Representação, 0, 200)
OUTRO NULO
O FIM COMO UMA APRESENTAÇÃO,
equivale a 4.000 caracteres. Portanto, o comprimento de um registro que consiste em dois desses campos excede os 8.000 bytes permitidos para a operação de classificação.

Devido à peculiaridade descrita da execução da função SUBSTRING() no SQL Server, não é recomendado usar a função SUBSTRING() para converter strings de comprimento ilimitado em strings de comprimento limitado. Em vez disso, é melhor usar o operador de conversão EXPRESS(). Em particular, o exemplo acima pode ser reescrito como:
Código 1C v 8.x SELECIONAR
ESCOLHA
WHEN Tipo = &EndereçoLegalIndividual
OUTRO NULO
O FIM COMO UMA APRESENTAÇÃO,
ESCOLHA
WHEN Tipo = &EndereçoLegalIndividual
ENTÃO EXPRESS(Representação AS String(200))
OUTRO NULO
TERMINAR COMO Apresentação1
DE
Cadastro de informações Informações de contato COMO Informações de contato
ORDENAR POR
Desempenho,
Desempenho1