Английские символы в строке поиска

1. BullTi 01.10.21 17:07 Сейчас в теме
Есть табличный документ загруженный из Excel, там есть обозначение площади в формате "1540х920" количество символов в строках разное, при том что есть строки есть с обозначением диаметра, т.е. бех "х", проверяю наличие этого разделителя при помощи (СтрНайти, "х"), но когда в строке символ на английском языке, 1С этого не понимает, пробовал запилить проверку через Если, не помогает, т.к. конфигуратор одинаковые символы принимает как русские даже если они написаны с английской раскладкой(проверял код символа), как быть в такой ситуации? подскажите пожалуйста

РазделительРазмера = СтрНайти(Количество, "x"); //Тут символ пробовал написать на Русском
Если СтрНайти(Количество, "x") > РазделительРазмера Тогда //Тут на инглишь, потом только допер что он их принимает за русские
	РазделительРазмера = СтрНайти(Количество, "x"); //Тут тоже инглишь
КонецЕсли;
По теме из базы знаний
Найденные решения
12. spacecraft 01.10.21 17:51 Сейчас в теме
(1) вообще такое можно решать через СтрРазделить
МассивРазмера = СтрРазделить(Количество, "хx", Ложь); // оба символа с латиницей и кириллицей
Если МасивРазмера.Количество() = 1 Тогда
    Диаметр = МассивРазмера[0];
ИначеЕсли МасивРазмера.Количество() = 2 Тогда
    Длина = МассивРазмера[0];
    Ширина = МассивРазмера[1];
Иначе
   ВызватьИсключение "Фигню подсунули";
КонецЕсли;
Показать
kako1toxren; BullTi; +2 Ответить
2. DJDUH 17 01.10.21 17:17 Сейчас в теме
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DJDUH 17 01.10.21 17:17 Сейчас в теме
3. Sashares 34 01.10.21 17:24 Сейчас в теме
(1)
пробовал запилить проверку через Если, не помогает, т.к. конфигуратор одинаковые символы принимает как русские даже если они написаны с английской раскладкой(проверял код символа)

Что-то вы какую-то дичь пишите. Если у вас код символа одинаковый, значит и символы у вас одинаковые, то есть в одной раскладке.
См.файл - 1093 - кириллица, 120 - латиница
Прикрепленные файлы:
5. BullTi 01.10.21 17:29 Сейчас в теме
(3) Попробуйте в конфигураторе я любом месте написать тот же самый "х" на разных языках, а потом скопируйте оба в какой нибудь редактор и посмотрите какой код будет у "разных" букв, при том что если проделать то же самое редактором типа Excel, то в результате получим разные коды символов
6. Sashares 34 01.10.21 17:33 Сейчас в теме
(5)Все еще продолжаете нести чушь.
Если у вас раскладка не переключается, это не проблема конфигуратора.
Еще раз - у вас в коде во всех 3х местах "x" - латиницей введен.
8. BullTi 01.10.21 17:36 Сейчас в теме
(6) Почему бы не попробовать самому? Решение мне предложили выше, дальше спорить не хочу
11. Sashares 34 01.10.21 17:41 Сейчас в теме
(8)Во вложении обработка, в ней х разными символами. Все работает.
Прикрепленные файлы:
ТестХ.epf
13. BullTi 01.10.21 17:56 Сейчас в теме
(11) Вы уверены что вы отвечаете на мой вопрос? Есть Excel, там символ разными буквами, гружу его на сервер, читаю в ТабличныйДокумент. Далее перебираю этот табличный документ, получаю строку с размерами, пытаюсь проверить есть ли в строке "х"(Рус), тесли есть то все Ок, но мы же помним что некоторые из них на английском, поэтому пилю вторую проверку есть ли там "x" (Eng), и по каким то непонятным причинам, при наличии этого английского x он все равно возвращает 0(СтрНайти). Думаю что из вопроса вполне понятно что происходит, ведь кто то же дал правильный ответ
16. Sashares 34 01.10.21 18:03 Сейчас в теме
(13)Я уже не знаю, как вам объяснить, что в коде у вас в 3х местах латиница.
Вообще не важно что вы читаете, грузите и тд.
Исправьте ошибку в коде, и заработает ваше условие.

Я понимаю, пятница, все устали, но вы пробуйте хотя бы обдумать то что вам пишут.
Я еще в (4) сообщении сказал, что у вас латиница используется в условии, где должна быть кириллица.
Прикрепленные файлы:
4. Sashares 34 01.10.21 17:29 Сейчас в теме
(1)
РазделительРазмера = СтрНайти(Количество, "x"); //Тут символ пробовал написать на Русском

И не получилось. Потому что в приведенном коде он на латинице.
7. BullTi 01.10.21 17:33 Сейчас в теме
(4) Приведенный код взят из конфигуратора, а там он написан со сменой раскладки клавиатуры, практически уверен что если писал бы его сразу на сайте изменив раскладку, то действительно при проверке у них были бы разные коды, попробуйте сами через конфигуратор так же проверить написав там на разном языке одинаковые графические символы и проверив как вы это сделали с комментом
9. Sashares 34 01.10.21 17:36 Сейчас в теме
(7)Прочитать внимательнее (6) попробуйте. Потом подумать. И только потом отвечать.
10. spacecraft 01.10.21 17:40 Сейчас в теме
(7) режим ванги вкл.
Доступ к конфигуратору удаленный через рдп, TeamViewer, етс. Раскладка клавиатуры отличаются на вашем компьютере и удаленном. То что переключаете раскладку у себя, не обязательно означает, что и на уделенном компьютере она так же переключается.
14. BullTi 01.10.21 17:57 Сейчас в теме
(10)Не локально, правда дичи загнал по поводу символа в конфигураторе, просто, скорее всего есть какая то оссобенность с методом СтрНайти либо что то еще
12. spacecraft 01.10.21 17:51 Сейчас в теме
(1) вообще такое можно решать через СтрРазделить
МассивРазмера = СтрРазделить(Количество, "хx", Ложь); // оба символа с латиницей и кириллицей
Если МасивРазмера.Количество() = 1 Тогда
    Диаметр = МассивРазмера[0];
ИначеЕсли МасивРазмера.Количество() = 2 Тогда
    Длина = МассивРазмера[0];
    Ширина = МассивРазмера[1];
Иначе
   ВызватьИсключение "Фигню подсунули";
КонецЕсли;
Показать
kako1toxren; BullTi; +2 Ответить
15. BullTi 01.10.21 17:58 Сейчас в теме
(12) правда намного лучше что я нагородил, попробую, спасибо
17. FilippovRI 72 02.10.21 14:59 Сейчас в теме
немного из бсп
Функция ТолькоЦифрыВСтроке(Знач СтрокаПроверки, Знач УчитыватьЛидирующиеНули = Истина, Знач УчитыватьПробелы = Истина) Экспорт
	
	Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда
		Возврат Ложь;
	КонецЕсли;
	
	Если Не УчитыватьПробелы Тогда
		СтрокаПроверки = СтрЗаменить(СтрокаПроверки, " ", "");
	КонецЕсли;
		
	Если ПустаяСтрока(СтрокаПроверки) Тогда
		Возврат Истина;
	КонецЕсли;
	
	Если Не УчитыватьЛидирующиеНули Тогда
		Позиция = 1;
		// Взятие символа за границей строки возвращает пустую строку.
		Пока Сред(СтрокаПроверки, Позиция, 1) = "0" Цикл
			Позиция = Позиция + 1;
		КонецЦикла;
		СтрокаПроверки = Сред(СтрокаПроверки, Позиция);
	КонецЕсли;
	
	// Если содержит только цифры, то в результате замен должна быть получена пустая строка.
	// Проверять при помощи ПустаяСтрока нельзя, так как в исходной строке могут быть пробельные символы.
	Возврат СтрДлина(
		СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
		СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( 
			СтрокаПроверки, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "")) = 0;
	
КонецФункции

// Проверяет, содержит ли строка только символы латинского алфавита.
//
// Параметры:
//  СтрокаПроверки - Строка - проверяемая строка.
//  УчитыватьРазделителиСлов - Булево - учитывать ли разделители слов или они являются исключением.
//  ДопустимыеСимволы - Строка - дополнительные разрешенные символы, кроме латиницы.
//
// Возвращаемое значение:
//  Булево - Истина, если строка содержит только латинские (или допустимые) символы;
//         - Ложь, если строка содержит иные символы.
//
Функция ТолькоЛатиницаВСтроке(Знач СтрокаПроверки, Знач УчитыватьРазделителиСлов = Истина, ДопустимыеСимволы = "") Экспорт
	
	Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда
		Возврат Ложь;
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда
		Возврат Истина;
	КонецЕсли;
	
	КодыДопустимыхСимволов = Новый Массив;
	
	Для Индекс = 1 По СтрДлина(ДопустимыеСимволы) Цикл
		КодыДопустимыхСимволов.Добавить(КодСимвола(Сред(ДопустимыеСимволы, Индекс, 1)));
	КонецЦикла;
	
	Для Индекс = 1 По СтрДлина(СтрокаПроверки) Цикл
		КодСимвола = КодСимвола(Сред(СтрокаПроверки, Индекс, 1));
		Если ((КодСимвола < 65) Или (КодСимвола > 90 И КодСимвола < 97) Или (КодСимвола > 122))
			И (КодыДопустимыхСимволов.Найти(КодСимвола) = Неопределено) 
			И Не (Не УчитыватьРазделителиСлов И ЭтоРазделительСлов(КодСимвола)) Тогда
			Возврат Ложь;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Истина;
	
КонецФункции
// Определяет, является ли символ разделителем.
//
// Параметры:
//  КодСимвола      - Число  - код проверяемого символа;
//  РазделителиСлов - Строка - символы разделителей. Если параметр не указан, то 
//                             разделителем считаются все символы, не являющиеся цифрами, 
//                             латинскими и кириллическими буквами, а также знаком подчеркивания.
//
// Возвращаемое значение:
//  Булево - Истина, если символ с кодом КодСимвола является разделителем.
//
Функция ЭтоРазделительСлов(КодСимвола, РазделителиСлов = Неопределено) Экспорт
	
	Если РазделителиСлов <> Неопределено Тогда
		Возврат СтрНайти(РазделителиСлов, Символ(КодСимвола)) > 0;
	КонецЕсли;
		
	Диапазоны = Новый Массив;
	Диапазоны.Добавить(Новый Структура("Мин,Макс", 48, 57)); 		// цифры
	Диапазоны.Добавить(Новый Структура("Мин,Макс", 65, 90)); 		// латиница большие
	Диапазоны.Добавить(Новый Структура("Мин,Макс", 97, 122)); 		// латиница маленькие
	Диапазоны.Добавить(Новый Структура("Мин,Макс", 1040, 1103)); 	// кириллица
	Диапазоны.Добавить(Новый Структура("Мин,Макс", 1025, 1025)); 	// символ "Ё"
	Диапазоны.Добавить(Новый Структура("Мин,Макс", 1105, 1105)); 	// символ "ё"
	Диапазоны.Добавить(Новый Структура("Мин,Макс", 95, 95)); 		// символ "_"
	
	Для Каждого Диапазон Из Диапазоны Цикл
		Если КодСимвола >= Диапазон.Мин И КодСимвола <= Диапазон.Макс Тогда
			Возврат Ложь;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Истина;
	
КонецФункции
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот