Отметить слово. Находит слово и отмечает место, где оно найдено. Возвращает Истина если слово найдено.
// Находит слово и отмечает место, где оно найдено. Возвращает Истина если слово найдено.
Функция ОтметитьСлово(СтруктураГде, Слово, ИспользоватьРазделитель = Ложь) Экспорт
Если СтрНачинаетсяС(СтруктураГде.Значение, "#") Тогда
СтруктураГде.Значение = Сред(СтруктураГде.Значение, 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
///////////////////////////////////////////////////////////////////////////////////////////////////////
ОтметитьСсылкиНаПредопределенныеДанные (БСП)
Новое событие ПриВыбореСловаТ9
ОтметитьВыполнениеОбработки (БСП)