Funções para trabalhar com strings 1s 8. Novas funções para trabalhar com strings

Existem poucos mecanismos para trabalhar com strings em consultas 1C. Primeiro, as linhas podem ser adicionadas. Em segundo lugar, você pode obter uma substring de uma string. Em terceiro lugar, as strings podem ser comparadas, inclusive por padrão. Provavelmente isso é tudo o que pode ser feito com strings.

Adição de string

Para adicionar linhas em uma consulta, a operação “+” é usada. Você só pode adicionar strings de comprimento limitado.

SELECIONE "Nome: " + Contrapartes. Nome AS Coluna 1 DO Diretório. Contrapartes AS Contrapartes ONDE Contrapartes. Link = &Link

Função de substring

SUBSTRING(<Строка>, <НачальнаяПозиция>, <Длина>)

Um análogo da função Environment() do modelo de objeto. A função Substring() pode ser aplicada a dados de string e permite selecionar um fragmento <Строки> , começando com o número do caractere <НачальнаяПозиция> (os caracteres em uma linha são numerados a partir de 1) e comprimento <Длина> personagens. O resultado do cálculo da função tem um tipo de string de comprimento variável, e o comprimento será considerado ilimitado se <Строка> tem comprimento e parâmetro ilimitados <Длина> não é uma constante ou maior que 1024.

Se o comprimento da string for menor que o especificado no segundo parâmetro, a função retornará uma string vazia.

Atenção! Não é recomendado usar a função SUBSTRING() para converter strings de comprimento ilimitado em strings de comprimento limitado. Em vez disso, é melhor usar o operador de conversão EXPRESS().

Função semelhante

Se precisarmos ter certeza de que um atributo string atende a determinados critérios, nós o comparamos:

SELECIONE Contrapartes. Nome AS Coluna 1 DO Diretório. Contrapartes AS Contrapartes WHERE Contrapartes. Nome = "Gazprom"

Mas e se você precisar de uma comparação mais sutil? Não apenas igualdade ou desigualdade, mas semelhança com um determinado padrão? É exatamente para isso que a função SIMILAR foi criada.

LIKE — Operador para verificar a semelhança de uma string com um padrão. Análogo de LIKE em SQL.

O operador SIMILAR permite comparar o valor da expressão especificada à esquerda com a string padrão especificada à direita. O valor da expressão deve ser do tipo string. Se o valor da expressão corresponder ao padrão, o resultado do operador será TRUE, caso contrário será FALSE.

Os seguintes caracteres na string do modelo são caracteres de serviço e têm um significado diferente do caractere da string:

  • % (porcentagem): uma sequência contendo qualquer número de caracteres arbitrários;
  • _ (sublinhado): um caractere arbitrário;
  • […] (um ou mais caracteres entre colchetes): qualquer caractere único listado entre colchetes. A enumeração pode conter intervalos, por exemplo a-z, significando um caractere arbitrário incluído no intervalo, incluindo as extremidades do intervalo;
  • [^...] (entre colchetes um sinal de negação seguido por um ou mais caracteres): qualquer caractere único diferente daqueles listados após o sinal de negação.

Qualquer outro símbolo significa si mesmo e não carrega nenhuma carga adicional. Se um dos caracteres listados precisar ser escrito como ele mesmo, ele deverá ser precedido por<Спецсимвол>. Eu mesmo<Спецсимвол>(qualquer caractere adequado) é definido na mesma instrução após a palavra-chave SPECIAL CHARACTER.

Implementado na versão 8.3.6.1977.

Expandimos o conjunto de funções projetadas para trabalhar com strings. Fizemos isso para fornecer ferramentas mais avançadas para analisar dados de string. As novas funções serão convenientes e úteis em tarefas tecnológicas de análise de texto. Em tarefas relacionadas à análise de texto que contém dados em formato formatado. Pode ser uma análise de alguns arquivos recebidos do equipamento, ou, por exemplo, uma análise de um registro tecnológico.

Você poderia executar todas as ações que executavam novas funções antes. Usando algoritmos mais ou menos complexos escritos em uma linguagem integrada. Portanto, as novas funções não oferecem recursos fundamentalmente novos. No entanto, eles permitem reduzir a quantidade de código e torná-lo mais simples e compreensível. Além disso, permitem agilizar a execução das ações. Porque as funções implementadas na plataforma funcionam, é claro, mais rápido do que um algoritmo semelhante escrito em uma linguagem integrada.

Função de formatação StrTemplate()

Esta função substitui parâmetros em uma string. A necessidade de tal conversão surge frequentemente, por exemplo, ao exibir mensagens de aviso. A sintaxe desta função é a seguinte:

StrTemplate(<Шаблон>, <Значение1-Значение10>)

<Шаблон>- esta é a string na qual você precisa substituir as representações dos parâmetros.

<Значение1> , ... <Значение10>- são parâmetros (máximo dez), cujas representações devem ser substituídas na string.

Para indicar um local específico no template onde deseja realizar a substituição, você precisa usar marcadores como %1, ... %10. O número de marcadores envolvidos no modelo e o número de parâmetros contendo valores devem corresponder.

Por exemplo, o resultado da execução de tal operador:

haverá uma linha:

Erro de dados na linha 2 (tipo de data obrigatório)

Função para trabalhar com strings StrCompare()

Esta função compara duas strings sem distinção entre maiúsculas e minúsculas. Por exemplo, assim:

Você poderia executar a mesma ação anteriormente usando o objeto Comparação de valores:

No entanto, usar o novo recurso parece mais fácil. E além disso, a função, ao contrário do objeto Value Comparison, funciona tanto no thin client quanto no web client.

Funções para trabalhar com strings StrStartsWith(), StrEndsAt()

Essas funções determinam se uma string começa com uma substring especificada ou se uma string termina com uma substring especificada. O algoritmo para essas funções não é difícil de implementar em uma linguagem incorporada, mas sua presença permite escrever um código mais limpo e compreensível. E eles trabalham mais rápido.

Por exemplo, eles são convenientes para usar na instrução If:

Funções para trabalhar com strings StrDivide(), StrConnect()

Essas funções dividem uma string em partes usando um delimitador especificado. Ou vice-versa, combinam várias linhas em uma, inserindo o separador selecionado entre elas. Eles são convenientes para criar ou analisar logs e diários tecnológicos. Por exemplo, você pode facilmente analisar uma entrada de registro tecnológico em partes adequadas para análise posterior:

Função para trabalhar com strings StrFind()

Em vez da antiga função Find(), implementamos uma nova função que possui recursos adicionais:

  • Pesquise em diferentes direções (do início, do fim);
  • Pesquise a partir de uma posição especificada;
  • Pesquise uma ocorrência com um número especificado (segundo, terceiro, etc.).

Na verdade, duplica as capacidades da função antiga. Isto é feito para manter a compatibilidade com módulos compilados em versões mais antigas. É recomendado que você não use mais a antiga função Find().

Abaixo está um exemplo usando os novos recursos de pesquisa. A pesquisa reversa é útil quando você precisa da última parte de uma string formalizada, como o nome completo do arquivo em uma URL. E pesquisar a partir de uma posição especificada ajuda nos casos em que você precisa pesquisar em um fragmento conhecido, e não na linha inteira.

Uma string é um dos tipos de dados primitivos em sistemas 1C:Enterprise 8. Variáveis ​​com o tipo linha contém texto.

Digite valores de variáveis linha estão entre aspas duplas. Diversas variáveis ​​deste tipo podem ser adicionadas.

Per1 = "Palavra 1";
Per2 = "Palavra 2";
Per3 = Per1 + " " + Per2 ;

Eventualmente Por3 significará " Palavra 1 Palavra 2″.

Além disso, os sistemas 1C:Enterprise 8 fornecem funções para trabalhar com strings. Vejamos os principais:

EnterString(<Строка>, <Подсказка>, <Длина>, <Многострочность>) — a função foi projetada para exibir uma caixa de diálogo na qual o usuário pode especificar o valor de uma variável do tipo Linha. Parâmetro <Строка> é obrigatório e contém o nome da variável na qual a string inserida será gravada. Parâmetro <Подсказка> opcional - este é o título da caixa de diálogo. Parâmetro <Длина> opcional, mostra o comprimento máximo da string de entrada. O padrão é zero, o que significa comprimento ilimitado. Parâmetro <Многострочность> opcional. Define o modo de entrada de texto multilinha: Verdadeiro — entrada de texto multilinha com separadores de linha; Falso – insira uma string simples.

Você pode inserir uma string se souber o código do caractere em Unicode:

Símbolo(<КодСимвола>) — o código é inserido como um número.

Letra= Símbolo(1103); // EU

Existe também uma função inversa que permite descobrir o código de um símbolo.

CódigoSímbolo(<Строка>, <НомерСимвола>) — retorna o número Unicode do caractere especificado como um número.

Funções de conversão de maiúsculas e minúsculas de texto:

VReg(<Строка>) — Converte todos os caracteres de uma string em letras maiúsculas.

NReg(<Строка>) — Converte todos os caracteres de uma string em letras minúsculas.

TReg(<Строка>) — converte todos os caracteres da string para maiúsculas e minúsculas. Ou seja, as primeiras letras de todas as palavras são convertidas para maiúsculas e as letras restantes são convertidas para minúsculas.

Funções para pesquisar e substituir caracteres em uma string:

Encontrar(<Строка>, <ПодстрокаПоиска>) — encontra o número do caractere da ocorrência da substring de pesquisa. Por exemplo:

Localizar ("String", "oka"); //4

StrFind(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) — encontra o número do caractere da ocorrência da substring de pesquisa, o número da ocorrência é indicado no parâmetro correspondente. Neste caso, a pesquisa começa com o caractere cujo número está especificado no parâmetro Posição inicial. A pesquisa é possível desde o início ou o final da string. Por exemplo:

Número4 Ocorrências = Str Find ( "Defensividade", "sobre", direção de pesquisa. Do início, 1, 4); //7

StrReplace(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) – localiza todas as ocorrências da substring de pesquisa na string de origem e a substitui pela substring de substituição.

StrReplace("String" , "oka" , "" ) ; // Página

Linha vazia (<Строка>) – verifica a string em busca de caracteres significativos. Se não houver caracteres significativos ou nenhum caractere, o valor será retornado Verdadeiro. De outra forma - Mentira.

StrNumberOcorrências(<Строка>, <ПодстрокаПоиска>) – Calcula o número de ocorrências da substring de pesquisa na string de origem.

StrNumberOcorrências ( "Estude, estude e estude novamente", "estudar" , "" ) ; //3

StrTemplate(<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — substitui parâmetros em uma string por número. A linha deve conter marcadores de substituição no formato: “%1..%N”. A numeração do marcador começa em 1. Se o valor do parâmetro Indefinido, uma string vazia é substituída.

StrTemplate ( "Parâmetro 1 = %1, Parâmetro 2 = %2", "1" , "2" ) ; // Parâmetro 1= 1, Parâmetro 2 = 2

Funções de conversão de string:

Um leão(<Строка>, <ЧислоСимволов>) – retorna os primeiros caracteres de uma string.

Certo(<Строка>, <ЧислоСимволов>) – retorna os últimos caracteres de uma string.

Quarta-feira(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) – retorna uma string de comprimento<ЧислоСимволов>, começando pelo símbolo<НачальныйНомер>.

AbbrL(<Строка>) apara caracteres não significativos à esquerda do primeiro caractere significativo na string.

Abreviação(<Строка>) — corta caracteres insignificantes à direita do último caractere significativo da linha.

AbbrLP(<Строка>) – corta caracteres insignificantes à esquerda do primeiro caractere significativo da linha e à direita do último caractere significativo da linha.

StrGetString(<Строка>, <НомерСтроки>) – Obtém uma string multilinha por número.

Outras características:

Comprimento da Força(<Строка>) – retorna o número de caracteres da string.

StrNumberRow(<Строка>) – retorna o número de linhas em uma string multilinha. Uma linha é considerada nova se for separada da anterior por um caractere de nova linha.

StrCompare(<Строка1>, <Строка2> ) – compara duas strings sem distinção entre maiúsculas e minúsculas. Uma função funciona de forma semelhante a um objeto Comparação de Valores. Retorna:

  • 1 - se a primeira linha for maior que a segunda
  • -1 - se a segunda linha for maior que a primeira
  • 0 - se as strings forem iguais

StrCompare("Primeira linha", "Segunda linha"); //1

Como exemplo de como funcionam as funções para trabalhar com strings 1C, gostaríamos de criar uma análise automática de texto. Pegaremos o texto do arquivo. O resultado da análise é exibido de qualquer forma para o usuário.

Precisamos criar um manipulador externo que nos permitirá selecionar um arquivo de texto e executar o analisador.

Análise de texto 1C - formulário e botões

Então, vamos criar o processamento externo: Configurador/Arquivo/Novo/Processamento externo.

Adicionando um formulário. No formulário precisamos colocar um campo de seleção de arquivo de texto e um botão de análise.

Análise de texto 1C - cliente grosso

Vamos colocar um campo de texto normal no formulário. O comprimento da linha é ilimitado porque o caminho para o arquivo (nomes de diretório) pode ser significativo.

Para que o usuário não precise digitar o nome do arquivo, mas possa selecioná-lo, habilitaremos um botão de seleção no campo.

Alteraremos o nome do campo para “FileName”, o nome do atributo do formulário associado mudará para o mesmo automaticamente.

Como botão usaremos o botão “Executar” adicionado automaticamente pela plataforma (e já possui um manipulador conectado - conveniente).

Análise de texto 1C - thin client

No thin client, criaremos independentemente o atributo de formulário “FileName”. Vamos arrastar os adereços para o formulário. Nas propriedades do elemento do formulário também habilitaremos o botão de seleção.

Como botão, criaremos o comando “Executar”, atribuiremos o processamento a ele e arrastaremos para o formulário.

Análise de texto 1C - programação

A primeira coisa que precisamos fazer é processar o clique do botão de seleção - mostrar a caixa de diálogo de seleção de arquivo quando clicado.

Vamos às propriedades do nosso campo de texto no formulário (no Thick Client - com o botão esquerdo do mouse diretamente no campo, no Thin Client - no nome do campo na lista), e especificamos o manipulador de eventos para o evento "Início da Seleção".

Dentro da função manipuladora que 1C criará quando atribuída, escreveremos um código simples:

Agora temos um nome de arquivo. Precisamos “pegar” seu conteúdo e chamar a análise do texto.

Já temos um manipulador para o botão Executar. No cliente grosso, o botão e seu manipulador foram criados automaticamente pelo configurador 1C. No thin client nós adicionamos manualmente.

Vamos adicionar código ao manipulador que lê o arquivo em uma string:

Em relação à codificação do arquivo. Se você criar um objeto TextReading() sem um parâmetro indicando a codificação, 1C tentará determinar de forma independente a codificação (pela assinatura Byte Order Mark - BOM, ou considerará sua codificação ANSI).

Você pode especificar a codificação desejada diretamente, por exemplo assim:
Arquivo = Novo ReadText(NomeArquivo, "UTF-8"); //substitua o nome da codificação desejada

Então, como resultado obtivemos:

  • String de texto lida do arquivo na variável "Texto"
  • Um procedimento no qual analisaremos a string resultante de uma variável chamada “TextAnalysis()”, usando as funções de string 1C

Os recursos básicos de uma linguagem de programação geralmente incluem trabalhar com números e strings. Geralmente esses recursos são codificados no código do compilador (ou as classes “base” da linguagem de programação são implementadas).

Em 1C, a capacidade de trabalhar com strings é programada na própria plataforma. Hoje veremos os recursos de trabalho com strings 1C em programas na linguagem 1C integrada.

Valor da linha 1C

1. Vamos começar com o mais simples. Criar uma variável e atribuir um valor de string constante a ela é assim em 1C:

Variável = "Olá, mundo!";

Se você precisar especificar um caractere de aspas em um valor de string 1C constante, será necessário dobrá-lo “”

Variável = "Olá, mundo"!;

2. A quebra de linha 1C pode ser especificada de duas maneiras ao mesmo tempo. A primeira é usar o símbolo |

Variável = "Olá,
| mundo! ";

A segunda é usar a enumeração do sistema de símbolos. Ele permite adicionar quebras de linha 1C e outros caracteres não imprimíveis, como TAB.

Variável = "Olá" + Símbolos.PS + "paz!";

3. As configurações em 1C podem ser desenvolvidas não apenas para um idioma (russo, inglês ou outro) - mas simultaneamente para vários idiomas. Neste caso, o idioma atualmente utilizado é selecionado na parte inferior da janela 1C.

A lista de idiomas está localizada na janela de configuração no ramo Geral/Idiomas. Cada idioma possui um identificador curto, como ru ou inglês.

É claro que ao programar tal configuração, as linhas 1C também podem ser multilíngues. Para fazer isso, é possível criar uma linha 1C especificando through; opções por identificador de idioma:

Variável = "ru=""Olá, mundo! ""; en=""Olá, mundo! """;

Se você usar a linha 1C formada desta forma como de costume, então será o que está escrito nela. Para que o sistema o divida em duas opções e utilize a desejada, é necessário utilizar a função НStr():

//corrige para configurações bilíngues
Relatório(NStr(Variável));

Adereços com linha tipo 1C

O atributo é um campo no diretório/documento 1C. Difere de uma variável em um programa na linguagem 1C porque seu tipo é indicado com precisão para o atributo (número, string 1C, etc.). Se você precisar refrescar a memória sobre o que é um adereço, assista à lição.

Se você especificar o tipo de atributo - linha 1C, deverá especificar adicionalmente os parâmetros.

As linhas 1C vêm em comprimento ilimitado (indicado como comprimento = 0) e comprimento limitado, indicando o número exato de caracteres. As linhas 1C de comprimento ilimitado são armazenadas em uma tabela SQL separada, portanto, seu uso é menos produtivo do que as limitadas.

É por isso que o uso de strings 1C de comprimento ilimitado tem suas limitações - não é possível usá-las em todos os lugares. Por exemplo, não é permitido como número de documento, código de referência ou medição.

Trabalhando com strings 1C

Existem várias funções integradas da plataforma 1C para trabalhar com strings.

  • AbbrLP (“Incrível, mas é verdade!”)
    Remove espaços extras da linha 1C. Também pode ser usado para converter qualquer tipo em uma string 1C (por exemplo, números).
  • Variável = "Vasya" + AbbrLP("mais") + "Olya"; //haverá "Vasya mais Olya"
    Um exemplo de soma de vários valores de string 1C. O resultado será uma linha 1C.
  • Variável = Lev("Música", 2); //será "Mu"
    Variável = Médio("Música", 2, 2); //haverá "ameaça"
    Variável = Direitos("Música", 2); //haverá "ka"
    Várias opções para obter uma substring de uma string 1C.
  • Variável = Find("Música", "zy"); //serão 3
    Procure uma substring na string 1C, começando com o caractere 1.
  • Variável = StrLength("Música"); //serão 6
    Retorna o número de caracteres na linha 1C.
  • Report("Hello") //na janela de mensagem na parte inferior da janela 1C
    Alert("Olá") //caixa de diálogo pop-up
    Status("Hello") //na linha de exibição de status no canto inferior esquerdo
    .

Trazendo objetos para a linha 1C

Como você sabe, o formato mais popular para troca de informações estruturadas atualmente é o XML. Mesmo a versão mais recente do MS Office Word e Excel salva arquivos neste formato (docx e xlsx, respectivamente, alteram a extensão para zip, abre em um arquivador).

A plataforma 1C para troca de dados oferece diversas opções, sendo a principal delas também o XML.

1. O método mais simples é usar a função Abbreviation() ou String(). Você pode usar a função REPRESENTATION() no corpo da solicitação. O resultado de sua ação é o mesmo - eles geram uma representação em string de qualquer objeto 1C para o usuário.

Para um diretório, por padrão, este será o seu nome. Para um documento – nome, número e data do documento.

2. Qualquer objeto 1C (com restrições) pode ser convertido em XML e vice-versa. O processo de conversão é chamado de serialização.

StringViewXml = XMLString(Valor); //obtém XML do valor 1C
Valor1C = XMLValue(Type("DirectoryLink.Nomenclature"),TypeStringXml); //obtém o valor 1C da string XML, você deve especificar o tipo 1C que deve ser recebido

3. Existe uma maneira própria da plataforma 1C de converter qualquer objeto 1C em uma string. Migrou da versão 1C 7.7. Este formato não é compreendido por outros programas, mas outro 1C o compreende, o que facilita sua utilização para troca entre bancos de dados 1C.

Linha = ValorInRowInt(Valor1C); //obtém a string 1C do valor 1C
ValueVFile("C:\MeuArquivo.txt", Valor1C); //outra opção, obtemos um arquivo com uma string salva do valor 1C
Valor1C = ValorFromStringInt(String); //volta da linha 1C
Valor1C = ValueFile("C:\MeuArquivo.txt"); //volta do arquivo

Editando linhas 1C no formulário

Além de trabalhar com strings 1C em um programa na linguagem 1C, é claro que gostaria que o usuário pudesse editá-las. Existem várias possibilidades para isso:

1. A maneira mais fácil é solicitar a entrada de uma linha 1C sob demanda. Este método é usado no ensino de programação 1C, na vida é usado com muito menos frequência (mas é usado!).

Variável = "";
Linha = EnterValue(Variável, "Digite o Nome Completo");

2. Para exibir os detalhes de um objeto 1C (diretório/documento) ou detalhes do formulário (consulte), um campo de entrada é mais frequentemente usado. Esta é a ferramenta mais comum em 1C para o usuário trabalhar com edição de campos.

3. Os recursos do campo de entrada podem ser expandidos (veja propriedades do campo de entrada, clique com o botão direito sobre ele, mais detalhes):

  • Caixa de seleção Modo de edição multilinha
  • Caixa de seleção de edição avançada (disponível se a caixa de seleção anterior estiver marcada)
  • Caixa de seleção Modo de senha (consulte).

4. Se todos os recursos do campo de entrada não forem suficientes para você, existe um editor integrado. Para adicioná-lo ao formulário, você precisa adicionar um campo de documento de texto ao menu Formulário/Inserir controle. Em suas propriedades você pode especificar seu modo de operação – a propriedade Extensão.

Um campo de documento de texto não pode ser associado diretamente aos dados. É necessário escrever uma função no manipulador de eventos OnOpen() do formulário (veja):

Formulário Elements.ElementNameTextDocumentField.SetText(StringValue); //aqui ValueString é o texto recebido, por exemplo, do atributo

E no gerenciador de salvamento - por exemplo, no botão Salvar - adicione um salvamento:

ValueString = FormElements.ElementNameTextDocumentField.GetText(); //ValorA linha aqui é o atributo onde salvamos o valor

5. Na versão 1C 8.2.11, nos formulários gerenciados, surgiu uma nova opção para representar uma linha 1C - o campo Documento Formatado.


Semelhante ao campo de um documento de texto, você deve defini-lo ao abri-lo e anotá-lo ao salvá-lo usando o programa.

  • No objeto 1C cujo formulário estamos criando (diretório, documento, processamento, etc.) - adicione um atributo com o tipo Value Storage
  • Na função OnReadOnServer() definimos o texto do atributo

    //aqui o Atributo é o atributo adicionado do objeto 1C
    //aqui FormattedDocument é o nome do campo no formulário para edição
    &No servidor

    FormattedDocument = CurrentObject.Attributes.Get();
    Fim do procedimento

  • Na função BeforeWritingOnServer() ou através do botão, escreveremos o texto do campo

    &No servidor
    Procedimento ao ReadingOnServer(CurrentObject)
    CurrentObject.Props = NewValueStorage(FormattedDocument);
    Fim do procedimento