1s 8 insere uma linha na tabela de valores. Quais métodos existem e como procurar vários valores simultaneamente

Para contabilizar dinheiro e bens, várias tabelas são amplamente utilizadas nos negócios. Quase todo documento é uma tabela.

Uma tabela lista as mercadorias a serem expedidas do armazém. Outra tabela mostra as obrigações de pagamento desses bens.

Portanto, em 1C, trabalhar com tabelas ocupa lugar de destaque.

As tabelas em 1C também são chamadas de “partes tabulares”. Diretórios, documentos e outros os possuem.

A consulta, quando executada, retorna uma tabela que pode ser acessada de duas maneiras diferentes.

A primeira seleção é mais rápida, a obtenção de linhas dela só é possível em ordem. A segunda é carregar o resultado da consulta em uma tabela de valores e depois acessá-lo aleatoriamente.

//Opção 1 – acesso sequencial aos resultados da consulta

//pega a mesa
Selecione = Query.Run().Select();
// percorremos todas as linhas do resultado da consulta em ordem
Enquanto Select.Next() Loop
Relatório(Seleção.Nome);
Fim do Ciclo;

//Opção 2 – upload para uma tabela de valores
Solicitação = Nova Solicitação("SELECIONE Nome FROM Directory.Nomenclature");
//pega a mesa
Tabela = Query.Run().Unload().
//além disso, também podemos iterar por todas as linhas
Para cada linha do ciclo da tabela
Relatório(String.Nome);
Fim do Ciclo;
//ou acessa strings arbitrariamente
Linha = Table.Find("Pá", "Nome");

Uma característica importante é que na tabela obtida a partir do resultado da consulta, todas as colunas serão digitadas estritamente. Isso significa que ao solicitar o campo Nome do diretório Nomenclature, você receberá uma coluna do tipo String com comprimento permitido de no máximo N caracteres.

Tabela no formulário (cliente grosso)

O usuário trabalha com a tabela quando ela é colocada no formulário.

Discutimos os princípios básicos de trabalho com formulários na lição e na lição sobre

Então, vamos colocar a tabela no formulário. Para fazer isso, você pode arrastar a tabela do painel Controles. Da mesma forma, você pode selecionar Formulário/Inserir controle no menu.

Os dados podem ser armazenados na configuração - então você precisa selecionar a parte tabular existente (anteriormente adicionada) do objeto de configuração cujo formulário você está editando.

Clique no botão "..." na propriedade Dados. Para ver a lista de partes tabulares, você precisa expandir o ramo Objeto.

Ao selecionar a parte tabular, o próprio 1C adicionará colunas à tabela do formulário. As linhas inseridas pelo usuário em tal tabela serão salvas automaticamente junto com o livro/documento de referência.

Na mesma propriedade Dados, você pode inserir um nome arbitrário e selecionar o tipo Tabela de Valores.

Isso significa que uma tabela arbitrária de valores foi selecionada. Ele não adicionará colunas automaticamente, nem será salvo automaticamente, mas você pode fazer o que quiser com ele.

Ao clicar com o botão direito na tabela você pode adicionar uma coluna. Nas propriedades de uma coluna, você pode especificar seu nome (para referência no código 1C), o título da coluna no formulário, a conexão com o atributo da parte tabular (esta última - se não for selecionada uma tabela arbitrária, mas um parte tabular).

Nas propriedades da tabela no formulário, você pode especificar se o usuário pode adicionar/excluir linhas. Um formulário mais avançado é a caixa de seleção Somente visualização. Essas propriedades são convenientes para organizar tabelas destinadas à exibição de informações, mas não à edição.

Para gerenciar a tabela, você precisa exibir um painel de comando no formulário. Selecione o item de menu Formulário/Inserir Controle/Barra de Comandos.

Nas propriedades da barra de comandos, marque a caixa de seleção Preenchimento automático para que os botões do painel apareçam automaticamente.

Tabela no formulário (cliente thin/gerenciado)

Em um formulário gerenciado, essas ações parecem um pouco diferentes. Se você precisar colocar uma parte tabular no formulário, expanda a ramificação Objeto e arraste uma das partes tabulares para a esquerda. Isso é tudo!

Se precisar colocar uma tabela de valores, adicione um novo atributo de formulário e em suas propriedades especifique o tipo – tabela de valores.

Para adicionar colunas, use o menu do botão direito neste atributo de formulário e selecione Adicionar coluna de atributo.

Em seguida, arraste também a tabela para a esquerda.

Para que uma tabela tenha uma barra de comandos, nas propriedades da tabela, selecione os valores na seção Uso – Posição da barra de comandos.

Carregando uma tabela no Excel

Qualquer tabela 1C localizada no formulário pode ser impressa ou carregada no Excel.

Para fazer isso, clique com o botão direito em um espaço vazio da tabela e selecione Lista.

Em um cliente gerenciado (thin), ações semelhantes podem ser executadas usando o item de menu Todas as ações/Exibir lista.

Pesquise na tabela de valores 1C

Quais métodos existem e como procurar vários valores simultaneamente.

Existem dois métodos especiais para pesquisar uma tabela de valores:

1. Encontre

TVHorizon = Directories.Nomenclature.FindByName("TVHorizon");
FoundString = TZNomenclature.Find(TVHorizon);
//também podemos especificar em quais colunas pesquisar para acelerar a pesquisa
FoundString = TZNomenclature.Find(TVHorizon, "Nomenclatura");

Este método retorna a primeira linha encontrada com o valor desejado, ou Indefinido se não encontrar. Portanto, é conveniente utilizá-lo para buscar valores únicos, pois caso contrário, quando um valor for encontrado, você terá que removê-lo da tabela para encontrar o próximo.

Para evitar esse incômodo, existe o seguinte método que permite encontrar uma matriz de strings correspondentes:

2. EncontreStrings


Estrutura de seleção.Insert("Nomenclatura", TVHorizon); // primeiro indique a coluna onde procurar e depois o que procurar.

Este método sempre retorna um array, mas pode estar vazio se nada for encontrado. E este método, como o anterior, retorna as próprias linhas da tabela de valores, e não os próprios valores em um array separado. Portanto, alterando os valores na string do array ou, como no método anterior, para a string encontrada, você alterará o valor na tabela de valores processada.

Outra coisa boa sobre esse método é que ele pode pesquisar várias colunas da tabela de valores de uma só vez:


SelectionStructure = Nova Estrutura;
Estrutura de seleção.Insert("Nomenclatura", TVHorizon);
Estrutura de seleção.Insert("Quantidade", 10);
FoundArray de Linhas = TZNomenclature.FindLines(SelectionStructure);

O único aspecto negativo, como você pode ver, é que você não pode usar outros tipos de comparação além de “iguais”

Uma tabela de valores é um objeto universal específico projetado para armazenar dados em uma representação tabular. A principal diferença entre uma tabela e objetos de aplicativo é a falta de ligação a tabelas físicas de banco de dados. A tabela de valores existe apenas na RAM, o que, por um lado, oferece oportunidades únicas e, por outro, impõe certas restrições. Porém, as possibilidades de interação com a tabela são comparáveis ​​às de interação com objetos que realmente existem no banco de dados.

Historicamente, a tabela de valores em 1C tem dupla finalidade, sendo um análogo virtual das tabelas existentes, mas ao mesmo tempo é também um elemento de controle. Com a mudança para um aplicativo gerenciado, grande parte dessa funcionalidade foi descontinuada, mas agora também pode ser um elemento da interface do usuário, mas com algumas limitações significativas.

Estrutura de uma tabela de valores como um objeto

As propriedades de uma tabela de valores são determinadas por combinações de duas coleções predefinidas: suas colunas e linhas.

Tabela de valores Colunas

Uma coluna de uma tabela de valores é sua propriedade definidora. É o conjunto de colunas da tabela que determina sua estrutura. As colunas correspondem aos campos de tabelas físicas ou colunas familiares da interface do usuário de uma seção tabular ou diário de documentos. Uma coluna pode ter um nome interno, um tipo de valor e um título que é exibido ao trabalhar interativamente com a tabela.

Como as colunas são uma coleção de objetos, você pode adicionar, excluir e editar colunas.

Linha da tabela de valores

Do ponto de vista da interface de software, as strings são uma coleção separada incorporada em uma tabela de valores. Eles são análogos aos registros em tabelas físicas, ou seja, linhas familiares ao usuário em uma seção tabular ou diário de documentos. Cada linha individual é um objeto com um conjunto de propriedades nomeadas, cujos nomes correspondem aos nomes das colunas da tabela.

Assim, interagir com uma string é muito semelhante a interagir com outros objetos. Você pode ler e escrever suas propriedades, inclusive usando a função predefinida “FillPropertyValues()”. Como as linhas são a coleção principal da tabela de valores, o método “Clear()” é usado para excluir todas as linhas da tabela.

Criar tabela de valores

Há muitas maneiras de preparar uma tabela de valores para uso. Vejamos alguns deles. Cada exemplo será fornecido como listagens de códigos com comentários.

Criando uma tabela usando o construtor

O principal método que permite criar exatamente a tabela que o desenvolvedor precisa é, infelizmente, o mais trabalhoso, pois requer a especificação manual de todas as propriedades necessárias da tabela.

DemoTable = Nova Tabela de Valores; // Primeiramente inicializamos o TK // A seguir determinamos os parâmetros necessários para novas colunas e os adicionamos à coleção // Criando a coluna "Nomenclatura" Name = "Nomenclature"; ValueType = Novo TypeDescription("DirectoryLink.Nomenclature"); Título = “Nomenclatura (produto)”; DemoTable.Columns.Add(Nome, ValueType, Cabeçalho); // Criando a coluna "Quantidade" Name = "Quantidade"; ValueType = New TypeDescription("Número"); DemoTable.Columns.Add(Nome,ValueType); // Como resultado dessas manipulações, criamos uma tabela vazia com colunas digitadas // Se você precisar usar uma digitação mais precisa de tipos primitivos, então você deve usar a sintaxe estendida do construtor “Descrição de Tipos”

Criando uma tabela copiando

Se você tiver em mãos uma referência com estrutura e/ou composição adequada, poderá copiar ou baixar a tabela de valores de referência. Se a tabela de referência for outra tabela, você precisará usar o método “Copiar tabelas de referência”. Se você estiver lidando com uma parte tabular ou um conjunto de registros de registros, deverá utilizar o método “Descarregar tabela de valores”. Se você precisar apenas da estrutura, poderá usar o método “Copiar Colunas”.

// Opção de copiar todas as linhas da norma de especificação técnica, mas preservando apenas as duas colunas especificadas Colunas da Norma = "Nomenclatura, Quantidade"; DemoTable = TableEtalon.Copy(, ColumnsEtalon); // Opção de copiar linhas pré-selecionadas do padrão de especificação técnica, preservando as duas colunas especificadas Linhas do Padrão = SelectIntoArrayAs linhas que precisamos da tabela do padrão(); ColumnsStandard = "Nomenclatura, Quantidade"; DemoTable = TableEtalon.Copy(RowsEtalon, ColumnsEtalon); // Opção de copiar linhas da norma de especificação técnica utilizando o filtro especificado, preservando uma coluna “Nomenclatura” // Serão selecionadas todas as linhas onde o valor da coluna Quantidade for 0, apenas a coluna Nomenclatura Row Selection = New Structure(" Quantidade" aparecerá na tabela resultante , 0); ColunasStandard = "Nomenclatura"; DemoTable = TableEtalon.Copy(RowsEtalon, ColumnsEtalon); // Opção com cópia completa da tabela e posterior exclusão de uma linha com valor do campo quantidade igual a zero e exclusão de toda a coluna “Quantidade” Row Selection = New Structure("Quantity", 0); ColunasStandard = "Nomenclatura"; DemoTable = TableEtalon.Copy(RowsEtalon, ColumnsEtalon); TableRow = DemoTable.Find(0, "Quantidade"); DemoTable.Delete(TableRow); DemoTable.Columns.Delete("Quantidade"); // Opções semelhantes e suas modificações podem ser aplicadas a partes tabulares e conjuntos de registros de registro

Criando uma tabela com uma consulta

Se um modelo da tabela necessária existir no banco de dados, você poderá usar uma consulta para criar rapidamente uma tabela com a estrutura desejada.

// Um ​​exemplo de criação de uma tabela vazia com base na estrutura do registro de acumulação // É fácil adivinhar que desta forma você também pode obter uma tabela preenchida Query = New Query("SELECT FIRST 0 * From Accumulation Register. Produtos No Armazém"); RequestResult = Request.Execute(); DemoTable = Consulta Result.Unload(); // Um ​​exemplo de criação de uma tabela vazia usando tipos e nomes de campos especificados explicitamente Query = New Query; Query.Text = "SELECIONE TOP 0 | Valor(Diretório.Nomenclatura.EmptyLink) AS Nomenclatura, | EXPRESS(0 AS NUMBER(15, 3)) AS Quantidade"; RequestResult = Request.Execute(); DemoTable = Consulta Result.Unload(); // IMPORTANTE! Não se esqueça que os tipos de valores de coluna obtidos de uma solicitação sempre contêm o tipo Null // Assim, o TK criado pela solicitação sempre possui tipos de colunas compostas

Conclusão

Neste breve artigo, examinamos as propriedades básicas e técnicas práticas para criar uma tabela de valores, suficientes para compreensão e início de uso. O próprio objeto da tabela de valores é tão multifacetado que uma descrição detalhada de suas capacidades requer a escrita de um artigo separado sobre técnicas e métodos de trabalho.

Aqui está um pequeno fato para começar - exemplos simples de como trabalhar com uma tabela de valores:

1. Crie uma tabela de valores

TabelaValor = Nova TabelaValor;


2. Crie colunas para a tabela de valores:

ValueTable.Columns.Add("Nome");
Valor Table.Columns.Add("Sobrenome");


3. Adicione novas linhas usando nomes de colunas:


NewLine.Name = "Vasily";
NewLine.LastName = "Pupkin";


4. Como procurar um valor na tabela de valores:
É necessário encontrar uma linha da tabela contendo o valor desejado.

FoundRow = ValueTable.Find(SearchValue);


5. Encontre a primeira ocorrência em determinadas colunas da tabela de valores

FoundRow = ValueTable.Find(SearchValue, "Fornecedor, Comprador");


6. Se precisar encontrar todas as ocorrências na tabela de valores:
Usamos a estrutura de pesquisa.

SearchStructure = Structure("Funcionário", SearchValue);
Matriz de FoundRows = ValueTable.FindRows(SearchStructure);


Vamos criar uma estrutura de pesquisa, cada elemento conterá o nome da coluna como chave e o valor desejado nesta coluna como valor. Passamos a Estrutura de Pesquisa como parâmetro para o método FindLines(). Como resultado, obtemos linhas da tabela.
Se você adicionar uma busca pelo valor desejado à estrutura de busca, por exemplo, também na coluna Responsável, então como resultado da aplicação do método FindLines() obteremos todas as linhas onde tanto o Funcionário quanto o Responsável são iguais ao valor pesquisado.

7. Como percorrer uma tabela de valores em ordem aleatória

Para cada linha atual do loop da tabela de valores
Relatório(CurrentRow.Nome);
Fim do Ciclo;

A mesma coisa usando índices:

SeniorIndex = ValueTable.Quantity() - 1;
Para conta = 0 para ciclo SeniorIndex
Relatório(TabelaValores[Conta].Nome);
Fim do Ciclo;


8. Excluindo uma linha existente da tabela de valores

ValueTable.Delete(Linha a ser excluída);

por índice

TabelaValor.Delete(0);


9. Excluindo uma coluna existente da tabela de valores

ValueTable.Columns.Delete(ColunaDeletada);


por índice

ValueTable.Columns.Delete(0);

É necessário levar em consideração que excluir uma linha (ou coluna) “do meio” da tabela de valores levará a uma diminuição de um índice das linhas localizadas “após” a excluída

10. Como preencher uma tabela de valores se os nomes das colunas estão contidos em variáveis?

NovaRow = ValueTable.Add();
NovaLinha[NomeColuna] = Valor;


11. Como preencher toda a coluna da tabela de valores com o valor desejado?
A coluna Sinalizador de Contabilidade Fiscal na tabela de valores da Tabela de Valores deve ser preenchida com o valor Falso

Tabela de Valores Preencher Valores (Falso, “Bandeira Contábil Fiscal”);


Usamos o método FillValues() para a tabela de valores. O primeiro parâmetro é o valor a ser preenchido. O segundo parâmetro é o nome da coluna a ser preenchida.

12. Como posso preencher a tabela de valores “Receiver Table” com dados da tabela de valores “SourceTable”?

Caso a Tabela de Destinatários ainda não exista no momento da operação ou suas colunas anteriores não precisem ser salvas, você pode criá-la como uma cópia completa do original

Tabela de destinatários = Tabela de origem.Copy();


Opção dois: a tabela ReceiverTable existe e seria uma pena perder suas colunas e restrições nos tipos de dados das colunas. Mas você precisa preencher os dados das colunas cujos nomes correspondem aos nomes da tabela de origem.

Transferência parcial de dados para colunas com nomes correspondentes:

Para cada linha do SourceTable do ciclo SourceTable
FillPropertyValues(NewRow, SourceTableRow);
Fim do Ciclo


Para cada linha da tabela de origem, uma nova linha é adicionada à tabela receptora e os valores são preenchidos nas colunas da nova tabela cujos nomes correspondem aos nomes das colunas na tabela de origem

Se as tabelas não possuírem colunas com os mesmos nomes, a tabela de destino acabará contendo tantas linhas com valores nulos quantas linhas havia na tabela de origem.
Se para algumas colunas com o mesmo nome o tipo de valor de dados da tabela de origem não se enquadrar na matriz de tipos de colunas permitidos da tabela de destino, obteremos valores vazios nesses campos.
Vamos considerar o terceiro caso. No caso de colunas com o mesmo nome, a coluna da tabela de destino deve estar em total conformidade com a coluna da tabela de origem.

Cópia completa de dados para colunas com nomes correspondentes

Mesmas Colunas = Nova Matriz();

Para cada coluna do ciclo SourceTable.Columns
MatchingColumn = TableReceiver.Columns.Find(Coluna.Nome);

Se CorresponderColuna<>Indefinido então

// Obtém as propriedades da coluna.
Nome = Coluna.Nome;
ValueType = Coluna.ValueType;
Cabeçalho = Coluna.Header;
Largura = Coluna.Largura;

//Substitui colunas na tabela de destino.
Índice = TableReceiver.Columns.Index(MatchingColumn);

TableReceiver.Columns.Delete(Índice);
ReceiverTable.Columns.Insert(Índice, Nome, ValueType, Cabeçalho, Largura);

// Adicione o próximo nome das colunas correspondentes ao array.
Mesmas Colunas.Add(Column.Name);

fim se;

Fim do Ciclo;

// Percorre as linhas da tabela de origem.
Para cada linha do SourceTable do ciclo SourceTable

//Adiciona uma nova linha à tabela de destino.
NovaLinha = TableReceiver.Add();

// Preencha os valores nas células correspondentes.
Para cada coluna de nome de colunas com o mesmo nome Ciclo
NovaRow[NomeColuna] = SourceTableRow[NomeColuna];

Fim do Ciclo;

Fim do Ciclo;


Teremos que substituir a coluna da tabela de destino por uma nova, cujas propriedades corresponderão totalmente à coluna da tabela de origem.
Portanto, se uma coluna com o mesmo nome for encontrada na tabela receptora, coletamos todas as propriedades da nova coluna em variáveis. Em seguida, exclua a antiga e crie uma nova coluna. Em seguida, percorremos as linhas da tabela de origem.
No loop, adicionamos uma nova linha à tabela receptora e abrimos um loop sobre os nomes das colunas na matriz de colunas correspondentes.
Dentro deste loop aninhado, preenchemos as células da tabela de destino com os dados da célula da tabela de origem.

13. Como adicionar colunas à tabela de valores “ValueTable” com restrições de tipo?

Ao adicionar uma coluna, você pode simplesmente especificar seu nome e deixar o segundo parâmetro do método Add() intacto. Neste caso, o tipo de dados da coluna é arbitrário.

Adicionando uma coluna sem especificar um tipo de dados

// Adiciona uma coluna sem restrições de tipo.
ValueTable.Columns.Add("Objeto");


Você pode preencher o valor do segundo parâmetro. Lá você precisa passar uma descrição do tipo permitido para a coluna. A descrição em si pode ser obtida usando o construtor, passando para ele como parâmetro o nome da string do tipo (se houver muitos tipos, separados por vírgulas) ou um array de tipos válidos.

Adicionando uma coluna indicando o tipo de dados

// Restrições nos tipos de dados da coluna:
// Somente elementos do diretório "Contrapartes".
Tabela de Valores.Columns.Add("Conta", Nova Descrição de Tipos("DirectoryLink.Accounts"));


Se entre os tipos permitidos para preencher os dados da coluna estiver uma string, você pode limitar sua profundidade de bits (comprimento), especificar o uso de um comprimento variável ou fixo. Tudo isso é conseguido criando um objeto usando o construtor String Qualifiers. A seguir, este objeto será utilizado como um dos parâmetros do construtor TypeDescription.

Usando qualificadores para especificar o tipo de dados de uma coluna da tabela de valores

// Prepara e define restrições para dados do tipo String.
Qualificadores de String = Novos Qualificadores de String(20, AllowedLength.Variable);
ValidTypes = NewTypeDescription("String", StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Ações semelhantes podem ser executadas com relação aos qualificadores de número e data.
Observação: as descrições de tipo podem ser construídas pelo construtor “do zero” ou uma descrição de tipo existente pode ser usada como base.

Usando declarações de tipo existentes para especificar o tipo de dados de uma coluna da tabela de valores

// Extensão da descrição do tipo usado anteriormente.
QualifiersNumbers = Novos QualifiersNumbers(10, 2, ValidSign.Non-negative);
DateQualifiers = Novo DateQualifiers(DateParts.Date);
ValidTypes estendidos = Novo TypeDescription(ValidTypes, "Número, Data", Qualificadores de Número, Qualificadores de Data);

ValueTable.Columns.Add("Nota", ExtendedAcceptableTypes);

A tabela de valores na plataforma 1C 8.3 (8.2) é uma coleção universal de valores que um desenvolvedor pode usar durante o desenvolvimento de software para implementar seus algoritmos. Essencialmente, uma tabela de valores 1C é um conjunto dinâmico de valores que possui colunas e colunas.

Artigos sobre outras coleções universais de valores em 1C

Aprenda a programar em 1C no meu livro “Programação em 1C em 11 etapas”

  1. O livro foi escrito em linguagem clara e simples - para iniciantes.
  2. Aprenda a entender a arquitetura 1C;
  3. Você começará a escrever código na linguagem 1C;
  4. Dominar técnicas básicas de programação;
  5. Consolide os seus conhecimentos com a ajuda de um livro de problemas;

Um excelente guia para desenvolver um aplicativo 1C gerenciado, tanto para desenvolvedores novatos quanto para programadores experientes.

  1. Linguagem de apresentação muito acessível e compreensível
  2. O livro é enviado por e-mail em formato PDF. Pode ser aberto em qualquer dispositivo!
  3. Entenda a ideologia de um aplicativo 1C gerenciado
  4. Aprenda como desenvolver um aplicativo gerenciado;
  5. Aprenda a desenvolver formulários 1C gerenciados;
  6. Você poderá trabalhar com os elementos básicos e necessários dos formulários gerenciados
  7. A programação em um aplicativo gerenciado ficará clara

Código promocional com desconto de 15% - 48PVXHeYu


Se esta lição te ajudou a resolver algum problema, você gostou ou achou útil, então você pode apoiar meu projeto doando qualquer quantia:

Você pode pagar manualmente:

Yandex.Money - 410012882996301
Dinheiro da Web - R955262494655

Participe dos meus grupos.