При работе в распределенных системах обмена данными (например, между Управление торговлей и Бухгалтерия предприятия) номера документов в 1С содержат префикс информационной базы — для управления ими есть расширение для автоматической нумерации и префиксации в 1С. Это необходимо для обеспечения уникальности номеров, однако пользователи часто сталкиваются с тем, что этот технический префикс отображается в печатных формах, что выглядит неаккуратно. Давайте разберем, как решить эту задачу, не снимая конфигурацию с поддержки.
Прежде чем приступать к настройке, важно уяснить: категорически не рекомендуется удалять или изменять префикс в самих документах или регистрах базы данных. Префикс — это часть механизма синхронизации. Если вы измените номер в базе, при следующем обмене данными возникнут конфликты, дублирование номеров или ошибки загрузки — для профилактики ошибок подойдёт контроль корректности данных после обмена между базами 1С. Мы будем решать задачу исключительно на уровне отображения в печатных формах.
ПрефиксацияОбъектовКлиентСерверВ типовых конфигурациях 1С уже заложен механизм, который отделяет «системный» номер от того, что выводится на печать. Основным инструментом здесь является функция НомерНаПечать — задачу удобнее решать через инструмент для редактирования и настройки печатных форм 1С.
Чтобы скрыть префикс, мы можем перехватить вызов этой функции через расширение конфигурации. Это «золотой стандарт» разработки, так как он позволяет сохранить конфигурацию на поддержке.
Разберем шаги реализации:
ПрефиксацияОбъектовКлиентСервер.ПрефиксацияОбъектовКлиентСервер.НомерНаПечать, передав в него соответствующие параметры удаления префиксов.Рассмотрим пример программного вызова, который можно встроить в ваше расширение:
// Пример переопределения логики вывода номера
Результат = ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(
"УТ-0000001",
Истина, // Удалить префикс ИБ
Истина // Удалить пользовательский префикс
);
ПриПолученииНомераНаПечатьБолее гибкий метод — использование модуля ПрефиксацияОбъектовКлиентСерверПереопределяемый. Здесь мы можем полностью изменить алгоритм формирования номера для печати для всей системы.
В вашем расширении переопределите процедуру ПриПолученииНомераНаПечать следующим образом:
&После("ПриПолученииНомераНаПечать")
Процедура МоеРасширение_ПриПолученииНомераНаПечать(Объект, НомерНаПечать, СтандартнаяОбработка)
// Устанавливаем признак того, что стандартную обработку нужно подавить
СтандартнаяОбработка = Ложь;
// Вызываем системную функцию с нужными параметрами
НомерНаПечать = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(
Объект.Номер,
Истина, // Удалить префикс ИБ
Истина // Удалить пользовательский префикс
);
КонецПроцедуры
Часто возникает соблазн создать отдельные внешние печатные формы (ВПФ) для каждого документа. Однако мы не рекомендуем этот путь по нескольким причинам:
ПрефиксацияОбъектовКлиентСервер, вы избавите себя от необходимости править каждый макет отдельно.Для реализации задачи «красивой» печати без префикса базы:
Печатать номера документов без префикса базы).НомерНаПечать.Номер, чтобы синхронизация данных оставалась работоспособной.Применяя этот подход, вы обеспечите аккуратный внешний вид ваших документов (поможет кастомизация печатных форм и вывод факсимиле в 1С), сохранив при этом целостность данных в распределенной информационной системе.