Имя: Пароль:
1C
1С v8
Обрезать код номенклатуры
,
0 fury21
 
17.09.15
10:28
Здр!
Помогите обрезать код номенклатуры.
Сейчас формат может быть или ГА-00000691 или 00-00000012 (ГА или 00) спереди. Для выгрузки на сайт нужно удалить спереди первые 3 символа и все нули, так, что бы остались только цифры начиная с 1 и до 9. Т.е. из 00-00000012 сделать просто "12", а из ГА-00000691 сделать "691". Кол-во нулей спереди разное всегда. https://yadi.sk/i/SYMLKimDj96Fx

Спасибо!
1 Molinor
 
17.09.15
10:30
Сред(), Формат()
2 Апош
 
17.09.15
10:31
+(1) получить номер на печать, спинной мозг
3 Fedor-1971
 
17.09.15
10:34
Вариант Число(сред(Номер,4)) - только если дальше попадутся буквы - будет ошибка
4 НЕА123
 
17.09.15
10:56
ОбрезанныКод = Формат(Число(СтрПолучитьСтроку(СтрЗаменить(Код,"-",Символы.ПС),2)),"ЧГ=");
5 ssh-2013
 
17.09.15
10:58
(0) Универсально можно сделать так: цикл перебора символов начиная с конца строки к началу. Как только встречается первое не число цикл прервать и Формат(Число()) от того что получено в цикле.

Проверить на цифру можно например так:
Если Найти("0123456789", ТекСимвол) > 0
6 Serg_1960
 
17.09.15
10:58
(0) "Кол-во нулей спереди разное всегда" - зато длина кода - число постоянное. Намёк понят?
7 Nuobu
 
17.09.15
11:00
(2) +1
8 Serg_1960
 
17.09.15
11:04
(5) Перебор с начала к концу ни чем не хуже (подначил)

"Написать алгоритм сложнее всегда проще, чем наоборот"(я)

(7) Не плюсуй. В типовой функции из документа номер (а не код из справочника). Переделывать нет смысла.
9 Serg_1960
 
17.09.15
11:12
Типовая функция из типовой конфигурации - выделение числа из строки, где число - в начале строки:

Функция ВыделитьЧислоИЗСтроки(СтрокаСимволов)
    
    Набор = "0";
    
    Для Индекс = 1 По СтрДлина(СтрокаСимволов) Цикл
        Если КодСимвола(СтрокаСимволов, Индекс) >= 48 И КодСимвола(СтрокаСимволов, Индекс) <= 57 Тогда
            Набор = Набор + Сред(СтрокаСимволов, Индекс, 1);
        Иначе
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    Возврат Число(Набор);
    
КонецФункции
10 ssh-2013
 
17.09.15
11:14
(8) > Перебор с начала к концу ни чем не хуже

поделись вариантом
11 fury21
 
17.09.15
11:16
Как то все сложно. Первые 3 символа можно просто отрезать, а потом убрать все нули. Как удалить именно нули спереди? И как этот код потом вставить в выгрузку? https://yadi.sk/i/SYMLKimDj96Fx
12 Serg_1960
 
17.09.15
11:19
(10) Функция, аналогичная (9), но число - в конце строки:

Функция ВыделитьИзСтрокиЧисло(СтрокаСимволов)
    
    Набор = "0";
    
    Для Индекс = 1 По СтрДлина(СтрокаСимволов) Цикл
        Если КодСимвола(СтрокаСимволов, Индекс) >= 48 И КодСимвола(СтрокаСимволов, Индекс) <= 57 Тогда
            Набор = Набор + Сред(СтрокаСимволов, Индекс, 1);
        Иначе
            Набор = "0";
        КонецЕсли;
    КонецЦикла;
    
    Возврат Число(Набор);
    
КонецФункции
13 Serg_1960
 
17.09.15
11:23
(11) Не читатель? См.(3) - преобразование в число "отрезает" ведущие нули.
14 ssh-2013
 
17.09.15
11:25
(12) если префикс будет "01-" ?

Может у него такого и нет, (5) в этом смысле более универсально
15 Апош
 
17.09.15
11:26
(11) >Как то все сложно
дело в том, что программирование предполагает наличие мозга. в данной задаче ну хоть какого-нибудь
16 fury21
 
17.09.15
11:27
Если в самом начале отрезать первые 3 символа то останутся только цифры
17 ssh-2013
 
17.09.15
11:28
(11) > Как то все сложно.

(
18 Ildarovich
 
17.09.15
11:28
Вот вариант без преобразования в число:

СтрЗаменить(СокрЛ(СтрЗаменить(Сред(Код, 4), "0", " ")), " ", "0")
19 Serg_1960
 
17.09.15
11:29
(14) А ты проверь (12). Встретив "-" набор будет сброшен в ноль и продолжен далее.
20 ssh-2013
 
17.09.15
11:32
(19) ок
21 Апош
 
17.09.15
11:35
(18) во что оно превратит "мама родная"?
22 Nuobu
 
17.09.15
11:36
(21) В ноль
23 Fedor-1971
 
17.09.15
11:37
(21) в "а0родная"
24 Апош
 
17.09.15
11:38
(22) а правильно было бы в ноль, да
25 Serg_1960
 
17.09.15
11:39
(21) Оно маму родную превращает в абракадабру :)
26 fury21
 
17.09.15
13:55
Преобразование в число добавляет к коду пробел на каждую тысячу (вместо 1180 пишет 1 180). Как обратно в строку преобразовать?
27 ДенисЧ
 
17.09.15
13:56
"Преобразование в число добавляет к коду пробел"

Ничего никуда не добавляет.
А если кому добавляет - могу продать резиновую киянку. Для рихтования рук.
28 Апош
 
17.09.15
13:56
(26) форматом
29 Апош
 
17.09.15
13:57
кстати, да. сколько получается после добавления?
30 fury21
 
17.09.15
14:34
При таком коде СтрЗаменить(Строка(Число(Сред(Номенклатура.код, 4))), " ", "")

в выгрузку попадает <Артикул>1 108</Артикул>
А мне пробел этот не нужен, как его убрать?
31 НЕА123
 
17.09.15
14:45
(30)
давай до завтра оставим.
32 fury21
 
17.09.15
14:50
В итоге вот такая строка решила проблему, всем спасибо Формат(Число(Сред(Номенклатура.код, 4)), "ЧГ=")

Нужно ли ее обратно в строку переводить?
33 ДенисЧ
 
17.09.15
14:51
(32) Ты, главное, не читай справку...
Особенно пояснения по возвращаемому функцией типу значения...
34 НЕА123
 
17.09.15
14:51
2 (32)

(31)+1
35 dka80
 
17.09.15
15:42
УниверсальныйПодборИОбработкаОбъектов.epf
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.