Меню Закрыть

1С убрать лидирующие нули в номере

Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования (Linus Torvalds).

Страницы

пятница, 17 января 2014 г.

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

Убрать лидирующие нули из номера документа может нам понадобиться в том случае, если мы, к примеру, формируем печатную форму и номер нужно привести к нормальному виду, не показывая лидирующие нули и префикс документа. Для этого можно воспользоваться готовой процедурой, которая преобразовывает номер к нужному нам виду. Содержится она в общем модуле ОбщегоНазначения:

// Процедура предназначена для преобразования номера документа.
//
// Параметры:
// Документ — (ДокументСсылка), документ, чей номер надо получить для печати.
//
// Возвращаемое значение.
// Строка — номер документа для печати
//
Функция ПолучитьНомерНаПечать ( Документ , МассивПрефиксов = Неопределено, ПечатьПрефиксовРИБ = Истина) Экспорт

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

ПечатьПрефиксовРИБ = ОбщегоНазначения . ПолучитьЗначениеПеременной ( "ПечатьПрефиксаРИБ" ) И ПечатьПрефиксовРИБ ;

Номер = СокрЛП ( Документ . Номер );

Если ТипЗнч ( Документ ) <> Тип ( "ВыборкаИзРезультатаЗапроса" )
И ТипЗнч ( Документ ) <> Тип ( "Структура" ) Тогда

МетаданныеДокумента = Документ . Метаданные ();
Если МетаданныеДокумента . Реквизиты . Найти ( "НомерВходящегоДокумента" ) <> Неопределено Тогда
Если ЗначениеЗаполнено ( Документ . НомерВходящегоДокумента ) Тогда
Номер = СокрЛП ( Документ . НомерВходящегоДокумента );
КонецЕсли;
КонецЕсли;

Если ПечатьПрефиксовРИБ Тогда
МассивПрефиксовРИБ = ПолучитьМассивПрефиксовРИБ ();
КонецЕсли;

Если МассивПрефиксов = Неопределено Тогда

Если ТипЗнч ( Документ ) = Тип ( "ВыборкаИзРезультатаЗапроса" )
ИЛИ ТипЗнч ( Документ ) = Тип ( "Структура" ) Тогда

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

Если МетаданныеДокумента . Реквизиты . Найти ( "Организация" ) <> Неопределено Тогда

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

Если МетаданныеДокумента . Имя = "Доверенность" Тогда
ПрефиксДоверенности = "Д" ;
КонецЕсли;

Если ПечатьПрефиксовРИБ Тогда
// если печатаем префиксы РИБ в документах — не добавляем их в массив удаляемых префиксов
МассивПрефиксовДляОбхода = СформироватьМассивПрефиксовПоОрганизации ( Организация );
Иначе
МассивПрефиксовДляОбхода = СформироватьМассивПрефиксовДляРИБИОрганизации ( Организация );
КонецЕсли;

Читайте также:  Сравнение видеокарт для ноутбуков по производительности

Если ПечатьПрефиксовРИБ Тогда
// если печатаем префиксы РИБ в документах — не добавляем их в массив удаляемых префиксов
Для Каждого ПрефиксИзМассива Из МассивПрефиксов Цикл
Если МассивПрефиксовРИБ . Найти ( ПрефиксИзМассива ) = Неопределено
И МассивПрефиксовДляОбхода . Найти ( ПрефиксИзМассива ) = Неопределено Тогда
МассивПрефиксовДляОбхода . Добавить ( ПрефиксИзМассива );
КонецЕсли;
КонецЦикла;
Иначе
МассивПрефиксовДляОбхода = МассивПрефиксов ;
КонецЕсли;

ПрефиксРИБ = "" ;
Если ПечатьПрефиксовРИБ Тогда
// определим, какие префиксы РИБ следует выводить на печать и удалим эти префиксы из номера
Для Каждого ПрефиксРИБИзМассива Из МассивПрефиксовРИБ Цикл
Если Найти ( Номер , ПрефиксРИБИзМассива ) = 1 Тогда
Номер = Сред ( Номер , СтрДлина ( ПрефиксРИБИзМассива ) + 1 );
ПрефиксРИБ = ПрефиксРИБ + ПрефиксРИБИзМассива ;
КонецЕсли;
КонецЦикла;
КонецЕсли;

Если ПрефиксДоверенности <> "" Тогда
МассивПрефиксовДляОбхода . Добавить ( ПрефиксДоверенности );
КонецЕсли;

Если НЕ МетаданныеДокумента = Неопределено Тогда
Если МетаданныеДокумента . Имя = "НалоговаяНакладная"
ИЛИ МетаданныеДокумента . Имя = "Приложение2КНалоговойНакладной" Тогда
ТекМесяц = ‘20000101’ ;
Для Инд = 1 По 12 Цикл
МассивПрефиксовДляОбхода . Добавить ( "Н" + ПолучитьМесячныйПрефиксНалоговыхДокументов ( ТекМесяц ));
МассивПрефиксовДляОбхода . Добавить ( "П" + ПолучитьМесячныйПрефиксНалоговыхДокументов ( ТекМесяц ));
ТекМесяц = ДобавитьМесяц ( ТекМесяц , 1 );
КонецЦикла;
ТекМесяц = ‘20000101’ ;
Для Инд = 1 По 12 Цикл
МассивПрефиксовДляОбхода . Добавить ( ПолучитьМесячныйПрефиксНалоговыхДокументов ( ТекМесяц ));
ТекМесяц = ДобавитьМесяц ( ТекМесяц , 1 );
КонецЦикла;
МассивПрефиксовДляОбхода . Добавить ( "Н" );
МассивПрефиксовДляОбхода . Добавить ( "П" );
МассивПрефиксовДляОбхода . Добавить ( "U" );
МассивПрефиксовДляОбхода . Добавить ( "V" );
МассивПрефиксовДляОбхода . Добавить ( "W" );

Для Каждого ТекущийПрефикс ИЗ МассивПрефиксовДляОбхода Цикл

// удаление префикса из номера документа
Если Найти ( Номер , ТекущийПрефикс )= 1 Тогда
Номер = Сред ( Номер , СтрДлина ( ТекущийПрефикс )+ 1 );
КонецЕсли;

// так же, может остаться "минус" впереди
Если Лев ( Номер , 1 ) = "-" Тогда
Номер = Сред ( Номер , 2 );
КонецЕсли;

// удаление ведущих нулей
Пока Лев ( Номер , 1 )= "0" Цикл
Номер = Сред ( Номер , 2 );
КонецЦикла;
КонецЦикла;

УдалитьПрефиксОбособленногоПодразделенияИзНомера ( Документ , МетаданныеДокумента , Номер );

Если ПечатьПрефиксовРИБ И ПрефиксРИБ <> "" Тогда
Номер = ПрефиксРИБ + Номер ;
КонецЕсли;

Программирование системы 07.12.2017 13:52 1230
Читайте также:  Вирус на телефоне ммс

Функция удаления лидирующих нулей обходит символы строки с лева на право, до тех пор пока не встретится символ отличный от нуля. Как только встречается символ не равный нулю, берется часть строки начиная с этого символа и до конца строки. Если входящая строка "000016", функция вернет "16".

Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться

Допустим необходимо, чтобы из числа 3 получалось 00003, из 356 получалось 00356 и так далее.

Для этого можно использовать функцию Формат().

Здесь в форматной строке указано три параметра:

  • ЧЦ=5 — всего будет отображаться пять знаков (целой и дробной части)
  • ЧВН= — будут выводиться лидирующие нули
  • ЧГ=0 — группировка разрядов использоваться не будет

Для составления форматной строки можно использовать конструктор форматной строки.

Подробнее о функции Формат() можно почитать в синтакс-помощнике:

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.