Configurando parâmetros para a lista dinâmica 1c.

31.10.2021

Imprimir (Ctrl+P)

Lista dinâmica

1. Informações gerais

Uma lista dinâmica é um tipo de dados especial que permite exibir informações arbitrárias de tabelas de banco de dados em um formulário. Para fazer isso, você precisa especificar a tabela da qual deseja exibir os dados ou descrever a seleção resultante em uma linguagem de consulta.
O mecanismo é baseado em um sistema de composição de dados e oferece recursos para classificar, selecionar, pesquisar, agrupar e formatar condicionalmente os dados recebidos. Nesse caso, a fonte de dados é uma solicitação, que é gerada automaticamente pelo sistema (com base nos dados especificados) ou escrita manualmente pelo desenvolvedor.

Arroz. 1. Opções para criar uma lista dinâmica

Ao criar atributos de formulário do tipo Lista Dinâmica um desenvolvedor pode escolher duas maneiras de formar uma consulta de dados:
● Especificando a tabela principal - neste caso, basta especificar a tabela (propriedade da tabela principal) da qual deseja receber os dados, e o sistema irá gerar automaticamente uma consulta para os dados (veja a parte direita na Fig. 1).
● Geração manual de uma solicitação - para isso é necessário definir a propriedade Solicitação personalizada (veja o lado esquerdo da Fig. 1). Após isso, estará disponível a geração manual de uma solicitação para obtenção de dados da infobase.
Uma consulta pode recuperar dados de diversas tabelas, portanto você pode especificar uma tabela primária. Isso ocorre para que a lista dinâmica possa determinar quais dados são primários e quais são secundários, e possa selecionar e exibir informações corretamente, bem como fornecer comandos padrão. No entanto, se for impossível determinar a tabela principal na consulta, ela não poderá ser especificada, mas então
a lista dinâmica não fornecerá comandos relacionados à tabela principal. Além disso, neste caso (sem especificar a tabela principal) a eficiência de obtenção de dados por meio de uma lista dinâmica será significativamente reduzida.
Para melhorar o desempenho, recomenda-se que quaisquer junções usadas em uma consulta personalizada apenas para obter dados adicionais sejam opcionais usando uma extensão de linguagem de consulta do sistema de composição de dados.
Para uma lista dinâmica, que é o principal atributo do formulário, é possível definir valores de seleção usando um parâmetro de formulário Seleção. Para isso é necessário que o nome da propriedade da estrutura localizada no parâmetro Seleção,
coincidiu com o nome do campo de seleção da lista dinâmica. Neste caso, o valor da propriedade estrutura será definido como o valor correto do elemento de seleção. Se um array, um array fixo ou uma lista de valores for passado como o valor de um elemento do parâmetro Seleção de um formulário de lista dinâmica, então uma condição com a opção Na Lista é adicionada à seleção, no valor correto dos quais é colocada uma lista de valores (para os quais o array e o array fixo são convertidos).
Uma consulta arbitrária em uma lista dinâmica pode ser uma consulta na qual um parâmetro é usado para gerar o valor de um campo, por exemplo:

ESCOLHER
ESCOLHA
QUANDO Entrega.Coeficiente = 1 ENTÃO &Apresentação
CASO CONTRÁRIO Entrega. Coeficiente
Proporção FIM COMO
DE

Além disso, se o tipo do valor do parâmetro for diferente do tipo do atributo do objeto (por exemplo, Adereços1 tem tipo Número, e o valor do parâmetro é do tipo Linha), então, para exibir o campo corretamente, você deve converter explicitamente o valor do parâmetro para o tipo desejado:

ESCOLHER
ESCOLHA
WHEN Delivery.Coeficiente = 1 THEN EXPRESS(&Representation AS String(100)) ELSE Entrega. Coeficiente
Proporção FIM COMO
DE
Documento.Entrega de Produtos COMO Entregar

Se o campo pelo qual a seleção é definida for desabilitado usando opções funcionais, a seleção por tal campo não será instalada, mesmo que o valor da seleção seja passado como parâmetros de formulário ou links de parâmetros de seleção.
Usando a propriedade Leitura dinâmica de dados, você indica para uma lista dinâmica a necessidade de ler dados em pequenas porções
(para obter mais detalhes sobre maneiras de obter dados usando uma lista dinâmica e cache de dados, veja abaixo). Independentemente deste atributo, aplicam-se as seguintes condições:

● Se o modo de visualização estiver definido como lista hierárquica, somente os dados do grupo atual e os dados de todos os elementos pais (sem filhos) serão lidos.
● Se o modo de visualização em árvore estiver definido, somente os dados dos nós da árvore aberta serão lidos.
● O carregamento único de dados de lista dinâmica não será suportado se a navegação hierárquica estiver definida (a propriedade Display estiver definida como Árvore) e a exibição inicial da árvore estiver definida como Expandir todos os níveis. Para obter dados, serão feitas tantas solicitações ao servidor quantos nós houver na lista exibida.
Dentro de uma única recuperação de dados, uma lista dinâmica reutiliza tabelas temporárias criadas anteriormente se as seguintes condições forem atendidas:
● A consulta em lote da lista não possui consultas após a consulta em lote principal.
● A composição das tabelas temporárias e dos campos nelas contidos permanece inalterada desde a execução anterior da solicitação em lote.

Em seu trabalho, a lista dinâmica utiliza os valores das seguintes propriedades dos detalhes do objeto de metadados:
● formato,
● formato de edição,
● dica,
● sinal para destacar valores negativos,
● máscara,
● sinal de modo multilinha,
● sinal de edição avançada,
● modo de senha.
Ao exibir e editar a seleção e os parâmetros do sistema de composição de dados, é utilizado o formato de edição do campo correspondente.

2. Limitações e recursos

Ao definir a seleção em uma lista dinâmica, lembre-se de que a seleção não afeta os grupos se o modo de exibição da lista dinâmica for Lista Hierárquica ou Árvore. Por “grupos” entendemos um elemento de um diretório ou plano de tipos de características cuja propriedade ThisGroup está definida como True.
As qualificações aplicadas automaticamente por uma lista dinâmica aos detalhes padrão Proprietário, Pai, Data, Período e EsteGrupo são aplicadas
meios padrão sistemas de composição de dados. A seleção, aplicada automaticamente por uma lista dinâmica aos campos-chave, pode ser aplicada tanto por meios padrão do sistema de composição de dados quanto pela adição direta de condições ao texto da solicitação EM para os campos da tabela principal. Como resultado da aplicação de seleções por meio de ferramentas de layout, elas podem ser aplicadas tanto em consultas aninhadas quanto em parâmetros de tabelas virtuais.

Ao desenvolver listas dinâmicas, é recomendável testar todas as listas dinâmicas com consultas personalizadas. Durante o processo de verificação, você deve certificar-se de que, se uma consulta de lista contém consultas aninhadas ou tabelas virtuais, e nelas campos com aliases que correspondem aos aliases dos detalhes padrão Proprietário, Pai, Data, Período, EsteGrupo ou campos-chave estão disponíveis para seleção, então esses campos são válidos e correspondem aos detalhes padrão com os quais seu apelido corresponde. Se este não for o caso, você deve alterar a solicitação para que correspondam ou
o apelido era diferente.
Se você optar por gerar uma solicitação manualmente, algumas restrições serão impostas à solicitação:
● Não há suporte para o uso da instrução FIRST em uma consulta de lista dinâmica. Se você precisar usar uma seleção limitada pelo número de registros em uma lista dinâmica, deverá retrabalhar a solicitação para gerar uma lista dinâmica de forma que o conteúdo real da solicitação seja colocado em uma subconsulta e limite o número de registros recebido nesta subconsulta. Você também pode usar uma tabela temporária em vez de uma subconsulta.
● Seleção, classificação e agrupamento não são suportados:

  • Por detalhes partes tabulares.
  • Ver campos.
  • Campo DataVersion.
  • Campo PredefinidoDataName.
  • Campo do tipo tabela plano de contas.
  • Campo Tipo de Movimento da tabela de registros de acumulação.
  • Campo TipoValores da tabela de plano do tipo característica.
  • Tipo de campo Tipo;
  • Campo do tipo String (comprimento ilimitado).
  • Campo do tipo BinaryData.

● A classificação e o agrupamento por campos de subconto não são suportados<НомерСубконто>e ViewSubconto<НомерСубконто>Tabelas MovimentosSubconto do registro contábil.
● Agrupamento por campos que são expressões de linguagem de consulta contendo funções agregadas.
● Quando a tabela principal é selecionada, a consulta da lista dinâmica tem as seguintes restrições:

  • As junções não são suportadas.
  • A seção ORDER BY não é suportada. Você deve usar uma consulta sem tabela principal ou definir a ordem necessária por meio das configurações da lista dinâmica.

● Se uma lista dinâmica for exibida como uma lista ou árvore hierárquica, uma entrada não será exibida como uma lista dinâmica, a menos que pelo menos um dos pais dessa entrada seja exibido. Em outras palavras, para exibir um elemento de uma lista hierárquica, uma lista dinâmica também deve exibir todos os pais desse elemento até o topo da lista. Neste caso, no topo da lista queremos dizer
o elemento raiz do objeto hierárquico exibido por uma lista dinâmica ou o elemento definido como a propriedade ParentTopLevel de uma extensão de tabela de formulário para uma lista dinâmica.

Não há suporte para o uso das tabelas a seguir como tabela principal de uma lista dinâmica:

● Uma tabela que não possui uma chave que identifique exclusivamente cada registro da tabela (uma referência para tabelas de objetos e uma chave de registro para tabelas de registros). Porém, as seguintes tabelas podem ser definidas como tabela principal de uma lista dinâmica (apesar de não possuir chave):

● Tabela subconto do registro contábil;
● todas as tabelas virtuais do registo contabilístico, exceto a tabela MovimentosSubconto;
● tabelas de valores constantes (incluindo a tabela Constantes);
● tabelas de fontes de dados externas sem campos-chave;
● tabelas cúbicas de fontes de dados externas;
● tabelas de registros de acumulação:

  • mesa de revolução;
  • tabela de equilíbrio;
  • tabela de giro e saldos.

● tabelas de registro de cálculo:

  • tabela de prazo de validade real;
  • dados de agendamento;
  • dados básicos.

● Tabelas de partes tabulares de objetos;
● Alterar tabelas cadastrais (utilizadas em mecanismos de troca de dados);
● Tabelas de sequências;
● Tabelas de conversão (utilizadas em mecanismos de liquidação periódica).
● Uma tabela usada em uma consulta somente em uma junção externa.

Em outras palavras, uma lista dinâmica com a tabela principal especificada funcionará corretamente se, como resultado da execução da consulta,
especificado como fonte de dados, o número de linhas obtidas na tabela principal não aumenta (levando em consideração a seleção imposta). Se, como resultado da execução de uma consulta, o número de linhas obtidas pela consulta da tabela principal aumentar, isso levará a uma violação da unicidade da chave dos registros da tabela exibida pela lista. Neste caso, você deve desabilitar o uso da tabela principal da lista dinâmica.
Ao trabalhar com uma lista dinâmica, você deve levar em consideração os direitos de acesso aos detalhes exibidos pela lista:
● Os dados das colunas da lista dinâmica marcadas com a propriedade Sempre usar, mas para as quais o usuário atual não tem o direito Visualizar, não são transmitidos ao lado do cliente. Acesso aos dados de tais colunas (usando a propriedade CurrentData e o método RowData())
não é possível no lado do cliente.
● Se o usuário atual não tiver o direito Visualizar em um campo-chave de uma lista dinâmica, a recuperação de dados dessa lista dinâmica resultará em um erro de violação de acesso.
Para uma lista dinâmica que exibe uma lista de enumeração, não há opção para personalizar interativamente a lista.
A composição das colunas e configurações da lista dinâmica são associadas aos campos de consulta por meio de aliases dos campos de seleção. Se um alias não for especificado explicitamente em uma consulta para um campo de seleção e o campo for de sistema, o nome do campo para a versão em inglês do idioma integrado será usado como alias.
O relacionamento especificado significa que ao alterar (ou especificar explicitamente um alias para um campo para o qual um alias automático foi usado)
alias do campo de consulta que gera os dados da lista dinâmica, as configurações dos atributos da lista dinâmica serão perdidas, os elementos do formulário “perderão” os detalhes exibidos, as configurações da lista dinâmica ficarão incorretas, etc.
Se a fonte de dados de uma lista dinâmica for uma tabela (normal ou virtual), que permite definir uma seleção por período, então se o usuário definir o período de exibição em tal lista dinâmica (comando Definir intervalo de data...),
os limites do período especificado serão definidos como valores de seleção ou parâmetros de tabela virtual. Se por meio de extensão de idioma
consultas para o sistema de composição de dados, os nomes dos parâmetros da tabela virtual foram especificados explicitamente - os parâmetros com o especificado
nomes. Tabelas para as quais é possível controlar o período de exibição ou processamento dos dados:
● tabelas cadastrais (principais ou virtuais), onde é possível selecionar por período (para o cadastro de cálculo - por período cadastral);
● principais tabelas de documentos, processos de negócio e tarefas;
● principais tabelas de diários documentais;
● tabelas de sequência principal, tabelas de limites de sequência.
O parâmetro de consulta de lista dinâmica pode ser uma matriz ou uma lista de valores. Entretanto, se o parâmetro for uma lista de valores, somente o primeiro valor da lista será usado como valor de seleção. Se uma lista dinâmica usa uma consulta com parâmetros, a configuração inicial dos valores dos parâmetros deve ser realizada no manipulador OnCreateOnServer.
Ao exibir dados de lista dinâmica, lembre-se dos seguintes pontos:
● Quando você altera programaticamente as propriedades de uma lista dinâmica, não há repreenchimento automático painéis de comando relacionado
com esta lista dinâmica.
● Se vários campos forem agrupados em um grupo com o modo de agrupamento em uma célula e nos campos agrupados houver um campo exibido como uma caixa de seleção, essa caixa de seleção sempre será exibida primeiro na célula resultante (à esquerda do texto).
Em uma lista dinâmica, ao determinar o tipo de dados para campos cujas expressões incluem parâmetros, campos ou literais, o tipo resultante é determinado pelos tipos de campos e literais. Se o tipo de valor do parâmetro não estiver incluído no tipo de dados resultante, seu valor será truncado.
Por exemplo, no exemplo a seguir o campo será do tipo Número.

ESCOLHA
QUANDO É MENTIRA
ENTÃO 5
DE OUTRA FORMA
&Parâmetro
FIM

Se você definir o parâmetro Parâmetro com um valor de outro tipo, a lista dinâmica desse campo receberá o valor 0 (valor padrão para o tipo Número).
Se em tal situação você precisar selecionar um parâmetro de tipo diferente, é recomendável usar a construção da linguagem de consulta EXPRESSAR. Por exemplo,
se no exemplo acima você precisar passar uma string de no máximo 100 caracteres para o parâmetro, então você deve substituir a simples indicação do parâmetro por uma expressão com conversão de tipo explícita:

ESCOLHA
QUANDO É MENTIRA
ENTÃO 5
DE OUTRA FORMA
EXPRESS(&Parâmetro AS String(100))
FIM

Se o texto arbitrário de uma solicitação de lista dinâmica usar parâmetros nas expressões dos campos de seleção, você deverá indicar explicitamente o tipo de parâmetros usando a construção EXPRESSAR. Por exemplo, em vez de &Nomenclatura AS Nomenclatura usar
EXPRESS(&Nomenclatura AS Diretório.Nomenclatura) AS Nomenclatura. Caso contrário, pesquisar na barra de pesquisa pode funcionar
incorretas ou produzir erros.

3. Métodos para recuperar e armazenar dados em cache com uma lista dinâmica

Ao obter dados para exibição, uma lista dinâmica usa um dos três métodos:
1. A leitura do banco de dados é realizada em blocos com um número de elementos de dados ligeiramente maior que o número de linhas exibidas simultaneamente pela lista (mas não inferior a 20). Os dados não são armazenados em cache no servidor.
2. A leitura do banco de dados é feita em páginas de 1.000 itens de dados. Os dados estão sendo armazenados em cache no servidor. Os dados hierárquicos são armazenados em cache: não mais do que 2 páginas de elementos são armazenadas em cache para cada pai. Não mais de 20 páginas de itens são armazenadas em cache por lista dinâmica. O cache será habilitado por uma lista dinâmica para as seguintes tabelas:
● Critérios de seleção;
● Todas as tabelas do registo contabilístico, exceto a tabela principal e a tabela MovimentosSubconto;
● Todas as tabelas de registros de acumulação, exceto a tabela principal;
● Todas as tabelas do cadastro de informações, exceto a tabela principal;
● Todas as tabelas do cadastro de cálculo, exceto a tabela principal;
● Tabela virtual de Tarefas por Executante;
● Tabelas de fontes externas sem chaves;
● Cubos de fontes externas.

3. A leitura do banco de dados é realizada em páginas de 1.000 elementos. A primeira parte equivale a 1 página. Cada porção subsequente aumenta em 1 página (quando o final da amostra anterior é atingido). Quanto mais próximo o “ponto de vista” se aproximar do final dos dados exibidos, maior será a amostra lida no banco de dados, eventualmente tornando-se igual a todos os dados exibidos. Os dados estão sendo armazenados em cache no servidor. O número máximo de entradas no cache e na lista dinâmica é 1.000.000.
Dependendo do que é selecionado pela tabela principal da lista dinâmica e do valor que a propriedade Leitura dinâmica assume, um ou outro método de leitura de dados é usado:

● Uma das seguintes tabelas é especificada como o valor da propriedade Tabela principal: plano de troca, diretório, lista de documentos, diário de documentos, plano de tipos de características, plano de contas, plano de tipos de cálculo, processo empresarial, tarefa, tabela de pontos do processo de negócios:



● Uma das seguintes tabelas é especificada como valor da propriedade Tabela principal: a tabela principal do registro de informações, o registro de acumulação, o registro contábil, o registro de cálculo, a tabela virtual do registro contábil MovimentosSubconto:

● Propriedade de leitura dinâmica:
● Instalado: o método 1 é usado (a descrição dos métodos é fornecida acima).
● Redefinir: O método 2 é usado (a descrição dos métodos é fornecida acima).

● A propriedade Tabela principal contém a tabela de critérios de seleção ou tabela de tarefas por executor (Tarefas por executor):
● Chave que identifica uma linha da tabela: Link.

● A propriedade Main table especifica a tabela virtual do registro de informações SliceFirst ou SliceLast:
● Chave que identifica uma linha da tabela: RecordKey.
● A propriedade Leitura dinâmica não é aplicável.
● O método 2 é usado (a descrição dos métodos é fornecida acima).

● A propriedade Tabela principal é definida como uma das tabelas de registro virtual, exceto aquelas listadas acima:

● A propriedade Leitura dinâmica não é aplicável.

● A propriedade da tabela principal não é especificada, uma consulta arbitrária é usada:
● Chave que identifica uma linha da tabela: Número.
● A propriedade Leitura dinâmica não é aplicável.
● O método 3 é usado (a descrição dos métodos é fornecida acima).

Para exibição, os dados são transferidos para o cliente em porções, cujo tamanho é semelhante ao tamanho da porção no 1º método de leitura de dados (descrito no início desta seção).
Quando você cria um formulário que contém uma lista dinâmica, 45 itens de dados para cada lista dinâmica visível são inicialmente passados ​​ao cliente (se a lista tiver mais de 45 itens). Se a lista dinâmica exibir mais de 45 linhas, uma chamada adicional ao servidor será feita quando o formulário for aberto para recuperar os itens de dados ausentes.

4. Configurações de lista dinâmica

Configurações da lista de propriedades - clicar no hiperlink Abrir abre um formulário para configurar a exibição de uma lista dinâmica. A configuração de uma lista é feita da mesma forma que operações semelhantes em um sistema de composição de dados.


Arroz. 2. Estilo condicional de uma lista dinâmica

Ao definir uma lista dinâmica na configuração, o desenvolvedor do aplicativo tem a oportunidade de fazer o seguinte:
● defina os campos pelos quais deseja classificar;
● descrever a seleção dos dados na lista;
● especificar configurações de aparência condicional;
● defina os campos pelos quais deseja agrupar os dados.
Faz sentido definir a classificação para o desenvolvedor se você não estiver satisfeito com a classificação padrão instalada pelo sistema.

CONSELHO. Deve-se lembrar que a má seleção dos campos de classificação (bem como a seleção e agrupamento dos dados) afeta negativamente a eficiência da amostragem dinâmica.
Do ponto de vista de um desenvolvedor de aplicativos, as configurações de lista dinâmica consistem em várias partes interconectadas. A principal propriedade através da qual você pode gerenciar as configurações de uma lista dinâmica é Configurações do vinculador. Este objeto contém três conjuntos de configurações que, quando o sistema é executado, determinam as configurações finais aplicadas à lista dinâmica:
● Configurações – configurações criadas no modo Configurador. A propriedade de lista dinâmica Order fornece acesso rápidoà propriedade Settings.Order do construtor de configurações de lista dinâmica, portanto, as seguintes construções são equivalentes:
List.Order e List.SettingsLinker.Settings.Order;
● UserSettings – são configurações que são alteradas pelo usuário no modo 1C:Enterprise;
● Configurações fixas – essas configurações são definidas no idioma integrado. Esta propriedade também contém valores de seleção que são transferidos para o formulário usando seus parâmetros. As propriedades da lista dinâmica Seleção, Opções e Aparência Condicional fornecem acesso rápido às configurações fixas do construtor de configurações de lista dinâmica. Em outras palavras, essas chamadas são equivalentes:
List.Settings Composer.FixedSettings.Selection e List.Selection.
Ao criar as configurações finais para uma lista dinâmica, várias opções de configurações são combinadas da seguinte forma:
● Se algum tipo de configuração estiver totalmente marcado como personalizado, as configurações resultantes incluirão as configurações personalizadas
(List.ComposerSettings.UserSettings). Além disso, se algum elemento de configuração estiver marcado como indisponível, essas configurações serão colocadas nas configurações resultantes da propriedade List.Settings Composer. Configurações.
● Se qualquer tipo de configuração estiver marcada como personalizada, não inteiramente, mas elemento por elemento, então:
● Os itens marcados como personalizados serão incluídos nas configurações resultantes da propriedade List.SettingsComposer.CustomSettings.
● Os itens marcados como indisponíveis serão incluídos nas configurações resultantes da propriedade List.SettingsComposer.Settings.
● As configurações fixas (List.SettingsComposer.FixedSettings) são adicionadas às configurações resultantes “como estão”. Ao mesmo tempo, é inaceitável que as configurações fixas e de usuário contenham configurações com o mesmo nome, por exemplo, seleção com o mesmo valor esquerdo na condição.

Se as configurações da lista dinâmica contiverem configurações desativadas por meio de opções funcionais, essas configurações serão removidas da lista de configurações disponíveis quando os dados da lista dinâmica forem recuperados.
O controle de quais configurações estarão disponíveis para o usuário e quais não estarão é feito na janela de configurações da lista dinâmica.


Arroz. 3. Controle a inclusão nas configurações do usuário

A caixa de seleção na parte inferior da janela (ver Fig. 3) é responsável por colocar todo o tipo de configurações nas configurações (normal ou rápida). Este recurso está disponível para seleção, ordenação, agrupamento e condicionalização. Se as configurações forem especificadas com o modo de edição Seleção rápida, então na propriedade Grupo de configurações do usuário da tabela do formulário que exibe a lista dinâmica, você deve especificar um grupo vazio do formulário no qual os elementos associados às configurações rápidas do usuário do a lista dinâmica será localizada. Se o grupo não for especificado, as configurações rápidas do usuário não serão exibidas no formulário. Também é possível invocar explicitamente a criação de configurações personalizadas usando a linguagem integrada usando o método CreateCustomSettingsFormItems() da extensão de lista dinâmica.
Também é possível escolher se deseja colocar itens de configuração específicos nas configurações do usuário. Este recurso está disponível para seleção e elementos de design condicionais (veja a Figura 3).

Se você precisar carregar alguma configuração especial ao abrir uma lista dinâmica, isso pode ser feito de duas maneiras:
● Usando o parâmetro UserSettings do formulário de lista dinâmica. Os dados contidos neste parâmetro serão colocados nas configurações da lista dinâmica do usuário.
● Usando o parâmetroUserSettingsKey do formulário de lista dinâmica. Se você especificar este parâmetro ao abrir um formulário, as configurações do usuário localizadas no armazenamento de configurações com a chave especificada serão carregadas na lista dinâmica, que é o atributo principal do formulário.

5. Pesquise em uma lista dinâmica

Uma lista dinâmica localizada no formulário oferece a capacidade de pesquisar interativamente os dados exibidos. A pesquisa pode ser realizada através das seguintes ferramentas: barra de pesquisa, caixa de diálogo de pesquisa, pesquisa do valor atual, utilização do histórico de pesquisa e configuração do período (para listas dinâmicas que exibem documentos). O resultado da pesquisa é um conjunto limitado de registros
uma lista dinâmica (daquelas disponíveis para um determinado usuário) que correspondem aos critérios de pesquisa.
Existem três propriedades de tabela para controlar os recursos de pesquisa em uma lista dinâmica: forma controlada, exibindo uma lista dinâmica:
● Posição da sequência de pesquisa – determina a posição da sequência de pesquisa. Pode assumir os seguintes valores: Automático, Barra de Comandos, Nenhum, Superior, Inferior.


Arroz. 4. String de pesquisa em uma lista dinâmica

Se o valor desta propriedade for definido como Painel de Comando, a string de pesquisa será exibida no painel de comando do formulário (se a lista dinâmica for o atributo principal do formulário) ou no painel de comando associado à lista dinâmica. A barra de pesquisa colocada na barra de comando é sempre pressionada na borda direita da barra de comando (junto com os botões localizados à direita da barra de pesquisa).
Se a propriedade estiver definida como Não, a string de pesquisa não estará no formulário e quando você começar a digitar a string de pesquisa, uma caixa de diálogo será aberta.
Se a propriedade estiver definida como Top, a barra de pesquisa estará localizada entre a barra de comandos da lista e a tabela que exibe a lista dinâmica. Se a propriedade estiver definida como Bottom, a string de pesquisa será colocada imediatamente após a tabela que exibe a lista dinâmica.


● Se a propriedade Modo de Compatibilidade estiver definida como Não usar ou for anterior à Versão 8.3.4 – o valor será Painel de Comando.
Vá para a linha de pesquisa da seguinte maneira:
● Pressionando a combinação de teclas Ctrl+F;
● Rato;
● Quando você começa a digitar em uma lista dinâmica (considerando o valor da propriedade SearchOnTyping da lista dinâmica).
● Posição do estado de visualização – descreve onde o estado de visualização será exibido: quais campos foram pesquisados ​​e quais valores
pesquisado em todos os campos. Pode assumir os seguintes valores: Auto, Nenhum, Superior, Inferior


Arroz. 5. Estado de pesquisa na lista dinâmica

Se a propriedade estiver definida como Não, o estado de visualização não estará presente no formulário. Com isso, será possível determinar se a pesquisa foi concluída ou não apenas pela disponibilidade do botão Cancelar Pesquisa.
Se a propriedade estiver definida como Top, o estado da visualização estará localizado entre a barra de comando da lista e a tabela que exibe a lista dinâmica. Se a propriedade estiver definida como Bottom, o estado da visualização será colocado imediatamente após a tabela que exibe a lista dinâmica.
Se o formulário foi criado em 1C:Enterprise versão 8.3.4 e anterior, a propriedade é definida como Não. Se o formulário foi criado em 1C:Enterprise versão 8.3.5 e anterior, a propriedade é definida como Auto. O valor real do imóvel, neste caso, será determinado da seguinte forma:
● Se a propriedade Modo de Compatibilidade estiver configurada para Versão 8.3.4 (e inferior) – valor Não;
● Se a propriedade Modo de Compatibilidade estiver definida como Não usar ou anterior à Versão 8.3.4 – valor Superior;
● Posição de controle de pesquisa – Determina onde o botão de controle de pesquisa aparecerá. O botão abre um menu que contém as seguintes informações: comandos Localizar por valor atual, Pesquisa avançada, Cancelar pesquisa, Definir período (para listas de documentos e diários) e pesquisar histórico de consultas (últimas 5 consultas). A propriedade pode assumir os seguintes valores: Auto, Nenhum, Painel de comando.


Arroz. 6. Gerenciando pesquisa em uma lista dinâmica

Se a propriedade estiver definida como Não, o botão de controle de pesquisa não estará no formulário (mas os comandos estarão disponíveis no menu Mais). O valor da propriedade Command Bar coloca um botão na barra de comandos associada a uma tabela que exibe uma lista dinâmica.
Se o formulário foi criado em 1C:Enterprise versão 8.3.4 e anterior, a propriedade é definida como Não. Se o formulário foi criado em 1C:Enterprise versão 8.3.5 e anterior, a propriedade é definida como Auto. O valor real do imóvel, neste caso, será determinado da seguinte forma:
● Se a propriedade Modo de Compatibilidade estiver configurada para Versão 8.3.4 (e inferior) – valor Não;
● Se a propriedade Modo de Compatibilidade estiver definida como Não usar ou for anterior à Versão 8.3.4 – o valor é Painel de Comando;
Se houver vários painéis de comando em um formulário, cuja fonte de comandos é uma tabela do formulário gerenciado (exibindo dados da lista dinâmica), a linha de pesquisa e o botão de controle de pesquisa estarão localizados em apenas um painel de comando:
● Ou na barra de comando da própria lista dinâmica (se o preenchimento automático estiver ativado)
● Ou em qualquer um dos painéis de comando restantes.

Vejamos os recursos de uso da pesquisa em uma lista dinâmica:
● Para tornar a pesquisa conveniente (inclusive em termos de desempenho), você deve ativar a pesquisa de texto completo para todos os objetos de configuração que podem ser usados ​​como tabela principal da lista dinâmica. Além disso, a pesquisa de texto completo deve incluir todos os detalhes dos objetos de configuração que podem ser exibidos em uma lista dinâmica e para os quais uma pesquisa pode ser necessária.
Se um objeto for excluído da pesquisa de texto completo, o mecanismo de pesquisa em questão funcionará, mas o desempenho dessa pesquisa será extremamente baixo. Não é recomendado usar a pesquisa em objetos que não sejam indexados pela pesquisa de texto completo.
● A solução do aplicativo deve ter uma tarefa de rotina que atualize regularmente o índice de pesquisa de texto completo.

● A pesquisa não é realizada em todas as colunas da lista dinâmica (e do objeto de configuração), mas apenas nas colunas exibidas na tabela.
● A pesquisa em uma lista dinâmica por campos de tipos de referência com representação arbitrária é realizada por campos que são usados ​​para
formação de representação (veja aqui). Os campos incluídos na visualização são obtidos levando em consideração o manipulador ViewFieldGettingProcessing() do objeto correspondente.
● Para listas dinâmicas com uma tabela principal especificada, a pesquisa de texto completo é usada na tabela principal. Todos os links não indexados da tabela principal serão adicionados aos resultados da pesquisa de texto completo. O resultado de uma pesquisa de texto completo na tabela principal é usado como uma seleção baseada em campos-chave. Uma pesquisa de texto completo também é executada em campos exibidos na lista de outras tabelas (se o campo e o objeto de configuração estiverem usando pesquisa de texto completo). Sem a pesquisa de texto completo habilitada, os dados podem ser
encontrado, mas a pesquisa em si será muito lenta.
Se ocorrer um erro ao tentar realizar uma pesquisa de texto completo, a pesquisa será executada sem aplicar a pesquisa de texto completo.
Por exemplo, isso pode acontecer ao procurar uma letra e um grande número linhas em base de informações, começando com esta carta.
● Se uma seleção com o tipo de comparação Equals for usada para um campo na tabela principal de uma lista dinâmica, ao executar uma pesquisa de texto completo para consulta de pesquisa O valor da seleção será adicionado desta tabela.
● A sequência de pesquisa é dividida em palavras. Esta partição é executada de acordo com as seguintes regras:
● A linha é quebrada usando caracteres de espaço e tabulação como delimitadores.
● Em seguida, cada fragmento resultante é processado:
● Se o fragmento for uma representação de data (com ou sem hora) baseada na localidade da sessão atual, então a palavra será o fragmento.
● Caso contrário, o fragmento será dividido ainda mais usando os caracteres “,.-/\” como delimitadores. Nesse caso, cada fragmento resultante da string é considerado uma palavra.

● Para cada palavra é formado seu próprio conjunto de condições, que são combinadas “por OU”. Este conjunto de condições é gerado se uma pesquisa de texto completo para uma determinada palavra na tabela da qual este campo foi obtido retornou pelo menos um objeto, ou se uma pesquisa de texto completo não foi usada para este campo. As condições são formadas da seguinte forma:
● Para um campo do tipo String, a condição é FieldName LIKE %Word%.
● Para um campo do tipo Número, a condição tem o formato NomeCampo=Valor, onde Valor é uma palavra convertida para o tipo Número. Se a conversão não puder ser realizada, a pesquisa de campo não será realizada.
● A palavra é procurada como uma substring na representação booleana padrão definida para a sessão atual. Se a palavra pesquisada for encontrada em uma visualização, ele pesquisará o valor correspondente à visualização na qual a palavra foi encontrada. Nesse caso, a pesquisa não utiliza visualizações especificadas por meio da propriedade Formatar elemento de formulário.
● Para um campo do tipo Data, a condição é semelhante a FieldName>=StartofDay(Word) ANDFieldName<=КонецДня(Слово). Если Слово подобно дате, в которой год
indicado por um ou dois dígitos, o ano será reduzido ao século atual e este valor será adicionado à condição de busca.
● Para campos de referência, é realizada uma pesquisa nos campos usados ​​para formar a visualização de referência. Em cada um desses campos pesquise
realizado de acordo com as regras descritas acima. A pesquisa não utiliza campos usados ​​para formar uma representação de dados personalizada.
O conjunto de condições para cada palavra é combinado “AND”.
● Para valores com zeros à esquerda, você pode pesquisar a string com zeros à esquerda ou a string especificada sem zeros à esquerda.
● Se uma lista dinâmica exibir uma lista de documentos ou um histórico de documentos, o intervalo de visualização de lista especificado também será exibido na área do formulário reservada para exibir o status de visualização da lista dinâmica desejada.
● O comando de busca por valor atual não está disponível se a tabela principal da lista dinâmica for o critério de seleção.
● Os fragmentos de string encontrados são destacados quando exibidos na tabela.
● Somente uma string de pesquisa é suportada para uma coluna. Ao adicionar uma nova consulta de pesquisa para uma coluna que já está sendo pesquisada, a expressão de pesquisa será substituída em vez de as duas consultas de pesquisa serem adicionadas juntas.
● Se o formulário não tiver uma adição de elemento de formulário do formulário Exibição de string de pesquisa associada à tabela (propriedade Fonte de adição de elemento de formulário) exibindo uma lista dinâmica, pressionar a combinação de teclas Ctrl+F abre a caixa de diálogo de pesquisa.


Arroz. 7. Caixa de diálogo de pesquisa

Se o formulário contiver uma adição de elemento de formulário do formulário Exibição de string de pesquisa associada a uma tabela (propriedade Fonte de adição de elemento de formulário) exibindo uma lista dinâmica, então para abrir a caixa de diálogo de pesquisa você deve usar o comando Pesquisa avançada.
● Ao usar a caixa de diálogo de pesquisa, lembre-se dos seguintes pontos:
● Abrir a caixa de diálogo de pesquisa usando um atalho de teclado faz com que o valor da célula atual apareça na linha O que pesquisar e o valor da opção Como pesquisar é definido como Por correspondência exata.

● Abrir a caixa de diálogo de pesquisa começando diretamente a digitar uma string de pesquisa na lista dinâmica leva ao fato de que o valor da opção Como pesquisar é definido como o valor Por parte da string, e o texto digitado termina na caixa O que para o campo de pesquisa.

6. Obtendo os dados exibidos por uma lista dinâmica

Ao usar listas dinâmicas, pode ser necessário executar diversas ações nos dados exibidos atualmente pela lista dinâmica, levando em consideração as seleções e pesquisas aplicadas. Tais ações incluem: processar as informações exibidas, por exemplo, reenviar documentos selecionados ou definir alguns detalhes para objetos selecionados, gerar uma lista de objetos disponíveis (com desenho, etc.), por exemplo, para imprimir ou salvar em uma planilha.
Para obter dados que são exibidos por uma lista dinâmica, você deve usar GetExecutableDataCompositionSchema() e
GetExecutableDataCompositionSettings().
Exemplo de recebimento de dados:

Esquema = Elements.List.GetExecutableDataCompositionSchema();
Configurações = Items.List.GetExecutableDataCompositionSettings();
LayoutLinker = newDataCompositionLayoutLinker();
LayoutLayout = LayoutComposer.Execute(Esquema, Configurações);
ComposiçãoProcessor = novoDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout);
OutputProcessor = Novo OutputProcessorDataCompositionResultInTabularDocument;
ReturnOutputProcessor.Output(CompositionProcessor);

Colocar dados em uma coleção de valores (tabela ou lista de valores) é feito da mesma maneira.
A obtenção de dados de lista dinâmica dessa maneira possui vários recursos que devem ser levados em consideração ao desenvolver soluções de aplicativos:
● O seguinte design de tabela não é compatível:
● Cores de linha alternadas;
● Imagem do cabeçalho;
● Foto do subsolo;
● Cor de fundo do rodapé;
● Cor do texto do rodapé;
● Fonte do rodapé;
● Posição horizontal na cave;
● Modo de senha.
● A aparência condicional especificada para um formulário gerenciado não é suportada;
● Ao ordenar uma tabela hierárquica em ordem crescente por um campo do tipo Link, os registros contendo um link vazio são sempre colocados primeiro.

Finalmente, o sonho de toda criança de sete anos se tornou realidade. Com que frequência os usuários do programa 7.7 solicitaram uma seleção normal de itens? Para que você possa ver saldos, preços e definir filtros. Tivemos que inventar vários truques, incluindo escrever componentes externos. Em 1C 8.2, apareceram listas dinâmicas. Proponho considerar o que é e o que pode nos dar em 1C 8.3.

Tomemos como base uma determinada configuração de teste do 1C: “Enterprise Accounting 3.0”. Não faremos uma seleção agora, apenas adicionaremos outro formulário de seleção no diretório “Nomenclatura” e torná-lo temporariamente o principal:

Ao ser criado, o sistema adicionará por padrão um campo de tabela do tipo “Lista Dinâmica” ao formulário.

Vamos entrar em suas propriedades e ver o que há lá.

Em primeiro lugar, estamos interessados ​​na caixa de seleção “Solicitação personalizada”. Isto nos revelará todas as vantagens de uma lista dinâmica. Teremos a oportunidade de escrever o nosso próprio pedido, com parâmetros. Marque a caixa e clique no link “Abrir”:

Uma janela será aberta com o código finalizado em . Por enquanto, todos os campos do diretório “Nomenclatura” estão simplesmente listados ali.

Obtenha 267 videoaulas em 1C gratuitamente:

Como você pode ver, existe um botão de chamada “ ” e uma caixa de seleção que permite alterar dinamicamente o conteúdo da lista. Ou seja, quando outro usuário alterar algo no diretório, também mudará em nossa lista. Além disso, existe uma guia “Configurações”, mas falaremos disso mais tarde.

Consulta personalizada na lista dinâmica

Primeiro, vamos criar a solicitação que precisamos com saldos e preços. Assim:

Guia “Configurações”

E agora a melhor parte! Vá para a guia “Configurações”. E vemos imediatamente que na primeira aba podemos fazer qualquer seleção para qualquer campo da solicitação:

Configurando parâmetros de consulta programaticamente em uma lista dinâmica 1C 8.3

Não esqueça que temos dois parâmetros na solicitação: “Período” e “Tipo de preço”. Devemos passá-los para a solicitação, caso contrário ocorrerá um erro.

Vamos escrever esses parâmetros nos parâmetros do formulário e adicionar as seguintes linhas no módulo do formulário:

Lista &OnServerProcedureWhenCreatingOnServer(Failure, StandardProcessing). Opções. SetParameterValue("Período", Parâmetros. Data); Lista. Opções. SetParameterValue("PriceType", Parameters.PriceType) ; Fim do procedimento

No processo de finalização das configurações, todo programador 1C encontra listas dinâmicas.
Uma lista dinâmica é um objeto de interface usado para exibir várias listas de objetos de banco de dados ou dados não objetos - entradas de registro.
Por exemplo, uma lista dinâmica é usada para exibir uma lista de itens:

Para demonstrar os recursos de uma lista dinâmica, vamos criar um processamento externo e adicionar o formulário principal. Vamos adicionar um novo atributo ao formulário do tipo “Lista Dinâmica”. Vamos entrar em suas propriedades e ver o que há lá.
Estamos interessados ​​na propriedade “Solicitação personalizada”. Ativá-lo nos mostrará todos os recursos de uma lista dinâmica. Poderemos escrever uma solicitação usando quase todos os recursos da linguagem de consulta do sistema 1C:Enterprise. Marque a caixa e clique no link “Abrir”:

Por padrão, nossa lista exibirá uma lista de itens com saldo total de todos os armazéns. Para implementar essa lista, adicione a seguinte consulta:


Como tabela principal selecionaremos “Directory.Nomenclature”, isso nos permitirá trabalhar com uma lista dinâmica, como acontece com uma lista de nomenclatura - adicionar, alterar, marcar elementos de diretório para exclusão. Além disso, a instalação da tabela principal possibilita a leitura dinâmica dos dados - isso significa que a seleção será feita em porções, conforme a necessidade.
Em seguida, precisamos criar elementos de formulário para nossa lista:

Se tentarmos executar nosso processamento desta forma, obteremos um erro:


Para eliminá-lo, você precisa definir um valor para o parâmetro “Período”. Para fazer isso, você pode usar o método “SetParameterValue” da coleção “Parâmetros” da lista dinâmica. O método leva dois parâmetros:
. "Parâmetro" - Tipo: String; Parâmetro de composição de dados. O nome do parâmetro ou parâmetro de composição de dados cujo valor você deseja definir;
. “Valor” - Tipo: Arbitrário. O valor a ser definido.
Pode ser chamado no manipulador “OnCreateOnServer” do formulário:

Você tem alguma dúvida ou precisa da ajuda de um consultor?


Daremos ao usuário a oportunidade de alterar o período de recebimento de saldos. Para fazer isso, adicione o atributo e o elemento de formulário “Data” associado a ele:


No manipulador “OnChange” do elemento do formulário “Date”, chamaremos o método “SetParameterValue”, passando o valor do atributo associado como valor. De forma semelhante, vamos alterar o procedimento “Ao Criar no Servidor” do formulário. Como o método está disponível no cliente, não há necessidade de chamar o servidor:


Agora quando a data mudar, os saldos serão atualizados automaticamente:




Vamos supor que os usuários desejam ver os saldos atuais ou os recebimentos planejados. Vamos considerar uma das opções de implementação. Vamos adicionar um atributo de formulário do tipo booleano e uma opção associada:


Ao alterar o valor da opção, alteraremos o texto da solicitação. Para fazer isso, usaremos o manipulador de eventos “On Change” para o elemento do formulário “Exibir quantidade no recebimento”. Precisamos alterar a propriedade “QueryText” da lista dinâmica dependendo do valor do atributo. Como esta propriedade não está disponível no cliente, um procedimento de servidor deve ser chamado:


Resultado das alterações feitas:



Além dos tipos de dados primitivos que podem ser encontrados em qualquer linguagem de programação, 1C também possui tipos exclusivos. Cada um deles possui propriedades, métodos, funções, finalidade e nuances próprias de uso no sistema. Um desses tipos é uma lista dinâmica, que facilita muito muitas tarefas aplicadas. É por isso que os desenvolvedores devem conhecer e ser capazes de manusear esta ferramenta universal.

Recursos de listas dinâmicas em 1C

O objetivo deste tipo é exibir informações de quaisquer tabelas do banco de dados, independentemente do seu tipo. O mecanismo foi criado com base no SKD e possui capacidades semelhantes. Mas isso não significa que você terá necessariamente que escrever uma solicitação na linguagem 1C, embora esta oportunidade exista e deva ser aproveitada. Você pode simplesmente especificar a tabela cujas informações lhe interessam e 1C gerará de forma independente uma consulta simples.

Para ver como uma lista dinâmica é formada e quais dados ela mostra, é necessário abrir os formulários gerenciados onde ela está localizada no configurador: na lista de detalhes, use o menu de contexto para abrir suas propriedades e preste atenção na opção “Personalizar Solicitar”. Se não houver caixa de seleção, o parâmetro “Tabela principal” reflete a tabela do banco de dados da qual os dados são obtidos. Caso contrário, a lista dinâmica reflete os dados de uma consulta personalizada, que pode ser vista abrindo as configurações da lista.

O esquema de consulta personalizado é muito mais comumente usado, pois oferece uma excelente oportunidade para combinar e exibir uma ampla variedade de dados. Na maioria das vezes, esse mecanismo é usado para refletir saldos de depósitos, preços de itens, recebimentos, despesas ou compras. Você precisa usá-lo com cuidado, pois o desempenho pode cair em consultas complexas.

Outra propriedade útil de uma lista dinâmica é aberta quando você clica na inscrição “Configurações da lista”. Este menu permite tornar as informações mais acessíveis e compreensíveis para os usuários finais, mesmo ao usar um conjunto padrão de campos. Independentemente de a solicitação ser arbitrária ou não, você verá a aba “Configurações”, onde poderá especificar:

  • Seleção de lista dinâmica;
  • Grupos;
  • Ordenação;
  • Decoração.

O uso de parâmetros torna as listas dinâmicas universais e bastante flexíveis. Você também pode vinculá-los aos detalhes de um formulário gerenciado, e os dados mudarão dependendo dos parâmetros selecionados pelo usuário. A utilização destes mecanismos pode ser compreendida e apreciada considerando exemplos de problemas da vida real.

Como exemplo, consideremos a tarefa de refletir os restos da nomenclatura de uma forma controlada. Na prática real, esses pedidos ocorrem com bastante frequência em várias configurações, e uma lista dinâmica é ideal como ferramenta. Para esta tarefa teremos que utilizar uma consulta customizada, parâmetros de lista dinâmica e suas configurações.

Para maior clareza, vamos criar um processamento externo separado e colocar uma lista dinâmica nele. Para implementar nossos planos, a tabela com a nomenclatura não será suficiente, por isso precisamos permitir uma consulta arbitrária. Nele descreveremos a conexão esquerda do diretório com a lista de itens e o cadastro de saldos e definiremos o diretório como tabela principal. Este esquema permitirá aos usuários, trabalhando com uma lista dinâmica, adicionar ou alterar itens.



SELECIONE NomenclatureList.Name AS Nome, GoodsInWarehousesRemainings.Warehouse AS Warehouse, GoodsInWarehousesRemainings.QuantityRemaining AS QuantidadeRemaining FROM Directory.Nomenclature AS NomenclatureList CONEXÃO ESQUERDA RegisterAccumulations.GoodsInWarehouses.Remainings(&CurrentDate,) AS GoodsOnUS tesourosRemaining software NomenclatureList.Link = ProductsInWare casasRestos.Nomenclatura ONDE

Como nossa solicitação utilizou o parâmetro “CurrentDate”, precisamos definir seu valor antes de usar o processamento. Para isso, no módulo de formulário do procedimento “Quando CriadoOnServer”, por meio de um comando padrão, atribua-lhe a função “CurrentSessionDate”. Também precisamos exibir a lista dinâmica no formulário de controle e alterar a ordem dos campos para maior clareza. Arraste o atributo “Nomenclatura Restante” para os elementos do formulário (parte superior esquerda) e use as setas azuis para alterar a ordem dos campos da tabela do formulário.

&No procedimento do servidor quando criado no servidor (falha, processamento padrão) A nomenclatura permanece. Parâmetros. Set ParameterValue("CurrentDate", CurrentSessionDate()) EndProcedure


Já nesta fase podemos abrir nosso processamento externo em 1C e ver se a lista dinâmica está funcionando. Podemos consultar saldos, criar itens e grupos e pesquisar. Muitas vezes os clientes pedem para adicionar a possibilidade de escolher a data em que verão os saldos. No caso de um formulário com lista dinâmica, isso é conseguido através de um campo adicional e configuração de parâmetros através dele.

Adicione o atributo “DateRemaining” do tipo “Date” e transfira-o para os elementos do formulário. No campo events, criamos o evento “OnChange” e escrevemos o código para configuração do parâmetro “CurrentDate” utilizado na solicitação dinâmica. Para que ao abrir o formulário o usuário entenda imediatamente em que data vê os saldos, faremos pequenas alterações no procedimento “Quando CriadoOnServer”.



&OnServerProcedureWhenCreatingOnServer(Failure, StandardProcessing)RemainingDate = CurrentSessionDate(); Item Remains.Parameters.SetParameterValue("CurrentDate", RemainingDate); Fim do Procedimento &No Procedimento do Cliente Data RestanteQuandoChanged(Elemento)Nomenclatura Remaining.Parameters.SetParameterValue("CurrentDate",RemainingDate); Fim do procedimento

Como resultado, nosso formulário de Lista Dinâmica pode refletir saldos de qualquer data.

Consideramos apenas uma pequena parte das capacidades deste kit de ferramentas, mas isso já é suficiente para entender a conveniência deste tipo de lista dinâmica. Um mecanismo semelhante é usado para muitas tarefas, mas é mais frequentemente encontrado em configurações típicas em formulários gerenciados:

  1. Seleção;
  2. Listas.

Para receber uma lista dinâmica e sua solicitação em formulários gerenciados padrão, o desenvolvedor precisa abrir o formulário desejado no configurador. Na seção de detalhes, encontre os detalhes com o tipo de dados “DynamicList” (na maioria das vezes é destacado em negrito). Suas propriedades contêm o texto da solicitação, seleções e outras configurações.

Notas iniciais através do espelho

21/04/2014 Recebendo dados de lista dinâmica

Implementado na versão 8.3.6.1977.

Implementamos a capacidade de obter dados exibidos de forma fácil e conveniente usando uma lista dinâmica.

Você pode precisar de dados de lista dinâmica para imprimi-los em um formato “específico” não padrão. Ou para realizar determinadas ações com eles. Por exemplo, envie uma carta a todos os empreiteiros selecionados na lista com base em determinados critérios.

Além disso, há uma série de tarefas em que o usuário, além da lista de elementos, também deseja ver os dados resumidos associados a esta lista. Por exemplo, tendo selecionado produtos de um determinado grupo de produtos e de um determinado fornecedor, ele deseja imediatamente ver o número total desses produtos no banco de dados.

Uma lista dinâmica por si só não pode fornecer essas informações. O objetivo de uma lista dinâmica é fornecer visualização rápida de grandes quantidades de dados. Portanto, ele lê os dados em partes necessárias para serem exibidos em uma ou duas telas. E “não sabe nada”, por exemplo, sobre a quantidade total de dados que tem para contar.

Em geral, para obter informações adicionais que o usuário deseja, é necessário executar uma consulta ao banco de dados. Exatamente igual ao usado na lista dinâmica.

Você costumava ser capaz de fazer isso. Mas nem sempre foi fácil. Afinal, além do texto da solicitação original em que funciona a lista dinâmica, era necessário conhecer todas as seleções, ordenações e outros parâmetros que o usuário definiu interativamente na tabela que exibe os dados.

Agora este problema pode ser resolvido de forma simples. A tabela de lista dinâmica agora possui dois novos métodos:

  • GetExecutableDataCompositionSchema();
  • GetExecutableDataCompositionSettings().

Assim, você obtém o próprio esquema de layout de dados e, o mais importante, todas as suas configurações, graças às quais o usuário vê a lista exatamente assim. Tudo o que você precisa fazer é compor programaticamente o layout e exibi-lo em uma coleção de valores (para processamento do programa) ou em uma planilha (para exibição):

Como resultado, você receberá uma estrutura (ou relatório) contendo colunas e linhas exibidas em uma tabela de lista dinâmica.

O importante é que o layout e as configurações que você recebe da tabela de lista dinâmica levem em consideração, entre outras coisas, a visibilidade das colunas e a pesquisa aplicada. Como as configurações são obtidas separadamente, você pode alterar a composição dos campos para seus próprios fins e obter, por exemplo, todas as colunas da lista, e não apenas aquelas que estão visíveis ao usuário.

Ao enviar para um documento de planilha, há mais um momento agradável. Em geral, a aparência do relatório corresponderá à aparência da tabela de lista dinâmica no momento do recebimento do esquema e das configurações. Incluindo o design condicional da mesa. Você precisará de algumas ações adicionais somente se quiser transferir o design condicional do formulário para o relatório.