8.х Как определить содержит ли строка цифры?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Melanto, 3 июн 2008.

  1. TopicStarter Overlay
    Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    Доброго Всем!

    Провалы в памяти, склероз, поиск не помог.

    Есть строка. В ней могут быть только цифры и символы вида "/", "\" и т.д.
    Челт, не помню как проверить строку на содержание чего-нить кроме заданного множества символов.
    Что-то было такое, но не могу даже вспомнить где. Может в VB?

    Спасибо всем, кто поможет склерознику....
  2. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Можешь попробовать
    Код:
    Найти(<Строка>, <Подстрока поиска>) 
    
  3. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Код:
     	стр = "Это моя символьная строка 1, где есть одна циферкО;-) ";
    ТекСимвол = 0;
    Пока ТекСимвол <= СтрДлина(Стр) Цикл
    ТекСимвол = ТекСимвол + 1;
    Симв = Сред(Стр,ТекСимвол,1);
    Если (симв >="0") И (симв <="9")  Тогда
    Сообщить("АААА! В строке есть цифири!");
    КонецЕсли;
    КонецЦикла;
    
    
    
  4. TopicStarter Overlay
    Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    Спасибо, это понятный вариант.

    Думалось, есть что-то, позволяющее избежать цикла...
  5. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Код:
    Стр = "LxSvsLazy1/1";
    Для ТекСимвол = 0 По 9 Цикл
    Если Найти(Стр, ТекСимвол) Тогда
    Сообщить("Обнаружен искомый код", СтатусСообщения.Внимание);
    КонецЕсли;
    КонецЦикла;
    
    Код:
    	Стр = "LxSvsLazy1/1";
    Если Найти(Стр,"0") ИЛИ
    Найти(Стр,"1") ИЛИ
    Найти(Стр,"2") ИЛИ
    Найти(Стр,"3") ИЛИ
    Найти(Стр,"4") ИЛИ
    Найти(Стр,"5") ИЛИ
    Найти(Стр,"6") ИЛИ
    Найти(Стр,"7") ИЛИ
    Найти(Стр,"8") ИЛИ
    Найти(Стр,"9") Тогда
    Сообщить("Обнаружен искомый код!",СтатусСообщения.Внимание);
    КонецЕсли;
    
    Но это извращение!
  6. TopicStarter Overlay
    Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    Мда, а в запросах ничего такого не было?...
  7. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Ты задай вопрос конкретно!
    В каком контексте необходимо осуществить поиск, какие действия должны быть инициированы и т.п.
  8. TopicStarter Overlay
    Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    Ок, не проблема.
    В УТ реализуецца импортный товар. В счет-фактуре указывается № ГТД.
    Одна проблема - очень часто сначала мы получаем не ГТД, а какое-то там временное разрешение, а уже потом ГТД. Так вот, надо, чтобы когда приходит реальный номер ГТД, в СЧФ он заменял собой временный номер. Хранить, ессно, надо и то, и другое, иначе потом хвостов не найдешь...
    Конфа сильно изменена, завязана (не мной) на аксес и эксль, дописан обмен с Бух, поэтому вводить дополнительное поле в справочнике ГТД проблематично. Мысль такая - писать реальный номер в существующее поле Комментарий. Дальше все просто - выбираем что ставить в форму - № или Comment. Но... ОНИ Ж В КОММЕНТАРИЙ ПИШУТ ВСЯКУЮ ПУРГУ, вот и надо отделить - если в комменте есть буквы - значит это ПУРГА, а если только цифры и спец.символы - номер ГТД.
  9. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    1. Изменения должны быть внесены в какой-то модуль обмена, встроенный в бухню. Я правильно понял?
    2. Документы надо смотреть в УТ и оттуда забирать?
  10. TopicStarter Overlay
    Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    Пардон за скудность языка. Нет, все проще. Просто при ПЕЧАТИ счета-фактуры должно выбираться одно из двух полей спр.ГТД - или номер, или комментарий. (Все это в УТ, но для передачи в бухню тоже будет нужна такая проверка)
    Менять структуру справочника проблематично. Думалось задействовать поле Комментарий для хранение номера ГТД, если сразу его не было и товар завели под временным номером. Теперь надо отделить зерна от плевел, то бишь так:
    если номер текущей ГТД содержит подстроку "ОБ" (признак временного номера, тут все ясно), смотрим комментарий. Если он пустой - ставим в форму Номер (временный), а вот если нет - надо понять, ЧТО там записано. Номер ГТД реальный или просто БЛА_БЛА_БЛА, типа "А здесь мы документы потеряли" ...
  11. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Ясно.
    Ты уверен в том, что номер ГТД не содержит иных символов, кроме цифр и слешей?
    Я встречал случаи, когда в данной строке присутствовали и другие символы.

    Ладно. Даже в таком случае, чем тебя не устраивает вариант с циклом?
    Мы с Lazy написали достаточно приемлемые варианты, только "обратного" действия.

    Ты строку с комментом каким образом собираешься получать?
  12. TopicStarter Overlay
    Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    Строку с комментом получаю из запроса, не хотелось делать цикл для каждой строки ТЧ, их мно-о-о-ого м.б.

    А за предложенные варианты ПАСИБКИ

    ЗЫ Кстати, иные символы в ГТД - кажись как-раз признак ейной временности...
  13. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Ок.
    Ты в запросе получаешь ТЗ с кучей строк, в которых содержатся реквизиты документа для печати. Я верно понимаю?
    При печати, ты все равно обрабатываешь каждую строку.
    Вариант с условиями не подходит?

    Код:
        Для каждого ТекущаяСтрока Из ТаблицаЗначений Цикл
    Коммент = СокрЛП(ТекущаяСтрока.Комментарий);
    //Убираем нужные символы
    СтрЗаменить(Коммент,"/","");
    СтрЗаменить(Коммент,"\","");// обратный слеш должен быть
    СтрЗаменить(Коммент,"0","");
    СтрЗаменить(Коммент,"1","");
    СтрЗаменить(Коммент,"2","");
    СтрЗаменить(Коммент,"3","");
    СтрЗаменить(Коммент,"4","");
    СтрЗаменить(Коммент,"5","");
    СтрЗаменить(Коммент,"6","");
    СтрЗаменить(Коммент,"7","");
    СтрЗаменить(Коммент,"8","");
    СтрЗаменить(Коммент,"9","");
    Если СтрДлина(Коммент) <> 0 Тогда
    Сообщить("Фигня. Надо брать временный номер!");
    КонецЕсли;
    КонецЦикла;    
    
    
    
    
    
    
    ТаблицаЗначений есть таблица, которую ты получаешь из запроса, если я верно понял.
    Вместо знака вопроса писал обратный слеш..Форум косячит.
  14. TopicStarter Overlay
    Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    Да, думаю последний вариант - наилучший.

    Еще раз спасибо.
  15. TopicStarter Overlay
    Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    Все-таки, хоть и не совсеим то что надо, но оно есть!
    Може кому пригодится... Находится в Общем Модуле

    Код:
    // Функция проверяет наличие в строке только цифр
    //
    // Параметры
    //  СтрокаПроверки - Строка для проверки только цифр
    //
    // Возвращаемое значение:
    //   Булево
    //
    Функция ЕстьНеЦифры(Знач СтрокаПроверки) Экспорт
    
    
    Блин, ошибочка вышла - это в Бухии процедура, а не в УТ, но да, смысл тот же
  16. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Думаю, так или иначе в этой функции присутствует тот самый цикл, от которого ты так упорно отказывался.
    Смотри, что есть в ЗУП:
    Код:
    // Функция проверяет наличие в строке только цифр
    //
    // Параметры
    //  СтрокаПроверки - Строка для проверки только цифр
    //
    // Возвращаемое значение:
    //   Булево
    //
    Функция ТолькоЦифрыВСтроке(Знач СтрокаПроверки, УчитыватьЛидирующиеНули = Истина, УчитыватьПробелы = Истина) Экспорт
    
    Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда
    Возврат Ложь;
    КонецЕсли;
    
    Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда
    Возврат Истина;
    КонецЕсли; 
    
    Если НЕ УчитыватьПробелы Тогда
    СтрокаПроверки = СтрЗаменить(СтрокаПроверки, " ", "");
    КонецЕсли;
    
    Если НЕ УчитыватьЛидирующиеНули Тогда
    НомерПервойЦифры = 0;
    Для а = 1 По СтрДлина(СтрокаПроверки) Цикл
    НомерПервойЦифры = НомерПервойЦифры + 1;
    КодСимвола = КодСимвола(СтрокаПроверки, а);
    Если КодСимвола <> 48 Тогда
    Прервать;
    КонецЕсли;
    КонецЦикла;
    СтрокаПроверки = Сред(СтрокаПроверки, НомерПервойЦифры);
    КонецЕсли;
    
    Для а = 1 По СтрДлина(СтрокаПроверки) Цикл
    КодСимвола = КодСимвола(СтрокаПроверки, а);
    Если НЕ (КодСимвола >= 48 И КодСимвола <= 57) Тогда
    Возврат Ложь;
    КонецЕсли; 
    КонецЦикла; 
    
    Возврат Истина;
    
    КонецФункции
    
    
    Полагаю, нечто подобное и в твоей функции.
  17. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26

Поделиться этой страницей