ОтметитьСлово (БСП)

Автор: 1С
ОбщийМодуль.ВариантыОтчетов
БСП

Отметить слово. Находит слово и отмечает место, где оно найдено. Возвращает Истина если слово найдено.

// Находит слово и отмечает место, где оно найдено. Возвращает Истина если слово найдено.
Функция ОтметитьСлово(СтруктураГде, Слово, ИспользоватьРазделитель = Ложь) Экспорт
	Если СтрНачинаетсяС(СтруктураГде.Значение, "#") Тогда
		СтруктураГде.Значение = Сред(СтруктураГде.Значение, 2);
	КонецЕсли;
	ОстатокВРег = ВРег(СтруктураГде.Значение);
	Позиция = СтрНайти(ОстатокВРег, Слово);
	Если Позиция = 0 Тогда
		Возврат Ложь;
	КонецЕсли;
	Если СтруктураГде.КоличествоНайденныхСлов = 0 Тогда
		// Инициализация переменной, содержащей директивы для подсветки слов.
		СтруктураГде.ПодсветкаСлов = Новый СписокЗначений;
		// Прокрутка фокуса до значащего слова (обнаруженной информации).
		Если ИспользоватьРазделитель Тогда
			РазделительХранения = Символы.ПС;
			РазделительПредставления = РазделительПредставления();
			ДлинаРазделителя = СтрДлина(РазделительХранения);
			Пока Позиция > 10 Цикл
				ПозицияРазделителя = СтрНайти(ОстатокВРег, РазделительХранения);
				Если ПозицияРазделителя = 0 Тогда
					Прервать;
				КонецЕсли;
				Если ПозицияРазделителя < Позиция Тогда
					// Перенос фрагмента до разделителя в конец области.
					СтруктураГде.Значение = (
						Сред(СтруктураГде.Значение, ПозицияРазделителя + ДлинаРазделителя)
						+ РазделительХранения
						+ Лев(СтруктураГде.Значение, ПозицияРазделителя - 1));
					ОстатокВРег = (
						Сред(ОстатокВРег, ПозицияРазделителя + ДлинаРазделителя)
						+ РазделительХранения
						+ Лев(ОстатокВРег, ПозицияРазделителя - 1));
					// Обновление информации о расположении слова.
					Позиция = Позиция - ПозицияРазделителя - ДлинаРазделителя + 1;
				Иначе
					Прервать;
				КонецЕсли;
			КонецЦикла;
			СтруктураГде.Значение = СтрЗаменить(СтруктураГде.Значение, РазделительХранения, РазделительПредставления);
			ОстатокВРег = СтрЗаменить(ОстатокВРег, РазделительХранения, РазделительПредставления);
			Позиция = СтрНайти(ОстатокВРег, Слово);
		КонецЕсли;
	КонецЕсли;
	// Регистрация найденного слова.
	СтруктураГде.КоличествоНайденныхСлов = СтруктураГде.КоличествоНайденныхСлов + 1;
	// Отметка слов.
	ДлинаЛевойЧасти = 0;
	ДлинаСлова = СтрДлина(Слово);
	Пока Позиция > 0 Цикл
		СтруктураГде.ПодсветкаСлов.Добавить(ДлинаЛевойЧасти + Позиция, "+");
		СтруктураГде.ПодсветкаСлов.Добавить(ДлинаЛевойЧасти + Позиция + ДлинаСлова, "-");
		ОстатокВРег = Сред(ОстатокВРег, Позиция + ДлинаСлова);
		ДлинаЛевойЧасти = ДлинаЛевойЧасти + Позиция + ДлинаСлова - 1;
		Позиция = СтрНайти(ОстатокВРег, Слово);
	КонецЦикла;
	Возврат Истина;
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ОтметитьСсылкиНаПредопределенныеДанные (БСП)

Склонение слов

ОтметитьВыполнениеОбработки (БСП)

ОтметитьКОбработке (БСП)

РазложитьСтрокуПоискаВМассивСлов (БСП)

ЭтоРазделительСлов (БСП)

ОтметитьРегистраторыКОбработке (БСП)

ТемаПоТекстуСообщения (БСП)

ОтметитьРегистрациюОтложенныхОбработчиковОбновления (БСП)

TurboConf - расширение Конфигуратора 1С