Введение
Всем доброго времени суток!
В данной статье предлагаю рассмотреть некоторые полезные возможности актуальной библиотеки стандартных подсистем (БСП) в области функционала подсистемы "Префиксация объектов". На текущий момент написания статьи актуальная версия БСП - это БСП версии 3.1.4.265.
Кому может быть полезна данная статья? Данная статья будет полезна прежде всего внедренцам-программистам, работающими с любыми современными типовыми конфигурациями на Платформе 1С 8.3. Поскольку, любая современная типовая конфигурация содержит в себе библиотеку стандартных подсистем, соответственно и подход к префиксации объектов в данных конфигурациях одинаковый.
Надеюсь, что изучение данных типовых подсистем библиотеки, значительно сократит вам время разработки обработок и не заставит вас изобретать что-то свое. Настоящее время диктует, что должен быть стандартный подход в промышленных массовых решениях.
Разобью эту статью на две части. В первой части мы рассмотрим основные базовые возможности БСП "Префиксации объектов" по разнообразному преобразованию входящего в нее номеру объекта. А во второй части рассмотрим небольшую и очень полезную функцию, которая позволяет "оценить" и получить информацию об объекте в рамках системы БСП "Префиксации объектов".
Итак, переходим в первой части:
Часть 1. Основные базовые возможности БСП в рамках подсистемы "Префиксация объектов"
Рассмотрим программный интерфейс функционала общего модуля БСП ПрефиксацияОбъектовКлиентСервер по работе с префиксами - будет полезен для формирования номеров (документов) для вывода печатных форм:
Функция УдалитьПрефиксыИзНомераОбъекта(Знач НомерОбъекта, УдалитьПрефиксОрганизации = Ложь, УдалитьПрефиксИнформационнойБазы = Ложь) Экспорт
УдалитьПрефиксыИзНомераОбъекта
Функция УдалитьПрефиксыИзНомераОбъекта(Знач НомерОбъекта, УдалитьПрефиксОрганизации = Ложь, УдалитьПрефиксИнформационнойБазы = Ложь) Экспорт
Если Не НомерСодержитСтандартныйПрефикс(НомерОбъекта) Тогда
Возврат НомерОбъекта;
КонецЕсли;
// Изначально пустая строка префикса номера объекта.
ПрефиксОбъекта = "";
НомерСодержитПятизначныйПрефикс = НомерСодержитПятизначныйПрефикс(НомерОбъекта);
Если НомерСодержитПятизначныйПрефикс Тогда
ПрефиксОрганизации = Лев(НомерОбъекта, 2);
ПрефиксИнформационнойБазы = Сред(НомерОбъекта, 3, 2);
Иначе
ПрефиксОрганизации = "";
ПрефиксИнформационнойБазы = Лев(НомерОбъекта, 2);
КонецЕсли;
ПрефиксОрганизации = СтроковыеФункцииКлиентСервер.УдалитьПовторяющиесяСимволы(ПрефиксОрганизации, "0");
ПрефиксИнформационнойБазы = СтроковыеФункцииКлиентСервер.УдалитьПовторяющиесяСимволы(ПрефиксИнформационнойБазы, "0");
// Добавляем префикс организации.
Если Не УдалитьПрефиксОрганизации Тогда
ПрефиксОбъекта = ПрефиксОбъекта + ПрефиксОрганизации;
КонецЕсли;
// Добавляем префикс информационной базы.
Если Не УдалитьПрефиксИнформационнойБазы Тогда
ПрефиксОбъекта = ПрефиксОбъекта + ПрефиксИнформационнойБазы;
КонецЕсли;
Если Не ПустаяСтрока(ПрефиксОбъекта) Тогда
ПрефиксОбъекта = ПрефиксОбъекта + "-";
КонецЕсли;
Возврат ПрефиксОбъекта + Сред(НомерОбъекта, ?(НомерСодержитПятизначныйПрефикс, 6, 4));
КонецФункции
Примеры использования:
НомерОбъекта = "0ФНК-000365"; // строка
УдалитьПрефиксыИзНомераОбъекта(НомерОбъекта, Истина, Истина) // "000365"
УдалитьПрефиксыИзНомераОбъекта(НомерОбъекта, Ложь, Истина) // "Ф-000365"
УдалитьПрефиксыИзНомераОбъекта(НомерОбъекта, Истина, Ложь) // "НК-000365"
УдалитьПрефиксыИзНомераОбъекта(НомерОбъекта, Ложь, Ложь) // "ФНК-000365"
Функция УдалитьЛидирующиеНулиИзНомераОбъекта(Знач НомерОбъекта) Экспорт
УдалитьЛидирующиеНулиИзНомераОбъекта
Функция УдалитьЛидирующиеНулиИзНомераОбъекта(Знач НомерОбъекта) Экспорт
ПользовательскийПрефикс = ПользовательскийПрефикс(НомерОбъекта);
Если НомерСодержитСтандартныйПрефикс(НомерОбъекта) Тогда
Если НомерСодержитПятизначныйПрефикс(НомерОбъекта) Тогда
Префикс = Лев(НомерОбъекта, 5);
Номер = Сред(НомерОбъекта, 6 + СтрДлина(ПользовательскийПрефикс));
Иначе
Префикс = Лев(НомерОбъекта, 3);
Номер = Сред(НомерОбъекта, 4 + СтрДлина(ПользовательскийПрефикс));
КонецЕсли;
Иначе
Префикс = "";
Номер = Сред(НомерОбъекта, 1 + СтрДлина(ПользовательскийПрефикс));
КонецЕсли;
// Удаляем лидирующие нули слева в номере.
Номер = СтроковыеФункцииКлиентСервер.УдалитьПовторяющиесяСимволы(Номер, "0");
Возврат Префикс + ПользовательскийПрефикс + Номер;
КонецФункции
Пример использования:
НомерОбъекта = "0ФНК-000365"; // строка
УдалитьЛидирующиеНулиИзНомераОбъекта(НомерОбъекта) // "0ФНК-365"
Функция ПользовательскийПрефикс(Знач НомерОбъекта) Экспорт
Функция ПользовательскийПрефикс(Знач НомерОбъекта) Экспорт
// Возвращаемое значение функции (пользовательский префикс).
Результат = "";
Если НомерСодержитСтандартныйПрефикс(НомерОбъекта) Тогда
Если НомерСодержитПятизначныйПрефикс(НомерОбъекта) Тогда
НомерОбъекта = Сред(НомерОбъекта, 6);
Иначе
НомерОбъекта = Сред(НомерОбъекта, 4);
КонецЕсли;
КонецЕсли;
СтрокаЦифровыхСимволов = "0123456789";
Для Индекс = 1 По СтрДлина(НомерОбъекта) Цикл
Символ = Сред(НомерОбъекта, Индекс, 1);
Если СтрНайти(СтрокаЦифровыхСимволов, Символ) > 0 Тогда
Прервать;
КонецЕсли;
Результат = Результат + Символ;
КонецЦикла;
Возврат Результат;
КонецФункции
Пример использования:
НомерОбъекта = "0ФНК-М00365"; // строка
ПользовательскийПрефикс(НомерОбъекта) = "М"
Функция НомерНаПечать(Знач НомерОбъекта, УдалитьПрефиксИнформационнойБазы = Ложь, УдалитьПользовательскийПрефикс = Ложь) Экспорт
Функция НомерНаПечать(Знач НомерОбъекта, УдалитьПрефиксИнформационнойБазы = Ложь, УдалитьПользовательскийПрефикс = Ложь) Экспорт
// {Обработчик: ПриПолученииНомераНаПечать} Начало
СтандартнаяОбработка = Истина;
ПрефиксацияОбъектовКлиентСерверПереопределяемый.ПриПолученииНомераНаПечать(НомерОбъекта, СтандартнаяОбработка,
УдалитьПрефиксИнформационнойБазы, УдалитьПользовательскийПрефикс);
Если СтандартнаяОбработка = Ложь Тогда
Возврат НомерОбъекта;
КонецЕсли;
// {Обработчик: ПриПолученииНомераНаПечать} Окончание
НомерОбъекта = СокрЛП(НомерОбъекта);
// Удаляем пользовательские префиксы из номера объекта.
Если УдалитьПользовательскийПрефикс Тогда
НомерОбъекта = УдалитьПользовательскиеПрефиксыИзНомераОбъекта(НомерОбъекта);
КонецЕсли;
// Удаляем лидирующие нули из номера объекта.
НомерОбъекта = УдалитьЛидирующиеНулиИзНомераОбъекта(НомерОбъекта);
// Удаляем префикс организации и префикс информационной базы из номера объекта.
НомерОбъекта = УдалитьПрефиксыИзНомераОбъекта(НомерОбъекта, Истина, УдалитьПрефиксИнформационнойБазы);
Возврат НомерОбъекта;
КонецФункции
Пример использования:
НомерОбъекта = "0ФНК-М00365"; // строка
НомерНаПечать(НомерОбъекта, Истина, Истина) // "365"
НомерНаПечать(НомерОбъекта, Ложь, Истина) // "НК-365"
НомерНаПечать(НомерОбъекта, Истина, Ложь) // "М365"
НомерНаПечать(НомерОбъекта, Ложь, Ложь) // "НК-М365"
Функция УдалитьПользовательскиеПрефиксыИзНомераОбъекта(Знач НомерОбъекта) Экспорт
УдалитьПользовательскиеПрефиксыИзНомераОбъекта
Функция УдалитьПользовательскиеПрефиксыИзНомераОбъекта(Знач НомерОбъекта) Экспорт
СтрокаЦифровыхСимволов = "0123456789";
Если НомерСодержитСтандартныйПрефикс(НомерОбъекта) Тогда
Если НомерСодержитПятизначныйПрефикс(НомерОбъекта) Тогда
Префикс = Лев(НомерОбъекта, 5);
НомерПолный = Сред(НомерОбъекта, 6);
Иначе
Префикс = Лев(НомерОбъекта, 3);
НомерПолный = Сред(НомерОбъекта, 4);
КонецЕсли;
Иначе
Префикс = "";
НомерПолный = НомерОбъекта;
КонецЕсли;
Номер = "";
Для Индекс = 1 По СтрДлина(НомерПолный) Цикл
Символ = Сред(НомерПолный, Индекс, 1);
Если СтрНайти(СтрокаЦифровыхСимволов, Символ) > 0 Тогда
Номер = Сред(НомерПолный, Индекс);
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Префикс + Номер;
КонецФункции
Пример использования:
НомерОбъекта = "0ФНК-М00365"; // строка
УдалитьПользовательскиеПрефиксыИзНомераОбъекта(НомерОбъекта) // "0ФНК-00365"
Мы рассмотрели несколько основных полезных функций для обработки номера объекта (надеюсь, что они пригодятся вам для формирования печатных форм). Теперь, рассмотрим полезную вспомогательную функцию подсистемы "Префиксация объектов", позволяющую определять какие метаданные конфигурации используют префиксы:
Часть 2. ОписаниеМетаданныхИспользующихПрефиксы() - очень полезная возможность подсистемы "Префиксации объектов"
Здесь я привожу пример работы с функцией - ОписаниеМетаданныхИспользующихПрефиксы(), находящуюся в общем модуле "ПрефиксацияОбъектовСлужебный":
Функция ОписаниеМетаданныхИспользующихПрефиксы() Экспорт
Обратиться к ней можно вот так:
Результаты = ПрефиксацияОбъектовСлужебный.ОписаниеМетаданныхИспользующихПрефиксы();
На выходе функции - ТаблицаЗначений, в которой указаны и описаны метаданные. Привожу пример на рисунке:
Рис.1 Результат "ТаблицаЗначений", возвращаемый служебной функцией ОписаниеМетаданныхИспользующихПрефиксы().
Помимо того, использует ли объект ПрефиксИБ или ПрефиксОрганизации, здесь можно увидеть много полезной информации - что это за объект, периодичность номера, используется код или номер. Есть информация о подписке.
Данная функция экспортная, доступна по всей конфигурации.
На этом, мы закончим разбор основных полезных функций подсистемы "Префиксация объектов" и перейдем к заключению и сделаем выводы:
Заключение и выводы
В данной статье мы рассмотрели основную выжимку подсистемы "Префиксация объектов" с системе БСП. Как было отмечено ранее - данные методы вы можете использовать в любой стандартной конфигурации 1с, основой которой является библиотека стандартных подсистем. Как самый простые примеры - это вывод на печать собственных печатных форм и получение информации об объектах в рамках системы "Префиксации объектов".
Данный материал призван изложить базовые возможности в тенденциях текущих стандартов разработок - это готовый инструмент для работы со подсистемой "Префиксация". Инструменты, рассматриваемые в данной статье готовы к применению сразу.
Для написания этой статьи я использовал Платформу 1с - 8.3.18.1363 и последнюю версию (на момент написания статьи) конфигурации БСП 3.1.4.265.
Спасибо за прочтение данной статьи-шпаргалки.
Другие мои материалы по подсистемам БСП
Так же прошу ознакомиться с другими моими статьями по функционалу библиотеки стандартных подсистем и типовым конфигурациям:
Базовое понимание внедрения механизма печати в любом документе конфигурации на БСП
Генерация штрихкодов с помощью БСП для программистов
Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)
Печать макета MS Word в любом документе с помощью БСП
Работаем с контактной информацией в конфигурациях на БСП