1c encontre o valor na matriz. Como criar um array fixo

Lar / Sistemas operacionais

Uma matriz 1C é um conjunto simples de valores. Você pode adicionar valores de diferentes tipos a um array 1C. Após a adição, a presença de valores no array 1C pode ser verificada usando a pesquisa integrada.

A matriz 1C é frequentemente usada:
A) Para seleções
B) Para salvar uma lista de valores para utilizá-la posteriormente, por exemplo, passá-la como parâmetro para uma função/procedimento.

Trabalhando com matrizes 1C

Vamos criar um array 1C de 2 valores:
Matriz = Nova Matriz(); //array sem um número fixo de valores

Array.Add(RNG.RandomNumber(0, 1000));
Array.Add(RNG.RandomNumber(0, 1000));

//percorre cada valor do array 1C, não importa quantos existam

Relatório(Valor);
Fim do Ciclo;

Vamos criar um array 1C de 10 valores:
Matriz = Nova Matriz(10); //array com um número fixo de valores
RNG = NovoGerador de NúmeroRandom(); //vamos preencher com números aleatórios

//índice do array começa em zero e não em um
//10 peças são de 0 a 9
Para Sch = Ciclo 0 a 9
//acesso ao arrayArrayName[Index]
Matriz[RNG] = RNG.RandomNumber(0, 1000); //número aleatório de 0 a 1000
Fim do Ciclo;

//percorre cada valor do array, não importa quantos existam
Para cada valor do ciclo de array
Relatório(Valor);
Fim do Ciclo;

//nota - existem 10 valores de array, isso significa que existem 10 deles por padrão e cada valor é INDEFINIDO até definirmos outro
//isso não significa que não possamos adicionar outro valor, 11e, usando ArrayName.Add();

Matriz multidimensional

Vamos criar um array multidimensional 1C 2x2. Uma matriz 1C multidimensional, o que significa que cada célula da matriz 1C contém não um valor, mas também uma matriz 1C.

Uma matriz multidimensional 1C não precisa ser corrigida. Vamos fazer um array multidimensional 1C 2x2 sem especificar um número fixo de valores:

Criando um array 1C do zero

A obtenção de dados é um procedimento que consome tempo e recursos. Portanto, se você precisar trabalhar com os dados recebidos mais de uma vez, faz sentido recebê-los uma vez e salvá-los em um array 1C para continuar trabalhando com os dados já recebidos e salvos.

Por exemplo, a linha da versão do programa se parece com isto: “11.0.9.5” - quatro números separados por pontos. Podemos traduzir a versão para um formato de “computador” - uma matriz de quatro valores numéricos. Então podemos comparar ainda mais as versões entre si:

Obtenção de um array 1C pronto com dados

Um array 1C pode ser obtido de uma lista de valores usando o método spList.UnloadValues() e de uma tabela de valores usando o método tableTable.UnloadColumn().

No exemplo abaixo, fazemos uma consulta - selecionamos todos os links de documentos do banco de dados.

  • RequestResult = Request.Execute() //executa a solicitação
  • tzResult = Query Upload() //carrega o resultado na tabela de valores
  • mArray of Links = tzResult.UnloadColumn("ColumnName") //descarrega uma coluna da tabela em um array

Obtendo um array 1C de outros objetos e usando-o como uma seleção em uma solicitação

Quando uma lista de documentos (ou uma tabela de valores) está localizada no formulário, o usuário pode selecionar uma linha com o cursor. Você também pode permitir que várias linhas sejam selecionadas ao mesmo tempo. Para selecionar várias linhas (se o formulário não permitir), você precisa manter pressionada a tecla CTRL ou SHIFT.

Adicione uma tabela de valores ao formulário do cliente espesso e selecione DocumentList.DocumentName como seu tipo. Em suas propriedades, selecione o modo de seleção – múltiplo.

Podemos obter programaticamente a lista de strings selecionadas:

Se você estiver usando um formulário gerenciado, primeiro você deve adicionar um atributo de formulário com o tipo DynamicList e selecionar a tabela principal em suas propriedades - documento necessário. Arraste os adereços para o formulário. Nas propriedades do elemento do formulário (!), selecione também – modo de seleção – múltiplo (definido desta forma por padrão).

O acesso ao array 1C de strings selecionadas será semelhante a:
Elementos.FormAttributeName. Linhas selecionadas

Sobre o que é este artigo?

Este artigo continua a série de artigos “Primeiros passos no desenvolvimento 1C”. Abrange princípios de trabalho com coleções universais. Depois de ler o artigo, você aprenderá:

  • O que são coleções universais e quando e em que casos devem ser utilizadas?
  • O que todas as coleções universais têm em comum? Que técnicas você pode usar para trabalhar com todos eles?
  • O que é um array, como e quando usá-lo? Que métodos ele tem?
  • Por que usar uma estrutura? Como é diferente de um array?
  • Quando você deve usar uma lista de valores? Como exibi-lo no formulário?
  • Compliance – o que é e quando usar? Quais são as vantagens em relação à estrutura?
  • Para que é usada a tabela de valores? Como descrever sua estrutura? Como adicionar/remover linhas? Como exibi-lo no formulário?
  • Árvore de valores – para que serve? Como preencher e exibir o formulário? Como trabalhar com isso?

Aplicabilidade

O artigo discute a plataforma 1C:Enterprise 8.3 da edição atual.

Como trabalhar com coleções universais em 1C

Uma coleção de valores é um contêiner que geralmente pode conter qualquer número de elementos. No entanto, muitas vezes não há restrições estritas quanto ao tipo de dados.

Você pode adicionar valores a uma coleção genérica. Todos os valores da coleção podem ser percorridos. Essas coleções são usadas principalmente para algum tipo de processamento em algoritmos. Aqueles. Estas são algumas estruturas dinâmicas que existem enquanto o algoritmo está em execução.

É importante entender que as coleções não são armazenadas em um banco de dados (não estamos falando do tipo de dados Value Store, que pode armazenar quase qualquer tipo de dados).

Existem diferentes tipos de coleções genéricas: Array, Structure, Match, Fixed Array, Value Table, Parte tabular etc. Mas todas as coleções têm comportamento semelhante.

Uma coleção pode ser criada como resultado da operação de uma função (a função retorna uma coleção universal como valor).

Pode ser obtido nova coleção manualmente acessando o construtor e criando uma instância da classe.

Por exemplo: OurArray = Nova Matriz;

Os construtores de muitas coleções genéricas são parametrizados.

Então, no construtor para Você pode especificar o número de membros nas dimensões correspondentes. Aqueles. você pode declarar imediatamente multidimensional .

A descrição correspondente do construtor está no assistente de sintaxe.

Assim, usando parâmetros do construtor, você pode definir imediatamente o comportamento desejado de um determinado objeto.

Mas os parâmetros são opcionais; o desenvolvedor não pode defini-los e definir ainda mais o comportamento do Array como achar melhor.

Quase qualquer coleção universal pode ser criada usando um construtor (a exceção são as partes da tabela, que atuam como objetos de configuração).

Para coleções universais, existem conceitos comuns como índice e número. Cada elemento da coleção possui um índice. Neste caso, o índice começa do zero.

Para acessar um elemento NossoArray, você pode usar o acesso ao índice; para isso, o índice é indicado entre colchetes.

Por exemplo, NossoArray. Observe que neste caso o sistema retorna o elemento Array com índice 3, e na ordem este é o quarto elemento do Array.

Para algumas coleções existe também o conceito de número de linha. O número da linha começa com um. Por exemplo, para a parte tabular existe uma propriedade como número da linha. É importante ter em mente que se conhecermos o número da linha e quisermos acessá-lo por índice, devemos usar um valor um a menos que o número da linha como índice.

O conceito de número de linha não existe em todas as coleções, mas principalmente naquelas que podem ser exibidas na interface do usuário.

Todas as coleções usam travessia de elementos de coleção. O bypass é possível de duas maneiras: ciclo para E ciclo Para cada um.

Para a maioria das coleções genéricas, os métodos aplicáveis ​​são Contar, Índice, Adicionar, Inserir, Excluir e Localizar.

Count é uma função que retorna o número de elementos em uma coleção. Pode ser usado antes de um ciclo Para, conforme mostrado na figura.

O método Index não existe para todas as coleções, mas apenas para aquelas cujos elementos podem ser referenciados. Um exemplo é Tabela de Valores.

Tabela de Valores– esta é uma coleção específica de linhas, as linhas podem conter diferentes colunas com tipos diferentes valores.

Cada linha representa uma entidade independente. Você pode obter um link para ele; através desta linha você pode acessar os valores das colunas nesta linha.

O método Index permite determinar qual índice corresponde a uma determinada linha (ou seja, a posição atual da linha na tabela). Os valores do índice começam em zero.

Quase qualquer coleção universal possui métodos para adicionar novos valores a uma determinada coleção. A figura mostra como preencher um Array com valores de 0 a 10 de duas maneiras.

Para adicionar um elemento ao Array podemos usar o método Adicionar, indique o valor a ser adicionado entre colchetes. Neste caso, o valor será adicionado ao final da lista, ou seja, A matriz aumentará constantemente devido à última posição.

Outro método que permite adicionar valores a uma coleção é o Inserir. É diferente do método Adicionar nisso você pode especificar onde inserir o elemento adicionado.

Sintaxe: Inserir (,)

O primeiro parâmetro especifica o índice no qual o novo valor será inserido. Aqueles. por exemplo, podemos especificar que cada valor deve ser inserido no início da lista (segundo método da figura acima).

Para remover elementos de uma coleção, use o método Excluir. O método Delete especifica por índice qual elemento iremos deletar.

Sintaxe: Excluir()
Exemplo de uso: OurArray.Delete(5);

Deve-se notar que para aquelas coleções onde strings representam uma entidade independente (por exemplo, para Tabelas de Valores), também podemos usar o método de obtenção do índice para posteriormente excluir esta linha.

Quase todas as coleções possuem um método para procurar um valor - Encontrar. O valor que queremos encontrar é passado para o método. Algumas coleções permitem definir algumas restrições.

Por exemplo, em Tabela de valores você pode especificar as linhas e colunas nas quais deseja pesquisar.

Se o valor for encontrado, este método retornará o índice ou a string especificada. Se o valor não for encontrado, um valor do tipo será retornado Indefinido. Em relação a um Array, retorna Índice ou valor Indefinido.

Exemplo de uso: NossaVariável = NossoArray.Find(8);

As coleções universais podem ser apagadas muito rapidamente, ou seja, remova absolutamente todos os elementos. Para isso é utilizado o método Claro(), que remove elementos do Array, linhas Tabelas de Valores ou dados de outras coleções.

Métodos adicionais para Array

Método BBordem() retorna o número de elementos menos um. Aqueles. se usarmos um loop Para, então, em vez do método Quantidade, podemos usar imediatamente o método Fronteira().

Em particular, a variável QuantidadeInArray poderia ser definida de forma diferente:

QuantidadeInArray = OurArray.InBorder();
Então, ao descrever o ciclo em si, não se deve subtrair desta variável.

O método Set permite atribuir um valor a um elemento Array por índice.

Sintaxe: Instalar(,)

Exemplo: NossoArray.Set(2,8);

Alternativa: NossoArray = 8;

Você pode usar o método para um Array Pegar, para ler um valor em um índice sem recorrer ao uso de colchetes.

Sintaxe: Pegar()

Exemplo: NossaVariável = NossoArray.Get(2);

Alternativa: NossaVariável = NossoArray;

Estrutura da coleção universal

Uma Estrutura, como um Array, pode ter um número ilimitado de elementos, mas o conteúdo do elemento difere do Array.

A estrutura é uma coleção, cada valor consiste em um par. O primeiro elemento do par é chamado Chave. O segundo elemento do par é Significado.

Chaveé um tipo de dados estritamente string que descreve um valor. Por exemplo, Para a chave“Código” pode corresponder ao valor 113; Para a chave“Nome” que significa “Vasya”. O valor em si não está sujeito a restrição de tipo de dados.

A estrutura é muito conveniente de usar se quisermos criar uma determinada lista de parâmetros. Se isso Estrutura chamado NossaEstrutura, então nos referiremos aos seus dois valores da seguinte forma: OurStructure.Code e OurStructure.Name.

Este tipo de acesso é muito mais conveniente do que se definissemos todos os parâmetros em um Array e os acessássemos por índice.

A estrutura torna o código do programa legível (compreensível). A estrutura é usada com bastante frequência, com muito mais frequência que o Array.

É usado para descrever certos parâmetros, dos quais geralmente existe um grande número em todos os algoritmos.

Além disso, a Estrutura é usada se o procedimento e a função contiverem um grande número de parâmetros passados.

Então é muito mais conveniente escrever todos os parâmetros na Estrutura e passá-los adiante. Aqueles. os parâmetros de procedimentos e funções são “empacotados”.

Separadamente, deve-se notar que, como Chave Absolutamente nenhuma linha pode aparecer na Estrutura. Certas restrições se aplicam.

Chave deve funcionar como um identificador. Isto significa que em Klyuche não deve haver espaços e não pode começar com um número.

Início aceitável Chave com uma letra ou sublinhado. Por isso, Chave deve satisfazer os requisitos para a criação de identificadores.

Observemos de que outra forma uma Estrutura difere de um Array. Existe um método na Estrutura Inserir, existem dois métodos para inserção no Array: Inserir(para uma determinada posição) e Adicionar(até o final da lista). Em um Array, todos os elementos estão ordenados.

A estrutura é uma espécie de conjunto desordenado. É por isso que existe apenas um método de inserção para uma Estrutura.

O valor não é inserido em uma posição específica, mas no conjunto especificado. Uma estrutura não pode ser acessada por índice, como outras coleções genéricas.

Os elementos da estrutura são acessados ​​apenas pelo nome da chave. No entanto, o loop For Each também funciona para a Estrutura, mas você não deve confiar na ordem dos elementos da Estrutura.

Uma estrutura é criada da mesma forma que outras coleções genéricas usando o construtor New, especificando o tipo de dados Estrutura.

Assim como um Array, o construtor de uma Estrutura pode ter parâmetros. Aqueles. é possível descrever o próprio conteúdo de uma Estrutura usando um construtor.

Ao contrário de um Array, onde você pode simplesmente especificar o número de elementos para todas as dimensões, em uma Estrutura você pode especificar o próprio conteúdo.

Por exemplo: OurStructure = Nova Estrutura (“Código, Nome”, 133, “Vasya”);

Separados por vírgulas, primeiro são listados os nomes das Chaves e, a seguir, na mesma sequência, os valores dos parâmetros.

Existe um método para adicionar um novo valor à Estrutura Inserir, que insere um novo par (chave e valor).

Por exemplo: OurStructure.Insert(“Membros da Família”,3);

A Estrutura é caracterizada por outro método usado com bastante frequência. Este é o método Propriedade.

Usando este método, você pode entender se existe um elemento nesta Estrutura cuja Chave tem tal ou tal nome.

Se tal elemento existir, o sistema retornará o valor True, em de outra forma- Mentira.

Por exemplo, a expressão OurStructure.Property (“Membros da Família”) será igual ao valor True. Este método é usado com bastante frequência na análise da Estrutura.

Como acontece com qualquer coleção universal, é possível acessar as propriedades de uma Estrutura por índice. Mas o índice da Estrutura é um valor de string.

Por exemplo: Relatório(NossaEstrutura[“Membros da Família”]);

Porém, não devemos esquecer que uma Estrutura é um conjunto não ordenado de objetos, por isso o acesso pelo índice 0, 1, 2 é inaceitável.

Coleção genérica Lista de valores

ListarValoresé uma lista linear de elementos de qualquer tipo de dados.

Cada elemento consiste em vários valores. Esquematicamente, uma lista de valores pode ser representada como uma lista com quatro colunas.

Primeira coluna - Marca. Possui um tipo de dados booleano e permite ao usuário marcar ou desmarcar caixas.

A outra coluna é uma imagem que pode de alguma forma representar visualmente este elemento, ou seja, combine esta string com uma imagem.

A terceira coluna é o próprio valor armazenado, ou seja, trata-se de qualquer tipo de dado e pode ser diferente em linhas diferentes.

A quarta coluna é a apresentação, ou seja, este é um tipo de descrição de string de um determinado valor. A visualização será exibida ao usuário quando ele visualizar este elemento. Neste caso, se a representação não for especificada, o sistema tentará obter representações para o elemento contido nesta posição.

ListarValores– este é o objeto com o qual o usuário pode trabalhar visualmente. Aqueles. ListarValores pode ser exibido no formulário.

O usuário pode realizar algumas ações com ele. Além disso, ListarValores pode ser inferido independentemente usando métodos, ou seja, mostrar na tela em algum ramo do algoritmo (com exceção do código do servidor) para que o usuário selecione alguma linha ou marque algumas caixas.

Nós vamos encontrar ListarValores no assistente sitax. Construtor ListarValores não parametrizado (você não pode definir nenhum valor padrão).

Existem métodos como:

  • Inserir(,) ;
  • Adicionar(,);
  • Quantidade();
  • Índice().

Existem também métodos especiais, por exemplo, DescarregarValores(). Isso cria um Array no qual a lista de valores é copiada. Por exemplo:

Matriz de Elementos = Lista de PriceTypes.OutloadValues();

Também existe um método inverso:
ListPriceTypes.LoadValues(ArrayItems);

Existem métodos de pesquisa:
FindByValue(); FindByIdentifier().

Existe um método de cópia:
ListCopy = PriceTypeList.Copy();
Este método destina-se a fazer algum tipo de modificação na cópia.

Existem métodos:
SortByValue();
SortByView().

Métodos SelecioneItem(,) E MarcarItens() chama uma caixa de diálogo modal que interrompe a execução do algoritmo até que o usuário feche a janela.

Para usar esses métodos nas propriedades de configuração Modo de usar a modalidade deve ser definido para Usar.

Código de exemplo chamado de um módulo de aplicativo gerenciado:

Exiba este código no modo de usuário (caixa de diálogo modal).

Abaixo ListarValores usado como tipo disponível dados para os detalhes do formulário. Criamos um novo atributo para o formulário de processamento e definimos seu tipo ListarValores e exibi-lo no formulário.

Criando uma nova equipe Inscreva-sePresentes, transfira-o para o formulário e defina um manipulador de ação para ele.

No modo de usuário, ao clicar no botão Preencher presentes no formulário de processamento, uma lista completa aparecerá.

Se desejar, a lista pode ser editada: alguns elementos podem ser adicionados, outros podem ser removidos.

Conformidade versátil de coleta

Esta coleção é muito parecida com Estrutura. Assim como a Estrutura, os Mapeamentos são conjuntos de valores que consistem em uma chave e no próprio valor.

A principal diferença é que qualquer tipo de dados pode ser especificado como chave, bem como como valor. Diante desta característica, é necessário acessar o valor da correspondência por índice; o valor da chave é indicado como valor do índice.

A chave pode ser um tipo de dados diferente de uma string. As propriedades e métodos de trabalho com Conformidade são quase os mesmos da Estrutura.

O Construtor de Conformidade, diferentemente da Estrutura, não contém a capacidade de especificar parâmetros.

Exemplo de uso:

A correspondência é conveniente para usar quando você precisa conectar duas estruturas quaisquer. Por exemplo, cada linha na seção tabular deve corresponder a uma linha da tabela de valores.
Neste caso, a linha da seção da tabela é usada como chave Match e o valor correspondente é indicado.

Ao inserir elementos em uma coleção Match além do método Inserir(,) Outra forma de inserir um valor é usar o operador de atribuição regular.

Por exemplo: OurMatch = NewMatch;
Correspondência = 999;

Aqueles. se um elemento não estiver presente na coleção, ele será adicionado usando o operador de atribuição e, se estiver presente, será atualizado.

Isso contrasta com a Estrutura.

Tabela de Valores da Coleção Universal

Tabela de Valoresé uma tabela com um número arbitrário de linhas e um número arbitrário de colunas. A interseção pode armazenar valores de qualquer tipo de dados. Se necessário, colunas podem ser digitadas, ou seja, você pode determinar em qual coluna qual tipo de dado está armazenado.

Você pode deixar as colunas sem tipo e, em seguida, valores de tipos diferentes podem ser armazenados em uma coluna em linhas diferentes.

Diferenças Tabelas de Valores de uma matriz bidimensional:

  • este é um objeto com o qual o usuário pode trabalhar (a tabela de valores pode ser exibida na tela, o usuário pode preenchê-la e os dados inseridos podem ser lidos);
  • construção de índices para busca rápida;
  • clonagem, preenchimento de uma coluna inteira com um determinado valor, descarregamento de todas as colunas em um array.

Tabela de Valores usado como uma espécie de buffer de armazenamento de informações. Tabela de Valoresé retornado e aceito como parâmetro por muitos métodos do sistema. É possível construir uma consulta na Tabela de Valores.

Então, Tabela de Valores consiste em um conjunto de linhas e um conjunto de colunas. Tanto as linhas quanto as colunas são coleções.

Aqueles. dentro da coleção Tabela de Valores existem mais duas coleções. Vamos recorrer ao assistente de sintaxe e encontrar Tabela de Valores.

Tipos de dados suportados: ele próprio Tabela de Valores, que consiste em strings. Cada linha é representada por um tipo de dados Valores da tabela de linhas, que possui suas próprias propriedades e seus próprios métodos. Disponível Coleção de Valores de Colunas de Tabela também tem certas propriedades.

Ponto importante! O procedimento que cria Tabela de Valores, deve compilar &OnServer.

Antes de começar a trabalhar com Tabela de Valores, você precisa determinar quais colunas ele conterá (ou seja, criá-las). Sintaxe:

Adicionar(,)
(opcional)
Tipo: String.
(opcional)
Tipo: DescriçãoTipos
(opcional)
Tipo: String.
(opcional)
Tipo: Número.

Por exemplo:

Para chamar este procedimento usaremos o comando.

Na descrição Tabelas de Valores os elementos da coleção são precisamente LinhasTabelaValores.

Ao contrário das colunas, que consistem apenas em propriedades (Nome, Tipo, Título, Largura), em Valores da tabela de linhas existem propriedades (acesso por nome de coluna) e métodos (você pode obter e definir o valor, trabalhar com proprietários).

Para adicionar uma nova linha à tabela você precisa usar o método Adicionar(), ou Inserir(). No segundo caso, você deve indicar em que posição a linha desejada deve ser colocada.

Para atribuir um valor a uma coluna, usamos um ponto para acessar o nome da coluna ou índice (usando colchetes).

Para preencher Tabelas de Valores Os seguintes métodos podem ser usados:

Claro()– para remover todas as linhas de Tabelas de Valores.

PreencherValores(,)– permite preencher todas as colunas ou colunas selecionadas com um valor.
CarregarColuna(,)– carrega uma coluna do array.
DescarregarColuna()– descarrega a coluna em um array.

Os dois últimos métodos são convenientes para usar quando você precisa transferir uma coluna de uma tabela de valores para outra.

Cópia(,)– permite criar uma nova com base em uma tabela existente Tabela de Valores, e nem todas as linhas e todas as colunas, mas apenas algumas delas. Valor de retorno – Tabela de Valores.

Você pode copiar a estrutura Tabelas de Valores. Existe um método correspondente para isso CopiarColunas(). Vamos pegar um vazio Tabela de Valores com a estrutura necessária.

EM Tabela de valores existe um método Total(). Você pode especificar a coluna na qual deseja somar os valores numéricos. Em relação ao código mostrado anteriormente no Tableau, você pode calcular o valor: TZ.Total (“Valor”).

EM Tabela de valoresé possível agrupar (recolher) valores numéricos por valores idênticos de determinadas colunas usando o método Colapso(,).

Em relação ao código mostrado anteriormente no Tableau, você pode calcular o valor: TK.Collapse(“Dia da semana”, “Valor”).

Tabela de Valores pode ser mostrado em tela do usuário para que você possa realizar qualquer ação com ele. Mas ao contrário ListarValores de código do programa Você não pode simplesmente abrir uma tabela na tela.

Para exibir Tabela de Valores na tela, crie um atributo de formulário e atribua um tipo de dados a ele Tabela de Valores.

Depois disso, a tabela resultante deverá ser exibida no formulário.

No módulo de formulário ao final do algoritmo compilado anteriormente (no Procedimento para Criação de uma Tabela de Valores), você deve adicionar:
ValueInFormData(TK, Tabela);

Coleção universal Árvore de valores

uma coleção universal que é muito semelhante a Tabela de Valores. A diferença de uma tabela é que as linhas da árvore podem ser subordinadas umas às outras, ou seja, algum tipo de hierarquia pode ser formada.

Isso também pode ser refletido na tela. Uma árvore de valores consiste explicitamente em uma coleção de linhas e uma coleção de colunas. Existem duas propriedades na árvore: Linhas e Colunas.

Como as linhas podem ser subordinadas entre si, cada linha pode ter um Pai, assim como suas linhas subordinadas.

Vamos criar o comando Árvore correspondente e seu procedimento de processamento.

Vamos criar em que há uma linha pai e duas linhas subordinadas.

Vamos criar os atributos do formulário DerZn(tipo de dados – Árvore de valores).

Para este atributo, criaremos as colunas Ano e Mês.

Mova o elemento correspondente DerZn no formulário.

No final Procedimentos TreeOnServer() vamos adicionar:

ValueInFormData(ÁrvoreZn, DerZn);

Vamos verificar o que aconteceu no modo de usuário.

Usando o botão Adicionar você pode adicionar novas linhas. Eles também podem formar uma hierarquia.

Para percorrer todos os elementos da árvore de valores, precisaremos usar recursão, ou seja, chamando um procedimento de si mesmo. Por exemplo, o processamento de uma árvore de valores pode ser assim:

Isso conclui nosso primeiro contato com coleções universais.

No próximo artigo veremos qual mecanismo importante um desenvolvedor pode usar para simplificar o acesso a um elemento de diretório a partir do código do programa.

O conceito de “array” é utilizado há muito tempo em programação e, na maioria das vezes, é entendido como uma determinada estrutura de memória constituída por uma sequência de elementos. Uma matriz em 1C é a mais simples das coleções universais de valores. Além da matriz, as coleções universais incluem:

  1. Lista de valores (ao contrário de um array, os valores da lista possuem uma representação, é implementada a capacidade de classificar e exibir a coleção em uma interface);
  2. Uma tabela de valores é uma coleção que possui colunas para uma descrição estendida do valor; uma estrutura semelhante pode ser obtida executando uma consulta;
  3. Uma árvore é muito semelhante a uma tabela, completa com uma estrutura de subordinação;
  4. Estrutura – conjunto dinâmico nomes e valores de variáveis;
  5. Correspondência - semelhante a uma estrutura, apenas as variáveis ​​são correspondidas não com representações de string, mas entre si.

Métodos de matriz

A criação programática de uma instância de array ocorre usando o operador New() (Fig. 1).

Como pode ser visto no exemplo acima, os arrays podem ser criados com um número fixo de elementos ou sem esta limitação.

Antes de começarmos a discutir métodos para trabalhar com um array, vamos definir dois conceitos:

  • Índice do elemento – pode ser representado como um número de série de um único valor;
  • Número de elementos – o número de elementos da coleção está disponível para sua determinação através do método Quantidade();

É importante saber: em 1C, a contagem do número de valores de qualquer coleção começa em 1 e a distribuição dos índices a partir de 0, ou seja, o primeiro elemento do array tem índice 0. Assim, percorrer uma coleção usando um loop com um o iterador deve começar em 0 e terminar com o número de elementos menos 1, caso contrário o sistema notificará a ocorrência de uma exceção através da janela (Fig. 2).

Figura 2

Qualquer objeto de configuração possui seus próprios métodos de funcionamento, um array não é exceção, vamos listá-los com alguma explicação:

  • InBorder() – usando o método você pode obter o índice máximo de um elemento; para um array vazio o valor (-1) será retornado;
  • Insert() – este método possui dois parâmetros: índice e valor, o índice indica onde inserir um novo elemento no array, o valor adicionado pode estar vazio;
  • Add() – este método de inserção de um valor pode ser usado quando o posicionamento de um elemento não é importante; com sua ajuda, novos dados serão gravados no final do array existente;
  • Find() – se for bem sucedido, retorna o índice do valor especificado entre colchetes, caso contrário retorna “Indefinido”;
  • Clear() – limpa a coleção;
  • Get() – lê os dados localizados no array no índice especificado, pode ser substituído por colchetes;
  • Delete() – exclui o elemento com o índice especificado;
  • Set() – substitui os dados na célula da matriz especificada.

Matrizes unidimensionais e multidimensionais

No caso mais simples, uma matriz unidimensional pode conter valores de vários tipos (Fig. 3)

Figura 3.

O resultado da execução do código acima é mostrado na Fig.

Figura 4

Assim, obtivemos um array unidimensional composto por um valor de string, um link para um elemento de diretório e uma data. Além disso, ao adicionar elementos, usamos dois vários métodos Add() e Insert(), se tivéssemos usado o método Add() ao adicionar uma data, nosso resultado teria uma aparência um pouco diferente.

No ensino médio, é introduzido o conceito de matriz bidimensional. Este é um conjunto de dados, cada elemento possui dois índices (no caso mais simples, um número de série vertical e horizontal, é o que melhor ilustra o conceito de array bidimensional);

Ao criar tal matriz, você pode especificar o número de linhas e colunas que serão utilizadas.

Digamos que nos deparamos com a tarefa de criar um array de sobrenome, nome e patronímico de dois funcionários. Usando o código (Fig. 5), criamos um array correspondente com um número fixo de colunas e linhas.

Figura 5

Para percorrê-lo, precisamos de dois loops, no primeiro loop percorremos o array linha por linha, no segundo analisamos a linha em elementos. Isto pode ser feito utilizando o ciclo “Para cada .... De" (Fig. 6)

Figura 6

Ou usando um loop com o iterador “For...by” (Fig. 7)

Figura 7

Em princípio, o número de dimensões de um determinado array pode ser qualquer, outra coisa é que no caso grande quantidade níveis de detalhe, é bastante difícil criar um construtor para ler os dados.

Usando uma matriz

Matrizes em 1C são usadas com mais frequência para:

  1. Criação de diversas seleções utilizadas ao trabalhar com consultas e outras coleções de valores;
  2. Passando listas como parâmetros entre procedimentos e funções;
  3. Troque dados com componentes externos conectados a usando COM tecnologias.

Claro, esta está longe de ser uma lista completa das finalidades para as quais o objeto “Array” pode ser usado.

Uma matriz em 1C é um conjunto de alguns valores. Os valores em uma matriz podem ser de tipos diferentes.

A matriz pode ser obtida executando várias funções, por exemplo, DescarregarColuna() tabelas de valores; você pode obter as linhas selecionadas como uma matriz lista dinâmica etc. Você também pode criar uma matriz manualmente.

Criando uma matriz

1. Como criar um array do tamanho necessário

pArray = novo Array(4); //criou um array de 4 elementos

PMarray[0] = "Nós";
pArray[ 1 ] = "criado" ;
pArray[2] = "novo";
pArray[ 3 ] = "matriz" ;

2. Como criar um array vazio e adicionar elementos a ele

pArray = novo Array; //criou um array vazio

//Insira os valores dos elementos do array

PMassiv. Adicionar("Nós");


3. Como criar um array multidimensional.

Consideremos esta questão usando o exemplo de um array bidimensional, uma vez que arrays de grandes dimensões são usados ​​​​com muito menos frequência e o mecanismo de seu funcionamento não difere de um array bidimensional.

pArray = novo Array(4, 2); //criou um array 4x2

//Insira os valores dos elementos do array, numerando cada palavra

PMarray[0] [0] = "1."
pArray[ 0 ] [ 1 ] = "Nós";
matriz[ 1 ] [ 0 ] = "2."
pArray[ 1 ] [ 1 ] = "criado" ;
matriz[2] [0] = "3."
pArray[ 2 ] [ 1 ] = "multidimensional" ;
matriz[3] [0] = "4."
pArray[ 3 ] [ 1 ] = "matriz" ;

4. Como criar um array fixo

Um array fixo difere de um array regular porque não pode ser modificado. Você não pode adicionar, excluir ou alterar os valores dos elementos dessa matriz.

Um array fixo pode ser obtido a partir de um array normal:

pArray = novo Array;

PMassiv. Adicionar("Nós");
parray. Adicionar("criado");
parray. Adicionar("novo");
parray. Adicionar("matriz");

FArray = novo FixArray(pArray); //criou um array fixo

Funções para trabalhar com arrays

Consideraremos a operação de funções usando o exemplo de um array unidimensional matriz, criado acima e composto por 4 elementos:

  1. "criado"
  2. "novo"
  3. "variedade".
Função VBorder()

Obtém o índice mais alto de um elemento da matriz. É sempre um a menos que o número de elementos do array.

Índice = pArray. BBordem() // 3;

Função Inserir()

Insere um valor no elemento da matriz no índice especificado. Os elementos subsequentes da matriz são deslocados

parray. Inserir(3, "novo valor") //Agora o array consiste em 5 elementos

Função Adicionar()

Cria um novo elemento no final do array e insere o valor fornecido lá

parray. Adicionar("." ) //adicionou um ponto ao quinto elemento do array;

Quantidade de Função()

Retorna o número de elementos do array.

parray. Quantidade(); //4

Função Localizar()

Pesquisa um array por um determinado elemento. Se encontrado, retorna seu índice. Se não for encontrado, retorna Indefinido.

Índice = pArray. Localizar("matriz");
//3 Índice = pArray. Encontrar("linha que não existia"

) ;

// Indefinido

Função limpar()

Remove todos os valores do array.

parray. Claro() ;

Função Obter()
Obtém o valor de uma matriz por índice. O mesmo problema pode ser resolvido usando .

Valor = pArray. Obter(3) // "matriz"

Valor= pArray[3];

// "variedade"

Função Excluir()

Remove um elemento do array por índice

parray. Excluir(3);
Conjunto de funções()

Define o valor de um elemento da matriz por índice. Funciona da mesma maneira.

parray. Set(3, "matriz!");

pArray[ 3 ] = "matriz!" ;
Como percorrer um array
Você pode iterar todos os elementos de um array sem especificar um índice:

Para cada elemento do array do loop pArray

Relatório(ArrayElement);
Fim do Ciclo;
Você pode iterar todos os elementos de um array sem especificar um índice:

Você pode usar o índice ao percorrer:

Para Índice = 0 por pArray. Ciclo BBorder()

Relatório(pArray[Índice]);
Como percorrer um array multidimensional
Uma matriz multidimensional é percorrida usando os mesmos loops (veja acima), mas um loop deve ser aninhado dentro de outro.
Você pode iterar todos os elementos de um array sem especificar um índice:
Você pode iterar todos os elementos de um array sem especificar um índice:

Para cada Elemento1 do Ciclo mArray

Para cada Elemento2 do Ciclo do Elemento1

Relatório(Elemento1) ;
Ou usando índices.
mArray= novo Array(3, 4);
Você pode iterar todos os elementos de um array sem especificar um índice:
Você pode iterar todos os elementos de um array sem especificar um índice:

Para Index1 = 0 por mArray. Ciclo BBorder()

Para Index2 por mArray[ Index1 ] . Ciclo BBorder() Relatório(mArray[Índice1] [Índice2]);

Classificar uma matriz Para classificar o array, precisamos de um objeto auxiliar do tipo
ListarValores. ListaValores = nova ListaValores;
//cria uma lista de valores ListaValor. LoadValues(pArray) ;
//carrega valores do array na lista ListaValor. SortByValue(SortDirection.Age);
//classifica em ordem crescente // despeja os valores classificados de volta no array

Comparando duas matrizes

Antes de passarmos à descrição da função de comparação, vamos concordar que os arrays são considerados idênticos se tiverem o mesmo número de elementos e os elementos correspondentes dos arrays forem iguais. Então, para comparação, você pode usar a seguinte função (aliás, essa função já está presente em algumas configurações padrão):

Função CompareArrays(Array1, Array2)

Se Matriz1. Quantidade()<>Matriz2. Quantidade() Então
retorne FALSO; // Arrays não são iguais, não faz sentido comparar elementos.
EndIf ;

Para Índice = 0 por Array1. Ciclo BBorder()
Se Array1[Índice]<>Array2[Índice] Então
Retornar falso; //esses elementos não são iguais, o que significa que os arrays não são iguais
EndIf ;
Você pode iterar todos os elementos de um array sem especificar um índice:

Retornar Verdadeiro; // Se você chegou aqui, então os arrays são iguais
Função Final

Você precisa passar 2 arrays para comparar com a função. Função retorna valor Verdadeiro, se as matrizes forem iguais, e Mentira, se não for igual.

O uso de arrays em 1C ajuda a organizar os elementos utilizados no trabalho.

Este é um conjunto de elementos de software. Serve para:

  • Selecionando valores.
  • Classificando. Cada posição na matriz recebe um índice. Isso facilita a pesquisa. E você pode se referir a um objeto escrevendo seu número.
  • Combinando e salvando registros.
  • Separando grupos, criando substrings.
  • Uma matriz é um objeto em si. Uma variável será anexada a ele. Você pode consultar partes individuais dele ou usá-lo inteiramente em procedimentos. Por exemplo, você pode combinar o grupo de valores “Funcionários do Departamento N” e inserir lá o nome e o sobrenome dos funcionários.

Vamos fazer uma analogia. Imagine uma estante de livros. Os livros nele contidos estão organizados em diferentes “células”. Se você mantiver registros, saberá onde cada objeto está localizado. E você pode obtê-lo sem dificuldade. Mas se livros, revistas e jornais estiverem espalhados aleatoriamente sobre a mesa, a busca pela coisa certa demorará muito. Embora isso não reflita todas as possibilidades de coleções únicas.

Criação

Trabalhar com arrays 1C começa com sua criação. Você precisa de um “local” - um campo no qual inserirá o código.

  1. Abra o "Configurador" ("Configuração").
  2. Clique clique com o botão direito clique no item “Processando”.
  3. Selecione "Adicionar".
  4. O submenu Processamento1 é exibido. Selecione-o. Informações sobre isso serão exibidas na área de trabalho.
  5. Na guia Básico, insira Nome. Digamos "TestArray".
  6. Abra a seção "Formulários".
  7. Clique no ícone da lupa.
  8. Marque a opção “Formulário de processamento”.
  9. Clique em "Concluído".
  10. Uma janela com três quadros será aberta. No canto superior direito, vá para a aba “Equipes”.
  11. Ícone de adição para adicionar uma posição.
  12. O item “Team1” aparecerá. Selecione-o.
  13. No campo "Nome", insira um nome. Por exemplo, “Valores de Teste”. Copie-o para "Cabeçalho".
  14. Na linha “Ação”, clique na lupa.
  15. Item “Criar no cliente” e “OK”.
  16. Aqui está o módulo no qual você pode inserir o código.

Para exibir um resultado intermediário, crie um “botão”. Por que é necessário no array - você entenderá um pouco mais tarde.

  1. Vá para a guia "Formulários". Ela está lá embaixo.
  2. Clique com o botão direito em "Barra de Comando".
  3. "Adicionar - Botão".
  4. Dê qualquer nome. Ou você pode deixar o padrão.
  5. No campo “Nome da equipe”, clique no ícone de reticências.
  6. Selecione "Valores de Teste". Se a equipe tiver um nome diferente, haverá um título diferente.

Agora você pode começar a trabalhar com coleções. Mas não pense que em 1C você pode decompor imediatamente uma string em um array. É melhor começar com algo mais fácil. Embora todas as funções sejam um conjunto de operadores que você só precisa lembrar.

  1. Abra a guia “Módulo”.
  2. O texto que vem depois de duas barras (duas barras - “//”) pode ser excluído. Parece algo assim "//Inserir conteúdo do manipulador". Estas são explicações. Eles são escritos por programadores para não se confundirem no código.
  3. Escreva seu texto entre os operadores “Procedimento” e “Fim do Procedimento”.
  4. Agora crie um conjunto de valores. Crie uma variável que a denote condicionalmente. Digamos "PrimeiroArray".
  5. Deve estar associado a um objeto. Para fazer isso, digite o comando “FirstArray = Nova matriz()". Esta é uma coleção que pode conter um número ilimitado de elementos. Se você tiver um tamanho fixo, especifique-o após o comando entre parênteses "Novo Array (5)". Conseqüentemente, a coleção bidimensional se parecerá com “New Array (7, 5)”. Você pode criar conjuntos multidimensionais.
  6. À medida que você digita, podem aparecer sugestões que sugerem operadores adequados.
  7. As palavras variam em cor. As variáveis ​​têm uma cor, as funções têm outra.
  8. Após cada comando, coloque um ponto e vírgula ";". E por conveniência, comece com um novo parágrafo.
  9. Você não pode fazer nada com um conjunto vazio. Não organize, nem produza, nem decomponha a string em um array em 1C. Portanto, precisamos inserir elementos nele.
  10. Digite "PrimeiroArray.Add(Valor1);". Em seguida, “FirstArray.Add (Value2);” e assim por diante.
  11. Os objetos são numerados de zero. Ou seja, à variável “Valor1” será atribuído o índice “0”. Você mesmo pode preencher a coleção com “Valor0” para não se confundir.

Para que serve tudo isso? E por que aquele “botão” misterioso? Vamos tentar executar uma função simples.

  1. Na coleção, escreva o comando “Report (FirstArray);” O índice do elemento é indicado entre colchetes. Ou seja, o endereço do nosso “Valor0”.
  2. Formate o módulo. Esta é uma verificação de erros. Em blocos grandes, algo pode ficar inacabado por desatenção: não adicionar ponto e vírgula, não fechar parênteses ou escrever uma variável incorretamente. O compilador apontará isso.
  3. Clique no botão em forma de sinal “Play” (um triângulo em um círculo) para executar o programa que você escreveu.
  4. Clique em “Serviço” e selecione seu botão.
  5. Clique nele.
  6. A mensagem “Valor0” aparece. Este é o resultado da execução da função.

Mais mostrado operação simples, para que você entenda como os arrays geralmente funcionam. Com eles você pode criar programas complexos e de vários níveis. Exiba objetos, classifique, remova repetições, divida em um conjunto de substrings, combine, divida, pesquise informações. Você só precisa conhecer os operadores.

Funções

Todas as funções disponíveis estão no livro de referência do programa. Vamos listar alguns para mostrar o princípio.

Como transformar um array 1C em uma string:

TestArray = Nova Matriz(4);
TestArray = Isto;
TestArray = Concluído;
TestArray = Então;
RowTest = ValueInRowInt(TestArray);
Relatório(StringTest);

Envie-o para o “Botão” e obtenha a frase. Isto pode fazer parte de um módulo maior - nesse caso a instrução Report não é necessária.

Para decompor uma string em uma matriz de substrings em 1C, você precisa de um separador. Marca condicional após a qual o texto será dividido. Digamos que exista a palavra "Protocolo". E colocaremos o separador “O”. Digite o comando “TestArray = ExpandStringInArray (Protocolo, “O”);” Você obterá “Pr”, “T”, “K” e “L” separadamente. O separador é apagado. E a palavra é dividida em várias substrings.

Veja como colocar isso em prática. Você tem um array com os nomes completos dos funcionários. E você precisa que os campos “Sobrenome”, “Nome” e “Patronímico” sejam preenchidos automaticamente na seleção de uma vaga. Para isso, o nome completo deve ser dividido em três componentes. Use "espaço" como separador.

Normalmente, um módulo complexo é usado para isso: um loop com um grande número de instruções. Blocos cíclicos com condição são construídos de acordo com o princípio “Se (condição), então (ação1), caso contrário (ação2)”. Primeiro, o programa verifica se a condição é verdadeira. Se sim, então ele executa a primeira função. Se não, o segundo.

O loop verificará todos os caracteres da string. Se não houver separador lá, ele continua. Se houver um delimitador, ele adiciona o valor ao conjunto de substrings. Outros operadores podem ser usados ​​aí: por exemplo, “AbcrLP” é uma abreviatura de certos caracteres à direita e à esquerda da linha.

Cada módulo deve estar “concluído” para que o utilitário pare de executar o procedimento. Em um loop com “If” esta instrução é “EndIf”. Num ciclo sem condições - “Fim de Ciclo”. Cada função deve ser concluída separadamente.

Pesquise e classifique

As coleções podem conter uma enorme quantidade de dados. Devemos aprender a procurá-los e classificá-los.

Para realizar uma pesquisa em um array em 1C, use o operador “Find”. Você também pode encontrar o valor desejado visualmente. Mas se houver centenas de elementos, é melhor criar um módulo adicional e executar uma sub-rotina. Vamos mostrá-lo usando uma função simples como exemplo. Mas isso é adequado para qualquer bloco.

ArrayTest = Novo Array(3);
ArrayTest = "Telefone";
ArrayTest = "Laptop";
ArrayTest = "Computador";
Índice = ArrayTest.Find("Telefone");
Se Índice ‹› Indefinido Então
Report("Pesquisa concluída" + ArrayTest[Index]);

E não esqueça de colocar a “declaração de encerramento”.

A coleção é fornecida como exemplo. Criamos um conjunto de três valores. E fizemos um ciclo curto. Se o utilitário não encontrar um elemento correspondente, exibirá a mensagem “Indefinido”. Se ele encontrar, ele mostrará o resultado.

A classificação de uma matriz 1C é simplesmente insubstituível ao trabalhar com grandes quantidades de dados. Você tem que navegá-los de alguma forma. É melhor organizá-los em uma determinada ordem. Digamos que você tenha uma coleção chamada “YourArray”. Para colocar em ordem

TestList = Nova Lista de Valores;
TestList.LoadValues(SeuArray);
TestList.SortByValue(SortDirection.Age);
YourArray = TestList.UnloadValues();

Em vez de “Ascendente” você pode colocar “Descendente”. O resultado também pode ser carregado em uma tabela de valores:

TabelaTeste = NovaTabelaValor;
TestTable.Columns.Add("Coluna");
TestTable.LoadColumn(YourArray, “Coluna”);
TestTable.Sort("Coluna Descendente");
YourArray = TestTable.UnloadColumn("Coluna")

Existem também métodos de classificação complexos: “Bubble”, “Quick”, “Shaker”, “Recursion”. Eles têm algoritmos longos e de vários níveis.

Tabelas e listas

As informações podem ser transferidas entre diferentes tipos de coleções. Para transferir um array para uma tabela de valores em 1C:

ArrayTelefone = Novo Array;
ArrayPhone.Add("Smartphone");
ArrayPhone.Add("Tablet");
ArrayPhone.Add("Telefone");
TableTest = Nova TabelaValor;
TableTest.Columns.Add("Telefones celulares");
TableTest.Add();
TableTest.Add();
TableTest.Add();
TableTest.LoadColumn(ArrayTelephone, “Telefones celulares”);
Para cada linha do ciclo TableTest
Relatório(String.Mobile);

Não se esqueça de adicionar uma instrução de encerramento de loop no final.

Converter um array em uma lista de valores em 1C é bastante simples. Você só precisa fazer upload de dados de uma coleção para outra.

NovaLista = NovaListaValor();
NewList.LoadValues(SeuArray);

Na programação, um problema pode ser resolvido de maneiras diferentes. E 1C não é exceção. Algoritmos lineares, loops, loops condicionais, loops contadores. Existem muitas opções. Para navegar na matriz, você precisa de algumas habilidades 1C.

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