Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Какая-то фигня с условием Если-Тогда. (http://forums.kuban.ru/f1040/kakaya-_fignya_s_usloviem_esli-togda-2721482.html)

US1C 14.06.2012 15:48

Какая-то фигня с условием Если-Тогда.
 
Ситуация следующая, проверяю символы по условию и оно не выполняется ни при каких значениях.
Например, передается символ "П", код его 207, но условию пофигу, что 207>57 - проходит мимо.
Что не так написал?

Вот часть кода:
КодСимвола = Число(КодСимв(Символ));
Если (КодСимвола<48) или (КодСимвола>57) Тогда
СтрЗаменить(Номер,Символ," ");
КонецЕсли;

Uho 14.06.2012 15:56

Че-то я уверен на 146%, что следующий код опровергнет сабж:

Символ = "П";
КодСимвола = КодСимв(Символ);
Если (КодСимвола<48) или (КодСимвола>57) Тогда
Сообщить("Чудес не бывает");
КонецЕсли;

victuan 14.06.2012 16:00

0-US1C >Отладчиком пользоваться никто не учил?

US1C 14.06.2012 16:07

(1) Да, этот код отработал нормально. Собственно и в своем я был уверен на 146%, пока обработка не выполнила то, что должна была. Тогда залез в отладчик и убедился, что условие ни разу не выполнилось. Хотя передавалось больше 800 символов, часть из которых не цифра (как в приведенном выше примере). Вот и хотелось бы понять, что моему условию не нравится. Даже дополнительно привел код символа к числу (хотя и без этого оно числом является). Убрал одно из условий, оставил только >57 для проверки. Пофигу. Если не верится, могу скриншот отладчика предоставить.

US1C 14.06.2012 16:09

(2) Нет, никто. Сам научился.

victuan 14.06.2012 16:11

3-US1C >Покажи скриншот, но в нем должны быть видны на момент исполнения условия значения переменных:
Символ
КодСимв(Символ)
Число(КодСимв(Символ)
КодСимвола

И еще. Нет ли перед этим кодом методов НачатьТранзакцию и/или Попытка?

US1C 14.06.2012 16:20

(5) Транзакции и Попытки нет. Как скриншот в сообщение вставить пока не догоняю.

GreenDragon 14.06.2012 16:22

Процедура КнопкаВыполнитьНажатие(Кнопка)
ПолученныйКодСимвола = Число(КодСимвола("П"));
Если (ПолученныйКодСимвола<48) или (ПолученныйКодСимвола>57) Тогда
//СтрЗаменить(Номер,Символ," ");
Сообщить("Ух тыж! Попадает!");
КонецЕсли;

P.S. Ты стопроцентно уверен, что нет сюрпризов в твоей функции КодСимв ?

GreenDragon 14.06.2012 16:23

Выполни мой индусский код, и сообщи результат

US1C 14.06.2012 16:26

(7) Уверен. Это не моя функция, а системная строковая функция. Возвращает конкретное число, в приведенном примере - 207.

US1C 14.06.2012 16:27

(8) Выполнить не удалось:
ПолученныйКодСимвола = Число(КодСимвола<<?>>("П"));
**(3)**: Функция не обнаружена (КодСимвола)
При проверке модуля обнаружены синтаксические ошибки!

victuan 14.06.2012 16:35

6-US1C >Выложи скрин на radikal.ru и дай сюда ссылку

GreenDragon 14.06.2012 16:35

Стоп. У тя 8? Или 7.7?

GreenDragon 14.06.2012 16:37

ОК. Процедура КнопкаВыполнитьНажатие(Кнопка)
ПолученныйКодСимвола = Число(КодСимв("П"));
Если (ПолученныйКодСимвола<48) или (ПолученныйКодСимвола>57) Тогда
//СтрЗаменить(Номер,Символ," ");
Сообщить("Ух тыж! Попадает!");
КонецЕсли;

US1C 14.06.2012 16:45

(11) Загрузил скриншоты 3-х шагов. Первый - перед условием, второй - на проверке условия и третий - на концеЕсли:
[url]http://i035.radikal.ru/1206/9b/e1de5c2b1152.jpg[/url]
[url]http://s15.radikal.ru/i188/1206/aa/cfca751c072e.jpg[/url]
[url]http://s019.radikal.ru/i607/1206/f7/4deeb10c666c.jpg[/url]

Uho 14.06.2012 16:49

14-US1C > галочку там надо было снимать (уменьшать размер до 640)

US1C 14.06.2012 16:53

(13) Да, это работает, собственно как и предыдущий тестовый пример.
Скажу больше, когда я закомментировал метод СтрЗаменить() и добавил Сообщить:

КодСимвола = Число(КодСимв(Символ));
Если (КодСимвола < 48) или (КодСимвола > 57) Тогда
Сообщить("Работает");
//СтрЗаменить(Номер,Символ," ");
КонецЕсли;

у меня условие стало выполняться. Парасятина какая-то.

US1C 14.06.2012 16:56

(15) Исправился:
[url]http://i020.radikal.ru/1206/cf/d8a162d3ef60.jpg[/url]
[url]http://s14.radikal.ru/i187/1206/3b/d377fcb4a461.jpg[/url]
[url]http://s018.radikal.ru/i527/1206/f6/7605fcd7d7f2.jpg[/url]

Uho 14.06.2012 16:58

Чудес не бывает
что и требовалось доказать
ЗЫ. небось обработку то не сохранил перед этим

Uho 14.06.2012 16:58

+1 вот если ты раскомментируешь СтрЗаменить() и условие перестанет выполняться, тогда и поговорим

victuan 14.06.2012 17:02

17-US1C >По скриншотам я не вижу, что условие не выполняется.
Исправь одну строчку:
[b]Номер = [/b]СтрЗаменить(Номер,Символ," ");

US1C 14.06.2012 17:02

А, все понял. Сам дурак. Я не получал от СтрЗаменить() ничего и условие (даже истинное) проходило мимо. Типа тебе все равно ничего не нужно.
Как только сделал:

КодСимвола = Число(КодСимв(Символ));
Если (КодСимвола < 48) или (КодСимвола > 57) Тогда
Номер = СтрЗаменить(Номер,Символ," ");
КонецЕсли;

все заработало.

Всем спасибо за помощь!!!

GreenDragon 14.06.2012 17:04

Йопрст. Точно же ) Это же функция, а не процедура.

victuan 14.06.2012 17:11

Не зря студентов я программировать учил - чужие ошибки вижу по наитию...

user1C 14.06.2012 17:44

(0)
Функция ОчиститьНомер(Номер)
RegExp = CreateObject("VBScript.RegExp");
RegExp.Global = -1;
RegExp.Pattern = "[^0-9]";
Возврат Число(RegExp.Replace(Номер, ""));
КонецФункции

и не морочься с Если :))

GreenDragon 14.06.2012 17:50

(24) Чем твоё решение лучше решения, приведённого в топике?


Текущее время: 21:20. Часовой пояс GMT +3.