helpf.pro
Регистрация
 +1 
Распечатать

1С 8.x : Как убрать лидирующие нули в номере Документа

Часто при разработке печатных форм или отчетов, нужно номера документов вида 000001 преобразовать в 1 - убрав лидирующие нули. в этой статье я приведу несколько способов, а какой выбрать - решайте сами:

Код 1C v 8.х
 Функция УбратьЛидирующиеНули(НомерДокумента)
    Пока Найти(НомерДокумента, "0") > 0 Цикл
        УбратьЛидирующиеНули(Прав(НомерДокумента, СтрДлина(НомерДокумента)-1));
    КонецЦикла;
    Возврат    НомерДокумента;
КонецФункции
Код 1C v 8.х
 Функция УбратьЛидирующиеНули(НомерДокумента)
    
    Попытка
        НомерДокумента = Формат(Число(НомерДокумента), "ЧГ=");
    Исключение
        НомерДокумента = СтрЗаменить(СокрЛ(СтрЗаменить(СокрП(НомерДокумента), "0", " ")), " ", "0");
        Префикс = "";
        Пока КодСимвола(НомерДокумента) < 48 Или КодСимвола(НомерДокумента) > 57 Цикл
            Префикс = Префикс + Лев(НомерДокумента, 1);
            НомерДокумента = Сред(НомерДокумента, 2);
        КонецЦикла;
        Если Не ПустаяСтрока(Префикс) Тогда
            НомерДокумента = Префикс + УбратьЛидирующиеНули(НомерДокумента);
        КонецЕсли;
    КонецПопытки;
    Возврат НомерДокумента;
    
КонецФункции

В запросе:

Код 1C v 8.х
 ВЫБРАТЬ
    ВЫБОР
    КОГДА Не ПОДСТРОКА(&Номер, 1, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 1, 10)
    КОГДА Не ПОДСТРОКА(&Номер, 2, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 2, 9)
    КОГДА Не ПОДСТРОКА(&Номер, 3, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 3, 8)
    КОГДА Не ПОДСТРОКА(&Номер, 4, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 4, 7)
    КОГДА Не ПОДСТРОКА(&Номер, 5, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 5, 6)
    КОГДА Не ПОДСТРОКА(&Номер, 6, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 6, 5)
    КОГДА Не ПОДСТРОКА(&Номер, 7, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 7, 4)
    КОГДА Не ПОДСТРОКА(&Номер, 8, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 8, 3)
    КОГДА Не ПОДСТРОКА(&Номер, 9, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 9, 2)
    Иначе ПОДСТРОКА(&Номер, 10, 1)
КОНЕЦ КАК НомерБезНулей

Простые примеры:

Код 1C v 8.х
 Пока Лев(Номер, 1) = "0" Цикл 
    Номер = Прав(Номер, СтрДлина(Номер) - 1);
КонецЦикла;
Код 1C v 8.х
 
Функция УбратьНули(НомерСтрокой) 
    Если Лев(НомерСтрокой, 1) = "0" Тогда
        Возврат УбратьНули(Прав(НомерСтрокой, СтрДлина(НомерСтрокой) - 1)); 
    Иначе
        Возврат НомерСтрокой;
    КонецЕсли;
КонецФункции


ИтоговаяСтрока = УбратьНули(Номер);
Разместил:   Версии: | 8.x | 8.2 УП | 8.3 |  Дата:   Прочитано: 82968
 +1 
Распечатать
Возможно, вас также заинтересует
1С 8.x : Как убрать лидирующие нули в номере Документа (вариант2) 0
Скопировать строку с номером, с лидирующими нулями, в числовом поле (с форматом без групп, без группировки), и вернуть(скопировать) обратно в строковом поле с номером. Возвращает без нулей.
Как добавить нули к значению или строке в 1С 0
Функция ДобавитьНули(Значение, НужнаяДлинаЗначения) Значение = СтрЗаменить(Формат(Значение, " ЧГ=" ), " " , " " ); НадоНулей = НужнаяДлинаЗначения - СтрДлина(Значение); ВедущиеНули = Формат(0," ЧЦ=" +НадоНулей+" ;ЧН=; ЧВН=; ЧГ=0" ); Возврат
Как дополнить число лидирующими нулями (000851) ? 18
Необходимо, чтобы из числа 7 получалось 0007, из 851 получалось 000851 и т. д. Для этого можно использовать функцию встроенного языка Формат(). Например: ИсходноеЧисло = 13; Результат = Формат(ИсходноеЧисло, " ЧЦ=5; ЧВН=; ЧГ=0" ); //Результа
Как разделить текстовый файл на несколько файлов определенного размера? 0
Бывает необходимо разделить текстовый файл большого размера на несколько маленьких файлов. Ниже представлены функции при помощи которых можно разделить файл : РазделитьФайл( ИмяФайла , РазмерЧасти , Путь ) Разделяет указанный файл на несколько
Настройка веб-клиента 1С:Предприятие 8.2 под Windows 7 x64 и IIS 0
Возникла необходимость отладить небольшую конфигурацию 1С:Предприятие 8.2 под веб-клиентом. Веб сервером был выбран IIS, являющийся самым родным для ОС Windows. Опыт использования этого сервера в Windows XP подсказывал, что с ним будет меньше проблем
Посмотреть все результаты поиска похожих
Комментарии
all4cf
15.03.2021 19:09Комментарий: 5
all4cf
Код 1C v 8.3
 Функция УдалитьЛидирующиеНули(Номер)	
Для Индекс = 1 По СтрДлина(Номер) Цикл
Если Сред(Номер, Индекс, 1) <> "0" Тогда
Возврат Сред(Номер, Индекс);
КонецЕсли;
КонецЦикла;
//если все нули, то возврат пустой строки
Возврат "";
КонецФункции 
novic
09.11.2020 21:14Комментарий: 4
novic

Программируйте проще, этож 1С ))))

Значение = Н0000000015254;

Результат = СтрЗаменить(СокрЛП(Число(Прав(Значение,СтрДлина(Значение)-1))),Символы.НПП,"")

//Результат 15254; 

Ну а если просто строка с лидирующими нулями то еще проще:

Значение = 00000000015254;

Результат = СтрЗаменить(СокрЛП(Число(Значение)),Символы.НПП,"")

//Результат 15254; 

av-ont
27.10.2020 16:40Комментарий: 3
av-ont

Функция УбратьЛидирующиеНулиНомера( ДокНомер)

СтрМ= СтрРазделить( ДокНомер, "0");

СтрМКоличество= СтрМ.Количество();

Для Счетчик= 0 По СтрМКоличество Цикл

Если СтрМ[ Счетчик]<> "" Тогда

Прервать

КонецЕсли

КонецЦикла;

Возврат Прав( ДокНомер, СтрДлина( ДокНомер)- Счетчик);

КонецФункции

btrvodka
22.05.2017 13:45Комментарий: 2
btrvodka

В первом примере используется рекурсия, а значит нет смысла использовать цикл. Правильнее будет вот такой код:

Код 1C v 8.3
 Функция УбратьЛидирующиеНули(НомерДокумента)
Сообщить(НомерДокумента);
Если Найти(НомерДокумента, "0") = 1 тогда
УбратьЛидирующиеНули(Прав(НомерДокумента, СтрДлина(НомерДокумента)-1));
иначе
Возврат НомерДокумента;
конецесли;
КонецФункции
btrvodka
22.05.2017 13:44Комментарий: 1
btrvodka

В первом примере используется рекурсия, а значит нет смысла использовать цикл. Правильнее будет вот такой код:

Код 1C v 8.3
 Функция УбратьЛидирующиеНули(НомерДокумента)   
Код 1C v 8.3
 Сообщить(НомерДокумента);   
Код 1C v 8.3
     Если Найти(НомерДокумента, "0") = 1 тогда   
Код 1C v 8.3
         УбратьЛидирующиеНули(Прав(НомерДокумента, СтрДлина(НомерДокумента)-1));   
Код 1C v 8.3
     иначе   
Код 1C v 8.3
     Возврат    НомерДокумента;   
Код 1C v 8.3
 конецесли;   
Код 1C v 8.3
 КонецФункции   
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.