Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

удалить ненужные символы

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

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

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

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


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.