Убрать нули у документа

1. serg007 10 09.09.13 08:30 Сейчас в теме
Как убрать нули при печати номера документа, например номер №000000140, а надо №140
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. killitch 30 09.09.13 08:33 Сейчас в теме
Есть такая типовая функция НомерДляПечати или ПредставлениеДокументаДляПечати, точно не помню, но точно есть, можно посмотреть формирование типовых печатных форм. Имеется в виду в типовых конфах, в общих модулях.
3. thenroach 4 09.09.13 08:43 Сейчас в теме
зависит от конфигурации. в типовых решениях есть функция в общих модулях ВывестиНомерНаПечать(
если у Вас самописная конфигурация необходимо самостоятельно написать функцию обрезующую лидирующие нули
One_Assembler; +1 Ответить 1
6. serg007 10 09.09.13 09:25 Сейчас в теме
(3) thenroach, маленько не так называется, но путь верный указал, спасибо!!!
4. insurgut 208 09.09.13 08:51 Сейчас в теме
Пример:
МойНомер = "000001540";
НомерДляПечати = Формат(Число(МойНомер),"ЧГ=");
additive; yuraskas; user640247; tasha.bessonova@gmail.com; +4 Ответить
5. Dmitr033 132 09.09.13 09:24 Сейчас в теме
Если в конфигурации нет типовой функции ПолучитьНомерНаПечать, то ее нужно сделать по типу например Бухгалтерии (ниже ее текст). Нельзя просто преобразовать Строка-Число-Строка, в номере могут содержаться и буквы, кроме того нужно отрезать Префикс документа. Проще скопировать типовую функцию и в отладчике проверить как она работает в не типовой.
Функция ПолучитьНомерНаПечать(Документ, МассивПрефиксов = Неопределено) Экспорт

    Если Документ = Неопределено Тогда 
        Возврат 0;
    КонецЕсли;

    Номер   = СокрЛП(Документ.Номер);
    
    // {ОбменДаннымиБСП
    // Если номер документа по стандарту БСП 8.2, сформируем номер через стандартную процедуру БСП.
    Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменДанными") = Истина Тогда
        
        Если Сред(Номер, 5, 1) = "-" Тогда
            Номер = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(Номер,
            Ложь, // УдалитьПрефиксИнформационнойБазы
            Истина // УдалитьПользовательскийПрефикс
            );
            Возврат Номер;
        КонецЕсли;
        
    КонецЕсли;
    // }ОбменДаннымиБСП
    
    СсылкаНаДокумент = Неопределено;
    Префикс = "";
    Попытка
        Если ТипЗнч(Документ) = Тип("Структура") Тогда
            СсылкаНаДокумент = Документ.СсылкаСФАванс;
        ИначеЕсли ТипЗнч(Документ) = Тип("ДокументСсылка.СчетФактураВыданный")
            Или ТипЗнч(Документ) = Тип("ДокументОбъект.СчетФактураВыданный") Тогда
            Если Документ.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс Тогда 
                СсылкаНаДокумент = Документ;
            КонецЕсли;
        ИначеЕсли ТипЗнч(Документ) = Тип("ВыборкаИзРезультатаЗапроса") Тогда
            Если Документ.СчетФактура.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс Тогда 
                СсылкаНаДокумент = Документ;
            КонецЕсли;
        КонецЕсли;
    Исключение
    КонецПопытки;
    
    Если МассивПрефиксов = Неопределено Тогда
        
        Организация              = Неопределено;
        ПодразделениеОрганизации = Неопределено;
        
        Если ТипЗнч(Документ) = Тип("ВыборкаИзРезультатаЗапроса")
            ИЛИ ТипЗнч(Документ) = Тип("Структура") Тогда

            Организация = Документ.Организация;
            
        Иначе

            МетаданныеДокумента = Документ.Метаданные();

            Если ЕстьРеквизитДокумента("Организация", МетаданныеДокумента) Тогда

                Организация = Документ.Организация;

            КонецЕсли;
            
        КонецЕсли;
        
        МассивПрефиксовДляОбхода = СформироватьМассивПрефиксовДляРИБИОрганизации(Организация);
        
    Иначе
        
        МассивПрефиксовДляОбхода = МассивПрефиксов;
        
    КонецЕсли;
    
    ВыкинутПрефиксСФНаАванс = Ложь;
    ОтдельнаяНумерацияСФНаАванс = Константы.ОтдельнаяНумерацияСчетовФактурНаАванс.Получить();
    Если ОтдельнаяНумерацияСФНаАванс
        И СсылкаНаДокумент <> Неопределено
        И Сред(Номер, 1, 1) = "А" Тогда
        
        ВыкинутПрефиксСФНаАванс = Истина;
        Номер = Сред(Номер, 2);
        Если Сред(Номер, 1, 1) = "-" Тогда 
            Номер = Сред(Номер, 2);
        КонецЕсли;
    КонецЕсли;
    
    Для Каждого ТекущийПрефикс ИЗ МассивПрефиксовДляОбхода Цикл
        
        ТекущийНомер = Найти(Номер, ТекущийПрефикс);
        
        Если ТекущийНомер = 1 Тогда
            Номер = Сред(Номер, СтрДлина(ТекущийПрефикс)+1);
        КонецЕсли;
        // удаление префикса из номера документа
        //Если Найти(Номер, ТекущийПрефикс)=1 Тогда 
        //    Номер = Сред(Номер, СтрДлина(ТекущийПрефикс)+1);
        //КонецЕсли;
        
        // так же, может остаться "минус" впереди
        Если Лев(Номер, 1) = "-" Тогда
            Номер = Сред(Номер, 2);
        КонецЕсли;
        
        // удаление ведущих нулей
        Пока Лев(Номер, 1)="0" Цикл
            Номер = Сред(Номер, 2);
        КонецЦикла;
    КонецЦикла;
    
    Если ВыкинутПрефиксСФНаАванс Тогда
        Номер = "А" + Номер;
    КонецЕсли;

    Возврат Номер;

КонецФункции // ПолучитьНомерНаПечать()
Показать
7. serg007 10 09.09.13 09:27 Сейчас в теме
(5) Dmitr033, большое спасибо, полезно!!!
8. insurgut 208 09.09.13 09:42 Сейчас в теме
(5) Dmitr033, само собой типовую процедуру использовать всегда корректнее. Если конфигурация не типовая - можно скопировать код из типовой конфигурации (со всеми процедурами, вызывающимися из нее), все зависит от конкретного случая. Если номер документа всегда числовой, то проще сделать строка-число-строка :)
9. Dnki 4 09.09.13 11:53 Сейчас в теме
Функция ПолучитьНомерНаПечать(Документ, МассивПрефиксов = Неопределено) Экспорт
.....

Обалдеть! Автору нужно всего лишь отсечь ведущие нули. А назначение этой функции в чем-то другом.
Может чуть по-проще:
//----------------------------------------------------------
// Преобразовать в число
Функция Число_(П_Элемент) Экспорт
Попытка
Возврат Число(П_Элемент);
Исключение
Возврат 0;
КонецПопытки;
КонецФункции // Число_

Если задача убрать именно нули спереди, тогда циклом вырезАть первый символ.
Если в номере могут содержаться буквы, тогда сложнее.
10. beldieff 09.09.13 11:55 Сейчас в теме
(9) Dnki,
Обалдеть! Автору нужно всего лишь отсечь ведущие нули. А назначение этой функции в чем-то другом.

Назначение этой функции именно в этом.
1c_ssnik; +1 Ответить
11. Dnki 4 09.09.13 12:44 Сейчас в теме
(10) beldieff, Двойное недоумение: умеют-же люди написать "красиво и просто".
12. insurgut 208 09.09.13 13:16 Сейчас в теме
(11) Dnki, да не преувеличивайте уж. Бывают разные ситуации, номер документов может не только из цифр состоять, но и из префиксов, из букв, указанных пользователем вручную. Та функция соответственно убирает лидирующие нули и префиксы. Но, если априори известно, что нумерация числовая, конечно проще использовать более простую функцию. Все зависит от ситуации. Если конфигурация типовая, лучше использовать и типовое решение.
AllexSoft; +1 Ответить
13. serg007 10 09.09.13 15:38 Сейчас в теме
ВСЕМ СПАСИБО, РЕШЕНО!!!
14. One_Assembler 26.10.21 16:19 Сейчас в теме
На данный момент есть такая фун-ция :
// Получает номер документа для вывода на печать; из номера удаляются префиксы и лидирующие нули.
// Функция:
// отбрасывает префикс организации,
// отбрасывает префикс информационной базы (опционально),
// отбрасывает пользовательские префиксы (опционально),
// удаляет лидирующие нули в номере объекта.
Функция ПолучитьНомерНаПечать(Знач НомерОбъекта, УдалитьПрефиксИнформационнойБазы = Ложь, УдалитьПользовательскийПрефикс = Ложь) Экспорт
    
    // {Обработчик: ПриПолученииНомераНаПечать} Начало
    СтандартнаяОбработка = Истина;
    
    ПрефиксацияОбъектовКлиентСерверПереопределяемый.ПриПолученииНомераНаПечать(НомерОбъекта, СтандартнаяОбработка, Ложь, Ложь);
    
    Если СтандартнаяОбработка = Ложь Тогда
        Возврат НомерОбъекта;
    КонецЕсли;
    // {Обработчик: ПриПолученииНомераНаПечать} Окончание
    
    // Удаляем пользовательские префиксы из номера объекта.
    Если УдалитьПользовательскийПрефикс Тогда
        
        НомерОбъекта = УдалитьПользовательскиеПрефиксыИзНомераОбъекта(НомерОбъекта);
        
    КонецЕсли;
    
    // Удаляем лидирующие нули из номера объекта.
    НомерОбъекта = ПрефиксацияОбъектовКлиентСервер.УдалитьЛидирующиеНулиИзНомераОбъекта(НомерОбъекта);
    
    // Удаляем префикс организации и префикс информационной базы из номера объекта.
    НомерОбъекта = ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(НомерОбъекта, Истина, УдалитьПрефиксИнформационнойБазы);
    
    Возврат НомерОбъекта;
КонецФункции
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот