Все публикации

БСП
Разработки

Использование СканераШтрихКодов с компонентой Драйвер1СУстройствоВводаNative от 1С

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

Передача параметров и отбора в общую форму отчета

НаКлиенте Процедура ОписьНаСтройку(Команда) КомпоновщикНастроек = ПолучитьКомпоновщикНастроек(); Настройки = КомпоновщикНастроек.Настройки; КомпоновкаДанныхКлиентСервер.УстановитьПараметр(Настройки, ДатаКонца, ТекущаяДата()); ПараметрыОткрытия = Нов...
RomanVG 100 6 1

TurboConf ИР адаптер 1.75 Наш выбор

Cкрипт "ИР Адаптер" для платного расширения TurboConf обеспечивает в конфигураторе 1С 8 доступ к функциям мощной подсистемы "Инструменты разработчика Tormozit" (ИР)
tormozit
Бесплатно

Показать подтверждение закрытия Формы

Вариант 1. Будет выведено сообщение "Закрыть форму?" и 2 кнопки "Да/Нет". У формы нужно добавить реквизит, например "ЗакрытьФормуБезПодтверждения", содержащий в себе признак того, нужно выводить предупреждение или нет. НаКлиенте Процедура ПередЗакрытием(От...
RomanVG 100 6 1

Конвертировать объект в структуру

Возвращает структуру реквизитов объекта или ссылки, включая стандартные реквизиты и реквизиты табличной части. Можно использовать, если необходимо, например, эмулировать вызов метода, использующего объект формы.
Nerich 22 2
// Возвращает структуру реквизитов объекта или ссылки, включая стандартные реквизиты и реквизиты табличной части.
// Можно использовать, если необходимо, например, эмулировать вызов метода, использующего объект формы.
//
// Параметры:
//  ВходящийОбъект - ЛюбаяСсылка или ЛюбойОбъект
// 
// Возвращаемое значение:
//  Структура
//
Функция КонвертироватьОбъектВСтруктуру(ВходящийОбъект)

   СтруктураОбъекта = Новый Структура;

   СтандартныеРеквизитыОбъекта = ВходящийОбъект.Метаданные().СтандартныеРеквизиты;
   Для Каждого СтандартныйРеквизит Из СтандартныеРеквизитыОбъекта Цикл
       СтруктураОбъекта.Вставить(СтандартныйРеквизит.Имя, ВходящийОбъект[СтандартныйРеквизит.Имя]);
   КонецЦикла;

   РеквизитыОбъекта = ВходящийОбъект.Метаданные().Реквизиты;
   Для Каждого Реквизит Из РеквизитыОбъекта Цикл
       СтруктураОбъекта.Вставить(Реквизит.Имя, ВходящийОбъект[Реквизит.Имя]);
   КонецЦикла;

   ТЧ = ВходящийОбъект.Метаданные().ТабличныеЧасти;
   Для Каждого ТаблЧасть Из ТЧ Цикл
       ТЗ = ВходящийОбъект[ТаблЧасть.Имя].Выгрузить();
       Массив = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТЗ);
       СтруктураОбъекта.Вставить(ТаблЧасть.Имя, Массив);
   КонецЦикла;

   Возврат СтруктураОбъекта;

КонецФункции

Отправка писем с приложением эксель для БП

Отправка сформированного табличного документа в формате эксель для БП
Vitor 13 1 1
Процедура СформироатьТабДок()
	ТабДок = Новый ТабличныйДокумент;  
	ОблШапка = Макет.ПолучитьОбласть("Шапка");
	ТабДок.Вывести(ОблШапка);
	ПотокВПамяти = Новый ПотокВПамяти();
	ТабДок.Записать(ПотокВПамяти, ТипФайлаТабличногоДокумента.XLSX); 
	ДвоичныеДанные = ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные();
	Тема = "Тема от: "+Строка(Формат(ТекущаяДата()-86400, "ДФ=dd.MM.yyyy"));
	ТекстПисьма = "";
	ОтправитьEmail("Адрес отправки", , Тема, ТекстПисьма, ДвоичныеДанные, "Имя отправителя");
КонецПроцедуры   

&НаСервере
Процедура ОтправитьEmail(АдресПочты, Копия = Неопределено, Тема, ТекстПисьма, Вложение = Неопределено, ИмяОтправителя) 
	Профиль  = Новый ИнтернетПочтовыйПрофиль;
	Профиль.АдресСервераIMAP = "imap.mail.ru";
	Профиль.АдресСервераSMTP = "smtp.mail.ru";
	Профиль.ПортSMTP = 465;
	Профиль.ПортIMAP = 993;
	Сообщение = Новый ИнтернетПочтовоеСообщение;
	Профиль.Пользователь = "Пользователь";
	Профиль.Пароль = "Пароль";
	Профиль.ПользовательSMTP = "ПользовательSMTP";
	Профиль.ПарольSMTP = "ПарольSMTP";
	Сообщение.Отправитель.Адрес = "Адрес";
	Сообщение.ИмяОтправителя = ИмяОтправителя;
	Профиль.ИспользоватьSSLSMTP = Истина;
	Сообщение.Получатели.Добавить(АдресПочты);
	Сообщение.Тема = Тема;
	Сообщение.Тексты.Добавить(ТекстПисьма, ТипТекстаПочтовогоСообщения.ПростойТекст); 
	Если Вложение <> Неопределено тогда                           
		Тема = Тема+".xlsx";
		Сообщение.Вложения.Добавить(Вложение,Тема);
	КонецЕсли;
	Почта = Новый ИнтернетПочта;
	Попытка
		Почта.Подключиться(Профиль); 
		Почта.Послать(Сообщение);
		Почта.Отключиться();
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
КонецПроцедуры

Сколько процентов число от числа

Возвращает сколько процентов число от числа
SeiOkami 499 5 11 14
// Сколько процентов число от числа
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/151
// 
// Параметры:
//  Число - Число
//  ОтЧисла - Число
//  ОкруглятьДо - Число - Количество знаков округления, 0 - не требуется
// 
// Возвращаемое значение:
//  Число
//
// Пример:
//  Процент = СколькоПроцентовЧислоОтЧисла(10, 100);  // 10
//  Процент = СколькоПроцентовЧислоОтЧисла(9, 69, 2); // 13.04
//
Функция СколькоПроцентовЧислоОтЧисла(
	Знач Число, Знач ОтЧисла, Знач ОкруглятьДо = 0) Экспорт
	
	Если ОтЧисла = 0 Тогда
		Возврат 0;
	КонецЕсли;
	
	Результат = (Число / ОтЧисла) * 100;
	
	Если ОкруглятьДо > 0 Тогда
		Результат = Окр(Результат, ОкруглятьДо);
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

Копия массива

Возвращает копию массива с указанием числа элементов и начального индекса В коде есть две реализации метода: 1. КопияМассиваНаполнением - Создает пустой массив и наполняет его циклом из оригинала 2. КопияМассиваУдалениемЛишних - Создает полную копию и удаления лишние элементы А так же метод КопияМассива, который в зависимости от числа объектов массива сам выбирает один из методов
SeiOkami 499 5 11 14

// Возвращает копию массива с указанием числа элементов и начального индекса
// Внутри есть определение метода копирования
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/150
// 
// Параметры:
//  Массив - Массив из Произвольный
//  НачальныйЭлемент - Число - Индекс начального элемента
//  ЧислоЭлементов - Число - Число выбираемых элементов, 0 - все оставшиеся
//  МетодКопирования - Число - 0 - определять автоматически, 1 - наполнение циклом, 2 - удаление лишних
// 
// Возвращаемое значение:
//  Массив из Произвольный
//
// Примеры:
//  ИсходныйМассив = СтрРазделить("1,2,3,4,5", ",");
//  Результат = КопияМассива(ИсходныйМассив, 1, 3); //"2,3,4"     - Три элемента с индекса 1
//  Результат = КопияМассива(ИсходныйМассив, 1);    //"2,3,4,5"   - Все элементы с индекса 1
//  Результат = КопияМассива(ИсходныйМассив, 0, 2); //"1,2"       - Первые 2 элемента
//  Результат = КопияМассива(ИсходныйМассив);       //"1,2,3,4,5" - Полная копия массива
//  
Функция КопияМассива(Знач Массив, Знач НачальныйЭлемент = 0, Знач ЧислоЭлементов = 0, Знач МетодКопирования = 0) Экспорт
	
	ВсегоЭлементов = Массив.Количество();
	
	Если МетодКопирования = 0 Тогда
	
		//Если массив меньше, то нет принципиально разницы в скорости
		//TODO: Определить экспериментально идеальное значение
		МинимальнаяДлинаМассиваДляПоискаМетода = 10;
		Если ВсегоЭлементов > МинимальнаяДлинаМассиваДляПоискаМетода Тогда
		
			Если ЧислоЭлементов = 0 Тогда
				ЧислоЭлементов = ВсегоЭлементов - (НачальныйЭлемент + 1);
			КонецЕсли;
			
			Если ЧислоЭлементов = 0 Тогда
				Возврат Новый Массив;
			Иначе
				ПроцентНужных = (ЧислоЭлементов / ВсегоЭлементов) * 100;
				Если ПроцентНужных > 90 Тогда
					МетодКопирования = 2; //Легче скопировать весь большой массив и удалить лишние элементы
				Иначе
					МетодКопирования = 1; //Легче взять нужные элементы из большого массива
				КонецЕсли;
			КонецЕсли;
		
		Иначе
			
			МетодКопирования = 1; //Устроит любой метод
			
		КонецЕсли;
		
	КонецЕсли;
	
	Если МетодКопирования = 1 Тогда
		КопияМассива = КопияМассиваНаполнением(Массив, НачальныйЭлемент, ЧислоЭлементов);
	Иначе
		КопияМассива = КопияМассиваУдалениемЛишних(Массив, НачальныйЭлемент, ЧислоЭлементов);
	КонецЕсли;
	
	Возврат КопияМассива;
	
КонецФункции

// Возвращает копию массива с указанием числа элементов и начального индекса
// Создает полную копию и удаления лишние элементы
// Эффективен, когда нужно взять бОльшую часть большОго массива
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/150
// 
// Параметры:
//  Массив - Массив из Произвольный
//  НачальныйЭлемент - Число - Индекс начального элемента
//  ЧислоЭлементов - Число - Число выбираемых элементов, 0 - все оставшиеся
// 
// Возвращаемое значение:
//  Массив из Произвольный
//  
// Примеры:
//  ИсходныйМассив = СтрРазделить("1,2,3,4,5", ",");
//  Результат = КопияМассива(ИсходныйМассив, 1, 3); //"2,3,4"     - Три элемента с индекса 1
//  Результат = КопияМассива(ИсходныйМассив, 1);    //"2,3,4,5"   - Все элементы с индекса 1
//  Результат = КопияМассива(ИсходныйМассив, 0, 2); //"1,2"       - Первые 2 элемента
//  Результат = КопияМассива(ИсходныйМассив);       //"1,2,3,4,5" - Полная копия массива
Функция КопияМассиваУдалениемЛишних(Знач Массив, 
	Знач НачальныйЭлемент = 0, Знач ЧислоЭлементов = 0) Экспорт
	
	КопияМассива = Новый Массив(Новый ФиксированныйМассив(Массив));
	
	Пока НачальныйЭлемент > 0 Цикл
		КопияМассива.Удалить(0);
		НачальныйЭлемент = НачальныйЭлемент - 1;
	КонецЦикла;
	
	Если ЧислоЭлементов > 0 Тогда
		ЭлементовКУдалению = КопияМассива.Количество() - ЧислоЭлементов;
		Пока ЭлементовКУдалению > 0 Цикл
			КопияМассива.Удалить(КопияМассива.ВГраница());
			ЭлементовКУдалению = ЭлементовКУдалению - 1;
		КонецЦикла;
	КонецЕсли;
	
	Возврат КопияМассива;
	
КонецФункции

// Возвращает копию массива с указанием числа элементов и начального индекса
// Создает пустой массив и наполняет его циклом из оригинала
// Эффективен, когда нужно взять несколько элементов из оригинального большого массива
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/150
// 
// Параметры:
//  Массив - Массив из Произвольный
//  НачальныйЭлемент - Число - Индекс начального элемента
//  ЧислоЭлементов - Число - Число выбираемых элементов, 0 - все оставшиеся
// 
// Возвращаемое значение:
//  Массив из Произвольный
//  
// Примеры:
//  ИсходныйМассив = СтрРазделить("1,2,3,4,5", ",");
//  Результат = КопияМассива(ИсходныйМассив, 1, 3); //"2,3,4"     - Три элемента с индекса 1
//  Результат = КопияМассива(ИсходныйМассив, 1);    //"2,3,4,5"   - Все элементы с индекса 1
//  Результат = КопияМассива(ИсходныйМассив, 0, 2); //"1,2"       - Первые 2 элемента
//  Результат = КопияМассива(ИсходныйМассив);       //"1,2,3,4,5" - Полная копия массива
Функция КопияМассиваНаполнением(Знач Массив, 
	Знач НачальныйЭлемент = 0, Знач ЧислоЭлементов = 0) Экспорт
	
	Если ЧислоЭлементов = 0 Тогда
		ЧислоЭлементов = Массив.Количество() - НачальныйЭлемент;
	КонецЕсли;
	
	КопияМассива = Новый Массив(ЧислоЭлементов);
	
	ИндексКопии = 0;
	ИндексМассива = НачальныйЭлемент;
	
	Пока ИндексКопии < ЧислоЭлементов Цикл
		
		КопияМассива[ИндексКопии] = Массив[ИндексМассива];
		
		ИндексМассива = ИндексМассива + 1;
		ИндексКопии = ИндексКопии + 1;
		
	КонецЦикла;
	
	Возврат КопияМассива;
	
КонецФункции

Построчный обход макета

Построчный обход макета
BobrAl 3 1
	Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
	Для Стр=1 По Макет.ВысотаТаблицы Цикл		
		Код=Макет.Область(Стр, 1).Текст; 
	КонецЦикла;

Запуск внешнего отчета в сформированном виде

Отчет находится по наименованию, указывается нужный вариант отчета.
RomanVG 100 6 1
&НаКлиенте
Процедура ИнформацияПоЗданиям(Команда)

	ВнешнийОтчетОбработкаДляОткрытияСсылка = ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере("Информация по зданиям");
	Если Не ЗначениеЗаполнено(ВнешнийОтчетОбработкаДляОткрытияСсылка) Тогда
		Сообщить("Отчет не найден");
		Возврат;
	КонецЕсли;
    
    ИмяОбработкиСлужебное = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВнешнийОтчетОбработкаДляОткрытияСсылка);
    
    ПараметрыФормы = Новый Структура;
    
    ПараметрыФормы.Вставить("КлючВарианта", "Основной");
    ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
    
    ОткрытьФорму("ВнешнийОтчет." + ИмяОбработкиСлужебное + ".Форма", ПараметрыФормы, ЭтаФорма);

КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере(ИмяОтчетаОбработки)
    Возврат Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ИмяОтчетаОбработки).Ссылка;
КонецФункции

Добавление команды в общую форму отчета на БСП

В общем модуле ВариантыОтчетовПереопределяемый, в процедуре НастроитьВариантыОтчетов добавляем Процедура НастроитьВариантыОтчетов(Настройки) Экспорт ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.тдс_ОтчетПоДебиторскойЗадолжен...
RomanVG 100 6 1

Преобразование отчета на СКД в таблицу значений на табличном документе

Иногда с отчетами удобнее (или быстрее) работать в MS Excel, например, когда необходимо связать несколько разных отчетов. Если отчеты выводятся с группировкой, то связать их бывает проблематично. Если у отчета нет своей формы, то можно применить такое унив...
RomanVG 100 6 1

ЗначениеПеречисленияПоСинониму

Возвращает значение перечисления по его синониму // Описание функции // // Параметры: // СинонимПеречисления - Тип.Строка - Синоним перечисления // // ИмяПеречисления - Тип.Строка - Имя метаданных перечисления в базе // ...
Razlomalo 24 1 2

Скрипт автодополнения в стиле Vim (VimComplete)

vigor 7 1
Бесплатно

Скрипт по командам для работы с отладкой (debugHelpers)

vigor 7 1
Бесплатно

Замер времени выполнения кода с выводом результата замера в формате ЧЧ:мм:сс

Razlagutt 30 2 2
ДатаНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
// Какой-то код
Дельта = (ТекущаяУниверсальнаяДатаВМиллисекундах() - ДатаНачала)/1000;
ВремяВыполнения = Формат(Дата(1,1,1) + Дельта, "ДЛФ=T");
Сообщить(ВремяВыполнения);

Таблица из набора данных СКД

Возвращает таблицу значений с колонками набора данных СКД
SeiOkami 499 5 11 14
// Возвращает таблицу значений с колонками набора данных СКД
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/132
// 
// Параметры:
//  НаборДанных - НаборДанныхОбъектСхемыКомпоновкиДанных
// 
// Возвращаемое значение:
//  ТаблицаЗначений
//  
// Пример:
// 	Таблица = ТаблицаИзНабораДанных(СКД.НаборыДанных.Получить(0));
// 	//Таблица содержит пустую ТЗ со всеми колонками для набора. 
// 	//Теперь её можно заполнять данными и далее "скармливать" при формировании СКД
//  
Функция ТаблицаИзНабораДанных(Знач НаборДанных) Экспорт
	
	Результат = Новый ТаблицаЗначений();
	
	Для Каждого Поле Из НаборДанных.Поля Цикл
		Результат.Колонки.Добавить(Поле.Поле, Поле.ТипЗначения, Поле.Заголовок);
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

СтрШаблон (с проверкой существования параметров)

Перед вставкой параметров проверяет существование параметра в шаблоне
SeiOkami 499 5 11 14
// @skip-check method-too-many-params
// Перед вставкой параметров проверяет существование параметра в шаблоне
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/129
// 
// Параметры:
//  Шаблон - Строка
//  Параметр1 - Произвольный
//  Параметр2 - Произвольный
//  Параметр3 - Произвольный
//  Параметр4 - Произвольный
//  Параметр5 - Произвольный
//  Параметр6 - Произвольный
//  Параметр7 - Произвольный
//  Параметр8 - Произвольный
//  Параметр9 - Произвольный
//  Параметр10 - Произвольный
// 
// Возвращаемое значение:
//  Строка
Функция СтрШаблонБезопасно(Знач Шаблон, Знач Параметр1 = Неопределено, 
	Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, Знач Параметр4 = Неопределено, 
	Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, Знач Параметр7 = Неопределено,
	Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено, Знач Параметр10 = Неопределено) Экспорт
	
	ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр1, 1);
	ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр2, 2);
	ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр3, 3);
	ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр4, 4);
	ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр5, 5);
	ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр6, 6);
	ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр7, 7);
	ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр8, 8);
	ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр9, 9);
	ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Шаблон, Параметр10, 10);
	
	Возврат СтрШаблон(Шаблон, 
		Параметр1, Параметр2, Параметр3, Параметр4, Параметр5, 
		Параметр6, Параметр7, Параметр8, Параметр9, Параметр10);
	
КонецФункции

// Затереть параметр при его отсутствии в шаблоне.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/129
// 
// Параметры:
//  Шаблон - Строка
//  Параметр - Произвольный
//  Номер - Число
Процедура ЗатеретьПараметрПриЕгоОтсутствииВШаблоне(Знач Шаблон, Параметр, Знач Номер) Экспорт
	
	Если Параметр <> Неопределено И СтрНайти(Шаблон, "%" + Номер) = 0 Тогда
		Параметр = Неопределено;
	КонецЕсли;
	
КонецПроцедуры

Строка из символа

Возвращает строку нужной длины из указанного символа
SeiOkami 499 5 11 14
// Возвращает строку нужной длины из указанного символа
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/120
// 
// Параметры:
//  Длина - Число
//  Символ - Строка
// 
// Возвращаемое значение:
//  Строка
Функция СтрокаСимволов(Знач Длина, Знач Символ = " ") Экспорт
	
	Квалификатор = Новый КвалификаторыСтроки(Длина, ДопустимаяДлина.Фиксированная);
	ОписаниеТипов = Новый ОписаниеТипов("Строка", Квалификатор);
	Результат = ОписаниеТипов.ПривестиЗначение(""); // Строка
	Если Символ <> " " Тогда
		Результат = СтрЗаменить(Результат, " ", Символ);
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

Проверить корректность шаблона для СтрШаблон()

Проверяет шаблон строки на корректность для передачи в СтрШаблон()
SeiOkami 499 5 11 14
// Возвращает результат проверки корректности шаблона строки (метода СтрШаблон)
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/12
//  
// Параметры:
//  ШаблонСтроки - Строка
// 
// Возвращаемое значение:
//  Булево - Корректен ли шаблон строки
Функция ШаблонСтрокиКорректен(Знач ШаблонСтроки) Экспорт
	
	Попытка
		ПроверитьШаблонСтроки(ШаблонСтроки);
		Возврат Истина;
	Исключение
		Возврат Ложь;
	КонецПопытки;
	
КонецФункции

// Проверяет корректность шаблона строки (метода СтрШаблон)
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/12
// 
// Параметры:
//  ШаблонСтроки - Строка
Процедура ПроверитьШаблонСтроки(Знач ШаблонСтроки) Экспорт
	
	СтрШаблон(ШаблонСтроки, Неопределено, Неопределено, 
    	Неопределено, Неопределено, Неопределено, Неопределено, 
    	Неопределено, Неопределено, Неопределено, Неопределено);
	
КонецПроцедуры

Найти подстроку и выделить оформлением

Метод выделяет подстроку внутри подстроки с использованием метода см. СтрНайтиИВыделитьОформлением Платформенный метод СтрНайтиИВыделитьОформлением() находит только с начала слова Например, если искать "200", то в код элемента не будет выделен: "CNT-000**200**"
SeiOkami 499 5 11 14
// Метод выделяет подстроку внутри подстроки с использованием метода см. СтрНайтиИВыделитьОформлением
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/3
//  
// Параметры:
//  Строка - Строка - Исходная строка
//  Подстрока - Строка - Искомая строка
// 
// Возвращаемое значение:
//  ФорматированнаяСтрока, Неопределено - вернет форматированную строку, если хотя бы одно вхождение найдено
Функция СтрокаНайтиИВыделитьОформлением(Знач Строка, Знач Подстрока) Экспорт

	СтрокаВрег = ВРег(Строка);
	ПодстрокаВрег = ВРег(Подстрока);

	ДлинаСтроки = СтрДлина(Строка);
	ДлинаПодстроки = СтрДлина(Подстрока);

	ЧастиРезультата = Новый Массив; // Массив из Строка, ФорматированнаяСтрока

	НачалоПоиска = 1;
	Пока НачалоПоиска <= ДлинаСтроки Цикл

		ТекущаяКоордината = СтрНайти(СтрокаВрег, ПодстрокаВрег, , НачалоПоиска);
		Если ТекущаяКоордината = 0 Тогда

			Если ЗначениеЗаполнено(ЧастиРезультата) Тогда
				ЧастьСтроки = Сред(Строка, НачалоПоиска);
				ЧастиРезультата.Добавить(ЧастьСтроки);
				Прервать;
			Иначе
				Возврат Неопределено;
			КонецЕсли;

		Иначе

			Если НачалоПоиска < ТекущаяКоордината Тогда
				ЧастьСтроки = Сред(Строка, НачалоПоиска, ТекущаяКоордината - НачалоПоиска);
				ЧастиРезультата.Добавить(ЧастьСтроки);
			КонецЕсли;

			ЧастьСтроки = Сред(Строка, ТекущаяКоордината, ДлинаПодстроки);
			ЧастьСтроки = СтрНайтиИВыделитьОформлением(ЧастьСтроки, Подстрока);
			ЧастиРезультата.Добавить(ЧастьСтроки);

			НачалоПоиска = ТекущаяКоордината + ДлинаПодстроки;

		КонецЕсли;
		
	КонецЦикла;

	Возврат Новый ФорматированнаяСтрока(ЧастиРезультата);

КонецФункции