Funções para trabalhar com strings de consulta 1s. Recurso da função substring(). Obtendo o valor de um campo de tipo complexo usando um ponto

Funções para trabalhar com strings de consulta 1s. Recurso da função substring(). Obtendo o valor de um campo de tipo complexo usando um ponto

Saudações, queridos leitores do blog! Hoje, com a ajuda de exemplos, veremos como você pode usar a função de consulta 1C na prática SUBSTRING. O uso desta função é útil não apenas em consultas simples, que veremos aqui, mas também em consultas e consultas.

A tarefa era o que era necessário nos detalhes do documento Conformidade selecione duas linhas e classifique por elas. Conformidade com uma conta deste tipo: 779000/004599. Como posso dividir esse valor em dois?

A função SUBSTRING possui três parâmetros. A primeira é a string de origem da qual você deseja extrair parte dos caracteres - uma substring. É claro que o tipo de valor deste parâmetro é Linha. Atenção, essa é uma observação muito importante, se você utilizar o tipo do primeiro parâmetro diferente de string, a função não funcionará, a requisição irá gerar um erro! O segundo parâmetro determina a posição do caractere na string de origem a partir da qual começa a seleção de parte da string, e o terceiro é o comprimento da substring selecionada. O tipo de valor para o segundo e terceiro parâmetros é número.

Vamos passar à prática:

SELECIONE Typical.Recorder AS Nome, SUBSTRING(Typical.Registrar.According.Name, 1, 6) Conta de Custo AS, SUBSTRING(Typical.Registrar.According.Name, 8, 11) AS Department, AMOUNT(SELECT WHEN MONTH(Typical.Period) = 3 THEN EXPRESS(Typical.Amount AS NUMBER(15, 2)) ELSE 0 END) AS March FROM RegisterAccounting .Typical AS Typical WHERE Typical.AccountKt = &AccountKt AND Typical.Period BETWEEN &PeriodStart AND &PeriodEnGROUP BY SUBSTRING(Típico.Recorder.According.Name, 1, 6), SUBSTRING(Typical.Registrar.According.Name, 8, 11), Typical.Registrar ORDER BY Departamento, Conta de Custos

O resultado desta consulta é o seguinte:

Nome Conta de Custo Departamento Marchar
Ordem de pagamento 00000000319 de 01/03/2010 14:42:54 779000 004599 9 000
Ordem de pagamento 00000000320 de 02/03/2010 12:07:34 779000 004599 4 721,6
Ordem de pagamento de saída 00000000203 de 01/03/2010 12:28:52 786500 004599 987 614,51
Ordem de pagamento de saída 00000000227 de 03/03/2010 14:16:00 786500 004599 400 000
Ordem de pagamento de saída 00000000238 de 05/03/2010 12:37:57 732000 004600 5 400
Ordem de pagamento de saída 00000000197 de 01/03/2010 11:53:11 732500 004600 12 100
Ordem de pagamento de saída 00000000198 de 01/03/2010 11:55:39 732500 004600 12 100
Ordem de pagamento de saída 00000000279 de 26/03/2010 0:00:00 734100 004600 19 609
Ordem de pagamento de saída 00000000287 de 29/03/2010 14:15:36 734100 004600 55 300
Ordem de pagamento de saída 00000000291 de 30/03/2010 11:01:10 734100 004600 18 090
Ordem de pagamento de saída 00000000268 de 18/03/2010 10:34:25 738000 004600 10 050
Ordem de pagamento de saída 00000000276 de 18/03/2010 12:20:20 750400 004600 13 060,98
Ordem de pagamento de saída 00000000281 de 29/03/2010 12:33:46 750400 004600 555 645,41
Ordem de pagamento 00000000234 de 04/03/2010 12:21:55 754450 004600 24 120
Ordem de pagamento de saída 00000000290 de 30/03/2010 10:44:39 754450 004600 100 000
Ordem de pagamento 00000000240 de 09/03/2010 10:53:24 786300 004600 20 800
Ordem de pagamento de saída 00000000269 de 18/03/2010 10:58:04 786300 004600 61 012
Ordem de pagamento de saída 00000000289 de 30/03/2010 9:27:14 786300 004600 6 000
Ordem de pagamento de saída 00000000223 de 03/03/2010 12:13:38 786500 004600 36 000
Ordem de pagamento de saída 00000000228 de 03/04/2010 9:52:35 786500 004600 378 138,85
Ordem de pagamento 00000000229 de 04/03/2010 9:57:50 786503 004600 126 117,75
Ordem de pagamento 00000000200 de 01/03/2010 11:58:06 754422 004762 63 000
Ordem de pagamento de saída 00000000286 de 29/03/2010 14:10:18 764422 004762 10 000
Ordem de pagamento de saída 00000000267 de 17/03/2010 0:00:00 764423 004762 464 370
Ordem de pagamento de saída 00000000261 de 15/03/2010 11:16:28 764522 004762 81 357

Portanto, se pegarmos a linha 779000/004599, então SUBSTRING(Typical.Recorder.Respective.Name, 1, 6) irá destacar a linha “779000”. Uma SUBSTRING(Typical.Recorder.Respective.Name, 8, 11) produzirá “004599”.

Na mesma consulta, a expressão é usada:

SUM(CHOICE WHEN MONTH(Typical.Period) = 3 THEN EXPRESS(Typical.Sum AS NUMBER(15, 2)) ELSE 0 END) AS Marchar

Na mesma tarefa foi necessário adicionar novas colunas com os nomes dos meses e com os valores correspondentes. Esta expressão resolve este problema. Se precisar usar outros meses, por exemplo janeiro, substitua a expressão:

VALOR(ESCOLHA QUANDO MÊS(Típico.Período) = 1 THEN EXPRESS(Typical.Sum AS NUMBER(15, 2)) ELSE 0 END) AS Janeiro

Darei um exemplo de texto de solicitação em que os campos do mês (em negrito) são formados em um ciclo, começando de março a fevereiro.

Query Text = " |SELECT |Typical.Registrar AS Name, |SUB-STRING(Typical.Registrar.Respective.Name, 1, 6) AS Cost Account, |SUB-STRING(Typical.Registrar.Respective.Name, 8, 11 ) Departamento AS,"; Para Sch = Ciclo 1 a 12 Se Sch< 11 Тогда Мес = Сч + 2; Иначе Мес = Сч - 10; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " |СУММА(ВЫБОР | КОГДА МЕСЯЦ(Типовой.Период) = " + Мес + " | ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2)) | ИНАЧЕ 0 |КОНЕЦ) КАК Поле" + Мес + ?(Сч=12,"",","); КонецЦикла; Texto da Consulta = Texto da Consulta + " | FROM | Registro Contábil." + AccountingRegisterName + ".MovementsSSubconto(| &StartPeriod, | &EndPeriod,"; Linha de Restrições nos Detalhes = " (Atividade = TRUE) AND (Conta NA HIERARQUIA (&Conta de Análise))"; Texto da Consulta = Texto da Solicitação + Linha de Limites em Detalhes + " |) AS Típico |"; Texto de consulta = Texto de consulta + " | WHERE | Typical.AccountCt = &AnalysisAccount | AND Typical.Period BETWEEN &StartPeriod AND &EndPeriod |GROUP BY | SUBSTRING(Typical.Recorder.Resp.Name, 1, 6), | SUBSTRING(Typical.Registrar. Nome Resp., 8, 11), | Típico.Registrar |

Assim, utilizando o código acima (em negrito), são exibidas partes da solicitação com meses. Assim, são adicionadas novas colunas com os nomes dos meses e com os valores correspondentes.

A seção contém uma descrição das peculiaridades de execução da função SUBSTRING() da linguagem de consulta na versão cliente-servidor do trabalho e as recomendações resultantes para a construção de consultas.

Função SUBSTRING()

Na linguagem de consulta 1C:Enterprise, a função SUBSTRING() no formato SUBSTRING(,) pode ser aplicada a dados do tipo string e permite selecionar um fragmento começando com o número do caractere (os caracteres em uma string são numerados começando com 1) e o comprimento dos caracteres. O resultado da função SUBSTRING() é um tipo de string de comprimento variável, e o comprimento será considerado ilimitado se tiver comprimento ilimitado e o parâmetro não for uma constante ou exceder 1024.

Calculando a função SUBSTRING() no SQL Server

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:

ESCOLHER
ESCOLHA

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

ORDENAR POR
Desempenho,
Desempenho1

trava com a mensagem:

Erro do SGBD:
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:

ESCOLHA
QUANDO Tipo = & Endereço LegalIndividual
ENTÃO SUBSTRING(Representação, 0 , 200 )
OUTRO NULO
TERMINAR 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:

ESCOLHER
ESCOLHA
QUANDO Tipo = & Endereço LegalIndividual
OUTRO NULO
TERMINAR COMO UMA APRESENTAÇÃO,
ESCOLHA
QUANDO Tipo = & Endereço LegalIndividual
ENTÃO EXPRESS(Representação AS String(200 ) )
OUTRO NULO
TERMINAR COMO Apresentação1
DE
Cadastro de Informações. ContactInformation COMO FAZER ContactInformation
ORDENAR POR
Desempenho,
Desempenho1

Neste artigo queremos discutir tudo com você Funções de linguagem de consulta 1C, e 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 DATA HORA- esta função cria um campo constante do tipo "Data".

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

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 Qty.Days";

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 pré-definida 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.Consumable | THEN EXPRESS(Sales.Registrar AS Document.Consumable) | 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) AS Restantes |

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 Remanescentes.Registrar LINK Documento.Recebimento de mercadorias e Serviços | ENTÃO ""Recebimento"" | ELSE ""Consumo"" | END 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: ALLOWED é escrito após a palavra-chave SELECT

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: ORDENAR 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.ItemsInStocks 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:

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

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º do pedido 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
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 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
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.

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. É impossível agrupar por campos de comprimento ilimitado, por isso 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 execução de consulta mais longos, portanto, pode ser útil converter antecipadamente o 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 registro 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 há sempre 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.

Visualizações