1c como adicionar uma coluna a uma tabela de valores. É importante nunca confundir uma propriedade de objeto e um método de objeto

Lar / Não liga

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. Encontre Strings


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”

Publicado em 21 de setembro de 2011

Tabela de valores 1C – parte 3. Metadados. Loop pelas colunas da tabela de valores

Neste artigo vou lhe dizer como trabalhar com uma tabela de valores de uma estrutura “desconhecida”, como iterar pelas colunas de uma tabela de valores, como extrair dados de colunas e linhas sem usar nomes de colunas. (Este artigo pertence à série de artigos 1C do zero; programação 1C do zero; tabela de valores 1C)

Para explicar o material e poder executar nossos exemplos de código “ao vivo”, precisamos de alguns tabela de teste de valores 1C. Alguns de nossos exemplos extrairão dados de uma tabela de valores, então faremos uma tabela com três colunas “Sobrenome”, “Nome”, “Nome do meio” e inseriremos uma pequena quantidade de dados nela - até 3 linhas :)

Então, vamos criar uma tabela de teste de valores 1C e preenchê-la:

MyTZ = Nova Tabela de Valores; // cria uma nova tabela de valores armazenados na variável "MyTZ" MyTZ.Columns.Add("Last Name"); // cria a coluna "Sobrenome" MyTZ.Columns.Add("Nome"); // cria a coluna "Nome" MyTZ.Columns.Add("Patronymic"); // criamos a coluna "Nome do meio" // adicionamos a primeira linha à nossa tabela de valores NewLine = MyTZ.Add();

NewString.LastName = "Chapaev";

NewLine.Name = "Vasily";

NewString.Middle nome = "Ivanovich";

// adiciona a segunda linha NewLine = MyTZ.Add();

NewString.LastName = "Dzerzhinsky";

NewRow.Name = "Félix"; NewString.Middle nome = "Edmundovich";// adiciona a terceira linha NewLine = MyTZ.Add(); NewString.LastName = "Kotovsky"; NewLine.Name = "Gregório"; NewString.Middle nome = "Ivanovich"; Nossa tabela de teste consiste em três colunas: Nome, Sobrenome, Patronímico; e tem três linhas preenchidas com nomes de heróis da Guerra Civil.

O primeiro exemplo de código enumera as colunas de uma tabela de valores 1C como uma coleção. // exibe os nomes de todas as colunas do TK For Each Column From MyTZ.Columns Cycle Report("Nome da coluna: " + Column.Name); (Fim do Ciclo; Nosso ciclo exibirá todos os nomes das colunas na janela de mensagem 1C:

Nome da coluna: Sobrenome Nome da coluna: Nome Nome da coluna: Nome do meio Vemos que para iterar através de colunas, é usado um ciclo especial de iteração de coleção, semelhante ao ciclo de iteração de linha (no artigo anterior). MyTK.Colunas - esta é uma coleção de colunas da tabela de valores 1C"MyTZ" . A coleção contém objetos do tipo"Coluna da tabela de valores"

// exibe os nomes de todas as colunas do TK For Each MyCurrentColumn From MyTK.Columns Cycle Report("Nome da coluna: " + MyCurrentColumn.Name);

Fim do Ciclo; Quando o subsistema de execução 1C encontra um ciclo deste tipo, a cada passagem do ciclo ele atribui a uma variável com o nome especificado um elemento de nossa coleção, neste caso - um elemento de coleção NewString.Middle nome = "Edmundovich"; colunas da tabela de valores // exibe os nomes de todas as colunas do TK For Each Column From MyTZ.Columns Cycle Report("Nome da coluna: " + Column.Name);.

E então acessamos a variável que contém a coluna atual e usamos a propriedade

Proponho exibir ao lado do nome da coluna o número de cada coluna da coleção de colunas:

// exibe o número e os nomes de todas as colunas da tabela de valores For Each Column From MyTZ.Columns Cycle ColumnNumber = MyTZ.Columns.Index(Column); // obtém o número da coluna ColumnName = Column.Name; // obtém o nome da coluna Report("Número da coluna:" + Número da coluna + " Nome da coluna: " + Nome da coluna);

Fim do Ciclo;

O seguinte texto será exibido na janela de mensagem 1C:

Número da coluna:0 Nome da coluna: Sobrenome Número da coluna:1 Nome da coluna: Nome Número da coluna:2 Nome da coluna: Nome do meio

Observe que as colunas da tabela de valores 1C são numeradas a partir de zero, assim como as linhas da tabela de valores.

Número de colunas na tabela de valores 1C

Para descobrir o número de colunas na tabela de valores, usamos o método "Count()" na coleção de colunas.

Número de Colunas = MyTZ.Columns.Quantity();

Relatório(Número de Colunas);

O número "3" será exibido na tela. Na verdade, nossa tabela possui três colunas: “Sobrenome”, “Nome”, “Patronímico”

Obtendo um objeto de coluna por seu número (índice) e enumerando colunas usando o índice de coluna

Vamos fazer um ciclo de pesquisa em todas as colunas da tabela de valores usando índices de colunas (números). Lembre-se de que a numeração das colunas começa do zero. Portanto, devemos aumentar o contador de ciclos “Sch” de zero para um número igual ao número de colunas menos um.

Para conta = 0 Por MyTZ.Columns.Quantity() - 1 Ciclo CurrentColumn = MyTZ.Columns[Act]; Relatório(CurrentColumn.Nome); Fim do Ciclo; Na tela teremos o seguinte Sobrenome Nome Patronímico Acho que esse exemplo foi claro. Nós nos voltamos para o método Quantidade() coleções de colunas" MyTZ.Columns.Quantity() ", obteve o número de colunas e iniciou um loop com um contador de zero ", obteve o número de colunas e iniciou um loop com um contador de para número de colunas menos um. Dentro do loop, obtemos cada coluna da coleção de colunas e atribuímos o objeto da coluna atual a uma variável Coluna Atual

É importante nunca confundir a propriedade de um objeto com o método de um objeto.

Uma propriedade é um determinado valor estático e o acesso a ele é escrito sem parênteses, por exemplo Coluna Atual.Nome. Um método é essencialmente um procedimento ou função de um objeto, e chamadas para procedimentos e funções são sempre escritas entre parênteses (mesmo se não houver parâmetros de entrada). Por exemplo: Na tela teremos o seguinte

Se chamarmos um método e esquecermos de escrever os parênteses, o interpretador 1C nos dará uma mensagem de erro e não executará o código. Já que o intérprete irá considerar que estamos acessando uma propriedade e não um método - pois não há parênteses. Mas não será possível encontrar propriedades com esse nome (porque só existe um método com esse nome) - o que será informado na mensagem de erro.

Isto é o que o intérprete escreverá se eu esquecer de colocar parênteses em uma chamada de método de forma tão incorreta MyTZ.Colunas.Quantidade(sem parênteses depois de "Quantidade()"):

Campo do objeto não encontrado (Quantidade)

Neste caso, “campo” e “propriedade” devem ser entendidos como sinônimos, ou como uma imprecisão na terminologia dos desenvolvedores 1C. Eles usam essas duas palavras para se referir ao mesmo conceito. Embora em outras linguagens de programação esses termos possam significar coisas diferentes.

Obtenção de dados de uma tabela de valores 1C usando números de colunas

Para começar, ofereço um exemplo simples de obtenção de dados da primeira linha de nossa tabela. Observe que estamos usando a tabela pré-preenchida desde o início do artigo. Sabemos com certeza que a tabela possui uma primeira linha e pelo menos uma coluna. Se aplicarmos este exemplo a uma tabela vazia, ocorrerá um erro. Então:

PrimeiraLinha = MyTK; // obtém a primeira linha (numerada a partir de zero) FirstColumnValue = FirstRow; // obtém o valor da primeira coluna (a numeração das colunas também é do zero) Report(Value of the FirstColumn); //mostra o valor da primeira coluna da primeira linha da tabela

A tela exibirá:

Chapaev

Primeiro obtivemos um objeto de linha da tabela de valores acessando a tabela de valores usando o operador [...]. (se você esqueceu como fazer isso, pode dar uma olhada nos artigos anteriores) Passamos o argumento “0” dentro do operador. Este é o índice da primeira linha da tabela de valores. PrimeiraLinha = MyTK;

Além disso, também temos o direito de acessar um objeto string usando o operador [...]. Dentro deste operador passamos o número da coluna da tabela de valores, neste caso também “0”. E assim, recebemos o valor da coluna numerada “0” para a linha atual da tabela numerada “0”. Exibimos esse valor na tela e ele representa a string “Chapaev”.

Vamos complicar um pouco nosso exemplo:

PrimeiraLinha = MyTK; // obtém a primeira linha (numerada a partir de zero) Report(FirstLine); // exibe o valor da primeira coluna na primeira linha da tabela Report(FirstRow); // exibe o valor da segunda coluna na primeira linha da tabela Report(FirstRow); // exibe o valor da terceira coluna na primeira linha da tabela

Agora exibimos os valores de todas as três colunas da primeira linha da nossa tabela de valores:

Chapaev Vasily Ivanovich

Agora também modificarei este exemplo para que possamos dispensar a variável "Primeira Linha"

Relatório(MyTZ); // exibe o valor da primeira coluna na primeira linha da tabela Report(MyTZ); // exibe o valor da segunda coluna na primeira linha da tabela Report(MyTZ); // exibe o valor da terceira coluna na primeira linha da tabela

Será o mesmo na tela

Chapaev Vasily Ivanovich

Vimos no exemplo acima que para acessar um valor localizado em uma determinada linha e em uma determinada coluna de uma tabela de valores, podemos utilizar uma chamada sequencial de dois operadores [...] desta forma: Tabela de valores[Índice de linhas][Índice de colunas]

Portanto, estamos prontos para criar um loop e obter os dados de todas as linhas e colunas usando índices de linhas e colunas:

For RowCounter = 0 By MyTZ.Quantity() - 1 Loop // percorrer as linhas For ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 Loop // loop aninhado pelas colunas // obter o valor da célula (da linha atual e as colunas atuais) CellValue = MyTK[RowCounter][ColumnCounter];

// exibe o número da linha, o número da coluna e o valor da célula Report("Row No" + Row Count + "column No" + Column Count + " = " + CellValue);

Fim do Ciclo;

Usando dois ciclos, um dos quais está aninhado no outro, exibimos os valores de todas as colunas de todas as linhas da tabela de valores 1C. Nesse caso, não usamos nomes de colunas, mas acessamos colunas e linhas por seus índices. Para maior compreensão, preste atenção aos comentários dentro do exemplo.

Concluindo, proponho alterar um pouco nosso exemplo para que, em vez dos números das colunas, ele exiba seus nomes na tela. Além disso, farei um design mais apresentável para exibição de conteúdo na tela.

For LineCounter = 0 By MyTZ.Quantity() - 1 Loop // percorrer as linhas Report(" ======= Linha No. " + LineCounter + " =======");

Relatório(" "); // feed de linha (inserindo uma linha vazia) For ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 Loop // loop aninhado pelas colunas // obtém o valor da célula (da linha atual e da coluna atual) CellValue = MyTZ [RowCounter][ColumnCounter];

// obtém o nome da coluna ColumnName = MyTZ.Columns[ColumnCounter].Name;

// exibe o nome da coluna e o valor da célula Report(ColumnName + ": " + CellValue); Fim do Ciclo;

Relatório(" "); // feed de linha (inserindo uma linha vazia) EndCycle;

Agora, em nossa tela as informações começaram a parecer mais representativas:

Linha nº 0 ======= Sobrenome: Chapaev Nome: Vasily Patronímico: Ivanovich ======= Linha nº 1 ======= Sobrenome: Dzerzhinsky Primeiro nome: Felix Patronímico: Edmundovich ===== == Linha nº 2 ======= Sobrenome: Kotovsky Nome: Grigory Patronímico: Ivanovich

Sim, quase esqueci. Ao usar dois operadores [...][...] seguidos, podemos passar o nome desta coluna em vez de um índice de coluna:

For Each CurrentLine From MyTZ Loop // percorre uma coleção de strings Report(" ======= Line No. " + MyTZ.Index(CurrentLine) + " =======");

Relatório(" "); For Each CurrentColumn From MyTZ.Columns Loop // loop aninhado iterando através de uma coleção de colunas ColumnName = CurrentColumn.Name; // obtém a coluna nameCellValue = CurrentRow[ColumnName]; // obtém o valor da célula POR coluna NAME Report(ColumnName + ": " + CellValue); // exibe o nome da coluna e o valor da célula End of Cycle;

Relatório(" "); Fim do Ciclo;

No exemplo, foram usados ​​dois loops. Um loop para percorrer uma coleção de colunas está aninhado dentro de um loop para percorrer linhas. Se você trabalhou nos exemplos acima e leu os artigos anteriores, não terá nenhuma dificuldade em entender como esse exemplo funciona.

Por fim, reduzirei ao máximo o número de linhas de código em nosso último exemplo, eliminando o uso de variáveis ​​intermediárias. Obteremos uma amostra de “código industrial” que é usado em problemas reais.

Isso só deve ser feito quando você tiver um bom entendimento do que está fazendo. Se o código for muito complexo, é aceitável deixar variáveis ​​intermediárias para facilitar a compreensão do seu próprio código posteriormente. Além disso, qualquer código deve ser comentado pelo menos minimamente, para que depois de algum tempo seja mais fácil entender os textos do programa.

For Each CurrentLine From MyTZ Cycle // iterar sobre as linhas Report(" ======= Line No. " + MyTZ.Index(CurrentLine) + " =======" + Symbols.PS);

For Each CurrentColumn From MyTZ.Columns Loop // iterar sobre as colunas Report(CurrentColumn.Name + ": " + CurrentRow[CurrentColumn.Name]);

Fim do Ciclo;

Relatório(" "); Fim do Ciclo;

A saída na tela não mudou, permanece a mesma do exemplo anterior:

Sp-force-hide ( display: none;).sp-form ( display: block; background: #eff2f4; preenchimento: 5px; largura: 270px; largura máxima: 100%; raio da borda: 0px; -moz-border -radius: 0px; -webkit-border-radius: 0px; font-family: "Helvetica Neue", sans-serif: no-repeat; background-size: auto;) .sp-form input ( display: inline-block; opacidade: 1; visibilidade: visível;).sp-form .sp-form-fields-wrapper (margem: 0 automático; largura: 260px;).sp-form .sp -form-control ( background: #ffffff; border- cor: #cccccc; estilo de borda: sólido; largura da borda: 1px; tamanho da fonte: 15px; preenchimento à esquerda: 8,75px; 4px; -webkit-border-radius: 4px; largura: 100%;).sp-form .sp-field label (cor: #444444; tamanho da fonte: 13px; estilo da fonte: normal; peso da fonte: negrito; ).sp-form .sp-button ( raio da borda: 4px; -moz-raio da borda: 4px; -webkit-raio da borda: 4px; cor de fundo: #f4394c; cor: #ffffff; largura: 100% ; estilo da fonte: normal; família de fontes: Arial, "Helvetica Neue", sem serifa; sombra da caixa: nenhuma; -moz-box-shadow: nenhum; -webkit-box-shadow: nenhum; plano de fundo: gradiente linear (para o topo, #e30d22, #f77380);).sp-form .sp-button-container (alinhamento de texto: centro; largura: automático;)

Saudações a todos os leitores do infostart. Este artigo será dedicado à questão da criação de uma tabela arbitrária de valores no formulário de um aplicativo gerenciado programaticamente.

Características da tarefa.

Qualquer pessoa que tenha programado em um aplicativo regular muitas vezes se deparou com a tarefa de obter uma tabela arbitrária de valores em um formulário. Uma tabela arbitrária de valores é uma tabela cujo número e tipo de colunas não são conhecidos antecipadamente. Ou seja, pode haver 3 colunas, ou talvez 6, ou talvez 8. Em uma aplicação normal, tudo é simples: você pode colocar o elemento “Tabela de Valores” no formulário de processamento e depois transferir a tabela de valores criada ​​a este elemento programaticamente. Então com um comando simples:

Elementos do formulário.TableField.CreateColumns();

obtenha uma tabela de valores pronta no formulário. Parece que poderia ser mais simples.

Tudo isso estava no aplicativo normal. Numa aplicação gerenciada, tudo mudou. Não é tão fácil criar uma tabela arbitrária. Agora você precisa parametrizar rigidamente a tabela de valores no formulário ou criá-la programaticamente (descrever, bem, esta é, de fato, a essência do próprio aplicativo gerenciado). Isto é o que tentaremos fazer: criar programaticamente uma tabela arbitrária de valores em um formulário controlado.

Resolvendo o problema.

A primeira coisa que precisamos fazer é determinar como a tabela aparecerá no formulário. O principal é que você não precisa criar nenhum elemento de formulário no processamento. Iremos criá-lo programaticamente, como toda a tabela. Ou seja, a tabela será descrita e criada no momento da abertura do formulário ou através de um botão – dependendo de quem necessita.

A criação de uma tabela no formulário ocorre através da descrição da tabela de valores como um atributo:
SelectionTypeArray = Nova Matriz;
Matriz de SelectionType.Add(Type("Tabela de Valores"));
ChoiceTypeDescription = Novo TypeDescription(ChoiceTypeArray);
Matriz de Detalhes = Nova Matriz;
Array of Attributes.Add(New Form Attributes("Tabela de Agendamento", Descrição do SelectionType, "", "TZN"));
Agora temos que criar uma tabela de valores do programa que contenha os dados. Se a tabela de valores for obtida a partir de uma consulta, então está tudo mais ou menos em ordem. Se a tabela for criada manualmente, então o significado das colunas que conterão números ou datas poderá ser criado através da “Descrição dos Tipos”. A questão é que as colunas da tabela de valores devem ter algum tipo. Se, por exemplo, se espera que o usuário preencha os dados dessas colunas de forma interativa, então não é possível adicionar uma coluna da tabela de valores simplesmente com um nome, ela deve ter um tipo; Lembre-se: isso é muito importante porque... Transferiremos esses tipos para a tabela do formulário.
Criamos uma tabela que contém várias colunas:

CD = NewDateQualifiers(DateParts.Time);
MatrizKD = Nova Matriz;
ArrayCD.Add(Type("Data"));
DescriptionTypesTime = Novo DescriptionTypes(ArrayCD,CD);
TZ = Nova Tabela de Valores;
TK.Columns.Add("Com", DescriptionTypesTime);

TK.Columns.Add("Antes", DescriptionTypesTime);

TK.Columns.Add("Nome");

TK.Columns.Add("Note"); // Nome completo e Nota - linhas A seguir, preencheremos nossa tabela do programa TK com os dados necessários. Recebemos uma tabela TK que contém os valores necessários e está pronta para ser transferida para o atributo do formulário criado.
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "ScheduleTable." + Coluna.Nome;
NovoElement.Largura = 10;
Fim do Ciclo;

Design condicional, se precisarmos, também escrevemos manualmente, o menu de comando - manualmente. Os manipuladores de tabela também são escritos à mão. Por exemplo, para adicionar um manipulador de eventos para a tabela “Seleção”:

Tabela de SelectionFields.SetAction("Seleção","TZNSelection");

Para processar este evento, um procedimento separado é prescrito na forma de um procedimento:

&NoCliente
Procedimento TKNSelection(TK, SelectedRow, Field, StandardProcessing)
//manipulador de comandos EndProcedure

Observe que os manipuladores de tabela são acionados no cliente e, portanto, devem ter um comando de ponteiro do compilador

&NoCliente

Bem, a última coisa que gostaria de acrescentar é que depois de todas essas etapas, lembre-se de passar a tabela finalizada para o atributo form:

ValueFormAttributes(ToR, "ScheduleTable");

Isto é o que temos como resultado:


E aqui está o tratamento do evento "Seleção":



Posfácio.

Espero que o artigo ajude os programadores 1C que estão começando a criar tabelas em um formulário programaticamente.

Você pode baixar um processamento que cria programaticamente uma tabela de valores e a exibe em um formulário gerenciável com comentários que o ajudarão a criar suas próprias tabelas.

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 um lugar de destaque.

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

A consulta, como resultado de sua execução, retorna uma tabela que pode ser acessada de duas maneiras diferentes.

A primeira seleção é mais rápida, a obtenção de linhas 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 Nomenclatura, 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 Data 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.

© 2024 ermake.ru - Sobre reparo de PC - Portal de informações