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