Mesclar os resultados da consulta. Mesclar resultados da consulta Mesclar todos os dados

Existem situações em que é necessário combinar várias consultas em uma consulta, e as junções de tabelas não podem ajudar nisso. A maneira mais fácil de mostrar isso é com um exemplo.

Suponha que em nosso sistema os fatos de compra e venda de mercadorias sejam registrados pelos documentos Receitas e Despesas, respectivamente. A contraparte pode ser um comprador ou um fornecedor. A dívida pode ser compensada pela entrega de mercadorias:

Para calcular a dívida total de uma contraparte, é necessário somar a soma de todas as despesas desta contraparte e subtrair a soma de todos os recebimentos da mesma contraparte. A maneira mais fácil de fazer isso é usando o operador COMBINE ALL:

Solicitação.Text =
"
//calcula o valor que enviamos aos empreiteiros
|SELECIONE
| Despesa.Contraparte,
|DE
| Document.Expense COMO Despesa
|GRUPAR POR
| Despesa.Contraparte
| COMBINAR TUDO
//calcula o valor das contrapartes
//entregou mercadorias para nós
|SELECIONE
| Paróquia.
//pega o valor com sinal negativo,
//que quando combinado foi deduzido do valor da despesa
| VALOR(-Recibo.Valor)
|DE
| Documento Chegada COMO Chegada
|GRUPAR POR
| Chegada.Contraparte";

No primeiro pedido calculamos o valor das despesas de cada contraparte, no segundo - o valor pelo qual cada contraparte nos forneceu mercadorias. O valor da segunda solicitação é tomado com sinal de menos, para que quando a tabela resultante for recolhida, seja subtraído do valor do envio para esta contraparte. Como resultado, obtemos uma tabela como:

Não é exatamente o que queríamos, mas está próximo. Para alcançar o resultado desejado, resta agrupar por contraparte. Para fazer isso, a consulta deve ser colocada em uma tabela temporária (o trabalho com tabelas temporárias é discutido em parte fechada do curso ) e selecione e agrupe campos dele:

Solicitação = Nova Solicitação;
Solicitação.Text =
"ESCOLHER
| Despesa.Contraparte,
| VALOR(Despesas.Valor) COMO Dívida
|Colocar VT_Incoming Despesa
|DE
| Document.Expense COMO Despesa
|GRUPAR POR
| Despesa.Contraparte
| COMBINAR TUDO
|SELECIONE
| Paróquia.
| VALOR(-Recibo.Valor)
|DE
| Documento Chegada COMO Chegada
|GRUPAR POR
| Paróquia.Contraparte
|;
|////////////////////////////////////////////////////////////////////////////////
|SELECIONE
| VT_Despesa de entrada.
| SOMA(VT_IncomeExpenditure.Debt) COMO Dívida
|DE
| VT_IncomingConsumption AS VT_IncomingConsumption
|GRUPAR POR
| VT_Despesa de entrada.

Requisitos para mesclar consultas

Ao mesclar duas consultas, o número de campos deve ser o mesmo; se alguma das consultas não tiver campos, eles deverão ser adicionados como constantes; Vejamos o exemplo acima, embora o documento de despesas também tenha um campo de desconto que reduz o valor da dívida da contraparte, mas não há descontos no documento de recebimento. O que fazer neste caso? Então:

Solicitação = Nova Solicitação;
Solicitação.Text =
"ESCOLHER
| Despesa.Contraparte,

|DE
| Document.Expense COMO Despesa
|GRUPAR POR
| Despesa.Contraparte
| COMBINAR TUDO
|SELECIONE
| Paróquia.
| SOMA(-Recibo.Valor),
//adiciona um desconto no campo nulo
| 0
|DE
| Documento Chegada COMO Chegada
|GRUPAR POR
| Chegada.Contraparte";

Resta subtrair o desconto e o grupo.

A ordem também é importante. Os campos serão mesclados exatamente na ordem em que foram especificados nas seções SELECT de ambas as consultas. Em relação ao exemplo anterior, vamos trocar os campos desconto e valor na amostra de recebimentos:

Solicitação = Nova Solicitação;
Solicitação.Text =
"ESCOLHER
| Despesa.Contraparte,
| VALOR (Despesas.Valor) COMO Dívida,
| AMOUNT(Despesa.Desconto) COMO Desconto
|DE
| Document.Expense COMO Despesa
|GRUPAR POR
| Despesa.Contraparte
| COMBINAR TUDO
|SELECIONE
| Paróquia.
//troca de lugar
| 0,
| VALOR(-Recibo.Valor)
|DE
| Documento Chegada COMO Chegada
|GRUPAR POR
| Chegada.Contraparte";

Bom dia, queridos leitores do blog. Hoje vamos discutir em detalhes combinando solicitações em 1C. Você também pode baixar para configuração típica Gestão de uma empresa comercial para o Cazaquistão, edição 1.0.

Se você estiver trabalhando com uma tabela, não precisará usar uma junção. A questão é completamente diferente quando você trabalha com várias tabelas e, por exemplo, precisa obter dados de compras e vendas de mercadorias.

Uma cláusula é usada para combinar COMBINAR / UNIÃO. Está realmente acontecendo mesclando resultados da consulta, ou seja, cada consulta coleta dados independentemente uma da outra e, em seguida, esses resultados são combinados em um. E somente na última solicitação são realizadas outras operações, por exemplo, ordenar e calcular totais.

Em contrapartida, ao mesclar consultas, ocorre a “colagem vertical” dos resultados, ou seja, as linhas de resultado da primeira consulta vêm primeiro e depois a segunda.

Vamos passar à prática:

SELECIONE Item, Quantidade, Valor COMBINAR SELECIONE Item, Quantidade, Quantidade EM Documento.Consumíveis.Mercadorias

O resultado desta consulta é o seguinte:

Como resultado, obteremos duas tabelas que serão conectadas entre si. É difícil ver onde termina o documento de Recebimentos e começa o documento de Despesas. Mas faremos algo para descobrir:

SELECIONE Nomenclatura, Quantidade COMO Número de Freguesia, Valor COMO SumPrikhod, 0 COMO QuantidadeConsumo, 0 COMO Despesas de Soma DE Documento.Admissão.Produtos COMBINAR Número de Freguesia, 0 COMO SumPrikhod, Quantidade AS QuantidadeConsumo, Valor COMO Despesas de Soma DE Documento.Consumíveis.Mercadorias

Como você pode ver no texto da solicitação, definimos apelidos diferentes para quantidade e valor para cada documento. Além disso, no lugar dos campos onde receberemos os valores de valor e quantidade, colocaremos zeros. Isso é necessário para que quantidades e valores vazios sejam substituídos por zeros.

Nomenclatura Número de Freguesia SumPrikhod QuantidadeConsumo Despesas de Soma
Papel A4 25 14 500
Adesivos 500l 8 4 880
Arquivo transparente 5 4 100
Conjunto de escritório 8 8 840
Conjunto de escritório 1 1 105
Arquivo transparente 1 820
Adesivos 500l 1 610

Agora precisamos remover os elementos duplicados do resultado da consulta. Temos duas consultas e se recolhermos cada uma separadamente para eliminar elementos duplicados, nada funcionará. Portanto, reduziremos a solicitação ao seguinte formato:

ESCOLHER
Nomenclatura,
AMOUNT (Número de Renda) AS Número de Renda,
SOMA(SumPrikhod) COMO SumPrikhod,
VALOR (Quantidade de Despesa) COMO Quantidade de Despesa,
SOMA(SomaDespesa) AS SomaDespesa
DE
(
SELECIONE Nomenclatura, Quantidade COMO Número de Freguesia, Valor COMO SumPrikhod, 0 COMO QuantidadeConsumo, 0 COMO Despesas de Soma DE Documento.Admissão.Produtos COMBINAR SELECIONE Item, 0 COMO Número de Freguesia, 0 COMO SumPrikhod, Quantidade AS QuantidadeConsumo, Valor COMO Despesas de Soma DE Documento.Consumíveis.Mercadorias ) AS NestedQuery
GRUPO POR Nomenclatura

Portanto, vemos que toda a nossa consulta está entre colchetes e nomeada como NestedQuery. Isso é feito para que possamos agrupar os registros de ambas as subconsultas e eliminar elementos duplicados. Esse design é chamado de consulta aninhada. O resultado desta consulta é o seguinte:

Nomenclatura Número de Freguesia SumPrikhod QuantidadeConsumo Despesas de Soma
Papel A4 25 14 500
Adesivos 500l 8 4 880 1 610
Conjunto de escritório 5 4 100 1 1 105
Arquivo transparente 8 8 840 1 820

Como resultado, obtemos uma tabela agrupada na qual os dados das subconsultas aninhadas são trazidos para um formato compreensível.
O número de subconsultas não deve exceder 255. Usamos quatro subconsultas aqui.

A linguagem de consulta é um dos mecanismos fundamentais do 1C 8.3 para desenvolvedores. Usando consultas, você pode recuperar rapidamente quaisquer dados armazenados no banco de dados. Sua sintaxe é muito semelhante à SQL, mas existem algumas diferenças.

As principais vantagens da linguagem de consulta 1C 8.3 (8.2) sobre SQL:

  • desreferenciar campos de referência (referenciando um ou mais pontos aos detalhes do objeto);
  • trabalhar com resultados é muito conveniente;
  • a capacidade de criar tabelas virtuais;
  • a solicitação pode ser escrita em inglês e russo;
  • capacidade de bloquear dados para evitar impasses.

Desvantagens da linguagem de consulta em 1C:

  • ao contrário do SQL, em consultas 1C não permitem alteração de dados;
  • falta de procedimentos armazenados;
  • impossibilidade de converter uma string em um número.

Vamos dar uma olhada em nosso mini tutorial sobre as construções básicas da linguagem de consulta 1C.

Devido ao fato de que as consultas em 1C permitem apenas o recebimento de dados, qualquer consulta deve começar com a palavra “SELECIONAR”. Após este comando são indicados os campos dos quais os dados devem ser obtidos. Se você especificar “*”, todos os campos disponíveis serão selecionados. O local de onde serão selecionados os dados (documentos, cadastros, diretórios, etc.) é indicado após a palavra “DE”.

No exemplo discutido abaixo, os nomes de toda a nomenclatura são selecionados no diretório “Nomenclatura”. Após a palavra “COMO”, são indicados aliases (nomes) para tabelas e campos.

ESCOLHER
Nomenclatura. Nome AS Nome da Nomenclatura.
DE
Diretório.Nomenclatura AS Nomenclatura

Ao lado do comando “SELECT” você pode especificar palavras-chave:

  • VÁRIOS. A consulta selecionará apenas linhas que diferem em pelo menos um campo (sem duplicatas).
  • PRIMEIRO, Onde n– o número de linhas desde o início do resultado que precisam ser selecionadas. Na maioria das vezes, esta construção é usada em conjunto com a classificação (ORDER BY). Por exemplo, quando você precisa selecionar um determinado número de documentos recentes por data.
  • PERMITIDO. Este design permite selecionar no banco de dados apenas os registros que estão disponíveis para o usuário atual. Bases para usar isso palavra-chave O usuário receberá uma mensagem de erro ao tentar consultar registros aos quais não tem acesso.

Essas palavras-chave podem ser usadas juntas ou separadamente.

PARA MUDAR

Esta proposta bloqueia dados para evitar conflitos mútuos. Os dados bloqueados não serão lidos de outra conexão até que a transação termine. Nesta cláusula, você pode especificar tabelas específicas que precisam ser bloqueadas. Caso contrário, todos serão bloqueados. O design é relevante apenas para o modo de travamento automático.

Na maioria das vezes, a cláusula “FOR CHANGE” é usada no recebimento de saldos. Afinal, quando vários usuários trabalham no programa simultaneamente, enquanto um recebe saldos, outro pode alterá-los. Neste caso, o resto resultante não estará mais correto. Se você bloquear os dados com esta proposta, até que o primeiro funcionário receba o saldo correto e faça tudo com ele manipulações necessárias, o segundo funcionário terá que esperar.

ESCOLHER
Acordos mútuos.
Liquidações mútuas. Quantidade de liquidações mútuas.
DE
Cadastro de Acumulações. Liquidações Mútuas com Funcionários.
PARA MUDAR

ONDE

O design é necessário para impor algum tipo de seleção nos dados carregados. Em alguns casos de obtenção de dados de registradores, é mais razoável especificar condições de seleção nos parâmetros das tabelas virtuais. Ao usar "WHERE", todos os registros são recuperados primeiro e só então a seleção é aplicada, o que retarda significativamente a consulta.

Abaixo está um exemplo de solicitação para obter pessoas de contato para um cargo específico. O parâmetro de seleção possui o formato: &ParameterName (o nome do parâmetro é arbitrário).

SELEÇÃO (CASO)

O design permite especificar condições diretamente no corpo da solicitação.

No exemplo abaixo, o “Campo Adicional” conterá texto dependendo se o documento for postado ou não:

ESCOLHER
AdmissãoT&U.Link,
ESCOLHA
QUANDO AdmissãoT&U.Realizado
ENTÃO “O documento foi aprovado!”
ELSE “O documento não foi postado...”
END AS Campo Adicional
DE
Documento de Recebimento de Bens e Serviços COMO Recebimento T&C.

JUNTAR

As junções vinculam duas tabelas com base em uma condição de relacionamento específica.

CONEXÃO ESQUERDA/DIREITA

A essência da junção ESQUERDA é que a primeira tabela especificada seja tomada em sua totalidade e a segunda seja vinculada a ela de acordo com a condição de conexão. Se não houver registros correspondentes à primeira tabela na segunda, então NULL será substituído como seus valores. Simplificando, a tabela principal é a primeira tabela especificada e os dados da segunda tabela (se houver) já foram substituídos por seus dados.

Por exemplo, é necessário obter os itens dos documentos “Recebimento de mercadorias e serviços” e os preços do cadastro informativo “Preços dos itens”. Neste caso, se o preço de qualquer posição não for encontrado, substitua NULL. Todos os itens do documento serão selecionados independentemente de terem preço ou não.

ESCOLHER
Recibo e Nomenclatura U.U.,
Preços.Preço
DE
Documento de recebimento de mercadorias e serviços. COMO Recebimento de mercadorias.
INTERNAL JOIN RegisterInformation.PricesNomenclature.SliceLast AS Preços
Recibo de software e nomenclatura = Preços.Nomenclatura

NA CERTA tudo é exatamente o oposto.

CONEXÃO COMPLETA

Este tipo de conexão difere das anteriores porque como resultado todos os registros da primeira tabela e da segunda serão retornados. Se nenhum registro for encontrado na primeira ou na segunda tabela com base na condição de link especificada, NULL será retornado.

Ao utilizar a conexão completa no exemplo anterior, serão selecionados todos os itens do documento “Recebimento de Mercadorias e Serviços” e todos os últimos preços do cadastro “Preços de Itens”. Os valores dos registros não encontrados tanto na primeira quanto na segunda tabela serão iguais a NULL.

JUNÇÃO INTERNA

A diferença entre um INNER JOIN e um FULL JOIN é que se um registro não for encontrado em pelo menos uma das tabelas, a consulta não o exibirá. Com isso, serão selecionados apenas os itens do documento “Recebimento de mercadorias e serviços” para os quais existam registros no cadastro de informações “Preços dos itens”, se no exemplo anterior substituirmos “COMPLETO” por “INTERNO”.

Agrupar por

O agrupamento em consultas 1C permite recolher linhas da tabela (campos de agrupamento) de acordo com uma determinada característica comum (campos de agrupamento). Os campos de agrupamento só podem ser exibidos usando funções agregadas.

O resultado da consulta a seguir será uma lista de tipos de produtos com preços máximos para eles.

ESCOLHER
,
MAX(Preço.Preço) AS Preço
DE

Agrupar por
Preços.Nomenclatura.Tipo de Nomenclatura

RESULTADOS

Ao contrário do agrupamento, ao usar totais, todos os registros são exibidos e as linhas de total são adicionadas a eles. O agrupamento exibe apenas registros generalizados.

Os resultados podem ser resumidos para toda a tabela (usando a palavra-chave “GENERAL”), para vários campos, para campos com estrutura hierárquica (palavras-chave “HIERARQUIA”, “SÓ HIERARQUIA”). Ao resumir os resultados, não é necessário usar funções agregadas.

Vejamos um exemplo semelhante ao exemplo acima usando agrupamento. Neste caso, o resultado da consulta retornará não apenas campos agrupados, mas também registros detalhados.

ESCOLHER
Preços.Nomenclatura.Tipo de Nomenclatura AS Tipo de Nomenclatura,
Preços.Preço AS Preço
DE
Cadastro de Informações de Preços de Nomenclatura.
RESULTADOS
MÁXIMO(Preço)
POR
TipoNomenclatura

TENDO

Este operador é semelhante ao operador WHERE, mas é usado apenas para funções agregadas. Os demais campos, exceto aqueles utilizados por este operador, devem ser agrupados. O operador WHERE não é aplicável a funções agregadas.

No exemplo abaixo, os preços máximos de um item são selecionados se excederem 1000, agrupados por tipo de item.

ESCOLHER

MAX(Preço.Preço) AS Preço
DE
Cadastro de Informações de Preços de Nomenclatura.
Agrupar por
Preços.Nomenclatura.Tipo de Nomenclatura
TENDO
MÁXIMO(Preços.Preço) > 1000

ENCOMENDAR POR

O operador ORDER BY classifica o resultado de uma consulta. Para garantir que os registros sejam exibidos em em caráter permanente, ORDEM AUTOMÁTICA é usada. Tipos primitivos classificados de acordo com as regras usuais. Os tipos de referência são classificados por GUID.

Um exemplo de obtenção de uma lista de funcionários classificados por nome:

ESCOLHER
Funcionários.Nome AS Nome
DE
Directory.Employees COMO Funcionários
ENCOMENDAR POR
Nome
PEDIDO AUTOMÁTICO

Outras construções de linguagem de consulta 1C

  • COMBINAR– resultados de duas consultas em uma.
  • COMBINE TUDO– semelhante a COMBINE, mas sem agrupar linhas idênticas.
  • TABELA VAZIA– às vezes usado ao unir consultas para especificar uma tabela aninhada vazia.
  • LUGAR– cria uma tabela temporária para otimizar consultas 1C complexas. Essas solicitações são chamadas de solicitações em lote.

Recursos de linguagem de consulta

  • SUBSTRING trunca uma string de uma posição especificada para um número especificado de caracteres.
  • ANO...SEGUNDO permitem que você obtenha o valor selecionado de um tipo numérico. O parâmetro de entrada é a data.
  • INÍCIO DO PERÍODO e FIM DO PERÍODO usado ao trabalhar com datas. O tipo de período (DIA, MÊS, ANO, etc.) é indicado como parâmetro adicional.
  • ADICIONAR DATA permite adicionar ou subtrair uma hora específica de um determinado tipo de uma data (SEGUNDO, MINUTO, DIA, etc.).
  • DATA DIFERENÇA determina a diferença entre duas datas, indicando o tipo de valor de saída (DIA, ANO, MÊS, etc.).
  • É NULO substitui o valor ausente pela expressão especificada.
  • REPRESENTAÇÃO e LINKS DE REPRESENTAÇÃO obtenha uma representação de string do campo especificado. Aplique a quaisquer valores e apenas aos valores de referência, respectivamente.
  • TIPO, VALORES DE TIPO são usados ​​para determinar o tipo do parâmetro de entrada.
  • LINKé operador lógico comparações para o tipo de valor do atributo.
  • EXPRESSAR usado para converter um valor para o tipo desejado.
  • DATAHORA obtém um valor do tipo “Data” a partir de valores numéricos (Ano, Mês, Dia, Hora, Minuto, Segundo).
  • SIGNIFICADO em uma solicitação 1C, é usado para indicar valores predefinidos - diretórios, enumerações, planos para tipos de características. Exemplo de uso: " Onde Pessoa Jurídica = Valor(Enumeração. Pessoa Jurídica. Pessoa Física)«.

Construtor de consultas

Para criar consultas com 1C, existe um mecanismo integrado muito conveniente - o designer de consultas. Ele contém as seguintes guias principais:

  • “Tabelas e Campos” - contém os campos que precisam ser selecionados e suas fontes.
  • “Conexões” - descreve as condições para a estrutura CONNECTION.
  • “Agrupamento” – contém uma descrição de estruturas de agrupamento e campos somados com base nelas.
  • “Condições” – é responsável pela seleção dos dados na solicitação.
  • "Adicional" - opções adicionais solicitação, como palavras-chave do comando “SELECT”, etc.
  • “Joins/Aliases” - são indicadas as possibilidades de junção de tabelas e especificados os aliases (a construção “HOW”).
  • “Ordem” é responsável por ordenar o resultado das consultas.
  • “Totais” - semelhante à aba “Agrupamento”, mas usada para a construção “TOTAIS”.

O próprio texto da solicitação pode ser visualizado clicando no botão “Solicitar” no canto inferior esquerdo. Neste formulário, pode ser corrigido manualmente ou copiado.


Console de solicitação

Para visualizar rapidamente o resultado de uma consulta no modo Empresarial ou depurar consultas complexas, use . Contém o texto da solicitação, define os parâmetros e exibe o resultado.

Você pode baixar o console de consulta no disco ITS ou via .

; Consultas aninhadas (em desenvolvimento).

Recebimento de mercadorias e serviços E Devolução de mercadorias ao fornecedor pelo período especificado.

Novas guias: Uniões/aliases.

Parte teórica da aula nº 4

1C Query Builder permite criar combinações de consultas. Com a ajuda deles, você pode gerar sequencialmente dados obtidos de várias consultas sem usar conexões. A única condição para mesclagem é o mesmo conjunto de campos em cada solicitação individual.

No designer, vá para a aba Uniões/aliases. Ele foi projetado para criar junções de consulta e definir aliases para campos de consulta. Os aliases de campo serão necessários se você não estiver satisfeito com os nomes de campo padrão do banco de dados. Se um campo de consulta consistir apenas em um campo de tabela de banco de dados, não será necessário um alias para ele. Se você usou funções de linguagem de consulta ao criar um campo, será necessário um alias para esse campo. O designer de consulta cria aliases padrão para esses campos Campo1…CampoN, esses aliases podem ser substituídos por aqueles que forem mais convenientes para você.

Vejamos as seções da guia Uniões/aliases:

  • Solicitações(quadro vermelho). Esta seção contém uma tabela que mostra todas as consultas combinadas. Usando o menu localizado acima desta seção, você pode adicionar novas, copiar as existentes, excluir as selecionadas e também alterar seus locais. Ao adicionar ou copiar uma solicitação, o designer vai até a aba Tabelas e campos, onde você pode especificar tabelas de banco de dados e os campos obrigatórios para uma nova consulta. Você pode alternar entre consultas usando as guias que aparecerão com lado direito designer, à medida que novas solicitações 1C são adicionadas;

  • Na mesa Solicitações duas colunas:
    • Nome. Definir automaticamente no formato Solicitação 1… Solicitação N;
    • Sem duplicatas. Definido quando é necessário excluir linhas duplicadas ao mesclar com uma consulta anterior. Vale ressaltar que esta flag atuará apenas na fusão da requisição em que está setada com a requisição anterior.

  • Apelidos(quadro azul). Nesta seção, você pode definir aliases para campos de consulta, bem como definir a correspondência dos campos para consultas combinadas, para que, como resultado da consulta, eles fiquem na mesma coluna e sejam exibidos sob o mesmo alias. Se os campos nas consultas mescladas tiverem o mesmo nome, a correspondência entre eles será ajustada automaticamente. Para configurar a correspondência de campos, você precisa encontrar a linha com o alias desejado na tabela, encontrar a consulta necessária nas colunas e selecionar o campo na lista suspensa.

Parte prática da lição nº 4

Vejamos a solução para o problema dada no início da lição. Deixe-me lembrá-lo das condições:

Tarefa: use uma consulta para selecionar todos os documentos publicados Recebimento de mercadorias e serviços E Devolução de mercadorias ao fornecedor pelo período especificado.

  1. Vamos criar uma nova solicitação;
  2. Vamos iniciar o construtor de consultas;
  3. Vamos selecionar uma mesa Recebimento de Bens e Serviços do fio Documentos;
  4. Da mesa Recebimento de Bens e Serviços selecione um campo Link;
  5. Vamos para a aba Termos;
  6. Na seção Campos, vamos abrir o tópico Recebimento de Bens e Serviços usando o botão “+”;
  7. Vamos encontrar os adereços Data e arraste-o para a seção de condições, selecione o operador de comparação Entre e indicar os parâmetros de início e final do período, por exemplo Início do período E Fim do período;
  8. Vamos para a aba Uniões/aliases.
  9. Adicione uma nova solicitação, sinalize Sem duplicatas não há necessidade de levantar, pois usamos tipos diferentes documentos;

  10. 1C Query Builder irá automaticamente para a guia Tabelas e campos. No lado direito da janela você verá que a segunda solicitação de adesão está ativa;


  11. Vamos repetir os pontos 1 a 7 para a tabela Devolução de Mercadorias ao Fornecedor;
  12. Vamos para a aba novamente Uniões/aliases. Na tabela de alias você pode ver que os campos Link ambas as tabelas estão na mesma linha, o que significa que os links para ambos os documentos serão encontrados na mesma coluna como resultado da consulta;
  13. Vamos mudar o nome da coluna de Link sobre Documento(defina o alias do campo). Para fazer isso, clique duas vezes com o botão esquerdo do mouse no nome do campo. Depois disso, você pode definir seu nome, escreva-o lá Documento;

  14. A solicitação está pronta, clique no botão “OK” na parte inferior da janela do designer.

Como resultado, receberemos uma solicitação com o seguinte texto.

Se você estiver trabalhando com uma tabela, não precisará usar uma junção. A questão é completamente diferente quando você trabalha com várias tabelas e, por exemplo, precisa obter dados sobre compras e vendas de mercadorias.

Uma cláusula é usada para combinar COMBINAR. O que realmente acontece é que os resultados das consultas são mesclados, ou seja, cada consulta coleta dados independentemente uma da outra, e então esses resultados são combinados em um só. E somente na última solicitação são realizadas outras operações, por exemplo, ordenar e calcular totais.

Ao mesclar consultas, ocorre a “colagem vertical” dos resultados, ou seja, as linhas de resultado da primeira consulta vêm primeiro e depois a segunda.

Vamos passar à prática:
Código 1C v 8.x SELECIONAR
Nomenclatura,
Quantidade,
Soma
DE
Documento.Admissão.Mercadorias

COMBINAR

ESCOLHER
Nomenclatura,
Quantidade,
Soma
DE
Documento.Admissão.Mercadorias

O resultado desta consulta é o seguinte:
Quantidade de nomenclatura
Papel A4 25 14 500
Adesivos 500l 8 4 880
Arquivo transparente 5 4 100
Conjunto de escritório 8 8 840

Como resultado, obteremos duas tabelas que serão conectadas entre si. É difícil ver onde termina o documento de Recebimentos e começa o documento de Despesas. Mas faremos algo para descobrir:
Código 1C v 8.x
ESCOLHER
Nomenclatura,
Quantidade COMO KolPrikhod,
Valor AS SumIncoming,
0 AS Quantidade Despesa,
0 AS Valor Despesa
DE
Documento.Admissão.Mercadorias

COMBINAR

ESCOLHER
Nomenclatura,
0 AS KolPrikhod,
0 AS SumPrikhod,
Quantidade AS Qtde Consumo,
Valor AS ValorDespesa
DE
Documento.Consumíveis.Mercadorias

Como você pode ver no texto da solicitação, definimos apelidos diferentes para quantidade e valor para cada documento. Além disso, no lugar dos campos onde receberemos os valores de valor e quantidade, colocaremos zeros. Isso é necessário para que quantidades e valores vazios sejam substituídos por zeros.

Papel A4 25 14 500
Adesivos 500l 8 4 880
Arquivo transparente 5 4 100
Conjunto de escritório 8 8 840
Conjunto de escritório 1 1 105
Arquivo transparente 1 820
Adesivos 500l 1 610

Agora precisamos remover os elementos duplicados do resultado da consulta. Temos duas consultas e se recolhermos cada uma separadamente para eliminar elementos duplicados, nada funcionará. Portanto, reduziremos a solicitação ao seguinte formato:
Código 1C v 8.x
ESCOLHER
Nomenclatura,
AMOUNT (Número de Renda) AS Número de Renda,
SOMA(SumPrikhod) COMO SumPrikhod,
VALOR (Quantidade de Despesa) COMO Quantidade de Despesa,
SOMA(SomaDespesa) AS SomaDespesa
DE

(ESCOLHER
Nomenclatura,
Quantidade COMO KolPrikhod,
Valor AS SumIncoming,
0 AS Quantidade Despesa,
0 AS Valor Despesa
DE
Documento.Admissão.Mercadorias

COMBINAR

ESCOLHER
Nomenclatura,
0 AS KolPrikhod,
0 AS SumPrikhod,
Quantidade AS Qtde Consumo,
Valor AS ValorDespesa
DE
Documento.Consumíveis.Mercadorias) COMO AnexoSolicitação

GRUPO POR Nomenclatura

Portanto, vemos que toda a nossa consulta está entre colchetes e nomeada como NestedQuery. Isso é feito para que possamos agrupar os registros de ambas as subconsultas e eliminar elementos duplicados. Esse design é chamado de consulta aninhada. O resultado desta consulta é o seguinte:
Nomenclatura KolSoma de entradaKol de entradaSoma de despesasDespesas
Papel A4 25 14 500
Adesivos 500l 8 4 880 1 610
Conjunto de escritório 5 4 100 1 1 105
Arquivo transparente 8 8 840 1 820

Como resultado, obtemos uma tabela agrupada na qual os dados das subconsultas aninhadas são trazidos para um formato compreensível. O número de subconsultas não deve exceder 255. Usamos quatro subconsultas aqui.

Se quisermos sair apenas valores únicos registros sem usar agrupamento. Você precisa escrever uma frase COMBINE sem a palavra-chave ALL.

Informações retiradas do site

Problemas