При работе в типовой конфигурации 1С:Бухгалтерия предприятия 3.0 пользователи часто сталкиваются с ситуацией, когда номер документа в интерфейсе программы не совпадает с номером, выводимым на печатную форму. Например, если в базе номер счета-фактуры зарегистрирован как АЛ00-Д000100, то на печать формируется номер Д100. Разберем, почему платформа 1С так преобразует номера, какие нормативные правила заложены в этот механизм и как настроить правильный вывод печатных форм.
Рассмотрим алгоритм обработки номера, заложенный разработчиками 1С. В типовой конфигурации преобразование номера выполняется автоматически при вызове специальной функции формирования печатных форм. Стандартный номер документа состоит из нескольких частей:
АЛ00) — служебная часть, которая предназначена для разделения нумерации между филиалами, организациями или узлами распределенной информационной базы (РИБ). По умолчанию при печати этот префикс отбрасывается.Д) — часть номера, которую пользователь задает для обозначения специфики операций. Этот префикс сохраняется системой.000100) — служебные нули, необходимые платформе для поддержания фиксированной длины строки в базе данных и корректной сортировки документов. При выводе на печать лидирующие нули автоматически удаляются.В результате работы алгоритма из номера АЛ00-Д000100 отсекается префикс АЛ00-, а из оставшейся части Д000100 убираются незначащие нули, что дает итоговый номер Д100.
Выясним, почему реализовано именно такое поведение системы. Алгоритмы 1С созданы с учетом требований действующего законодательства Российской Федерации:
В пользовательском интерфейсе 1С:Бухгалтерии 3.0 (в константах, параметрах учета или настройках печатных форм) штатные переключатели для сохранения лидирующих нулей отсутствуют. Регистр сведений ПрефиксыИнформационныхБаз позволяет управлять только отображением узла РИБ, но не отменяет срез лидирующих нулей. Рассмотрим практические способы вывода полного номера на печать.
Это наиболее рекомендуемый и безопасный метод, позволяющий оставить основную конфигурацию на поддержке. В расширении переопределяется логика обработки номера при вызове стандартных процедур.
Проанализируем фрагмент кода, где система определяет необходимость стандартной обработки номера:
ПозицияРазделителя = Найти(НомерОбъекта, "-");
Если ПозицияРазделителя = 3 ИЛИ ПозицияРазделителя = 5 Тогда
// Включается стандартная обработка удаления нулей
Иначе
СтандартнаяОбработка = Ложь;
КонецЕсли;
Для переопределения этого поведения в расширении используется процедура ПриПолученииНомераНаПечать общего модуля ПрефиксыОбъектовКлиентСерверПереопределяемый. Установив параметр СтандартнаяОбработка = Ложь, мы отключаем стандартный срез префиксов и нулей, выводя номер в его исходном виде.
Если требуется изменить печать только одного конкретного документа (например, счета-фактуры выданного), разрабатывается внешняя печатная форма. В коде модуля внешней формы вместо вызова функции ПолучитьНомерНаПечать(Номер, Истина, Ложь) выводится непосредственно реквизит Номер объекта или применяется собственная функция форматирования строки.
При использовании ЭДО документы передаются контрагентам в утвержденном ФНС формате XML. В этом случае считывание номера учетными системами происходит автоматически по правилам формата ЭДО, что полностью снимает проблему визуального разногласия печатных форм.
Иногда пользователи пытаются обойти удаление нулей путем добавления специальных символов или дефисов непосредственно в поле номера (например, задавая номер вида -АЛ00-Д00100). Посмотрим, к чему это приводит: добавление нетиповых символов нарушает работу механизма автонумерации платформы 1С. В результате система теряет способность автоматически вычислять следующий порядковый номер для новых документов, и нумерацию приходится вести вручную.