Как найти вхождения строки в 1с

Механизмов для работы со строками в запросах 1С мало. Во-первых, строки можно складывать. Во-вторых, от строки можно взять подстроку. В-третьих, строки можно сравнивать, в том числе по шаблону. Вот пожалуй и всё, что можно делать со строками.

Сложение строк

Для сложения строк в запросе используется операция «+». Складывать можно только строки ограниченной длины.

ВЫБРАТЬ "Наименование: " + Контрагенты.Наименование КАК Колонка1 ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ Контрагенты.Ссылка = &Ссылка

Функция Подстрока

ПОДСТРОКА(<Строка>, <НачальнаяПозиция>, <Длина>)

Аналог функции Сред() из объектной модели. Функция Подстрока() может применяться к данным строкового типа и позволяет выделить фрагмент <Строки> , начинающийся с символа номер <НачальнаяПозиция> (символы в строке нумеруются с 1) и длиной <Длина> символов. Результат вычисления функции имеет строковый тип переменной длины, причем длина будет считаться неограниченной, если <Строка> имеет неограниченную длину и параметр <Длина> не является константой или превышает 1024.

Если длина строки меньше, чем указана во втором параметре, то функция вернет пустую строку.

Внимание! Использование функции ПОДСТРОКА() с целью приведения строк неограниченной длины к строкам ограниченной длины не рекомендуется. Вместо нее лучше использовать операцию приведения типа ВЫРАЗИТЬ().

Функция Подобно

Если нужно убедиться, что строковый реквизит соответствует определённым критериям мы его сравниваем:

ВЫБРАТЬ Контрагенты.Наименование КАК Колонка1 ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ Контрагенты.Наименование = "Газпром"

А что, если нужно более хитрое сравнение? Не просто на равенство или неравенство, а на подобие определенному шаблону? Вот как раз для этого и создана функция ПОДОБНО.

ПОДОБНО — Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL.

Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ.

Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки:

  • % (процент): последовательность, содержащая любое количество произвольных символов;
  • _ (подчеркивание): один произвольный символ;
  • […] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок. В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона;
  • [^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания.

Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ.

Всем привет
Сегодня попросили меня при печати документа реализации не выводить префикс документа, задачу решил следующим образом.

СтрЗаменить(Номер, Лев (Номер, 3 ), "" );

Когда заглянул в синтакс-помощник так мне это понравилось, что захотелось написать о работе с строками в «1С:Предприятие» .

Строка в 1С относится к примитивному типу данных.

Если посмотреть в справку 1С увидим следующее описание типа Строка (String)
Значения данного типа содержат строку в формате Unicode произвольной длины.
Если своими словами о строках то получится. Строка — константа, состоящая из различных символов, обрамляется всегда кавычками.

Задание строки
Обращение = «Привет пассажир»;

Многострочные строки в типовых конфигурациях чаще всего создаются с помощью вертикального разделителя «|»:
Строка = «Многострочная
|строка
|пиши
|текст»;

Кавычка внутри строки задаются двойными кавычками.
Строка = «»Текст в кавычках»»;

Над строками существует множество операций (поиск в нутрии строки, определение первых и т.д.), лучше посмотреть Синтакс-помощник.
Синтакс-помощник — Общее описание встроенного языка-> встроенные функции-> функции по работе со строками.

Функций по работе со строками

Здесь в краткой форме приведу функций по работе со строками:

ВРег(<Строка>) — Все символы строки функция преобразует в верхний регистр.

КодСимвола(<Строка>, <НомерСимвола>) – Функция получает код символа, расположенного в переданной строке в позиции с указанным номером.

Лев(<Строка>, <ЧислоСимволов>) – Функция выбирает первые слева символы строки.

Найти(<Строка>, <ПодстрокаПоиска>) — Функция находит вхождение искомой строки как подстроки в исходной строке.

НРег(<Строка>) — Функция преобразует все символы строки в нижний регистр.

Прав(<Строка>, <ЧислоСимволов>) – Данная функция отличается от функций Лев (Left) тем что выбирает последние справа символы строки.

ПустаяСтрока(<Строка>) — Функция проверяет строку на наличие значащих символов.

Символ(<КодСимвола>) — Функция преобразует код символа в строку, содержащую символ.

СокрЛ(<Строка>) — Функция отсекает незначащие символы, стоящие слева от первого значащего символа в строке.

СокрЛП(<Строка>) — Функция отсекает незначащие символы, стоящие слева от первого значащего символа в строке, и пробелы, стоящие справа от последнего значащего символа в строке.

СокрП(<Строка>) — Функция отсекает незначащие символы, стоящие справа от последнего значащего символа в строке.

Сред(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) — Функция выбирает строку символов, начиная с символа <НачальныйНомер>, общим количеством <ЧислоСимволов>.

СтрДлина(<Строка>) — Функция получает количество символов в строке.

СтрЗаменить(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) — Функция находит в исходной строке все вхождения подстроки поиска и заменяет ее на подстроку замены.

СтрПолучитьСтроку(<Строка>, <НомерСтроки>) — Функция получает строку многострочной строки по номеру.

СтрЧислоВхождений(<Строка>, <ПодстрокаПоиска>) — Функция вычисляет число вхождений подстроки поиска в исходной строке.

СтрЧислоСтрок(<Строка>) — Функция считает число строк в многострочной строке. В многострочной строке, строки разделены символами перевода строк.

ТРег(<Строка>) — Функция преобразует строку к титульному регистру. Это означает, что у каждого слова первый символ преобразуется к титульному регистру или к верхнему регистру, если титульный регистр для символа не определен. Остальные символы преобразуются к нижнему регистру.

Преобразования типов
Для явного преобразования типов данных существуют функции одноименные с типом данных, к которому происходит преобразование: Строка(<Значение>)

СтрокаИзЧисел= Строка(Число);

Все данные функции подробно описаны в Синтакс-помощник, как начинающему программисту может помочь Синтакс-помощник, я описал в статье .

Примеры по работе с строками

Преобразование числа в строку и обратно.

Для получения строкового представления года следует использовать функцию Формат.

Год = Формат(ТекущаяДата(), "ДФ=yyyy" ) // Год = "2012"

Чтобы преобразовать число к строке без вставки символа-разделителя групп (неразрывного пробела), необходимо применить функцию Формат с параметром ЧГ=0:

Число = 2012 Строка = Формат(Число, "ЧГ=0" ); //Строка = "2012"

Строка Без пробелов.

Главная Заметки из Зазеркалья

07.02.2013 Поиск по строке

Реализовано в версии 8.3.3.641.

Мы серьёзно улучшили ввод по строке. Для этого нам пришлось реализовать новый мощный механизм поиска в поле ввода. Теперь он может быстро работать по миллионам записей, содержащихся в базе данных.

Мы проанализировали задачи поиска, возникающие у пользователей. Провели "ревизию" имеющихся в платформе механизмов, которые используют различные алгоритмы поиска. В результате ввод по строке приобрёл качественно новые возможности.

Теперь пользователи могут искать в любом месте названия, а не только по началу строки. Они могут использовать при этом полнотекстовый поиск и даже выполнять поиск с помощью фонового задания. Для того чтобы полнотекстовый поиск эффективно работал при вводе по строке, мы дополнительно оптимизировали этот механизм поиска и повысили его производительность.

Все новые свойства, позволяющие настраивать ввод по строке, мы собрали на отдельной закладке окна редактирования объекта конфигурации:

Например, вы можете указать, что поиск будет выполняться в любом месте строки, а не только в её начале:

Тогда пользователь может набирать любые фрагменты слов, а не только те символы, с которых начинается искомая строка:

Использование полнотекстового поиска при вводе по строке включается отдельным свойством:

С помощью полнотекстового поиска пользователи могут среди больших объёмов данных быстро находить подходящие данные по любому из слов, содержащихся, например, в наименовании:

Также они могут искать и по нескольким известным словам. Незаконченные слова будут автоматически дополняться возможными сочетаниями:

Если объём данных велик, то в обоих случаях вы можете указать, что поиск должен выполняться с помощью фонового задания:

Тогда рядом с полем ввода для пользователей будет отображаться анимированная картинка, похожая на картинку, которая отображается при фоновом выполнении отчета:

  • если в объекте, который используется в поле ввода, не ожидается большого количества данных, то мы советуем включить поиск строки в любом месте;
  • если в объекте планируется большое количество данных, то:
    • мы советуем включить полнотекстовый и фоновый поиск;
    • при этом вы также можете использовать поиск строки в любом месте, но совместно с фоновым поиском и желательно с полнотекстовым поиском; чтобы большая часть поисков выполнялась через полнотекстовый поиск.

Все перечисленные свойства вы можете, при необходимости, переопределить в процессе выполнения прикладного решения.

На клиенте - в клиентских обработчиках событий поля ввода АвтоПодбор и ОкончаниеВводаТекста :

На сервере - в модуле менеджера того объекта, в данных которого выполняется поиск. В обработчике события ОбработкаПолученияДанныхВыбора :

Естественно, в этом месте, на сервере, нельзя переопределить способ выполнения поиска "Непосредственно" или "Фоновым заданием" . Потому что исполнение кода уже передано на сервер.

Строка — один из примитивных типов данных в системах 1С:Предприятие 8. Переменные с типом строка содержат текст.

Значения переменных типа строка заключаются в двойные кавычки. Несколько переменных данного типа можно складывать.

Пер1 = "Слово 1" ;
Пер2 = "Слово 2" ;
Пер3 = Пер1 + " " + Пер2 ;

В итоге Пер3 будет иметь значение «Слово 1 Слово 2″.

Кроме того, в системах 1С:Предприятие 8 предусмотрены функции для работы со строками. Рассмотрим основные:

ВвестиСтроку(<Строка>, <Подсказка>, <Длина>, <Многострочность>) — функция предназначена для вывода диалогового окна, в котором пользователь может указать значение переменной типа Строка . Параметр <Строка> является обязательным и содержит имя переменной, в которую будет записана введенная строка. Параметр <Подсказка> необязательный — это заголовок диалогового окна. Параметр <Длина> необязательный, показывает максимальную длину вводимой строки. По умолчанию равен нулю, что означает неограниченную длину. Параметр <Многострочность> необязательный. Определяет режим ввода многострочного текста: Истина — ввод многострочного текста с разделителями строк; Ложь — ввод простой строки.

Строку можно ввести и, зная код символа в кодировке Unicode:

Символ(<КодСимвола>) — код вводится в виде числа.

Буква= Символ(1103 ) ; // Я

Существует и обратная функция, позволяющая узнать код какого-либо символа.

КодСимвола(<Строка>, <НомерСимвола>) — возвращает номер указанного символа в кодировке Unicode в виде числа.

Функции преобразования регистра текста:

ВРег(<Строка>) — преобразует все символы строки в верхний регистр.

НРег(<Строка>) — преобразует все символы строки в нижний регистр.

ТРег(<Строка>) — преобразует все символы строки в титульный регистр. То есть первые буквы во всех словах преобразуется в верхний регистр, а остальные буквы — в нижний.

Функции поиска и замены символов в строке:

Найти(<Строка>, <ПодстрокаПоиска>) — находит номер символа вхождения подстроки поиска. Например:

Найти ("Строка" , "ока" ) ; // 4

СтрНайти(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) — находит номер символа вхождения подстроки поиска, номер вхождения указывается в соответствующем параметре. При этом поиск начинается с символа, номер которого указан в параметре НачальнаяПозиция. Поиск возможен с начала или с конца строки. Например:

Номер4 Вхождения= СтрНайти ("Обороноспособность" , "о" , НаправлениеПоиска. СНачала, 1 , 4 ) ; // 7

СтрЗаменить(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) – находит в исходной строке все вхождения подстроки поиска и заменяет ее на подстроку замены.

СтрЗаменить ("Строка" , "ока" , "" ) ; // Стр

ПустаяСтрока(<Строка>) – проверяет строку на наличие значащих символов. Если значащих символов нет, или вообще никаких символов нет, то возвращается значение Истина . В противном случае — Ложь .

СтрЧислоВхождений(<Строка>, <ПодстрокаПоиска>) – вычисляет число вхождений подстроки поиска в исходной строке.

СтрЧислоВхождений ("учиться, учиться и еще раз учиться" , "учиться" , "" ) ; // 3

СтрШаблон(<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — подставляет параметры в строку по номеру. Строка должна содержать маркеры подстановки вида: «%1..%N». Нумерация маркеров начинается с 1. Если значение параметра Неопределено , подставляется пустая строка.

СтрШаблон ("Параметр 1 = %1, Параметр 2 = %2" , "1" , "2" ) ; // Параметр 1= 1, Параметр 2 = 2

Функции преобразования строк:

Лев(<Строка>, <ЧислоСимволов>) – возвращает первые сначала символы строки.

Прав(<Строка>, <ЧислоСимволов>) – возвращает последние символы строки.

Сред(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) – возвращает строку длиной в <ЧислоСимволов>, начиная с символа <НачальныйНомер>.

СокрЛ(<Строка>) отсекает незначащие символы, стоящие слева от первого значащего символа в строке.

СокрП(<Строка>) — отсекает незначащие символы, стоящие справа от последнего значащего символа в строке.

СокрЛП(<Строка>) – отсекает незначащие символы, стоящие слева от первого значащего символа в строке и справа от последнего значащего символа в строке.

СтрПолучитьСтроку(<Строка>, <НомерСтроки>) – получает строку многострочной строки по номеру.

Прочие функции:

СтрДлина(<Строка>) – возвращает количество символов в строке.

СтрЧислоСтрок(<Строка>) – возвращает число строк в многострочной строке. Строка считается новой, если она отделена от предыдущей символом перевода строки.

СтрСравнить(<Строка1>, <Строка2> ) – сравнивает две строки без учета регистра. Функция работает аналогично объекту СравнениеЗначений . Возвращает:

  • 1 — если первая строка больше второй
  • -1 — если вторая строка больше первой
  • 0 — если строки равны

СтрСравнить("Первая строка" , "Вторая строка" ) ; // 1

В данной статье я расскажу вам про функцию быстрого поиска 1С Предприятие 8. Что такое быстрый поиск? Очень просто. Быстрый поиск — это один из способов навигации в больших списках записей 1С. Это могут быть списки документов, справочники , регистры — все то, что представлено таблицами.

Что такое быстрый поиск?

Функция быстрого поиска в документах 1С Предприятие чрезвычайно удобна и позволяет не пролистывать огромные массивы данных (к примеру, с помощью полосы прокрутки), а сразу перейти к нужному месту в списке. К сожалению, начинающие пользователи 1С Предприятие 8 (в том числе и 1С Бухгалтерии 8) поначалу не используют возможности быстрого поиска, предпочитая листать списки документов вручную (а они могут быть очень большими). Данная статья поможет вам разобраться с использованием быстрого поиска в 1С.

Прежде всего следует заметить, что в конфигурациях 1С Предприятие 8, построенных на управляемых формах , быстрый поиск работает иначе, чем в предыдущих версиях 1С. Поэтому разберем отдельно использование быстрого поиска в управляемых формах и в обычных.

Быстрый поиск в 1С Бухгалтерии 8.2

В версиях 1С Бухгалтерии с 8.0 по 8.2 функция предназначена именно для перехода к нужной части списка. Для примера посмотрите на окно плана счетов , приведённое на рисунке.


В окне выделена некоторая строка. Обратите внимание малозаметный треугольник из полосок, на который указывает красная стрелка. Как и в других программах Windows, где есть списки (например, в Проводнике), положение этого маркера (треугольника) определяет сортировку списка в целом — в какой колонке установлен маркер, по той и будет отсортирован весь список. На рисунке маркер стоит в колонке Код , следовательно счета в плане счетов будут отсортированы по коду.

Маркер можно перемещать с одной колонки на другую, щёлкая на нужной колонке (на ЗАГОЛОВКЕ колонки! ) мышкой. Если маркер и так уже стоит в текущей колонке, то щелчок приведет к изменению направления сортировки на противоположное (т.е. от большего к меньшему или наоборот). Это стандартное поведение для любых программ Windows. В чем же особенность этого маркера в 1С Предприятии и как это связано с быстрым поиском?

Быстрый поиск в списках 1С Предприятие 8 осуществляется по колонке, в которой стоит маркер. В данном случае быстрый поиск в плане счетов будет осуществляться по колонке Код.

Тут была важная часть статьи, но без JavaScript её не видно!

Как пользоваться быстрым поиском в 1С? Легко! Просто начните печатать то, что хотите найти в ДАННОЙ колонке , т.е. там, где стоит маркер. В примере на рисунке выше следует вводить номер счета. Например, вы хотите найти счет 50 Касса . В таком случае введите (мышкой щелкать никуда не нужно! ) число 50 с клавиатуры и если в данной колонке есть счет с таким номером (а он, конечно, есть), то список прокрутится до этой строки, а сама строка окажется выделенной. Результат показан на скриншоте плана счетов ниже.

сайт_

Текст, на который указывает стрелка, стирать потом не нужно — он сам исчезнет.

Если в приведенном примере начать вводить слово "Касса", то текст в нижней части окна будет вводится, а затем стираться. Происходит это потому, что как только начало вводимой строки быстрого поиска перестает совпадать с началом хотя бы одной строки в данной колонке, 1С Предприятие делает вывод, что искомая строка не найдена и автоматически её стирает. В связи с этим следует запомнить два правила .

В 1С Предприятии 8 быстрый поиск производится по началу строки, т.е. в колонке ищется совпадение вводимого текста с началом одной из строк этой колонки.
Отсюда вытекает важная рекомендация: при вводе данных в справочники именуйте элементы так, чтобы их было удобно искать при помощи быстрого поиска. Например, название контрагента лучше писать как "ИмяФирмы ООО", чем "ООО ИмяФирмы". И тем более не стоит использовать в названии кавычки и прочие ненужные символы (речь идет о заполнении поля Наименование в формах).

Если вы начали вводить текст, а он стирается — то, что вы ищете, отсутствует в данной колонке! В этом случае проверьте язык ввода, а также колонку в которой производится быстрый поиск. Типичная ошибка — выбрана не та колонка. Например, маркер установлен в колонке Код, а поиск производится по названию счета.

Быстрый поиск в 1С Бухгалтерии 8.3

Теперь посмотрим, чем отличается быстрый поиск в версии 1С Предприятие 8.3 . Использование во многом схоже с версией 8.2, однако есть одно существенное отличие, которое следует запомнить.

В 1С Бухгалтерии 8.3, а также в любых других конфигурациях на управляемых формах (тот самый новый интерфейс), работает как фильтр. Проще говоря, в результате работы функции быстрого поиска часть списка скрывается .

Как этим пользоваться, мы с вами сейчас выясним. Для начала посмотрите на скриншот окна плана счетов 1С Бухгалтерии 8.3, приведенный ниже.

сайт_

Как видите, тот же самый маркер в одной из колонок. Поиск так же производится по колонке, в которой установлен маркер. Это всё осталось без изменений. Однако, если начать вводить текст (в примере - номер счета), то произойдет следующее.

сайт_

Как видите, просто автоматически открылось окно поиска. Такое же точно окно откроется, если нажать на кнопку поиска на панели инструментов окна (на рисунке подчеркнута). В результате при нажатии в окне поиска кнопки Найти (на картинке скрыта за выпадающим меню) или просто Enter, то получиться следующий результат.

сайт_

Отсюда видно, что быстрый поиск в 1С Бухгалтерии 8.3 просто оставляет видимой часть списка, удовлетворяющую условиям поиска. При этом кнопка Найти пропадает, а вместо неё появляется линза с крестиком (на рис. подчеркнута), при нажатии на которую список возвращается в исходное состояние (при этом остаётся выделена строка, найденная в результате быстрого поиска).

Еще одна важная особенность быстрого поиска в 1С Бухгалтерии 8.3 — совпадение ищется не по началу строки, как в версии 8.2, а производится поиск на совпадение с любой частью строк в колонке. Таким образом, если контрагента назвать "ООО ИмяФирмы", а при поиске начать вводить "ИмяФирмы ООО", то строка все равно найдется!

Делаем выводы

Таким образом, быстрый поиск в 1С Бухгалтерии 8.2 и более ранних версиях предназначается для прокрутки списка к нужной строке, а в 1С Бухгалтерии 8.3 быстрый поиск работает как обычный фильтр, скрывая ненужную вам часть списка.

Понравилось? Лайкни нас на Facebook