|
Работа со строкой | ☑ | ||
---|---|---|---|---|
0
DEaD_EGOR
27.05.16
✎
17:05
|
Народ, докатился до того, что не могу решить простую задачку, помогите плз. БП 2,0. Имеется в отчёте "кассовая книга" номера РКО и ПКО в формате Префикс (2 или 4 буквы) + ноли + собсна номер . всего 11 символов...
Задача проста. Написать функцию, отсекающую все символы слева, оставляющую номер в чистом виде... Прошу помощи)) |
|||
1
Nuobu
27.05.16
✎
17:07
|
ПолучитьНомерНаПечать?
|
|||
2
Волшебник
модератор
27.05.16
✎
17:07
|
Число(Сред(стр,2))
|
|||
3
DEaD_EGOR
27.05.16
✎
17:08
|
(1) она не срабатывает по какой то причине. я хотел просто дописать маленькую функцию
(2) а номер если больше 2х символов будет? |
|||
4
Nuobu
27.05.16
✎
17:10
|
(3) Число(Сред(стр,3))
|
|||
5
Nuobu
27.05.16
✎
17:19
|
(3) Функция ПолучитьНомерБезПрефиксовИНулей(НомерСПрефиксамиИНулями)
Пока СтрДлина(НомерСПрефиксамиИНулями) > 0 Цикл НомерСПрефиксамиИНулями = Сред(НомерСПрефиксамиИНулями, 1); Попытка НомерБезПрефиксовИНулей = Число(НомерСПрефиксамиИНулями); Прервать; Исключение НомерБезПрефиксовИНулей = 0; Продолжить; КонецПопытки; КонецЦикла; возврат НомерБезПрефиксовИНулей; КонецФункции |
|||
6
Волшебник
модератор
27.05.16
✎
17:21
|
||||
7
Fram
27.05.16
✎
17:24
|
(5) а это зачем?
НомерБезПрефиксовИНулей = 0; |
|||
8
Fram
27.05.16
✎
17:25
|
+(7) мне кажется это перед циклом надо было прописать
|
|||
9
Nuobu
27.05.16
✎
17:26
|
(7) Не подумал, тысяча извинений. Всё остальное норм? Нравится?
|
|||
10
DEaD_EGOR
27.05.16
✎
17:26
|
(5) а буквенный префикс тоже тут уберётся?
|
|||
11
Nuobu
27.05.16
✎
17:29
|
(10) Префикс, как таковой, только буквенный и бывает.
|
|||
12
DEaD_EGOR
27.05.16
✎
17:31
|
(11) не так написал. префикс тоже должен убраться? просто я попробовал, начал ругаться на Число...
|
|||
13
Nuobu
27.05.16
✎
17:32
|
(12) Потому что ты не поместил в "попытку".
|
|||
14
DEaD_EGOR
27.05.16
✎
17:33
|
(13)что именно не поместил в Попытку?
|
|||
15
Nuobu
27.05.16
✎
17:33
|
(14) Преобразование к типу "Число".
|
|||
16
DEaD_EGOR
27.05.16
✎
17:36
|
(15) Функция ПолучитьНомерНаПечать(НомерСПрефиксамиИНулями)
НомерБезПрефиксовИНулей = 0; Пока СтрДлина(НомерСПрефиксамиИНулями) > 0 Цикл НомерСПрефиксамиИНулями = Сред(НомерСПрефиксамиИНулями, 1); Попытка НомерБезПрефиксовИНулей = Число(НомерСПрефиксамиИНулями); Прервать; Исключение Продолжить; КонецПопытки; КонецЦикла; возврат НомерБезПрефиксовИНулей; КонецФункции Преобразование значения к типу Число не может быть выполнено |
|||
17
Nuobu
27.05.16
✎
17:38
|
(16) Ты отладкой смотришь?
|
|||
18
DEaD_EGOR
27.05.16
✎
17:39
|
(17) да. я помоему неправильно её вызываю...
|
|||
19
Nuobu
27.05.16
✎
17:40
|
(18) Забей на отладку.
|
|||
20
DEaD_EGOR
27.05.16
✎
17:40
|
(18) хотя нет, правильно..
|
|||
21
DEaD_EGOR
27.05.16
✎
17:41
|
(19) если забиваю на отладку, вешается кассовая книга наглухо
|
|||
22
DEaD_EGOR
27.05.16
✎
17:45
|
(19) как я понял, он ругается, что в номере есть буквы, а они числом не являются
|
|||
23
Zhuravlik
27.05.16
✎
17:49
|
(0) Удалить первые символы не встречающиеся в строке 0987654321, все что осталось - преобразовать к числу. Если вас только бухи не любят баловаться заменой "0" на "O".
|
|||
24
Zhuravlik
27.05.16
✎
17:51
|
Слово = "";
ДлинаСтроки = СтрДлина(НомерДок); Для сч = 1 По ДлинаСтроки Цикл сим = сред(НомерДок, сч, 1); Если Найти("0987654321", сим) > 0 Тогда Слово = Слово + сим; КонецЕсли; КонецЦикла; Попытка НомерЧислом = Число(Слово); Исключение НомерЧислом = 0; КонецПопытки Возврат НомерЧислом Как-то так |
|||
25
DEaD_EGOR
27.05.16
✎
17:52
|
(23)я пробовал вот так
ГотоваяСтрока = ""; КоличествоСимволов = СтрДлинна (Номер); Для НомерСимвола=1 ПО КоличествоСимволов Цикл мКод = КодСимвола (Сред (Номер, НомерСимвола,1); Если мКод< 57 Или мКод> 49 Тогда ГотоваяСтрока=ГотоваяСтрока+Сред (Номер, НомерСимвола,1); Конецесли; КонецЦикла; Возврат ГотоваяСтрока; |
|||
26
Zhuravlik
27.05.16
✎
17:54
|
(25) Тогда по идее осталось
Попытка НомерЧислом = Число(ГотоваяСтрока); Исключение НомерЧислом = 0; КонецПопытки Возврат НомерЧислом Чтоб нули убрать, и заодно проверить что в самом номере нет букв. |
|||
27
Garykom
гуру
27.05.16
✎
17:57
|
Возьми вместо ваяния своего лисапеда готовую обработку по сверке.
|
|||
28
DEaD_EGOR
27.05.16
✎
18:00
|
(27) какую? Получитьномернапечать ?
|
|||
29
Garykom
гуру
27.05.16
✎
18:06
|
(28) Ты понимаешь что не возможно выделить не зная длину префикса "числовой номер" из значений "ДЯ100000000" и "ДУБЫ1000000"?
|
|||
30
Garykom
гуру
27.05.16
✎
18:08
|
(29)+ если префикс 2 символа то Результат = Число(Прав(Строка, 9)), а если префикс 4 символа то Результат = Число(Прав(Строка, 7))
И все |
|||
31
Garykom
гуру
27.05.16
✎
18:09
|
(29)+ Чтобы было понятнее выдели номер из "ДЯ1Д0000001"
|
|||
32
Fram
27.05.16
✎
18:40
|
В (16) рабочий код. Что не так?
|
|||
33
hhhh
27.05.16
✎
22:56
|
(26) можно ведь без попыток убрать нули слева. Что за дикость писать попытку по поводу и без повода.
|
|||
34
Wern
27.05.16
✎
23:38
|
(33) А почему бы не писать попытку? У тебя фобия на попытки?
|
|||
35
alle68
28.05.16
✎
04:30
|
(32) Вечный цикл... И "Знач" у параметра не хватает.
(34) Использовать попытки без необходимости - плодить ГК. А верный подход в (30), т.к. префикс может и из цифр состоять. |
|||
36
hhhh
28.05.16
✎
06:26
|
(34) это в десятки раз медленнее, чем просто найти первый не ноль. И лишнее преобразование. Он делает из строки число, а потом опять из числа строку.
|
|||
37
DEaD_EGOR
30.05.16
✎
17:27
|
сделал вот так
Функция ПолучитьНомерНаПечать(Номер) ГотоваяСтрока = ""; КоличествоСимволов = СтрДлина (Номер); Индекс = 0; Для Индекс=1 ПО КоличествоСимволов Цикл текСимвол = КодСимвола(номер, индекс); Если текСимвол< 58 и текСимвол> 48 Тогда Прервать; Конецесли; КонецЦикла; ГотоваяСтрока = Прав(номер, КоличествоСимволов - индекс +1); Возврат ГотоваяСтрока; КонецФункции всё заработало. Даже если номер имеет формат АА10Б0000321, на выходе получаем 321. Всем спасибо за помощь) |
|||
38
Nuobu
30.05.16
✎
17:30
|
Даже если номер имеет формат АА10Б0000321, на выходе получаем 321. Всем спасибо за помощь)
А Если номер имеет формат: АА10Б0055321, то всё равно получим "321")) |
|||
39
DEaD_EGOR
30.05.16
✎
17:38
|
(38) почему?
|
|||
40
DEaD_EGOR
30.05.16
✎
17:42
|
(38) я сейчас проверял, у меня есть разные номера: 2 цифры после нулей, 4 цифры после нулей.. всё распознаёт ...
|
|||
41
Nuobu
30.05.16
✎
17:46
|
||||
42
DEaD_EGOR
30.05.16
✎
17:56
|
(41) не, это уже другое. мне требовалось оставить все цифры после нулей. потому я и справа собираю... в префикс цифры не попадают
|
|||
43
Garykom
гуру
30.05.16
✎
22:36
|
(42) Если нужны "все цифры после 0" не проще было брать по одной цифре справа пока не встретится "не цифра"?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |