Имя: Пароль:
1C
1С v8
удалить ненужные символы
0 dvrk
 
20.07.21
07:54
объясните на примере этого номера Р00000715
как из него удалить программно 5 нулей?
1 RomaH
 
naïve
20.07.21
07:57
СтрЗаменить("Р00000715","00000","");
2 dvrk
 
20.07.21
07:58
(1) а если это нужно сделать для группы, то СтрЗаменить(Номер, "00000",""); ?
3 Chai Nic
 
20.07.21
08:00
Чтобы удалить ненужные символы, надо для начала формально уяснить, что является нужными. В вашем случае, скорее всего, это
- правая часть до группы нулей, упирающейся в префикс
- собственно префикс

А далее - типичная задача из школьного курса информатики.
4 Малыш Джон
 
20.07.21
08:00
это пример того, как НЕ надо задавать вопросы)
5 Малыш Джон
 
20.07.21
08:01
(3) "Чтобы удалить ненужные символы, надо сначала добавить ненужные символы, а у нас места нет"
6 dvrk
 
20.07.21
08:01
(3) (5) то, Что я написал в (2) - удалить из номеров 5 нулей?
7 dvrk
 
20.07.21
08:02
удалит*
8 Ненавижу 1С
 
гуру
20.07.21
08:04
(6) вы решите так частный случай. И то неверно. Например неверно отработает номер Р00100000
9 dvrk
 
20.07.21
08:04
(8) у меня все номера вида A00000***
мне нужно их сделать а***
10 Малыш Джон
 
20.07.21
08:06
(9) а потом когда количество номеров перевалит за тысячу всё внезапно поломается?
11 Ненавижу 1С
 
гуру
20.07.21
08:07
(9) про зачем я даже спрашивать не хочу
12 dvrk
 
20.07.21
08:07
(11) не знаю.
13 Ненавижу 1С
 
гуру
20.07.21
08:09
(12) просто генерация кода ради неё самой?
14 dvrk
 
20.07.21
08:10
(13) +
15 Antony8x
 
20.07.21
08:11
(9) Тип номера число что ли?
16 Тындр
 
20.07.21
08:11
(9) Все возможно, например удалить нули слева: СтрЗаменить(СокрЛ(СтрЗаменить(Номер,"0"," "))," ","0")
Но, чтобы удалить еще и буквы слева, тут уже нужно немного больше кода. Даже может быть цикл нужен.
Если у Вас слева всегда только одна буква и она первая, и это точно, то можно обойтись без цикла
Лев(Номер,1)+СтрЗаменить(СокрЛ(СтрЗаменить(Сред(Номер,2),"0"," "))," ","0")
17 dubolom
 
20.07.21
08:12
(9) Если всё именно такого вида, то
НовыйКод = "a" + Сред(СтарыйКод, 7)
18 Тындр
 
20.07.21
08:13
+16 Ну и лучше чтобы номер при этом был уже с обрезаными по краям пробелами)
19 Serg_1960
 
20.07.21
08:17
(0) Программно? Во всех типовых конфигурация есть функция удаления префиксов и ведущих нулей из номера.
20 Тындр
 
20.07.21
08:17
(19) ага, нужно искать что-то типа НомерНаПечать(
21 Chai Nic
 
20.07.21
08:20
(20) И всегда быть готовым к тому, что эта функция внезапно перелетит из одного модуля в другой или переименуется. ОНИ это любят.
22 Serg_1960
 
20.07.21
08:29
PS: если решать вопрос в общем случае, то потребуется иметь, так или иначе, список всех префиксов, встречающихся в номерах.
23 dvrk
 
20.07.21
08:58
Для каждого Реал из Результат Цикл        
                 Об = Реал.Ссылка.ПолучитьОбъект();
                 об.номер = " "+СтрЗаменить(об.номер, "00000", "");
                 об.записать(РежимЗаписиДокумента.Запись);
                                    КонецЦикла;
почему не записывает?
24 Serg_1960
 
20.07.21
09:28
(23) Вероятно <Результат> пустой; если <Реал> - это ссылка, то в строке <Реал.Ссылка.ПолучитьОбъект();> - ссылка по ссылки - это излишнее; как и начальный пробел номера в строке <об.номер = " "+СтрЗаменить(об.номер, "00000", "");>...
25 Тындр
 
20.07.21
09:29
(22) Не обязательно, можно изобрести велосипед и удалить все что не цифры. Ну если вдруг буквы могут быть в середине номера или в конце, то тогда придется сильнее извращаться

НовыйНомер = "";
Для сч=1 по СтрДлина(СтарыйНомер) Цикл
Если Найти(Сред(СтарыйНомер,сч,1),"0123456789")>0 Тогда
НовыйНомер = НовыйНомер+Сред(СтарыйНомер,сч,1);
КонецЕсли;
КонецЦИкла;

//Почему у меня ощущение, что сегодня пятница? Хотя только вторник (
26 dmt
 
20.07.21
09:34
(23) уберегает тебя от проблем
27 Малыш Джон
 
20.07.21
09:36
(23) Потому что Результат - это у тебя скорее всего результат запроса(ну или выборка)
С ними не так работают
28 Serg_1960
 
20.07.21
09:37
(25) Обязательно :( Если, например в номере ""Р01000715" префикс - "Р01"
29 Малыш Джон
 
20.07.21
09:41
(28) такого префикса не может быть. Ну то есть может конечно, но тогда такую базу лучше сжечь.
30 dvrk
 
20.07.21
09:42
(24) начальный пробел - одно из условие в задаче, дописал К об.записать(РежимЗаписиДокумента.Запись); параметр режимпроведениядокумента и записалось
31 dvrk
 
20.07.21
09:43
условий
32 Serg_1960
 
20.07.21
09:48
(29) Может быть всё гораздо хуже :) Особенности работы с "числовыми" префиксами - https://its.1c.ru/db/metod8dev/content/1562/hdoc
33 vova1122
 
20.07.21
09:49
(30) А как обработались номера до 100 (там по идее должно быть 6 нулей). И как обработплись номера тольше 1000 (там всего 4 нуля)
34 Serg_1960
 
20.07.21
09:52
(31) Да за такие "условия" вывести бы в чистое поле, поставить к стенке и расстрелять без права помилования.
35 dvrk
 
20.07.21
09:56
(33) ну, номера до 100 обрабатывались без меня, номеров после 1000 нет ещё
36 Serg_1960
 
20.07.21
09:58
(33) Ох, лучше не спрашивай. Тут тема на тему "Прощай автонумерация и здравый смысл" :)
37 Малыш Джон
 
20.07.21
10:16
(32) Хммм... А чем такой префикс отличается от просто номера, только начинается он не с 000000000, а с 800000000?
38 vova1122
 
20.07.21
10:28
(37) Так это был глюк платформы 8.1.5
39 Serg_1960
 
20.07.21
12:43
(37) Отличия будут заметны, например, когда появится ещё один префикс в базе. Например, "9" :))  - для механизма автонумерации пространство номеров у них различное - в разрезе префиксов.