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

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

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



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

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

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

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

   
МетаданныеДокумента = Неопределено;

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

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

    КонецЕсли;

   
ПрефиксДоверенности = "";
   
Префикс = "";

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

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

       
Организация = Неопределено;

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

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

        Иначе

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

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

            КонецЕсли;

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

        КонецЕсли;

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

    Иначе

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

    КонецЕсли;

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

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


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

        КонецЕсли;
    КонецЕсли;


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

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

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

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

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

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

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

КонецФункции
// ПолучитьНомерНаПечать()

Пример вызова:

ОбластьМакета.Параметры.НомерДокумента = ОбщегоНазначения.ПолучитьНомерНаПечать(ЭтотОбъект);


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

Комментариев нет :

Отправить комментарий