Нередко бухгалтерия предъявляет особые требования к нумерации документов, например, формировать номер выданного счета-фактуры по схеме: две цифры месяца + две цифры дня + порядковый номер (например, 0115001 для счета-фактуры за 15 января). Однако при стандартном поведении конфигураций 1С (на базе Библиотеки стандартных подсистем — БСП) пользователи сталкиваются с тем, что лидирующие нули автоматически удаляются как при выводе на печать, так и при формировании регламентированных отчетов (Книга продаж, Декларация по НДС). Рассмотрим причины такого поведения системы, методические риски и технические способы решения задачи.
В типовых конфигурациях 1С («1С:Бухгалтерия 8», «1С:ERP», «1С:Комплексная автоматизация») логика отображения номеров счетов-фактур в печатных формах и регламентированной отчетности централизована. Разберем ключевые механизмы платформы и БСП, влияющие на этот процесс:
ПрефиксацияОбъектовКлиентСервер (метод НомерНаПечать) или процедуры учета НДС. Этот алгоритм не только отсекает системный префикс узла информационной базы и префикс организации, но и удаляет все лидирующие нули вплоть до первой значащей цифры.01 (январь), алгоритм уберет 0, и номер 0115001 превратится в 115001. В то же время для октября, ноября и декабря (номера 10..., 11..., 12...) лидирующих нулей в начале нет, и номер останется шести- или семизначным. В учете возникает путаница форматов.Прежде чем приступать к доработке алгоритмов нумерации, проанализируем позицию контролирующих органов и особенности автоматизированного контроля со стороны ФНС (АСК НДС-2):
0115001), а продавец выгрузит в декларацию усеченный номер (115001). Это приведет к расхождению и автоматическому требованию о представлении пояснений.Если задача состоит в том, чтобы присваивать префикс из месяца и дня автоматически без изменения типовых модулей, правильным решением будет создание подписки на событие ПриУстановкеНовогоНомера.
Рассмотрим реализацию обработчика подписки. В процедуре переопределяется стандартный префикс документа:
Процедура ПриУстановкеНовогоНомераСчетаФактуры(Источник, СтандартнаяОбработка, Префикс, ЧисловойНомер) Экспорт
// Формируем префикс на основе даты документа (ММДД)
ПрефиксМесяцДень = Формат(Источник.Дата, "ДФ=MMdd");
// Присваиваем сформированный префикс
Префикс = ПрефиксМесяцДень + Префикс;
КонецПроцедуры
Однако при интерактивной смене даты существующего документа встроенный механизм 1С не пересчитает номер автоматически. Чтобы предотвратить рассинхронизацию номера и даты при перемещении счета-фактуры между днями, добавим обработчик события ПередЗаписью:
Процедура ПроверитьНомерПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
Если Не Источник.ЭтоНовый() Тогда
// Проверяем соответствие номера дате документа при ее изменении
РаботаСДиалогами.ПроверитьНомерДокумента(Источник, Источник.Ссылка.Дата);
КонецЕсли;
КонецПроцедуры
Чтобы избежать удаления первых цифр типовыми алгоритмами БСП, рекомендуется изменить сам шаблон нумерации так, чтобы номер не начинался с нуля, либо разделялся символами, которые алгоритм распознает как часть значащего идентификатора.
Разберем возможные структуры:
2501-0001 (две цифры года, две цифры месяца, разделитель и порядковый номер). В этом случае номер начинается с цифры 2, поэтому алгоритм отсечения лидирующих нулей не затронет месяц.М0115-001. Буквенная часть воспринимается алгоритмами как префикс, а разделитель позволяет корректно передавать номер в учет НДС без искажения месяцев с 01 по 09.Если формат номера строго утвержден учетной политикой и должен содержать ведущий ноль, корректировку логики вывода на печать и выгрузки в книгу продаж следует выполнить через расширение конфигурации (файл .cfe). Это позволяет оставить основную базу данных на полной поддержке вендора.
Посмотрим на алгоритм реализации в расширении:
ПрефиксацияОбъектовКлиентСервер или соответствующие функции формирования книги продаж из модуля УчетНДС).&Вместо или &ИзменениеИКонтроль для переопределения метода обработки номера:
&Вместо("НомерНаПечать")
Функция Расш_НомерНаПечать(Знач ВходящийНомер, УдалитьПрефикс = Истина, УдалитьЛидирующиеНули = Истина) Экспорт
// Если это счет-фактура выданный с нашей маской номера,
// отключаем удаление лидирующих нулей принудительно
Если СтрДлина(ВходящийНомер) > 6 И УдалитьЛидирующиеНули Тогда
// Вызываем исходный метод только для снятия стандартного префикса ИБ
Возврат ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерБезПрефиксов(ВходящийНомер);
КонецЕсли;
Возврат ПродолжитьВызов(ВходящийНомер, УдалитьПрефикс, УдалитьЛидирующиеНули);
КонецФункции
Важно: При таком подходе измененная логика формирования номера применяется одновременно и к печатным бланкам счетов-фактур, и к процедурам заполнения Книги продаж и Декларации по НДС. Это гарантирует 100% совпадение данных у продавца и покупателя при автоматической сверке в АСК НДС-2.