Expresse como um tipo em uma solicitação 1C. Convertendo um tipo composto em um único tipo

Neste artigo queremos discutir tudo com você Funções de linguagem de consulta 1C, e também construções de linguagem de consulta. Qual é a diferença entre função e design? A função é chamada com parênteses e possíveis parâmetros neles, e a construção é escrita sem parênteses. Sem dúvida todas as estruturas e funções da linguagem de consulta 1C tornar o processo de aquisição de dados flexível e multifuncional. Essas funções e construções se aplicam a campos de solicitação e algumas também se aplicam a condições.

Funções da linguagem de consulta 1C

Porque uma descrição clara Funções de linguagem de consulta 1Cé muito menos comum que descrições de estruturas, decidimos começar a examinar funções. Agora vamos analisar cada um separadamente, descrevendo sua finalidade, sintaxe e exemplo de uso, então:

1. Função DATAHORA - esta função cria um campo constante do tipo "Data".

Sintaxe: DATAHORA(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Exemplo de uso:

2. Função DIFERENÇA DE DATA- retorna a diferença entre duas datas em uma das dimensões (ano, mês, dia, hora, minuto, segundo). A medição é passada como parâmetro.

Sintaxe: DATADIFERENÇA(<Дата1>, <Дата2>, <Тип>)

Exemplo de uso:

Query.Text = "SELECT | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Número de dias";

3. Função VALOR- define um campo constante com um registro predefinido do banco de dados, você também pode obter um link vazio de qualquer tipo;

Sintaxe: VALOR(<Имя>)

Exemplo de uso:

Request.Text = "SELECT //elemento predefinido | VALUE(Diretório.Moedas.Dollar) AS Dólar, //link vazio | VALUE(Documento.Recebimento de Mercadorias e Serviços.EmptyLink) AS Recibo, //valor de transferência | VALUE(Transferência . Pessoa Jurídica. Pessoa Física) AS Pessoa Física, //conta predefinida VALOR(Plano de Contas. Auto-Contabilidade.Materiais) AS Conta_10" ;

4. Função SELECIONAR- temos diante de nós um análogo da construção IF, que é utilizada no código, apenas esta é utilizada nas consultas 1C.

Sintaxe: ESCOLHA QUANDO<Выражение>ENTÃO<Выражение>DE OUTRA FORMA<Выражение>FIM

Exemplo de uso:

Request.Text = //se o valor for superior a 7.500, então deve haver um desconto de 300 rublos, //portanto, se a condição for acionada, a função //retorna Amount - 300 //caso contrário, a solicitação simplesmente retornará Amount "SELECIONE | SELECIONE | QUANDO TCReceipts.Amount > 7500 | ENTÃO TCReceipts.Amount - 300 | ELSE TCReceipts.Amount | END AS AmountWithDiscount | FROM |

5. Função EXPRESSA- permite expressar um campo constante com um tipo específico.

Sintaxe: EXPRESS(NomeCampo AS NomeTipo)

Exemplo de uso:

Query.Text = "SELECIONE VÁRIOS | Sales.Registrar.Number, | SELECT | WHEN Sales.Registrar LINK Document.Expense | THEN EXPRESS(Sales.Registrar AS Document.Expense) | ELSE SELECT | WHEN Sales.Registrar LINK Document.Implementation | ENTÃO EXPRESS(Sales.Registrar AS Documento.Implementação) | END | END AS Número de Acumulação |

Existe outra opção de utilização da função EXPRESS em campos de tipos mistos, onde eles ocorrem? O exemplo mais simples é o “Registrador” de qualquer registro. Então, por que precisaríamos qualificar o tipo no registrador? Vamos considerar a situação quando selecionamos o campo “Número” do registrador, de qual tabela o número será selecionado? A resposta correta de todas! Portanto, para que nossa consulta funcione rapidamente, devemos especificar um tipo explícito usando a função EXPRESS

Exemplo de uso:

Query.Text = "SELECT | EXPRESS(Nomenclature.Comment AS Line(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Directory.Nomenclature AS Nomenclature";

6. Função ÉNULO(ortografia alternativa ISNULL) - se o campo for do tipo NULL, ele será substituído pelo segundo parâmetro da função.

Sintaxe: É NULO (<Поле>, <ПодставляемоеЗначение>)

Exemplo de uso:

Observe também que é aconselhável SEMPRE substituir o tipo NULL por algum valor, pois a comparação com o tipo NULL sempre retorna FALSE mesmo se você comparar NULL com NULL. Na maioria das vezes, os valores NULL são formados como resultado da união de tabelas (todos os tipos de junções, exceto as internas).

Query.Text = //Selecione todo o item e seus saldos //se não houver saldo em algum item, então haverá um campo //NULL que será substituído pelo valor 0 "SELECT | No. Link, | ISNULL (ProdutosInStockRemains.InStockRemaining, 0) COMO Restante | Diretório.Nomenclatura AS Nº CONEXÃO ESQUERDA RegistrarAcumulações.MercadoriasEmArmazéns.Remanescentes AS MercadoriasEmArmazénsRemanescentes |

7. Função REPRESENTAÇÃO- permite obter uma representação do campo de solicitação.

Sintaxe: DESEMPENHO(<НаименованиеПоля>)

Exemplo de uso:

Query.Text = "SELECT | REPRESENTATION(FreeRemainingRemains.Nomenclature) AS Nomenclature, | REPRESENTATION(FreeRemainingRemaining.Warehouse) AS Warehouse, | FreeRemainingRemaining.InStockRemaining |FROM |Accumulation Register.FreeRemaining.Remaining AS FreeRemainingRemaining";

Construções na linguagem de consulta 1C

Discutimos com você acima Funções de linguagem de consulta 1C, agora é hora de considerar construções na linguagem de consulta 1C, eles não são menos importantes e úteis, vamos começar.

1. Construção LINK- é um operador lógico para verificar um tipo de referência. Encontrado com mais frequência ao verificar um campo de um tipo complexo em relação a um tipo específico. Sintaxe: LINK<Имя таблицы>

Exemplo de uso:

Request.Text = //se o tipo de valor do registrador for Recebimento de documento, //então a consulta retornará "Recebimento de mercadorias", caso contrário "Vendas de mercadorias" "SELECT | SELECT | WHEN Remaining.Registrar LINK Documento.Recebimento de mercadoriasServiços | ENTÃO ""Recebimento"" | ELSE ""Consumo"" | FINAL AS Tipo de Movimento |

2. Projetar ENTRE- este operador verifica se o valor está dentro do intervalo especificado.

Sintaxe: ENTRE<Выражение>E<Выражение>

Exemplo de uso:

Request.Text = //obtém toda a nomenclatura cujo código está no intervalo de 1 a 100 "SELECT | Nomenclature.Link |FROM | Directory.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code BETWEEN 1 AND 100" ;

3. HIERARQUIA DE CONSTRUÇÃO B E B- verificar se o valor está na lista transferida (matrizes, tabelas de valores, etc. podem ser transferidas como uma lista). O operador IN HIERARCHY permite visualizar a hierarquia (um exemplo de utilização do Plano de Contas).

Sintaxe: EM(<СписокЗначений>), NA HIERARQUIA(<СписокЗначений>)

Exemplo de uso:

Request.Text = //seleciona todas as subcontas da conta "SELECT | Autossustentável. Vincular AS Conta | FROM | Plano de Contas. Autossustentável AS Autossustentável | ONDE | Autossustentável. Link IN HIERARCHY VALUE (Gráfico de Bens autossustentáveis)";

4. Projeto SEMELHANTE- Esta função nos permite comparar uma string com um padrão de string.

Sintaxe: COMO "<ТекстШаблона>"

Opções de padrão de linha:

% - uma sequência contendo qualquer número de caracteres arbitrários.

Um caractere arbitrário.

[...] - qualquer caractere único ou sequência de caracteres listados entre colchetes. A enumeração pode especificar intervalos, por exemplo a-z, significando um caractere arbitrário incluído no intervalo, incluindo os finais do intervalo.

[^...] - qualquer caractere único ou sequência de caracteres listados entre colchetes, exceto aqueles listados após o sinal de negação.

Exemplo de uso:

Query.Text = //encontre toda a nomenclatura que contém a raiz TABUR e comece //com uma letra minúscula ou maiúscula t "SELECT | Nomenclatura. Link | FROM | Diretório. Nomenclatura AS Nomenclatura | WHERE | Produtos. Nome LIKE "" [Tt ]abur%""" ;

5. Projeto PERMITIDO- este operador permite selecionar apenas os registros do banco de dados para os quais o chamador tem permissão de leitura. Esses direitos são configurados no nível do registro (RLS).

Sintaxe: PERMITIDO é escrito depois palavra-chave ESCOLHER

Exemplo de uso:

Request.Text = "SELECIONE PERMITIDO | Contrapartes. Link | FROM | Diretório. Contrapartes AS Contrapartes";

6. Projeto VÁRIOS- permite selecionar registros nos quais não há registros duplicados.

Sintaxe: VARIOUS é escrito após a palavra-chave SELECT

Exemplo de uso:

Request.Text = //seleciona registros aos quais o leitor tem direitos "SELECT VARIOUS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties" ;

Além disso, a construção VÁRIAS pode ser usada com o operador PERMITIDO e outros operadores.

Exemplo de uso:

Request.Text = //seleciona vários registros aos quais o leitor tem direitos "SELECT ALLOWED VARIOUS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties";

7. Projete PRIMEIRO- seleciona o número de registros especificados no parâmetro do resultado da consulta.

Sintaxe: PRIMEIRO<число>

Exemplo de uso:

Request.Text = //selecione os 4 primeiros números CCD do diretório "SELECT FIRST 4 | CCD Numbers. Link | FROM | Directory. CCD Numbers AS CCD Numbers";

8. Design PARA MUDANÇA- permite bloquear uma tabela, funciona apenas em transações (relevante apenas para bloqueios automáticos).

Sintaxe: PARA MUDAR<НаименованиеТаблицы>

Exemplo de uso:

Query.Text = "SELECT | Restos Livres Restos. Nomenclatura, | Restos Livres Restos. Armazém, | Restos Livres Restos. Em Estoque Restante | FROM | Cadastro de Acumulações. Restos Livres. Restos AS Restos Livres Restos | PARA MUDAR | Cadastro de Acumulações . Restos Livres";

9. Projeto ORDENAR POR- organiza os dados por um campo específico. Se o campo for um link, ao definir o sinalizador PEDIDO AUTOMÁTICO A classificação ocorrerá pela representação do link; se o sinalizador estiver desativado, os links serão classificados pela antiguidade do endereço do link na memória.

Sintaxe: ENCOMENDAR POR<НаименованиеПоля>PEDIDO AUTOMÁTICO

Exemplo de uso:

Query.Text = "SELECT | Restos Livres Restos. Nomenclatura AS Nomenclatura, | Restos Livres Restos. Armazém AS Armazém, | Restos Livres Restos. Em Estoque Restante | FROM | Registrar Acumulações. Restos Livres. Restantes AS Restos Livres Restos | | ORDER BY Nomenclatura | LEITURA AUTOMÁTICA DE ORDEM";

10. Projeto GRUPO POR- usado para agrupar strings de consulta por campos específicos. Os campos numéricos devem ser usados ​​com qualquer função agregada.

Sintaxe: Agrupar por<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Exemplo de uso:

Query.Text = "SELECT | ProductsInWarehouses.Nomenclature AS Nomenclature, | ProductsInWarehouses.Warehouse, | SUM(GoodsInWarehouses.InStock) AS INSTOCK |FROM | RegisterAccumulations.ProductsInWarehouses AS ProductsInWarehouses | |GROUP BY | ProductsInWarehouses.Nomenclature, | Treasures.Warehouse";

11. Projeto TENDO- permite aplicar uma função agregada a uma condição de seleção de dados, semelhante à construção WHERE.

Sintaxe: TENDO<агрегатная функция с условием>

Exemplo de uso:

Query.Text = //seleciona registros agrupados onde o campo InStock é maior que 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInWarehouses AS ItemsInStocks | | AGRUPAR POR | ProdutosEmArmazéns.Nomenclatura, |ProdutosEmArmazéns.Armazém |VALOR DISPONÍVEL (ProdutosEmArmazéns.Em Estoque) > 3" ;

12. Construção ÍNDICE POR- usado para indexar o campo de consulta. Uma consulta com indexação leva mais tempo para ser concluída, mas acelera a pesquisa nos campos indexados. Só pode ser usado em tabelas virtuais.

Sintaxe: ÍNDICE POR<Поле1, ... , ПолеN>

Exemplo de uso:

Request.Text = "SELECT | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | PLACE DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS, | Ts .CodeOS";

13. Projete ONDE- permite impor uma condição a qualquer campo de seleção. O resultado incluirá apenas registros que satisfaçam a condição.

Sintaxe: ONDE<Условие1 ОператорЛогСоединения УсловиеN>

Exemplo de uso:

Query.Text = //todos os registros com CompensationRemaining são selecionados<>0 e //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |Place DataTz |FROM | Registro de acumulação.CompensationRP.Remains AS CompensationRPORemains |WHERE |CompensationRPORemaining .CompensaçãoRemanescente<>0 | E CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. RESULTADOS DO PROJETO... GERAL- usado para calcular totais; o design especifica os campos pelos quais os totais serão calculados e as funções agregadas aplicadas aos campos de total. Ao usar totais para cada campo seguindo a construção TOTAL, os dados são agrupados. Existe uma construção GENERAL opcional; seu uso também fornece agrupamento adicional. Você verá um exemplo do resultado da solicitação abaixo.

Sintaxe: RESULTADOS<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>POR<ОБЩИЕ> <Поле1, ... , ПолеN>

Exemplo de uso:

Request.Text = "SELECT | Cálculos. Contrato de contraparte. Tipo de contrato AS Tipo de contrato, | Cálculos. Contrato de contraparte AS Contrato, | Cálculos. Contraparte, | Cálculos. Valor do saldo de liquidação mútua Saldo AS | DE | Registro de acumulações. Mútuo Liquidação COM Contrapartes Saldos COMO Cálculos | TOTAL | MONTANTE (Saldo) |ON |GERAL, |Tipo de Contrato";

A figura descreve os agrupamentos que foram formados durante a execução da solicitação, o superior refere-se à seção GERAL e o segundo ao campo Tipo de Acordo de Contraparte.

Atenção! Esta é uma versão introdutória da lição, cujos materiais podem estar incompletos.

Faça login no site como estudante

Faça login como aluno para acessar materiais escolares

Linguagem de consulta 1C 8.3 para programadores iniciantes: funções e operadores para trabalhar com tipos (VALUE TYPE, TYPE, REFERENCE, ISNULL, EXPRESS)

Lembremos que cada atributo (propriedade, campo) de um diretório, documento ou qualquer outro objeto de aplicação possui seu próprio tipo. E podemos ver este tipo no configurador:

Na linguagem de consulta, existe toda uma classe de funções e operadores para trabalhar com tipos de detalhes. Vamos dar uma olhada neles.

Função TIPO DE VALOR

Esta função recebe um parâmetro (valor) e retorna seu tipo. Para os adereços descritos na imagem (acima) Gosto diretório Comida o seguinte será retornado:

Agora vamos dar uma olhada nos adereços Característica Distintiva no diretório Cidades:

Você vê que esse suporte pode ser de vários tipos: Linha, Diretório.Tastes, Diretório.Colors. Este tipo de detalhe é denominado COMPOSTO.

Se tentarmos preencher o valor de tal detalhe no modo 1C:Enterprise, o sistema nos perguntará que tipo de valor será inserido:

E somente após a nossa seleção nos permitirá inserir o valor do tipo selecionado.

Assim, elementos de diretório do mesmo tipo ( Diretório.Cidades) poderá armazenar no mesmo atributo ( Característica Distintiva) valores tipos diferentes(String, Cores ou Sabores).

Você pode ver isso clicando nos elementos do diretório Cidades no modo 1C:Enterprise. Você está lendo uma versão de teste da lição; lições completas estão disponíveis.

Aqui, o valor do recurso distintivo é um elemento de diretório Sabores:

Aqui está a linha:

E aqui está geralmente um elemento do livro de referência Cores:

Estas são as possibilidades que um tipo de dados composto abre para nós!

Gostaria de saber como a função se comportará VALORES DE TIPO nos adereços Elemento Distintivo, tendo um tipo de dados composto:

Isso já é muito interessante. Vejamos cada linha individualmente.

O tipo de valor do traço distintivo do elemento Rússia é igual a NULO. Esta é a primeira vez que encontramos esse tipo. Valores deste tipo são usados ​​exclusivamente para determinar o valor ausente ao trabalhar com o banco de dados.

Isso é verdade porque o elemento Rússia é um grupo e não um elemento de diretório comum Cidades, então não tem campo Característica Distintiva. E o tipo de valor faltante, como lemos acima, é sempre igual a NULO.

O tipo de valor do traço distintivo para Perm é igual a Sabores. Isso é verdade, porque o valor do traço distintivo inserido no banco de dados da cidade de Perm é um link para o elemento do diretório Sabores.

Para Krasnoyarsk, o tipo de atributo é igual a Cores, porque o valor selecionado no banco de dados é um link para um elemento de diretório Cores.

Para Voronezh, o tipo de atributo é igual a Linha, porque o valor inserido no banco de dados é uma sequência regular.

A Índia é novamente um grupo, portanto não há significado. E o tipo do valor faltante, como lembramos, é igual a NULO.

Aqui está a questão. Se você for para o elemento do diretório Cidades com nome São Paulo, então você verá que o campo Característica Distintiva não preenchido de jeito nenhum. Está vazio. UM todos os campos vazios de um tipo composto têm um significado especial INDEFINIDO.

COM INDEFINIDO também estamos nos encontrando pela primeira vez. Significado INDEFINIDO utilizado quando é necessário utilizar um valor vazio que não pertence a nenhum outro tipo. Esta é exatamente a nossa situação. E o tipo de valor INDEFINIDO, como você provavelmente já adivinhou, é igual a NULO.

Função TIPO

Leva apenas um parâmetro - o nome do tipo primitivo ( LINHA, NÚMERO, DATA, BOOLEAN) ou o nome da tabela cujo tipo de link você deseja obter.

O resultado desta construção será um valor do tipo Type para o tipo especificado.

Parece vago, não é?

Vejamos a aplicação deste design e tudo se encaixará imediatamente.

Suponha que precisemos selecionar todas as entradas do diretório Cidades, que possuem adereços compostos Característica Distintiva tem um valor do tipo LINHA:

Agora vamos selecionar todos os registros que possuem valores de atributos Característica Distintiva são links para elementos de diretório Cores(mesa Diretório.Colors):

Retiro

Como você se lembra, alguns elementos do diretório Cidades não tenho adereços Característica Distintiva. Função VALORES DE TIPO para tais elementos produz NULO.

Como você pode selecionar esses elementos em uma consulta? Um operador lógico especial é fornecido para isso É NULO(não confundir com a função É NULO, que veremos a seguir). Você está lendo uma versão de teste da lição; lições completas estão disponíveis.

Aqui está um exemplo de seu uso:

Ótimo. Mas você notou que não existe nenhum elemento de São Paulo, tipo de valor props Característica Distintiva a quem ele também deu NULO. Por que isso aconteceu?

Mas o fato é que a situação dos grupos (Rússia, Índia, Brasil), para os quais o preenchimento dos dados Característica Distintiva impossível em princípio, já que não o possuem, difere da situação do elemento São Paulo, para o qual o preenchimento dos adereços é possível, mas simplesmente não está preenchido e equivale, como lembramos, a um valor especial INDEFINIDO.

Para selecionar todos os registros que possuem o requisito Característica Distintiva presente, mas não preenchido, deve ser utilizada uma construção diferente:

Mas a comparação com UNDEFINED para determinar atributos vazios (não preenchidos) só funcionará para tipos compostos.

Por falar nisso, operador lógico A forma de negação IS NULL é assim:

Operador lógico LINK

Por exemplo, vamos selecionar no diretório Cidades apenas aqueles registros que possuem o valor de um atributo composto Característica Distintiva são um link para um elemento de diretório Sabores:

Como você se lembra, poderíamos resolver o mesmo problema usando VALORES DE TIPO E TIPO:

Função É NULO

A função foi projetada para substituir um valor NULO para um significado diferente.

Lembramos que o significado NULO retornado se o atributo solicitado (campo, propriedade) não existir.

Por exemplo, adereços Característica Distintiva para grupos de diretórios Cidades:

Função É NULO nos ajudará a gerar um valor diferente se esse valor for igual a NULO. Você está lendo uma versão de teste da lição; lições completas estão disponíveis. Seja neste caso a linha “Não existe tal suporte!”:

Acontece que se o primeiro parâmetro da função É NULO não é igual NULO, então ele retorna. Se for NULL, o segundo parâmetro será retornado.

Função EXPRESSA

Esta função é apenas para campos que possuem um tipo composto. Um excelente exemplo de tal campo é a propriedade Característica Distintiva para elementos de diretório Cidades.

Como lembramos, os campos compostos podem ser de vários tipos especificados no configurador.

Para campo Característica Distintiva tais tipos válidos são LINHA, Diretório.Colors E Diretório.Tastes.

Às vezes é necessário converter os valores de um campo composto para um tipo específico.

Vamos listar todos os valores dos campos Característica Distintiva digitar Referência.Cores:

Como resultado, todos os valores dos elementos que eram do tipo Diretório.Cores, permaneceram preenchidos e foram convertidos para o tipo especificado. Todos os valores de outros tipos ( LINHA, Diretório.Tastes) agora são iguais NULO. Esta é a peculiaridade da conversão de tipo usando a função EXPRESSAR.

Você pode converter um tipo em um tipo primitivo ( BOOLEAN, NÚMERO, LINHA, DATA) ou para um tipo de referência. Você está lendo uma versão de teste da lição; lições completas estão disponíveis. Mas o tipo para o qual a conversão está sendo feita deve ser incluído na lista de tipos deste campo composto, caso contrário o sistema gerará um erro.

Faça o teste

Iniciar teste

1. Escolha a afirmação mais correta

2. Detalhes que podem assumir valores de um dos vários tipos são chamados

3. Para determinar o tipo de valor do atributo, use a função

4. Detalhes vazios de um tipo composto são importantes

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. Número de caracteres.

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

Função É NULO

// Resultado: ok NULL é um tipo de dados especial na plataforma 1C:Enterprise. Ele é o único significado possível

este 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.

  1. Possui dois parâmetros:
  2. O valor que está sendo verificado.

Solicitar. Texto= "ESCOLHER
O valor para substituir o primeiro parâmetro se for NULL.
; 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 Funções 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 E converte qualquer tipo de dados em texto (string) e a função

Solicitar. Texto= "ESCOLHER
- apenas vincula e retorna os valores restantes como estão, não convertidos.
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..."

Solicitar. Texto= "ESCOLHER
// Data = "07.10.2016 0:00:00"
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..."

// então ele será substituído por 0, e você poderá realizar operações matemáticas com ele TIPO DESEMPENHO VALORES DE TIPO

Função TIPO// Data=07.10.2016 0:00:00

Solicitar. Texto= "ESCOLHER
retorna o tipo de dados da plataforma 1C:Enterprise.
TIPO (Número)
TIPO (Sequência),
;

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 String,
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 no 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
Registro de 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 DESEMPENHO VALORES DE TIPO(que têm um escopo mais amplo e foram discutidos acima).

Por exemplo, a tarefa de escolha informações de contato contrapartes poderiam ser resolvidas desta forma:

Solicitar. Texto= "ESCOLHER
ContactInformation.Introdução
DE
Registro de 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.

PARA tipos primitivos os dados 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 de 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 compostos 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 DESEMPENHO É 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 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.

Então vamos começar. Uma consulta é um objeto especial em 1C 8.2 usado para gerar e executar consultas em tabelas de banco de dados no sistema. Para executar uma consulta, você precisa redigir um texto de consulta que descreva quais tabelas serão usadas como fontes de dados de consulta, quais campos precisam ser selecionados, quais ordenações e agrupamentos aplicar, etc. Você pode ler mais sobre consultas no livro "Guia do desenvolvedor 1C 8.2". A linguagem de consulta 1C 8.2 é muito semelhante em sintaxe a outras linguagens de consulta de banco de dados SQL, mas também existem diferenças. Dentre as principais vantagens da linguagem de consulta integrada, vale destacar a desreferência de campos, a presença de tabelas virtuais, a comodidade do trabalho com totais e campos não digitados nas consultas. As desvantagens são que você não pode usar uma consulta como campo de saída, não pode usar procedimentos armazenados e não pode converter uma string em um número.

1. Para aumentar a legibilidade da solicitação e reduzir o número de parâmetros da solicitação, você pode usar um literal para acessar dados de configuração predefinidos na solicitação VALOR (REPRESENTAÇÃO DE VALOR). Como representação de valores, os valores das enumerações, dados predefinidos de diretórios, planos de tipos de cálculo, planos de tipos de características, planos de contas, links vazios, valores de pontos de rota, valores de transferências do sistema ( por exemplo, Tipo de movimento de acumulação, Tipo de conta) pode ser usado.

ONDE Cidade = VALOR(Diretório.Cidades.Moscou)

ONDE Cidade = VALOR (Diretório.Cidades.EmptyLink)

WHEREProductType = VALUE(Enumeration.ProductTypes.Service)

WHEREMovementType = VALOR(MovementTypeAccumulation.Incoming)

ONDE fica o ponto da rota =

VALOR(BusinessProcess.Agreement.RoutePoint.Agreement)

A expressão entre parênteses sempre começa com uma palavra singular (Diretório, Enumeração, etc.) que corresponde ao tipo do valor predefinido.

2. A ordenação automática em uma consulta pode retardar bastante o processo. Se a classificação não for necessária, é melhor nem usá-la. Em muitos casos, é mais eficiente escrever a classificação usando uma palavra-chave ENCOMENDAR POR.

3.Você precisa ter certeza de que, ao usar aliases, um campo ambíguo não apareça. Caso contrário, o sistema não entenderá qual objeto precisa ser acessado.

Exemplo de solicitação com campo ambíguo:

ESCOLHER

Mercadorias restantesRemanescente.QuantidadeRemanescente

Diretório.Nomenclatura AS Nomenclatura

CONEXÃO ESQUERDA Registrar Acumulações de Mercadorias Restantes.

Produtos Restantes de SoftwareRemainings.Nomenclature = Nomenclature.Link

É necessário corrigir o alias da tabela, por exemplo, assim: “Diretório.Nomenclatura AS Nomenclatura1”, e “Nomenclatura.Link” deverá ser corrigido de acordo com “Nomenclatura1.Link”.

4. Às vezes é útil obter uma representação dos campos de referência usando uma palavra-chave Funções junto com um link para que não haja acesso repetido ao banco de dados. Isto pode ser útil ao exibir o resultado de uma consulta em uma tabela.

ESCOLHER

REPRESENTAÇÃO (Documento.Contraparte) COMO Destinatário,

APRESENTAÇÃO(Documento.Base)

Documento.Invoice Documento AS

5.Use em uma solicitação EXPRESS(Campo AS Tipo) permite remover tabelas desnecessárias de uma conexão com um campo de tipo de dados complexo. Agilizando assim a execução da solicitação.

Exemplo (o registrador é um campo do tipo composto para a tabela física do registro de acumulação de Resíduos de Mercadorias, na solicitação são selecionados a Data e Número dos documentos Recebimento de Mercadorias, enquanto ao acessar os detalhes do documento Data e Número através o Registrador, não há ligação múltipla da tabela de registro com tabelas de documentos que são registradores do registro de Restos de Mercadorias):

SELECIONE VÁRIOS
EXPRESSO (Remanescentes de Mercadorias. Registrador AS Documento. Recebimento de Mercadorias). Número COMO NÚMERO DE RECEBIMENTO,

EXPRESSO (Remanescentes de Mercadorias. Documento Registrador AS. Recebimento de Mercadorias). Data COMO DATA DE RECEBIMENTO

DE
Registro de Acumulações de Bens Remanescentes.
ONDE
(EXPRESSO (Mercadorias Restantes. Documento Registrador AS. Recebimento de Mercadorias) NÃO É NULO)

6.Quando na configuração 1C existem usuários que possuem direitos limitados a determinados objetos de configuração, a palavra-chave deve ser utilizada na solicitação de tais objetos PERMITIDO para que a solicitação seja executada sem erros (Selecione Permitido...)

7.Ao mesclar tabelas contendo tabelas aninhadas (por exemplo, um Documento com parte tabular) pode ser uma palavra-chave útil VAZIA quando, por exemplo, um dos documentos não possui parte tabular.

COMBINE TUDO

DO Documento.Fatura

8.Ao trabalhar com junções de tabelas contendo uma linha cada, pode ser necessário mesclar as linhas das tabelas (em ambas as tabelas não há campo pelo qual possam ser unidas). Isto pode ser conseguido usando a construção " Tabela de CONEXÃO COMPLETA por TRUE" Se as tabelas possuírem mais de uma linha, o resultado será um número de linhas igual ao produto do número de linhas de ambas as tabelas. Se houver O linhas em uma tabela, o número de linhas na tabela resultante será igual ao número de linhas na segunda tabela. Além disso, para conectar essas tabelas, você pode usar o produto cartesiano de tabelas, no qual todas as combinações de linhas de ambas as tabelas aparecerão na tabela resultante. Devemos lembrar que se houver 0 linhas em uma das tabelas, então o produto cartesiano será 0, então uma junção completa será melhor. Em geral, em vez de uma conexão completa POR VERDADE Você pode usar qualquer outro tipo de junção, mas neste caso também é possível que a tabela resultante tenha 0 linhas, mesmo que uma das tabelas tenha um número de linhas diferente de zero. No caso de uma junção completa, esta situação só ocorrerá em um caso, se o número de linhas em ambas as tabelas for 0. Se você sabe que existe exatamente pelo menos uma linha na tabela, então você pode usar CONEXÃO ESQUERDA com outra mesa com condição POR VERDADE.

Exemplo (reconhecidamente inventado, para Full Join):

ESCOLHER

K. Contraparte

Enumeração.

CONEXÃO COMPLETA (Selecione a primeira 1 D. Contraparte DO Documento. Vendas de mercadorias COMO D Organizar por D. Momento) COMO

ATIVADO (VERDADEIRO)

9. Para obter registros únicos para um determinado campo, é mais correto usar uma palavra-chave em vez de agrupar VÁRIOS na solicitação, pois essa construção é muito mais clara e a palavra-chave Agrupar por tem uma aplicação mais ampla e é frequentemente usado se for necessário calcular adicionalmente funções agregadas por agrupamentos. Em alguns casos é necessário produzir um número limitado de linhas. Para fazer isso, você deve especificar a palavra-chave na descrição da solicitação PRIMEIRO e depois dele - o número necessário de linhas.

Exemplo para PRIMEIRO:

Selecione os primeiros 5

Diretório.Nomenclatura.Nome,

Diretório.Nomenclatura.PurchasingPrice

Ordenar por

Directory.Nomenclature.PurchasePrice Decrescente

Exemplo para VÁRIOS:

Selecione vários

Documento.Consumível.Contraparte

10. As funções de agregação em uma consulta podem ser usadas sem uma palavra-chave GRUPO. Neste caso, todos os resultados serão agrupados em uma linha.

Escolher

Valor(Fatura.Valor) Como Valor

Documento.Invoice.Composition como fatura

11.Nas consultas nos campos de seleção, você pode acessar livremente os detalhes dos campos de seleção. Esse recurso é chamado de desreferenciação de campo selecionado. Se a fonte de dados for uma tabela aninhada (parte tabular do documento), então nos campos de seleção você também pode acessar os campos da tabela principal (por exemplo, através do campo Link, acessar o campo da tabela principal Conta)

ESCOLHER


Recebimento de Mercadorias e Serviços Quantidade AS Quantidade,
Recebimento de Mercadorias e ServiçosMercadorias.Link.Contraparte
DE

ONDE
Recebimento de mercadorias e serviçosGoods.Link = &Link

Existe uma peculiaridade de usar a desreferenciação de campos se houver agrupamentos na solicitação. Em quaisquer consultas com agrupamentos nas listas de campos de consulta, você pode acessar livremente os detalhes dos campos de agrupamento.

ESCOLHER

Recebimento de Mercadorias e Serviços. Nomenclatura.

Código de Nomenclatura de Recebimento de Mercadorias e Serviços.

SOMA (Recebimento de Mercadorias e Serviços. Quantidade) AS Quantidade,

Documento de Recebimento de Mercadorias e Serviços COMO Recebimento de Mercadorias e Serviços.

Agrupar por

Recebimento de Mercadorias e Serviços. Nomenclatura.

A ajuda 1C diz que se houver agrupamento, apenas campos de agrupamento e funções agregadas para campos de seleção poderão participar dos campos de seleção de consulta. Há um caso excepcional em que funções agregadas são aplicadas a campos de uma tabela aninhada. Neste caso, na lista de campos de seleção é possível acessar os campos da tabela de nível superior, sem agrupar os resultados por estes campos.

ESCOLHER

Recebimento de Mercadorias e Serviços (SUM (Quantidade), Nomenclatura),

Recebimento de Bens e Serviços da Contraparte.

Documento de Recebimento de Mercadorias e Serviços COMO Recebimento de Mercadorias e Serviços.

Agrupar por

Recebimento de Mercadorias e Serviços.

12. Às vezes, em vez de especificar qualquer campo do agrupamento, é útil incluir o seguinte parâmetro nos campos de seleção da consulta:

ESCOLHER
DocProdutos.Nomenclatura,
& Contraparte,
&Período,
SOMA(DocProdutos.Quantidade * DocProdutos.K) AS Quantidade,
SOMA(DocProdutos.Valor) AS Valor
DE
Documento.Admissão.Produtos AS DocProdutos
ONDE
DocProdutos.Link = &Link

Agrupar por
DocProdutos.Nomenclatura

E então defina o parâmetro no corpo da solicitação:

Request.SetParameter("&Conta", SelectAccount);

Query.SetParameter("&Período", Data);

13. Nas consultas universais, os parâmetros podem ser utilizados na descrição das fontes de dados da consulta, nas condições ONDE, nas condições de união de tabelas e parâmetros de tabelas virtuais. Existem duas técnicas para criar consultas genéricas:

A) utilizando o mecanismo de concatenação de strings, adicionando variáveis ​​ao texto da solicitação;

OrderingType = ?(ALGUMA VARIÁVEL,"","DESC");

Query.Text = "Selecionar... Organizar POR Campo1 " + OrderType + "...";

Query.Text = "Selecione Campo1...";

Se ALGUMA VARIÁVEL = 1 Então

Request.Text = Request.Text + ",Campo2 ...";

fimSe;

B) usar parâmetros em várias partes da solicitação (por exemplo, na seção de fontes de dados da solicitação) e, em seguida, o método de linguagem integrado - STREPLACE(). Ao projetar consultas genéricas, é útil acessar uma propriedade de objetos METADADOS(), com o qual você pode determinar o nome da tabela para algum link (por exemplo, para um documento será algo assim - Link . METADATA().NAME), passado através de um parâmetro para algum procedimento universal.

Escolher

DocTch.Nomenclatura,

&Alguns DocTC AS DocTC

E então defina o parâmetro no corpo da solicitação

Request.Text = StrReplace(Request.Text, "&SomeDocTCH", "Documento."+Link.Metadata().Nome+".Produtos");

Os parâmetros podem ser usados ​​em condições de consulta para ativar uma condição opcional &Parâmetro OU NÃO SomeProperty:

Request.SetParameter(“&Parâmetro”, “Counterparty.Name=””Ivanov”””);

Usando um literal verdadeiro você pode remover certos filtros na solicitação

Request.SetParameter("&Parâmetro", Verdadeiro);

14. Muito útil no designer de consultas é o comando do menu de contexto da tabela - " Renomear tabela...", com o qual você pode criar algum nome genérico para a fonte de dados. Para criar consultas para tabelas do mesmo tipo, com estrutura semelhante, pode ser útil para a segunda tabela copiar o texto da consulta da primeira tabela, vá para a janela do designer de consulta e menu de contexto tabelas selecionar item - Substituir mesa... e selecione a segunda tabela.

15. Ao trabalhar com a criação de consultas aninhadas nas seções de condições ou parâmetros de tabelas virtuais do designer de consultas, utiliza-se a técnica de destacar um espaço entre colchetes, a seguir aparece o item “Query Designer” no menu de contexto, e ao editar uma consulta aninhada, toda a consulta entre colchetes é destacada na condição.

Exemplo de uma consulta aninhada:

Produto B (selecione o produto...)

16. Ao projetar relatórios ACS em consultas para balancear registros, é mais conveniente e correto usar a expressão como parâmetro Período AddToDate(EndPeriod(Período,DIA),SEGUNDO,1), uma vez que os saldos virtuais são obtidos no início do período, não incluindo o último segundo. A técnica +1 segundo não pode ser usada com documentos: de acordo com o novo método de lançamento de documentos, os saldos de registro devem ser recebidos para o Período especificado pelo objeto Limite com o momento do documento incluindo (e não na data do documento +1 segundo!), e de acordo com o método antigo de lançamento - no momento do documento (e não na data do documento!). Ao analisar o faturamento ou dados de um período, é conveniente adicionar um parâmetro com o tipo Período Padrão(neste caso não há necessidade de informar a última data do intervalo no final do dia). Para o campo padrão “Início do Período”, no campo “Expressão” você deve inserir "&Período.Data de início" E para o campo padrão “Fim do Período” no campo “Expressão” escreva “ &Período.Data de término". Tantos informações úteis a linguagem de consulta não pode ser encontrada no assistente de sintaxe, mas na ajuda completa do configurador 1C 8.2 (botão F1)

17. Função de consulta ÉNulo(é mais conveniente escrever a versão em inglês ÉNulo) normalmente é usado para eliminar valores nulos para campos de consulta numéricos. Em alguns casos, por exemplo, numa junção completa de duas tabelas, a função ÉNulo (Parâmetro1, Parâmetro2) pode substituir com sucesso o design ESCOLHA QUANDO... ENTÃO... OUTRO.... FINAL, quando para qualquer campo os valores NULL podem estar tanto na primeira tabela quanto na segunda (esta construção permite obter um valor não nulo para o campo). Mas devemos lembrar que, diferentemente do operador condicional ESCOLHA função ÉNulo converte o tipo do segundo argumento no tipo do primeiro argumento, que deve ser levado em consideração se os tipos de argumentos forem diferentes!

ÉNulo(Reg.Remanescente,0)

ÉNulo(Doc.Produto,Doc1.Item)

18. Você construção condicional ESCOLHA Existe uma sintaxe alternativa para o simples caso de testar a igualdade para um determinado valor, mas ela não está documentada:

Expressão de escolha Quando 1, então “Alto” ​​Quando 2, então “Médio” Else “Low” End

19. Operador de verificação de valor NULL Sim Nulo(Podemos recomendar o uso da versão em inglês É nulo). Esta construção surgiu porque qualquer operação que compare dois valores, sendo pelo menos um Nulo, é sempre falsa. Escrever Onde Nome = Nulo errado. A forma de negação também é interessante deste operador Não Nulo- errado, mas certo Sim, não nulo ou forma Não (campo1 é nulo)- esta é uma diferença significativa de todos os operadores usados ​​em conjunto com o operador He.

20. Às vezes, o formulário do operador é útil EM para verificar se há correspondência com um dos valores listados.

...Onde está o Produto.Nome B ("Eletrodomésticos","Computadores")

Para livros de referência, o formulário do operador pode ser útil EM verificações de membros da hierarquia.

...Onde está a Nomenclatura NA HIERARQUIA (&Grupo)

Operador EM frequentemente usado para verificar se um valor está incluído no resultado de uma subconsulta.

Em uma subconsulta, você pode acessar os campos externos da consulta em uma condição.

//Seleciona os nomes dos produtos que estavam presentes

// nas faturas

ESCOLHER

Produtos.Nome

Diretório.Nomenclatura COMO Produtos

(ESCOLHER

Composição da fatura.Nomenclatura

Document.Invoice.Composition AS InvoiceComposition

InvoiceContent.Nomenclature = Produtos.Link)

Operação EM pode ser usado com matrizes, listas de valores, tabelas de valores, consultas aninhadas. Neste caso, é possível reduzir as condições

Sintaxe para uma subconsulta

(expressão1, expressão2,...,expressãoN) In (Selecione expressão1, expressão2,...,expressãoN...)

Sintaxe para tabela de valores

(expressão1, expressão2,...,expressãoN) Em (&TK), onde as primeiras N colunas são usadas na tabela de valores TK

20. Existe uma piada na Internet sobre como o designer de consultas sempre faz ESQUERDA juntar tabelas (e trocá-las), não importa como especificamos CERTO:

1C: A empresa adora “para a esquerda”.

21. É conveniente depurar consultas complexas no console de consultas. Existem muitos deles na Internet. Depois de depurar a consulta, você pode copiá-la e no designer de consultas há um botão maravilhoso “ Solicitar", onde você pode colá-lo no mesmo formulário e salvá-lo (antes só era possível copiá-lo no configurador e formatar a solicitação utilizando o caractere de quebra de linha). Na janela que se abre ao clicar no botão “Consulta”, você pode editar a consulta e visualizar o resultado da execução, o que é bastante conveniente.

22.Ao desenhar relatórios ACS, é preciso lembrar que caso seja necessário fornecer filtragem por determinado campo, não é necessário adicionar o parâmetro ao texto da solicitação. O Query Builder possui uma guia " Composição de dados", onde você pode adicionar parâmetros às condições. Além disso, no nível do relatório ACS há uma guia de condições onde você pode adicionar condições arbitrárias e salvá-las em configurações rápidas. Neste caso, as condições serão universais (igualdade, desigualdade, pertencimento, inclusão na lista, etc.).

23. Ao trabalhar com documentos, pode ser necessário adicionar classificação por campo de tabela virtual MOMENTO DO TEMPO, mas azar - em consultas aninhadas, a classificação por este campo não funciona corretamente. Dançar com pandeiros ajuda: classificar por campo virtual MOMENTO DO TEMPOé substituído por duas classificações: por data e por link. Você também pode resolver o problema por meio de uma tabela temporária, movendo a consulta aninhada para uma consulta separada. Para muitas versões, esse recurso ou bug não foi corrigido.

Um exemplo de solicitação com defeito que recebe o último documento postado para a contraparte especificada (ou melhor, a parte tabular do documento):

ESCOLHER

Consumíveis. Número da linha,

Produtos consumíveis.Produto,

Itens consumíveis. Quantidade,

Preço dos produtos consumíveis.

ConsumíveisItems.Quantidade

Documento.Consumível AS D

Possíveis soluções:

A) Substitua por ENCOMENDAR POR sobre

ENCOMENDA POR D.Data DESC.

B) Você pode mover a consulta aninhada para uma tabela temporária:

Documento.Consumível AS D

E D.Contraparte = &Contraparte

////////////////////////////////////////////////////////////////////////////////

ESCOLHER

Consumíveis. Número da linha,

Produtos consumíveis.Produto,

Itens consumíveis. Quantidade,

Preço dos produtos consumíveis.

ConsumíveisItems.Quantidade

Documento.Consumíveis.Mercadorias COMO Bens Consumíveis

C) Você pode consultar a tabela principal do documento, e só então para a parte tabular

SELECIONE O PRIMEIRO 1

Número da linha,

Produto,

Quantidade,

Preço,

Soma

Document.Consumables AS Consumíveis

Despesa.Contraparte = &Contraparte

E consumíveis. Conduzido

ENCOMENDAR POR

Consumível. Momento de Tempo DIMINUIR

24. Ao acessar a tabela principal de um documento (diretório), também é possível acessar os dados da tabela subordinada (parte tabular). Esta oportunidade é chamada desreferenciando campos da tabela. Um exemplo de tarefa é a tarefa de pesquisar documentos contendo um produto específico na seção tabular.

A vantagem desta consulta sobre uma consulta na tabela aninhada Receipt.Goods é que se houver duplicatas nos documentos, o resultado da consulta retornará apenas documentos únicos sem usar a palavra-chave VÁRIOS.

Comparar:

Provavelmente isso é tudo o que existe. É claro que ainda há muitas questões na linguagem de consulta que não abordei. Para escrever este artigo, usei as informações que recebi após concluir o curso básico 1C 8.2 spec8.ru, bem como do livro “Guia do desenvolvedor 1C 8.2” e da Internet.

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: " + Nome das Contrapartes AS Coluna 1 FROM Diretório Contrapartes AS Contrapartes ONDE Contrapartes.

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 ONDE Contrapartes = "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.

Escolha