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