Глобальный контекст.СтрНайти

Методы · StrFind

Находит первое вхождение искомой строки как подстроки в исходной строке. Сравнение выполняется с учетом регистра.

Синтаксис

СтрНайти(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>)

Примеры платформы

Если СтрНайти(Сотрудник.Имя, "Сергей") > 0 Тогда
    Сообщить(Сотрудник.Имя + " таб. №" + Сотрудник.Код);
КонецЕсли;
Полное описание, параметры и ограничения

Глобальный контекст.СтрНайти (Global context.StrFind)

Глобальный контекст (Global context)

СтрНайти (StrFind)

Доступен, начиная с версии 8.3.6 (в режиме совместимости с версией 8.3.6 и последующими).

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

<Строка> (обязательный)
Тип: Строка.
Исходная строка.

<ПодстрокаПоиска> (обязательный)
Тип: Строка.
Искомая подстрока.

<НаправлениеПоиска> (необязательный)
Тип: НаправлениеПоиска.
Указывает направление поиска подстроки в строке.
Значение по умолчанию: СНачала.

<НачальнаяПозиция> (необязательный)
Тип: Число.
Указывает позицию в строке, с которой начинается поиск.
Если параметр не задан и в параметре НаправлениеПоиска указано значение СНачала, то значение по умолчанию равно 1.

Если параметр не задан и в параметре НаправлениеПоиска указано значение СКонца, то значение по умолчанию равно длине строки.
Допускаются значения от 1 до количества символов в строке, в которой выполняется поиск. Если указано значение, не входящее в диапазон, генерируется ошибка "Неверное значение параметра".

<НомерВхождения> (необязательный)
Тип: Число.
Указывает номер вхождения искомой подстроки в исходной строке.
Значение по умолчанию: 1.
Возвращаемое значение:
Тип: Число.
Позиция первого знака найденной подстроки. Нумерация символов в строке начинается с 1. Если строка не содержит указанной подстроки, то возвращается 0.
Описание:

Находит первое вхождение искомой строки как подстроки в исходной строке.
Сравнение выполняется с учетом регистра.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер, интеграция.

Примечание:
Если параметр <ПодстрокаПоиска> пустая строка, то возвращает 1.
Если оба параметра пустые строки, то возвращает 1.
Пример:

Если СтрНайти(Сотрудник.Имя, "Сергей") > 0 Тогда
Сообщить(Сотрудник.Имя + " таб. №" + Сотрудник.Код);
КонецЕсли;

См. также:
Глобальный контекст, метод СтрНачинаетсяС
Глобальный контекст, метод СтрЗаканчиваетсяНа

Использование в версии:

Доступен, начиная с версии 8.3.6 (в режиме совместимости с версией 8.3.6 и последующими).

Методическая информация

Практические примеры

Получить свою памятку итогов как текстовый макет, не файл

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

Где и как запускать

Полный серверный модуль своей новой ПУСТОЙ УчебныеОстатки85, платформа 8.5.1.1343. Административные настройки собственного регистра; здесь не запускался.

Подготовка

  1. Создайте НОВУЮ пустую файловую базу, имя корневой конфигурации УчебныеОстатки85. Не добавляйте эти объекты в УТ/КА2/УНФ/БП. Режим управления блокировкой данных конфигурации — Управляемый.

  2. Документы → Добавить: УчебноеДвижение85. Номер: Строка длиной 40, автонумерация выключена. Модули объекта и менеджера оставьте пустыми; не добавляйте обработчики, подписки и обязательные пользовательские реквизиты.

  3. Регистры накопления → Добавить: УчебныеОстатки85. Вид регистра Остатки. Единственное измерение КодТовара: Строка 50, индексировать, проверка заполнения Показывать ошибку. Единственный ресурс Количество: Число 12,3, неотрицательное. Дополнительных реквизитов нет.

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

  5. Корневой режим совместимости Не использовать; платформа именно 8.5.1.1343. Единственный регистр — собственный УчебныеОстатки85 вида Остатки, единственный документ — УчебноеДвижение85. База новая пустая, не копия рабочей.

  6. Для этого блока никакие документы и движения не создавайте. Запрос проверяет отсутствие записей своего регистра до административного вызова. Других пользователей, обменов, расширений и фоновых заданий нет.

  7. Создайте серверный общий модуль УчебныеИтогиПримеры. Вставьте весь модуль одного урока, вызовите ВыполнитьПример() Экспорт из собственной серверной команды обработки; обновите конфигурацию БД.

  8. Это операции настройки/обслуживания регистра, не проведение документа. Откат движений не обещает восстановить все настройки/внутренние таблицы итогов.

  9. Урок с границами сознательно меняет диапазон в собственном одноразовом пустом стенде. Он не восстанавливает исходный диапазон и не предназначен для рабочего регистра. Перед таким ручным опытом сохраните резервную копию собственной учебной базы.

  10. При переключении булевых флагов исходное значение читается заранее и восстанавливается при успехе/ошибке. Если восстановление само завершилось ошибкой, код сообщает об этом явно; успешное восстановление не выдумывается.

  11. Примеры здесь не запускались в 1С. Ваши настройки, документы и итоги этим заполнением не изменялись.

  12. У своего УчебныеОстатки85 добавьте макет УчебнаяПамяткаИтогов типа Текстовый документ: первая строка OWN-TOTALS-85, вторая Пустой учебный регистр, не рабочая база. Обновите БД.

Процедура ВыполнитьПример() Экспорт
    Если Метаданные.Документы.Количество() <> 1
        Или Метаданные.РегистрыНакопления.Количество() <> 1
        Или Метаданные.Документы.Найти("УчебноеДвижение85") = Неопределено Тогда
        ВызватьИсключение "Разрешены только собственный учебный документ и регистр";
    КонецЕсли;
    Описание = Метаданные.РегистрыНакопления.Найти("УчебныеОстатки85");
    Если Описание = Неопределено Тогда
        ВызватьИсключение "Сначала создайте собственный учебный регистр";
    КонецЕсли;
    Если Описание.ВидРегистра <> Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки
        Или Описание.Измерения.Количество() <> 1
        Или Описание.Ресурсы.Количество() <> 1
        Или Описание.Реквизиты.Количество() <> 0
        Или Описание.Измерения.Найти("КодТовара") = Неопределено
        Или Описание.Ресурсы.Найти("Количество") = Неопределено Тогда
        ВызватьИсключение "Нужен регистр остатков с КодТовара и Количество";
    КонецЕсли;
    Менеджер = РегистрыНакопления.УчебныеОстатки85;
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
        ВызватьИсключение "Нужен собственный стенд без старого режима совместимости";
    КонецЕсли;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Не вызывайте административный опыт внутри чужой транзакции";
    КонецЕсли;
    Проверка = Новый Запрос;
    Проверка.Текст = "ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Строк
    |ИЗ РегистрНакопления.УчебныеОстатки85";
    Данные = Проверка.Выполнить().Выгрузить();
    Если Данные.Количество() <> 1 Тогда
        ВызватьИсключение "Не получена собственная контрольная строка";
    КонецЕсли;
    Если Данные[0].Строк <> 0 Тогда
        ВызватьИсключение "В собственном регистре уже есть движения: этот пустой административный опыт запрещён";
    КонецЕсли;
    Макет = Менеджер.ПолучитьМакет("УчебнаяПамяткаИтогов");
    Если ТипЗнч(Макет) <> Тип("ТекстовыйДокумент") Тогда
        ВызватьИсключение "Подготовлен собственный текстовый макет, другой тип не принимается";
    КонецЕсли;
    ТекстПамятки = Макет.ПолучитьТекст();
    Сообщить(СтрНайти(ТекстПамятки, "OWN-TOTALS-85") > 0);
    Сообщить(СтрНайти(ТекстПамятки, "Пустой учебный регистр, не рабочая база") > 0);
    Сообщить("Получен только собственный макет, запись/печать/сохранение файла не выполнялись");
КонецПроцедуры

Разбор по шагам

  1. У собственного регистра добавить макет УчебнаяПамяткаИтогов типа Текстовый документ.

  2. Внести две свои строки-маркера из подготовки, обновить БД.

  3. Получить только именованный макет собственного регистра.

  4. Проверить тип, прочитать текст и проверить оба маркера.

  5. Ничего не сохранять в файлы и не печатать.

Как проверить результат

  1. Два сравнения наличия маркеров Истина.

  2. Другой тип макета останавливается до ПолучитьТекст.

  3. Ни файл, ни печать, ни рабочие данные не создаются.

Ожидаемый результат

Разобраны полиморфный результат ПолучитьМакет и собственная текстовая подготовка.

На что обратить внимание

  1. Свойства и методы относятся только к собственному пустому регистру. Нельзя менять проверку имени на рабочий регистр ради опыта.

  2. ПолучитьИспользованиеИтогов и ПолучитьИспользованиеТекущихИтогов — разные настройки. Текущие итоги применимы только к Остатки.

  3. Булево возвращаемое значение метода не объявляется исходным состоянием или измеренным ускорением без отдельного контракта.

  4. Типизированные даты/флаги и явные проверки не являются доказательством запуска в 1С; здесь выполнялись только статические проверки.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Найти причину ошибки собственного фонового расчёта

Передаём -1 вместо количества и намеренно получаем собственную ошибку в фоне. Исключение внутри рабочего метода отличаем от исключения запуска.

Где и как запускать

Полный серверный неглобальный общий модуль УчебныеФоновыеЗадачи отдельной собственной учебной конфигурации.

Подготовка

  1. Создайте отдельную собственную учебную конфигурацию с именем УчебнаяКонфигурацияСинтаксиса. Не используйте рабочую базу или копию с включёнными заданиями обмена, рассылки и обработчиками бизнес-данных.

  2. Создайте неглобальный общий модуль УчебныеФоновыеЗадачи: Сервер = Истина, Глобальный = Ложь, Привилегированный = Ложь. Вставьте полный модуль одного урока; имя модуля используется в строке запуска.

  3. ВыполнитьПример() вызывайте из серверного обработчика своей учебной команды обычного сеанса 1С. Не запускайте из COM/внешнего соединения с файловой базой или из другого фонового задания файловой базы.

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

  5. Задание считает собственные числа в памяти и публикует СообщениеПользователю. Документы, регистры, файлы, интернет и настройки пользователей не меняются. История собственных заданий остаётся в базе по правилам платформы.

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

Процедура Рассчитать(Количество, Цена, Режим) Экспорт
    Если Количество < 0 Или Количество > 1000000 Или Количество <> Цел(Количество) Тогда
        ВызватьИсключение "guide-owned: количество должно быть целым от 0 до 1000000";
    КонецЕсли;
    Если Цена < 0 Тогда
        ВызватьИсключение "guide-owned: цена не может быть отрицательной";
    КонецЕсли;
    Если Режим = "Книга" Тогда
        Сумма = Количество * Цена;
    ИначеЕсли Режим = "Пакет" Тогда
        Сумма = 0;
        Для Номер = 1 По Количество Цикл
            Сумма = Сумма + Цена;
        КонецЦикла;
    Иначе
        ВызватьИсключение "guide-owned: неизвестный режим";
    КонецЕсли;
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "guide-owned: сумма " + Формат(Сумма, "ЧГ=0");
    Сообщение.Сообщить();
КонецПроцедуры

Процедура ВыполнитьПример() Экспорт
    Параметры = Новый Массив;
    Параметры.Добавить(-1);
    Параметры.Добавить(250);
    Параметры.Добавить("Книга");
    Ключ = "guide-owned-" + Строка(Новый УникальныйИдентификатор);
    Задание = ФоновыеЗадания.Выполнить("УчебныеФоновыеЗадачи.Рассчитать", Параметры, Ключ, "guide-owned: расчёт книги");
    Сообщить("Собственный идентификатор: " + Строка(Задание.УникальныйИдентификатор));
    Задание = Задание.ОжидатьЗавершенияВыполнения(3);
    Если Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
        Сообщить("Таймаут: собственное задание ещё активно, успех не подтверждён");
        Возврат;
    КонецЕсли;
    Если Задание.Состояние <> СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
        Сообщить("Ожидалось аварийное завершение, фактически: " + Строка(Задание.Состояние));
        Возврат;
    КонецЕсли;
    Ошибка = Задание.ИнформацияОбОшибке;
    Если Ошибка = Неопределено Тогда
        ВызватьИсключение "Аварийное состояние без доступной информации об ошибке";
    КонецЕсли;
    Сообщить(СтрНайти(Ошибка.Описание, "guide-owned: количество") > 0);
    Сообщить("Модуль: " + Ошибка.ИмяМодуля);
    Сообщить("Строка: " + Строка(Ошибка.НомерСтроки));
    Сообщить("Описание: " + Ошибка.Описание);
КонецПроцедуры

Разбор по шагам

  1. Запустить ту же экспортную процедуру с отрицательным количеством: проверка входных данных находится внутри фонового метода.

  2. Обновить объект ограниченным ожиданием. Если пока Активно, не читать отсутствующую ошибку как успешный результат.

  3. Только при ЗавершеноАварийно получить ИнформацияОбОшибке, проверить собственный текст и вывести модуль, номер строки и описание.

  4. Исправить -1 на 3 и повторить запуск с новым ключом. Это новая задача, а не изменение уже завершённой.

Как проверить результат

  1. При аварийном завершении поиск собственного текста ошибки даёт Истина.

  2. При количестве 3 задача должна завершиться успешно. Текст об отрицательном количестве исчезает; при таймауте окончательный результат пока неизвестен.

Ожидаемый результат

Полный воспроизводимый пример диагностики собственной валидации в фоне, без проведения документов.

На что обратить внимание

  1. Выполнить может сам выбросить исключение до запуска, например из-за прав или несериализуемого параметра: тогда объекта задания нет.

  2. ОжидатьЗавершенияВыполнения возвращает состояние, а не автоматически выбрасывает исключение из завершившегося рабочего метода.

  3. Не перезапускайте финансовую или обменную операцию автоматически только потому, что истёк таймаут. Этот урок считает только собственные числа.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.