При переходе с устаревших систем (например, 1С:Предприятие 7.7) на современные конфигурации на базе 1С:Бухгалтерия 3.0 (БП 3.0) пользователи часто сталкиваются с изменением логики формирования печатных номеров. В "семерке" номера счетов-фактур традиционно содержали лидирующие нули (например, 00000015), в то время как в БП 3.0 по умолчанию срабатывают механизмы Библиотеки стандартных подсистем (БСП), которые обрезают и префиксы, и нули, оставляя лишь значимую часть (15). Это может вызвать неудобства при сверке с контрагентами или при требованиях учетной политики предприятия. В этой статье мы подробно разберем, как вернуть нули в печатные формы и книги учета, сохранив при этом отсутствие буквенных префиксов.
Прежде чем приступать к правкам, давайте проанализируем ситуацию. В 1С:Бухгалтерии 3.0 за формирование номера, который мы видим в печатной форме, отвечает специальный программный механизм. Основная логика сосредоточена в общем модуле ПрефиксацияОбъектовКлиентСервер. Рассмотрим стандартную функцию НомерНаПечать, которая вызывается системой перед выводом документа на принтер или в отчет:
Функция НомерНаПечать(Знач НомерОбъекта, УдалитьПрефиксИнформационнойБазы = Ложь, УдалитьПользовательскийПрефикс = Ложь) Экспорт
// {Обработчик: ПриПолученииНомераНаПечать} Начало
СтандартнаяОбработка = Истина;
ПрефиксацияОбъектовКлиентСерверПереопределяемый.ПриПолученииНомераНаПечать(НомерОбъекта, СтандартнаяОбработка,
УдалитьПрефиксИнформационнойБазы, УдалитьПользовательскийПрефикс);
Если СтандартнаяОбработка = Ложь Тогда
Возврат НомерОбъекта;
КонецЕсли;
// {Обработчик: ПриПолученииНомераНаПечать} Окончание
НомерОбъекта = СокрЛП(НомерОбъекта);
// Удаляем пользовательские префиксы (например, префикс организации)
Если УдалитьПользовательскийПрефикс Тогда
НомерОбъекта = УдалитьПользовательскиеПрефиксыИзНомераОбъекта(НомерОбъекта);
КонецЕсли;
// Удаляем лидирующие нули - именно эта строка "виновата" в исчезновении нулей
НомерОбъекта = УдалитьЛидирующиеНулиИзНомераОбъекта(НомерОбъекта);
// Удаляем префиксы ИБ и организации
НомерОбъекта = УдалитьПрефиксыИзНомераОбъекта(НомерОбъекта, Истина, УдалитьПрефиксИнформационнойБазы);
Возврат НомерОбъекта;
КонецФункции
Как мы видим, система жестко прописывает удаление нулей. Если мы просто закомментируем строку НомерОбъекта = УдалитьЛидирующиеНулиИзНомераОбъекта(НомерОбъекта); напрямую в конфигурации, это решит проблему, но создаст огромные сложности при последующем обновлении программы. Поэтому мы будем использовать более корректные методы.
Правильным подходом в архитектуре 1С является использование "переопределяемых" модулей или механизмов расширений. Выясним причину, почему это лучше: при обновлении конфигурации ваши изменения в переопределяемых модулях не затираются или легко переносятся.
Нам необходимо внести изменения в общий модуль ПрефиксацияОбъектовКлиентСерверПереопределяемый. Найдем в нем процедуру ПриПолученииНомераНаПечать. По умолчанию она пустая. Напишем в ней код, который будет отключать стандартную обработку для счетов-фактур:
Процедура ПриПолученииНомераНаПечать(НомерОбъекта, СтандартнаяОбработка, УдалитьПрефиксИнформационнойБазы, УдалитьПользовательскийПрефикс) Экспорт
// Проверяем, что работаем с номером счета-фактуры (логика может зависеть от контекста)
// Если нужно сохранить нули для всех документов, можно убрать условия.
СтандартнаяОбработка = Ложь; // Отключаем встроенный алгоритм БСП
// Самостоятельно удаляем только префиксы, не трогая нули
// Для этого вызываем функции из основного модуля, но без удаления нулей
НомерОбъекта = ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(НомерОбъекта, Истина, УдалитьПрефиксИнформационнойБазы);
КонецПроцедуры
Важный нюанс: Чтобы этот код заработал максимально чисто, рекомендуется реализовать его через Расширение конфигурации. Создайте расширение, добавьте в него модуль ПрефиксацияОбъектовКлиентСерверПереопределяемый и используйте аннотацию &Вместо или &После для изменения поведения системы.
Проанализируем ситуацию глубже: изменение программного кода повлияет только на печать новых документов или на формирование печатной формы "на лету". Однако в 1С:Бухгалтерии 3.0 данные для Книги покупок и Книги продаж берутся не напрямую из документа, а из специального регистра сведений ДанныеПервичныхДокументов.
Если вы уже создали документы и они отображаются в книге без нулей, простое изменение кода не поможет старым записям. Выполним следующие шаги:
ДанныеПервичныхДокументов.Номер в регистре ДанныеПервичныхДокументов на основании номера самого документа.Рассмотрим подробнее работу со специфическими префиксами. Счета-фактуры на аванс часто имеют префикс А. Если мы полностью отключим стандартную обработку, этот префикс может остаться в номере (например, А000000015). Если ваша задача — оставить нули, но убрать все буквы, код в переопределяемом модуле должен быть более детальным:
// Пример очистки букв, но сохранения нулей
НомерОбъекта = СокрЛП(НомерОбъекта);
Пока Лев(НомерОбъекта, 1) <> "" И Найти("0123456789", Лев(НомерОбъекта, 1)) = 0 Цикл
НомерОбъекта = Сред(НомерОбъекта, 2);
КонецЦикла;
Этот фрагмент кода удаляет любые символы с начала строки, пока не встретит первую цифру (включая ноль). Таким образом, префиксы А, БП или УТ исчезнут, а лидирующие нули останутся на месте.
Посмотрим на ситуацию с точки зрения налоговых рисков. ФНС через автоматизированную систему АСК НДС-2 сверяет данные продавца и покупателя. Очень важно, чтобы:
Если вы программно изменили только печатную форму, но не обновили регистр ДанныеПервичныхДокументов, возникнет разрыв: в бумажной версии будет номер с нулями, а в XML-файле декларации — без нулей. Это может привести к требованию пояснений от налоговой. Поэтому всегда проверяйте соответствие печатной формы и данных в книге продаж после внесения изменений.
При использовании Электронного документооборота (ЭДО) ситуация аналогична. Система формирования XML-файла электронного счета-фактуры может использовать те же функции префиксации. Убедитесь, что в отправленном через ЭДО документе номер соответствует вашим ожиданиям.
Для реализации печати с нулями в 1С 8.3 БП 3.0 необходимо:
УдалитьЛидирующиеНулиИзНомераОбъекта не вызывается для нужных вам типов документов.ДанныеПервичныхДокументов путем перепроведения или специальной обработкой.Использование внешней печатной формы в данном случае является лишь полумерой, так как она не решает проблему отображения номеров в отчетах и декларациях. Только системный подход с изменением логики префиксации гарантирует отсутствие расхождений в учете.