Совместимость работы со строками. Жизнь до 8.3.6 и после

17.04.20

Разработка - Механизмы платформы 1С

Немного о совместимости со старыми версиям платформы 1С в работе со строками.

До и после

Этот материал из разряда "баян", просто с некоторой порцией дополнительной информации. Вот существующие материалы на эту тему (отдельное спасибо JSON, в свое время материал очень помог):

После выхода платформы 8.3.6 и постепенным отказом конфигураций от совместимости ниже 8.3.6 был актуальным вопрос обновление программного кода в части работы со строками. Хоть это и было 5 лет назад, до сих пор можно встретить решения с совместимостью 8.3.5 и ниже. И это нормально. Сколько еще решений на 7.7, что уж говорить.

В общем, с выходом 8.3.6 жизнь разделилась на до и после, т.к. появились новые методы работы со строками.

 
 Изменения в части работы со строками в 8.3.6

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

А вот если нужно использовать новый код (из БСП, с Инфостарта, с GitHub и т.д.) написанный на новых версиях платформы в рамках решения с совместимостью 8.3.5 и ниже, то могут быть проблемы. Новые возможности работы со строками просто будут недоступны. Важно понимать, что даже если у вас платформа 8.3.16, а совместимость конфигурации все равно 8.3.5 и ниже, то новые методы работы со строками в любом случае будут недоступны. Но можно использовать их аналоги.

Рассмотрим простые варианты их реализации.

СтрНайти

Новая функция для поиска вхождения искомой строки.

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

Вариант реализации для платформы 1C версии < 8.3.6 (или режима совместимости < 8.3.6):

 
 Аналог "СтрНайти()"
Функция _СтрНайти(Знач Строка, Знач СтрокаПоиска, Знач НаправлениеПоискаСтроки = Неопределено, Знач НачальнаяПозиция = 1, Знач НомерВхождения = 1)
	
	Если НаправлениеПоискаСтроки = Неопределено Тогда
		НаправлениеПоискаСтроки = НаправлениеПоискСНачала();
	КонецЕсли;	
	Если НаправлениеПоискаСтроки <> НаправлениеПоискСНачала() 
		И НаправлениеПоискаСтроки <> НаправлениеПоискаСКонца() Тогда
		ВызватьИсключение "Неверное значение параметра";
	КонецЕсли;
	
	ИсходнаяДлинаСтроки = СтрДлина(Строка);
	ИсходнаяДлинаСтрокиПоиска = СтрДлина(СтрокаПоиска);
			
	Если НачальнаяПозиция = 0 ИЛИ НомерВхождения = 0  Тогда		
		Возврат 0;
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(СтрокаПоиска) Тогда
		ИсходнаяСтрокаБезБоковыхПробелов = СокрЛП(Строка);
		Если СтрДлина(ИсходнаяСтрокаБезБоковыхПробелов) = 0 Тогда
			Возврат 1;
		КонецЕсли;
	КонецЕсли; 
	
	Если НаправлениеПоискаСтроки = НаправлениеПоискаСКонца() Тогда
		Строка = СтрокаЗадомНаперед(Строка); 
		СтрокаПоиска = СтрокаЗадомНаперед(СтрокаПоиска); 
	КонецЕсли;
	
	Если НачальнаяПозиция = 1 Тогда
		ДлинаПройденнойЧастиСтроки = 0;
		НеобработаннаяСтрока = Строка;
	Иначе
		ДлинаПройденнойЧастиСтроки = НачальнаяПозиция - 1;
		НеобработаннаяСтрока = Прав(Строка, ИсходнаяДлинаСтроки - НачальнаяПозиция + 1);
	КонецЕсли;
	
	Если НомерВхождения > СтрЧислоВхождений(НеобработаннаяСтрока, СтрокаПоиска) Тогда
		Возврат 0;	
	КонецЕсли; 
	
	НомерНайденногоВхождения = 0;
	Пока НомерНайденногоВхождения < НомерВхождения Цикл
		
		ИндексВхождения = Найти(НеобработаннаяСтрока, СтрокаПоиска);		
		ДлинаПройденнойЧастиСтроки = ДлинаПройденнойЧастиСтроки 
			+ СтрДлина(Лев(НеобработаннаяСтрока, ИндексВхождения + ИсходнаяДлинаСтрокиПоиска - 1));		
		НеобработаннаяСтрока = Прав(НеобработаннаяСтрока, СтрДлина(НеобработаннаяСтрока) 
			- (ИндексВхождения + ИсходнаяДлинаСтрокиПоиска - 1));
		
		НомерНайденногоВхождения = НомерНайденногоВхождения + 1;
		
	КонецЦикла;	
	
	РезультатПоиска = 0;	
	Если НаправлениеПоискаСтроки = НаправлениеПоискаСКонца() Тогда
		РезультатПоиска = ИсходнаяДлинаСтроки 
			- ДлинаПройденнойЧастиСтроки 
			+ ИсходнаяДлинаСтрокиПоиска;
	Иначе	
		РезультатПоиска = ДлинаПройденнойЧастиСтроки + 1 
			- ИсходнаяДлинаСтрокиПоиска;
	КонецЕсли;
	
	Возврат РезультатПоиска;
	
КонецФункции

Поведение практически такое же, как и у платформенного метода. Особенностью также является то, что 3-й параметр "НаправлениеПоискаСтроки" отличается от того, что передается в "родную" функцию платформы. Т.к. в 8.3.6 направление поиска задается значением типа "НаправлениеПоиска", который до 8.3.6 не был доступен, то в этом варианте значение задается строкой. Для удобства это значения сокрыто в двух функциях:

 
 Вспомогательные функции для задания направления поиска

В остальном явных отличий нет.

СтрСравнить

Новая функция для сравнения строк без учета регистра.

СтрСравнить(<Строка1>, <Строка2>)

Вариант реализации для платформы 1C версии < 8.3.6 (или режима совместимости < 8.3.6):

 
 Аналог "СтрСравнить()"

Всего гораздо проще, чем с "СтрНайти".

СтрНачинаетсяС

Функция для определения того, что строка начинается на указанную подстроку.

СтрНачинаетсяС(<Строка>, <СтрокаПоиска>)

Вариант реализации для платформы 1C версии < 8.3.6 (или режима совместимости < 8.3.6):

 
 Аналог "СтрНачинаетсяС()"

Здесь все еще проще, чем в предыдущих вариантах.

СтрЗаканчиваетсяНа

Функция для определения, что строка заканчивается на указанную подстроку.

СтрЗаканчиваетсяНа(<Строка>, <СтрокаПоиска>)

Вариант реализации для платформы 1C версии < 8.3.6 (или режима совместимости < 8.3.6):

 
 Аналог "СтрЗаканчиваетсяНа"

Функция очень простая.

СтрРазделить

Функция разделяем строку на части.

СтрРазделить(<Строка>, <Разделитель>, <ВключатьПустые>)

Вариант реализации для платформы 1C версии < 8.3.6 (или режима совместимости < 8.3.6):

 
 Аналог "СтрРазделить"

Для разбиения исходной строки на массив подстрок используется функция БСП "РазложитьСтрокуВМассивПодстрок". С ней Вы можете ознакомиться в большинстве типовых конфигураций.

СтрСоединить

Функция для соединения массива строк в одну строку.

СтрСоединить(<Строки>, <Разделитель>)

Вариант реализации для платформы 1C версии < 8.3.6 (или режима совместимости < 8.3.6):

 
 Аналог "СтрСоединить()"

Как и в предыдущем случае, здесь мы используем функцию "РазложитьСтрокуВМассивПодстрок" из общего модуля "СтроковыеФункцииКлиентСервер" БСП.

СтрШаблон

Это функция относится больше к форматированию, чем изменению строк. Предназначена для подстановки параметров в строку шаблона.

СтрШаблон(<Шаблон>, <Значение1-Значение10>)

Вариант реализации для платформы 1C версии < 8.3.6 (или режима совместимости < 8.3.6):

 
 Аналог "СтрШаблон()"

Все проще некуда. Также вместо "СтрШаблон()" можно использовать функции БСП:

СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтрокуИзМассива(ШаблонСтроки, Параметры)

// ИЛИ

СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ШаблонСтроки, Параметры)

// Последний можно использовать только с некоторыми оговорками.
// Читайте описание функции.

Есть выбор что и как использовать.

Вспомогательные функции

Часть предложенных функций ссылаются на общий модуль "СтроковыеФункцииКлиентСервер" из БСП. Также есть функция для "переворачивания" строки задом наперед.

Функция СтрокаЗадомНаперед(Знач Строка) Экспорт
	
	Результат = "";
	
	ДлинаСтроки = СтрДлина(Строка); 		
	Для Счетчик = 0 По ДлинаСтроки - 1 Цикл			
		
		Индекс = ДлинаСтроки - Счетчик;			
		Символ = Сред(Строка, Индекс, 1);
		
		Результат = Результат + Символ;
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

Плюс для упрощения указания направления поиска добавлены функции с соответствующими значениями.

Функция НаправлениеПоискСНачала() Экспорт
	
	Возврат "СНачала";
	
КонецФункции

Функция НаправлениеПоискаСКонца() Экспорт
	
	Возврат "СКонца";
	
КонецФункции

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

Не все так хорошо

Да, это решение может помочь в какой-то мере, но рано или поздно все же придется обновлять платформу 1С и отключать совместимость, т.к. предложенное решение имеет существенный недостаток. Это - производительность. Иногда в десятки раз, если обрабатывается большое количество строк.

Также поведение не полностью совпадает с поведением платформенных функций, но все эти ситуации достаточно специфические.

Старый код!

Вы можете вставить эти функции в глобальный общий модуль с контекстом выполнения на клиенте и на сервере, а можно создать отдельный общий модуль и вызывать их оттуда напрямую. Тут уже по обстоятельствам.

А у Вас еще есть такой устаревший код?

Другие ссылки

Авторские разработки

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4528    dsdred    53    

72

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    5294    YA_418728146    25    

63

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6410    dsdred    36    

112

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18473    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12088    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8822    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6279    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15986    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. json 3297 21.02.20 09:06 Сейчас в теме
Юрий, спасибо, что упомянул меня.

Круто, что описал функцию СтрСравнить().

Позволю себе немного критики по поводу твоего варианта СтрНайти().
1. Код функции не компилируется. Не везде исправил название переменной НаправлениеПоиска на НаправлениеПоискаСтроки. Надо поправить.
2. В твоем варианте эта функция тянет за собой еще три функции. В моем варианте эта функция самостоятельная. (Согласен это мелочь, но имхо автономная функция удобнее в данном случае)
3. Твой вариант функции не во всех случаях отрабатывает как в платформе.
У меня в публикации в первом комментарии я приложил юнит-тесты. Там суть в том, что ты запускаешь их на новой платфроме, и тест сравнивает результат платформенного метода с написанным тобой методом. Если есть расхождения то он их сообщает. У меня тест по твоей функции выдал 27 случаев, когда твоя функция отработала по-другому (какие-то из них являются повторами). По факту я увидел два недочета: некорректно отрабатывает поиск с конца, а также поиск с начала при пустых строках.

Примеры несовпадений
СтрНайти:[Строка:**1212][Подстрока:12][СКонца][Позиция:5][Вхождение:2]
Ожидаем:3, по факту: 0
СтрНайти:[Строка:1212][Подстрока:12][СКонца][Позиция:4][Вхождение:1]
Ожидаем:3, по факту: 0
user811769; acanta; YPermitin; +3 Ответить
2. пользователь 21.02.20 09:27
(1) благодарю!

Со всем согласен. Пункт третий исправлю вечером, очепятался :)
Юнит-тесты погоняю :)

А так да, в основном в связке с БСП пилил. Поэтому образения к внешним функциям, но это не долдно быть так критично.
3. VmvLer 21.02.20 10:29 Сейчас в теме
почитал всплакнул
прям как на первой лабе по программированию
- а сейчас ребята мы рассмотрим методы работы со строками и напишем вашу первую функцию.
- а когда мы будем работать с указателями?
- никогда! если не умеете работать со строками, то я вас отчислю!
user811769; triviumfan; YPermitin; +3 Ответить
6. json 3297 21.02.20 10:52 Сейчас в теме
(3) Правильно, поплачь.
Только это ты и умеешь.

Пишут тут на Инфостарте фигню какую-то, не такую как ты хочешь.
Да еще и тебя читать заставляют.
Такого мегакрутого спеца
YPermitin; Алексей_mir2mb; +2 Ответить
4. logarifm 1117 21.02.20 10:32 Сейчас в теме
раз уж пошла такая пьянка - про "СтрСоединить()" если не трудно допишите, что этот метод следует применять вместо конкатенации строк. Особенно если дело идет о реально больших наборах, например логирование обмена данными между системами. А доводы представлю только это не хайп СтрСоединить() быстрее обычной конкатенации строк.
user811769; YPermitin; +2 Ответить
5. пользователь 21.02.20 10:37
(4) согласен. Ссылку тоже добавлю.

+
7. Sashares 34 21.02.20 10:59 Сейчас в теме
(5)обход деградации производительности при конкатенации через Текстовый документ. https://partners.v8.1c.ru/forum/t/1190296/m/1190331
YPermitin; +1 Ответить
12. AlexO 135 22.02.20 16:21 Сейчас в теме
(7)хватит уже на партнерку выкладывать ссылки. Даже у партнеров уже доступ пропал.
Или скрин давайте, или текст. Или не выкладывайте ничего.
YPermitin; +1 Ответить
24. Sashares 34 25.02.20 09:45 Сейчас в теме
(12)Собственно, суть метода я написал.
Сообщение из ссылки выше.

0
Додатко Виктор (Актіо-АйТі, Днепр)
25.10.2013 22:04
1190331
Отвечает на

Деградации вполне можно избежать средствами платформы!

Используйте объект ТекстовыйДокумент. Я слегка изменил Ваш тест :
Процедура КнопкаВыполнитьНажатие(Кнопка)
   //ОчиститьСообщения();    
   Нач = ТекущаяУниверсальнаяДатаВМиллисекундах();
   СамоИмяФайлаВАрхивеТекст = СокрЛП("sdsd11213");
   ТекстПроблемРезультат ="";
   КоличествоПолейДолжноБыть = СокрЛП(2);
   ТекстПроблем = "";
   Для Инд = 0 По Итераций цикл //ТекстовыйФайл.КоличествоСтрок() Цикл
       СейчасЧислоВхожд = 3;
       
       ТекстПроблем = ТекстПроблем + "В файле: ";
       ТекстПроблем = ТекстПроблем + СамоИмяФайлаВАрхивеТекст;
       ТекстПроблем = ТекстПроблем + ", в строке №" + Инд;
       ТекстПроблем = ТекстПроблем + " не верное количество разделителей; должно быть " + КоличествоПолейДолжноБыть;
       ТекстПроблем = ТекстПроблем + ", а сейчас " + СейчасЧислоВхожд;
       ТекстПроблем = ТекстПроблем + ";" + Символы.ПС;    
   КонецЦикла;
   ТекстПроблемРезультат = ТекстПроблемРезультат + ТекстПроблем;
   Окончание = ТекущаяУниверсальнаяДатаВМиллисекундах();
   Сообщить("Тест 1 : итераций "+Итераций+" время : "+ Прав("                    "+(Окончание - нач),20)+" мс, длина строки " + СтрДлина(ТекстПроблемРезультат));

    тДок = новый ТекстовыйДокумент;
    Нач = ТекущаяУниверсальнаяДатаВМиллисекундах();
    Для Инд = 0 По Итераций цикл //ТекстовыйФайл.КоличествоСтрок() Цикл
       СейчасЧислоВхожд = 3;
       
       ТекстПроблем = "В файле: ";
       ТекстПроблем = ТекстПроблем + СамоИмяФайлаВАрхивеТекст;
       ТекстПроблем = ТекстПроблем + ", в строке №" + Инд;
       ТекстПроблем = ТекстПроблем + " не верное количество разделителей; должно быть " + КоличествоПолейДолжноБыть;
       ТекстПроблем = ТекстПроблем + ", а сейчас " + СейчасЧислоВхожд;
       ТекстПроблем = ТекстПроблем + ";" ;    
      тДок.ДобавитьСтроку(ТекстПроблем);
   КонецЦикла;
   ТекстПроблемРезультат1 = тДок.ПолучитьТекст();
   
   Окончание = ТекущаяУниверсальнаяДатаВМиллисекундах();
   Сообщить("Тест 2 : итераций "+Итераций+" время : "+ Прав("                    "+(Окончание - нач),20)+" мс, длина строки " + СтрДлина(ТекстПроблемРезультат1));
КонецПроцедуры
Показать






Мои результаты :

Тест 1 : итераций 100 время : 4 мс, длина строки 9 586
Тест 2 : итераций 100 время : 5 мс, длина строки 9 586
Тест 1 : итераций 1 000 время : 98 мс, длина строки 95 988
Тест 2 : итераций 1 000 время : 49 мс, длина строки 95 988
Тест 1 : итераций 10 000 время : 37 454 мс, длина строки 977 989
Тест 2 : итераций 10 000 время : 536 мс, длина строки 977 989
Тест 1 : итераций 20 000 время : 171 932 мс, длина строки 1 967 989
Тест 2 : итераций 20 000 время : 1 112 мс, длина строки 1 967 989



Как говорится "почувствуйте разницу !"
Показать
PetrPan; YPermitin; +2 Ответить
8. triviumfan 92 21.02.20 13:15 Сейчас в теме
9. пользователь 21.02.20 13:36
(8) никто не скрывает :) Даже есть предупреждение :))))
10. bazafaka 22.02.20 00:18 Сейчас в теме
Как хорошо что есть увлеченные программированием программисты, которые не заняты зарабатыванием денег и могут себе позволить нести знанию в массу бесплатно. Большое вам спасибо)
YPermitin; +1 Ответить
11. пользователь 22.02.20 07:42
(10) уоу уоу, это звучит так, будто я безработный и мне больше нечем заняться :)
17. Yashazz 4709 24.02.20 11:14 Сейчас в теме
(10) С чего это "бесплатно"? Плюсики превращаются в стартмани, а дальше биржа и вуаля.
Особенно умилило, как автор внаглую пиарится, выкладывая ссылки на свои публикации, ваще не связанные по теме с текущей, и это прокатывает.
18. пользователь 24.02.20 11:29
(17) ссылки на разработки добавил, чтобы повысить интерес и не вижу в этом ничего противозаконного. Если администрация против будет, то уберу.

За статью получил 10 SM. Что не много.

Ваш негатив не понятен :(
19. Yashazz 4709 24.02.20 11:59 Сейчас в теме
(18) Вот в том и беда, что "а чо такова", рекламируетесь и типа ОК, и единственное, что Вам пришло в голову, это "противозаконность". Есть ещё элементарная адекватность при публикации материалов, есть понятие замусоривания и размывания темы (флуда и оффтопа). Механизм ИС позволяет заинтересованным самостоятельно принять решение, перейти к списку других публикаций, отобрать по теме... А эти ваши ссылки, как назойливая и даже не-контекстная реклама, типа баннеров, "нате вот докучи". Ладно бы по обсуждаемому вопросу, но нет - причём тем же стилем и в том же блоке оформления, что и материал статьи. Нечистоплотно как-то с точки зрения уважения к читателю и информации. Имхо.
20. пользователь 24.02.20 12:31
(19) Вы человек с сильным словом :)
21. json 3297 24.02.20 14:23 Сейчас в теме
(19) Автор оставляет ссылки на свои же статьи в своих же статьях.
"Элементарная адекватность" как ты выражаешься - не нарушена.
Если ты не согласен - пиши в администрацию ИС, а не в комментариях. Незачем разводить срач в комментариях.

Что является назойливым, неадекватным и нетактичным - это писать токсичные комментарии под каждой статьей, за которую проголосовали.
Также считать авторское вознаграждение - тоже не культурно. Тебе какая разница сколько начислили СМ? У тебя что ли их отнимают?
Просто завистливость и необоснованный негатив. Ничего более в твоих комментариях нет.

p.s. Хорошо, что вас на ИС всего два таких персонажа, которые постоянно чем-то недовольны
22. Yashazz 4709 24.02.20 15:49 Сейчас в теме
(21) Когда некто ест руками, чавкает и хлюпает, это тоже, с его точки зрения, не есть нарушение адекватности. Потому что адекватность, она разная) И еду у соседей по столу не отнимает, и в чужие тарелки не лезет, и под локти не толкает. Не спорю. Только вот есть понятие "воспитанность", этика поведения в некоем социуме. Так и в данном случае.

В администрацию ИС я уже писал, спасибо. В марте 2009 года я попытался выложить статью, где была ссылка на мою, на тот момент единственную, публикацию. И огрёб от модераторов вполне достаточно, чтобы усвоить, цитирую примерно, "публикация Б не есть место для рекламы публикации А". Там же было что-то про умение чувствовать разницу между профессиональным материалом и пиаром. Вот мне хватило.

А некоторым норм.
23. пользователь 24.02.20 15:50
(21) Яков Коган - яркий человек. Не нужно его "тыкать".

Достаточно прочитать историю его комментариев и все встанет на свои места :)
13. AlexO 135 22.02.20 16:27 Сейчас в теме
И все равно СтрНайти недоработана.
Использую свою функцию, которая работает как на 8.2, так и на 8.3.
А вообще - избегаю новомодных только-что-введенных функций.
Постоянно все меняется, к тому же - нет-нет, да прежние платформы подвернутся в использовании.
И очень приятно, когда ранее работающий код сыпется ошибками. Или того хуже - работает, но выдает неправильный результат.
И такое бывает у 1С.
Free1CforAll; YPermitin; +2 Ответить
14. пользователь 22.02.20 16:32
(13) да, эта функция не идеальна.

Так СтрНайти уже больше 5 лет в платформе. Можно использовать :)
Free1CforAll; +1 Ответить
15. AlexO 135 22.02.20 18:11 Сейчас в теме
(14)
Так СтрНайти уже больше 5 лет в платформе
Можно. Но осторожно ))
Так какой-то гниловатый нюанс при поиске не с начала с обратного конца (и при поиске в обратную сторону нет задания начала поиска - с отсчетом с конца, а не с начала), так ничего и не исправили. Да и функционала недостаточно, не гибко настраиваемая, не до конца.
Поэтому - только свое )
Free1CforAll; Yashazz; YPermitin; +3 Ответить
16. пользователь 22.02.20 18:49
25. Nefilimus 75 23.01.23 08:00 Сейчас в теме
Недавно попалась древнейшая база. Спасибо огромное, очень выручили
Оставьте свое сообщение