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 — группировка разрядов использоваться не будет

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

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

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: