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