Имя: Пароль:
1C
 
Как получить число из кода клиента?
,
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) У меня это будет выгрядеть примерно так:

циферкиИзкода = разобратьТекстРегЕксп("00-001189", " -(\d+)", ложь, истина, истина);


Меня поймет тот кто знаком с регулярными выражениями. Технология совсем не сложна в освоении при этом очень облегчает парсинг строк.
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
на инфостарте подсмотрел. может кому пригодится