| 
    
        
     
     | 
    
    
  | 
Как получить число из кода клиента? | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        tabarigen    
     09.04.18 
            ✎
    10:38 
 | 
         
        РИБ. 
 
        Есть коды клиента 00-001189, 00-000078 Как из них получить числа 189 и 78??  | 
|||
| 
    1
    
        shuhard    
     09.04.18 
            ✎
    10:39 
 | 
         
        (0) нанять программиста (с)     
         | 
|||
| 
    2
    
        bolobol    
     09.04.18 
            ✎
    10:40 
 | 
         
        Число(Прав(3))     
         | 
|||
| 
    3
    
        Ц_У    
     09.04.18 
            ✎
    10:42 
 | 
         
        МассивЧастей = СтрРазделить("00-001189","",Истина);
 
        КодКлиента = Число(МассивЧастей[1]); Почему 189?  | 
|||
| 
    4
    
        Connect    
     09.04.18 
            ✎
    10:43 
 | 
         
        (2) Опередил. Хотя, не ясна задача. Формат кода. Всегда такой? Критерии извлечения нужны.
 
        http://catalog.mista.ru/public/64222/  | 
|||
| 
    5
    
        bolobol    
     09.04.18 
            ✎
    10:46 
 | 
         
        (3) ТАк-то если, то можно и:
 
        Если = "00-001189" Тогда 189 ИначеЕсли = "00-000078" Тогда 78  | 
|||
| 
    6
    
        skafandr    
     09.04.18 
            ✎
    10:48 
 | 
         
        (5)Шикарно,сделал мой день :)     
         | 
|||
| 
    7
    
        SleepyHead    
     гуру 
    09.04.18 
            ✎
    10:48 
 | 
         
        (0) 
 
        ПрефиксацияОбъектоКлиентСервер.УдалитьЛидирующиеНулиИзНомераОбъекта(ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(ИсходныйНомерСНулямиИПрочимиБезобразиями,Истина, Истина))  | 
|||
| 
    8
    
        Connect    
     09.04.18 
            ✎
    10:48 
 | 
         
        Строку в число перевести. Нулики уже уйдут. А почему из 1189 нужно 189, хз. Может, строго, последние три цифры? Тогда (2).     
         | 
|||
| 
    9
    
        Connect    
     09.04.18 
            ✎
    10:49 
 | 
         
        (7) БН доволен. =)     
         | 
|||
| 
    10
    
        SleepyHead    
     гуру 
    09.04.18 
            ✎
    10:50 
 | 
         
        (9) Ну есть же методы общих модулей для решения этой задачи, его извращаться-то. Я мог и по-другому написать, но автор темы должен страдать в наказание за лень.     
         | 
|||
| 
    11
    
        Connect    
     09.04.18 
            ✎
    10:51 
 | 
         
        Можно, конечно, после перевода строки в число, опять перевести в строку, и посчитать кол-во символов оставшихся в переменную $A. А потом Число(Прав($A)). Ну или не переводить в строку обратно, а включить простую арифметику.     
         | 
|||
| 
    12
    
        Connect    
     09.04.18 
            ✎
    10:52 
 | 
         
        (10) Согласен. Не описавшие конкретики задачи должны страдать.     
         | 
|||
| 
    13
    
        bolobol    
     09.04.18 
            ✎
    10:57 
 | 
         
        (7) Ухты, пригодилось, надо же!     
         | 
|||
| 
    14
    
        Fish    
     гуру 
    09.04.18 
            ✎
    11:12 
 | 
         
        Код в (5) прекрасен и изящен :)     
         | 
|||
| 
    15
    
        tabarigen    
     09.04.18 
            ✎
    11:13 
 | 
         
        (2) лойс)) 
 
        функцию Прав() не мог вспомнить  | 
|||
| 
    16
    
        Connect    
     09.04.18 
            ✎
    11:17 
 | 
         
        (14) Да.
 
        ИначеЕсли ... 8 Иначе Неопределено;  | 
|||
| 
    17
    
        Куникулус    
     09.04.18 
            ✎
    11:27 
 | 
         
        Функция СделатьЦифру(СтрЗнач)
 
        НовСТр= ""; УдалятьЛидирующиеНули = Истина; Для ном =1 По СтрДлина(СтрЗнач) Цикл ТекСимв = Сред(СтрЗнач, Ном,1); КодТекСимв = КодСимвола(ТекСимв); Если КодТекСимв>=48 или КодТекСимв<=57 Тогда Продолжить; КонецеСли; Если ТекСимв = "0" и УдалятьЛидирующиеНули Тогда Продолжить; Иначе УдалятьЛидирующиеНули = Ложь; КонецеСли; НовСТр = НовСТр +ТекСимв; КонецЦИкла; Попытка РезультЧисло = Число(НовСТр); Исклоючение РезультЧисло = 0; КонецеСЛи; Возврат РезультЧисло; КонецФункции  | 
|||
| 
    18
    
        Куникулус    
     09.04.18 
            ✎
    11:28 
 | 
         
        (17) +
 
        КодТекСимв>=48 или КодТекСимв<=57 заменить на КодТекСимв>=48 и КодТекСимв<=57  | 
|||
| 
    19
    
        Fish    
     гуру 
    09.04.18 
            ✎
    11:28 
 | 
         
        (17) Не сработает.     
         | 
|||
| 
    20
    
        Куникулус    
     09.04.18 
            ✎
    11:30 
 | 
         
        (18) КодТекСимв>=48 или КодТекСимв<=57 
 
        заменить на КодТекСимв>=48 и КодТекСимв<=57 заменить на не (КодТекСимв>=48 и КодТекСимв<=57)  | 
|||
| 
    21
    
        Куникулус    
     09.04.18 
            ✎
    11:30 
 | 
         
        (19) Обоснуй     
         | 
|||
| 
    22
    
        Куникулус    
     09.04.18 
            ✎
    11:32 
 | 
         
        (20) Исклоючение
 
        РезультЧисло = 0; КонецеСЛи; Заменить на Исключение РезультЧисло = 0; КонецПопытки;  | 
|||
| 
    23
    
        bolobol    
     09.04.18 
            ✎
    11:36 
 | 
         
        (17) Многа букв, ниасилил. Если кратко, в чём там суть?     
         | 
|||
| 
    24
    
        SleepyHead    
     гуру 
    09.04.18 
            ✎
    12:41 
 | 
         
        (23) Изобретение велосипеда с черным джеком и озорными девушками.     
         | 
|||
| 
    25
    
        Connect    
     09.04.18 
            ✎
    12:56 
 | 
         
        Что мне Эйлер вспомнился? Зачем? Блин же, совсем другая степь...     
         | 
|||
| 
    26
    
        zwei    
     09.04.18 
            ✎
    13:37 
 | 
         
        (17),(18),(20),(22) Истинный 1Сник - семь раз хуяк, один раз в продакшн... Авось заработает.     
         | 
|||
| 
    27
    
        Fish    
     гуру 
    09.04.18 
            ✎
    13:40 
 | 
         
        (21) А что обосновывать? Твой код после всех правок из "00-001189" сделает "1189", а у автора в (0) написано, что надо "189".     
         | 
|||
| 
    28
    
        Малыш Джон    
     09.04.18 
            ✎
    13:45 
 | 
         
        (27) скорее всего опечатка)
 
        (0) мой БД+Ш: СтрЗаменить(СокрЛ(СтрЗаменить(СтрЗаменить(ИсходныйКод,"0", " "),"-"," "))," ","0"); :)  | 
|||
| 
    29
    
        Connect    
     09.04.18 
            ✎
    13:47 
 | 
         
        И всё таки я бы предпочел не магию одноразовую, а постичь суть задачи. Там и понять, как по человечески реализовать.     
         | 
|||
| 
    30
    
        Fish    
     гуру 
    09.04.18 
            ✎
    13:57 
 | 
         
        (28) А если попадётся префикс с пробелом? :)     
         | 
|||
| 
    31
    
        Малыш Джон    
     09.04.18 
            ✎
    13:59 
 | 
         
        (30) все предусмотрено) он потеряется среди прочих и благополучно сократится     
         | 
|||
| 
    32
    
        Малыш Джон    
     09.04.18 
            ✎
    14:01 
 | 
         
        +(31) вот префикс с буквой - это да...
 
        но в исходной задаче таких условий ведь и не стояло  | 
|||
| 
    33
    
        Connect    
     09.04.18 
            ✎
    14:04 
 | 
         
        https://www.forum.mista.ru/topic.php?id=481725
 
        Не совсем по сабжу, но таки всё же =)  | 
|||
| 
    34
    
        Малыш Джон    
     09.04.18 
            ✎
    14:19 
 | 
         
        Вот он, универсальный вариант :)
 
        КодЧисло = 0; Пока СтрДлина(ИсходныйКод)>0 Цикл Попытка КодЧисло = Число(ИсходныйКод); Исключение ИсходныйКод = Сред(ИсходныйКод,2); КонецПопытки; КонецЦикла;  | 
|||
| 
    35
    
        dezss    
     09.04.18 
            ✎
    14:31 
 | 
         
        (34) вечный цикл детектед, если там есть хоть одна цифра в конце)))     
         | 
|||
| 
    36
    
        dezss    
     09.04.18 
            ✎
    14:32 
 | 
         
        (35) + после
 
        КодЧисло = Число(ИсходныйКод); надо написать Прервать;  | 
|||
| 
    37
    
        Малыш Джон    
     09.04.18 
            ✎
    14:39 
 | 
         
        (35) точняяяяяяк     
         | 
|||
| 
    38
    
        bolobol    
     09.04.18 
            ✎
    15:02 
 | 
         
        Перепись адинэснегоф...     
         | 
|||
| 
    39
    
        tabarigen    
     09.04.18 
            ✎
    16:10 
 | 
         
        (28) так и есть опечатка. нужно 1189     
         | 
|||
| 
    40
    
        tabarigen    
     09.04.18 
            ✎
    16:11 
 | 
         
        вообще ответ в (2)
 
        что вы тут базар устроили))  | 
|||
| 
    41
    
        Малыш Джон    
     09.04.18 
            ✎
    17:39 
 | 
         
        (40) не хочу расстраивать, но если в (0) опечатка и нужно 1189, то ответ не в (2)     
         | 
|||
| 
    42
    
        Мимохожий Однако    
     09.04.18 
            ✎
    17:55 
 | 
         
        (41) ОФФ: Не спугни     
         | 
|||
| 
    43
    
        Ц_У    
     09.04.18 
            ✎
    18:26 
 | 
         
        (41) угу в (3)     
         | 
|||
| 
    44
    
        Малыш Джон    
     09.04.18 
            ✎
    18:37 
 | 
         
        (43) а какой в (3) разделитель?     
         | 
|||
| 
    45
    
        Ц_У    
     09.04.18 
            ✎
    18:39 
 | 
         
        (44) ну косяк, да :)     
         | 
|||
| 
    46
    
        Лефмихалыч    
     09.04.18 
            ✎
    19:05 
 | 
         
        (0) надо перестать хотеть эту херню делать.
 
        Зачем?  | 
|||
| 
    47
    
        Сияющий в темноте    
     09.04.18 
            ✎
    19:37 
 | 
         
        Интересно,а 00-000189 и 01-000189 оба дадут 189,никого это не пугает?     
         | 
|||
| 
    48
    
        Лефмихалыч    
     09.04.18 
            ✎
    20:57 
 | 
         
        (47) гораздо интересней, что будет, когда алгоритм посетит вот такой
 
        ПЕ001-006/СТЕ12/ц1  | 
|||
| 
    49
    
        Connect    
     09.04.18 
            ✎
    21:32 
 | 
         
        (48) 189. Колдуну не ходи.     
         | 
|||
| 
    50
    
        tabarigen    
     09.04.18 
            ✎
    22:18 
 | 
         
        (41) почему же??
 
        это код справочника контрагенты. его заводят только в центральной базе РИБ. в переферии нет ни у кого прав на него. Чем же меня не устраивает ответ из (2)  | 
|||
| 
    51
    
        tabarigen    
     09.04.18 
            ✎
    22:19 
 | 
         
        (47) в моем случае это условие можно опустить. контрагенты будут создаваться только в ЦБ, как уже было сказано выше. 
 
        код же мне нужно чтоб создать прайс в папке контрагента на фтп  | 
|||
| 
    52
    
        Малыш Джон    
     09.04.18 
            ✎
    22:24 
 | 
         
        (50) Видишь ли, в чем дело... функция Прав() работает одинаково, независимо от того, в какой базе заводят код...     
         | 
|||
| 
    53
    
        Connect    
     09.04.18 
            ✎
    22:36 
 | 
         
        (51) А может оставим уже несчастный код в покое?
 
        https://ru.wikipedia.org/wiki/Артикул У меня были лузеры, любили править код, да так, что никакие префиксы/объяснения не помогали. Я убрал, визуально, этот системный код везде, и сделал дополнительный реквизит - _Код.  | 
|||
| 
    54
    
        Tateossian    
     10.04.18 
            ✎
    02:02 
 | 
         
        Откройте для себя божественные регулярки. Алгоритмический парсинг строк - это уровень джуниора.     
         | 
|||
| 
    55
    
        vJet    
     10.04.18 
            ✎
    03:11 
 | 
         
        (54) Поддерживаю, вот так "-(\d+)" все замечательно извлечется. Мне уже лень парсить строки без регулярных выражений. Хотя другие плюются.     
         | 
|||
| 
    56
    
        Сияющий в темноте    
     10.04.18 
            ✎
    09:16 
 | 
         
        Регулярки заканчиваются,когда есть несколько вариантов
 
        в общем случае,парсинг,это дерево условий,следуя по которому мы находим результат,если дерево превращается в граф,то применение регулярных выражений только усложняет парсинг  | 
|||
| 
    57
    
        bolobol    
     10.04.18 
            ✎
    09:28 
 | 
         
        (55) Никогда не понимал эту тень от хрена... Что ты с чем тут сложил разделив? Кто тебя поймёт?     
         | 
|||
| 
    58
    
        vJet    
     10.04.18 
            ✎
    10:15 
 | 
         
        (57) Эта конструкция означает "Дай мне все цифры после символа -
 
        Рекомендую поигратся здесь https://regexr.com/ задав в поле expression это -(\d+)\w+ а в поле Text данные из (0)  | 
|||
| 
    59
    
        bolobol    
     10.04.18 
            ✎
    10:26 
 | 
         
        (58) ПОКА 47 < КОДСимв(Сред(Найти(-)) < 57 ЦИКЛ - это и то понятнее, чем то что ты написал. И, самое главное, этот код поймёт та среда разработки, которую мы здесь используем. Тебя кто поймёт? Некий сайт? Или как?     
         | 
|||
| 
    60
    
        zwei    
     10.04.18 
            ✎
    10:28 
 | 
         
        (54) Проверь мне электропочту на соответствие RFC, плз.     
         | 
|||
| 
    61
    
        vJet    
     10.04.18 
            ✎
    10:42 
 | 
         
        (59) У меня это будет выгрядеть примерно так: 
 
        
Меня поймет тот кто знаком с регулярными выражениями. Технология совсем не сложна в освоении при этом очень облегчает парсинг строк.  | 
|||
| 
    62
    
        zwei    
     10.04.18 
            ✎
    10:44 
 | 
         
        (61) А ты попробуй разобрать например, html.     
         | 
|||
| 
    63
    
        vJet    
     10.04.18 
            ✎
    10:50 
 | 
         
        (62) Зависит от задачи, собрать DOM не получится а вот извлечь нужные данные вполне.     
         | 
|||
| 
    64
    
        Deon    
     10.04.18 
            ✎
    10:52 
 | 
         
        (61) В этой функции подкючается ком-объект?     
         | 
|||
| 
    65
    
        Serg_1960    
     10.04.18 
            ✎
    10:54 
 | 
         
        (0) Прикалываясь, но это "рабочий" код :)
 
        КодСимволами = "00-001189"; КодЧислом = 0; Выполнить("КодЧислом = -1 * (" + КодСимволами + ");"); Сообщить(КодЧислом); // 1 189  | 
|||
| 
    66
    
        bolobol    
     10.04.18 
            ✎
    10:54 
 | 
         
        (61) Да, где текст самой функции? И мы про 1С тут беспокоимся     
         | 
|||
| 
    67
    
        zwei    
     10.04.18 
            ✎
    11:09 
 | 
         
        (63) Ок. Есть строка с вложенными тегами, например
 
        <span>text</span><span>text<span>text</span></span> Вложенность может меняться, могут попадатся теги <br/>. Извлеки, пожалуйста, текст. Регэкспами.  | 
|||
| 
    68
    
        tabarigen    
     11.04.18 
            ✎
    13:17 
 | 
         
        Функция ЧислоСправа(Стр, К = 0)
 
        Возврат ?(Цел(КодСимвола(Прав("!" + Стр, К + 1)) / 5 - 10.5), Формат(Число("0" + Прав(Стр, К)), "ЧГ="), ЧислоСправа(Стр, К + 1)) КонецФункции  | 
|||
| 
    69
    
        tabarigen    
     11.04.18 
            ✎
    13:17 
 | 
         
        Функция ЧислоСправа1(Номер)
 
        Возврат Формат(Число("0" + Сред(Номер, СтрДлина(СокрП( СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Номер , "0", " "), "1", " "), "2", " "), "3", " "), "4", " "), "5", " "), "6", " "), "7", " "), "8", " "), "9", " "))) + 1)), "ЧГ=") КонецФункции  | 
|||
| 
    70
    
        tabarigen    
     11.04.18 
            ✎
    13:17 
 | 
         
        на инфостарте подсмотрел. может кому пригодится     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |