Есть табличный документ загруженный из Excel, там есть обозначение площади в формате "1540х920" количество символов в строках разное, при том что есть строки есть с обозначением диаметра, т.е. бех "х", проверяю наличие этого разделителя при помощи (СтрНайти, "х"), но когда в строке символ на английском языке, 1С этого не понимает, пробовал запилить проверку через Если, не помогает, т.к. конфигуратор одинаковые символы принимает как русские даже если они написаны с английской раскладкой(проверял код символа), как быть в такой ситуации? подскажите пожалуйста
РазделительРазмера = СтрНайти(Количество, "x"); //Тут символ пробовал написать на Русском
Если СтрНайти(Количество, "x") > РазделительРазмера Тогда //Тут на инглишь, потом только допер что он их принимает за русские
РазделительРазмера = СтрНайти(Количество, "x"); //Тут тоже инглишь
КонецЕсли;
По теме из базы знаний
- T9 для Конфигуратора
- Простые радости жизни программиста 1С: выбор типа значения
- Работа со строками: от простого к сложному
- Перевод кода и метаданных конфигурации на английский язык с помощью плагина EDT: Language Tool
- Подсистема прав доступа (анализ ролей, отладка RLS, английский код, обычные и управляемые формы)
Найденные решения
(1) вообще такое можно решать через СтрРазделить
МассивРазмера = СтрРазделить(Количество, "хx", Ложь); // оба символа с латиницей и кириллицей
Если МасивРазмера.Количество() = 1 Тогда
Диаметр = МассивРазмера[0];
ИначеЕсли МасивРазмера.Количество() = 2 Тогда
Длина = МассивРазмера[0];
Ширина = МассивРазмера[1];
Иначе
ВызватьИсключение "Фигню подсунули";
КонецЕсли;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Что-то вы какую-то дичь пишите. Если у вас код символа одинаковый, значит и символы у вас одинаковые, то есть в одной раскладке.
См.файл - 1093 - кириллица, 120 - латиница
пробовал запилить проверку через Если, не помогает, т.к. конфигуратор одинаковые символы принимает как русские даже если они написаны с английской раскладкой(проверял код символа)
Что-то вы какую-то дичь пишите. Если у вас код символа одинаковый, значит и символы у вас одинаковые, то есть в одной раскладке.
См.файл - 1093 - кириллица, 120 - латиница
Прикрепленные файлы:
(3) Попробуйте в конфигураторе я любом месте написать тот же самый "х" на разных языках, а потом скопируйте оба в какой нибудь редактор и посмотрите какой код будет у "разных" букв, при том что если проделать то же самое редактором типа Excel, то в результате получим разные коды символов
(11) Вы уверены что вы отвечаете на мой вопрос? Есть Excel, там символ разными буквами, гружу его на сервер, читаю в ТабличныйДокумент. Далее перебираю этот табличный документ, получаю строку с размерами, пытаюсь проверить есть ли в строке "х"(Рус), тесли есть то все Ок, но мы же помним что некоторые из них на английском, поэтому пилю вторую проверку есть ли там "x" (Eng), и по каким то непонятным причинам, при наличии этого английского x он все равно возвращает 0(СтрНайти). Думаю что из вопроса вполне понятно что происходит, ведь кто то же дал правильный ответ
(13)Я уже не знаю, как вам объяснить, что в коде у вас в 3х местах латиница.
Вообще не важно что вы читаете, грузите и тд.
Исправьте ошибку в коде, и заработает ваше условие.
Я понимаю, пятница, все устали, но вы пробуйте хотя бы обдумать то что вам пишут.
Я еще в (4) сообщении сказал, что у вас латиница используется в условии, где должна быть кириллица.
Вообще не важно что вы читаете, грузите и тд.
Исправьте ошибку в коде, и заработает ваше условие.
Я понимаю, пятница, все устали, но вы пробуйте хотя бы обдумать то что вам пишут.
Я еще в (4) сообщении сказал, что у вас латиница используется в условии, где должна быть кириллица.
Прикрепленные файлы:
(4) Приведенный код взят из конфигуратора, а там он написан со сменой раскладки клавиатуры, практически уверен что если писал бы его сразу на сайте изменив раскладку, то действительно при проверке у них были бы разные коды, попробуйте сами через конфигуратор так же проверить написав там на разном языке одинаковые графические символы и проверив как вы это сделали с комментом
(7) режим ванги вкл.
Доступ к конфигуратору удаленный через рдп, TeamViewer, етс. Раскладка клавиатуры отличаются на вашем компьютере и удаленном. То что переключаете раскладку у себя, не обязательно означает, что и на уделенном компьютере она так же переключается.
Доступ к конфигуратору удаленный через рдп, TeamViewer, етс. Раскладка клавиатуры отличаются на вашем компьютере и удаленном. То что переключаете раскладку у себя, не обязательно означает, что и на уделенном компьютере она так же переключается.
(1) вообще такое можно решать через СтрРазделить
МассивРазмера = СтрРазделить(Количество, "хx", Ложь); // оба символа с латиницей и кириллицей
Если МасивРазмера.Количество() = 1 Тогда
Диаметр = МассивРазмера[0];
ИначеЕсли МасивРазмера.Количество() = 2 Тогда
Длина = МассивРазмера[0];
Ширина = МассивРазмера[1];
Иначе
ВызватьИсключение "Фигню подсунули";
КонецЕсли;
Показать
немного из бсп
Функция ТолькоЦифрыВСтроке(Знач СтрокаПроверки, Знач УчитыватьЛидирующиеНули = Истина, Знач УчитыватьПробелы = Истина) Экспорт
Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда
Возврат Ложь;
КонецЕсли;
Если Не УчитыватьПробелы Тогда
СтрокаПроверки = СтрЗаменить(СтрокаПроверки, " ", "");
КонецЕсли;
Если ПустаяСтрока(СтрокаПроверки) Тогда
Возврат Истина;
КонецЕсли;
Если Не УчитыватьЛидирующиеНули Тогда
Позиция = 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)); // символ "_"
Для Каждого Диапазон Из Диапазоны Цикл
Если КодСимвола >= Диапазон.Мин И КодСимвола <= Диапазон.Макс Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот