gifts2017

Как нумеровать счета-фактуры в течение дня и для чего это нужно

Опубликовал Андрей Рубцов (rav_) в раздел Программирование - Практика программирования

В материале описывается, что нужно сделать в конфигурации, чтобы автоматическая нумерация документов выполнялась с применением префикса, включающего в себя дату выставления документа.
Приведен пример нумерации «Выданного счета-фактуры» в пределах дня для типовой конфигурации «Бухгалтерия предприятия», версии 2.0.

Когда в организацию-посредника информация по точным датам отгрузки приходит с разными сроками задержки, а покупателям накладные со счетами-фактурами надо выставлять в момент совершения этой самой отгрузки, только уже «задним числом», то говорить о последовательной нумерации документов совсем не приходится.

Перейти к сути...

Справедливости ради надо отметить, что согласно пп. 1 п. 5 ст. 169 НК РФ счет-фактура должна иметь порядковый номер, который указывается в строке 1. Если опустить различные уточнения по поводу дробей и признаков аванса, больше никаких требований нет. Более того, ошибки, не препятствующие идентификации продавца, покупателя, наименования товаров (работ, услуг), их стоимости, а также налоговой ставки и суммы налога, предъявленной покупателю, не являются основанием для отказа в принятии к вычету сумм налога (абз. 2 п. 2 той же статьи).

И зачем так серьезно относиться к нумерации этих документов? Читай тут: спокойный сон дороже.

Этот материал, для тех, кто во всём хочет навести порядок.

Если организация может позволить себе, в случае понимания или лояльного отношения со стороны покупателей, выставлять первичные документы с некоторой допустимой задержкой, то нумерацию счетов-фактур можно восстанавливать последовательно разными методами, например, вручную, дополнительными обработками, коих много на просторах сайта или сразу создавать документы после получения всей необходимой информации.

Но бывают случаи, когда счета-фактуры надо выставлять сразу, при получении информации. В таких ситуациях может помочь нумерация документов последовательно в течение дня. То есть в номер документа добавляется признак даты выставления, а дальше нумерация идет последовательно с этим признаком (не забудьте внести эти правила в учетную политику).

Для таких случаев важна точность полученной информации и не особенно важна последовательность: внутри дня номера все равно будут последовательны (главное чтобы день не поменялся!).

Нумеровать документы в 1С таким образом можно вручную, специальными обработками (например, такой) или исправить конфигурацию, чтобы нумерация ставилась автоматически. Плюсы и минусы каждого варианта считать Вам, поговорим об автоматике.

Итак, алгоритм достаточно прост, надо только формировать более сложный префикс для нужных документов и все.

Возьмем за основу конфигурацию «Бухгалтерия предприятия 2.0»,

Документы будем нумеровать с префиксом «ПППГГММДД», где

  • ППП – основной префикс, строящийся по правилам типовой конфигурации,
  • ГГ – две последние цифры года выставления документа,
  • ММ – две цифры месяца выставления,
  • ДД – две цифры дня в месяце из даты документа.

Оставшееся от полной длины номера количество символов – это длина номера документа внутри дня (например, если общая длина номера документа – 12 символов, а наш префикс использует 9, тогда максимальный номер счета-фактуры за день – 999).

Ограничимся одним только документом «Счет-фактура выданный».

Примечание:

  • В приведенном примере используется объект конфигурации «Нумератор». Вообще, этот объект применяют, когда надо получить сквозную нумерацию для разных типов документов (в нашем случае при внедрении их было три). Если использовать только один тип документа, то пункты 1.2, 2 и 3 можно пропустить.
  • Если необходимо использовать другие документы, которые должны нумероваться в течение дня вместе со счетами-фактурами в сквозном порядке (например, существовавший когда-то в конфигурации документ «КорректировочныйСчетФактураВыданный»), тогда для них нужно выполнить шаги с номерами 1.2, 3, 6, 7.1.
  • Если конфигурация не находится на поддержке (полностью своя), то нет надобности в пункте 1.
  1. Сначала нам необходимо настроить правила поддержки конфигурации и некоторых объектов в значение «Объект редактируется с сохранением поддержки» (без подчиненных объектов). См. Меню-Конфигурация-Поддержка-НастройкаПоддержки, правая кнопка мыши на нужном объекте. Это будут такие объекты, как
    1. Сама конфигурация (мы будем создавать новые объекты),
    2. «Документ.СчетФактуруВыданный» (будем править Нумератор),
    3. «Событие.ПриУстановкеНовогоНомераДокумента» из ветки «Общие.Подписки на события» (будем убирать «СчетФактуруВыданный» из стандартного метода нумерации).

  2. Создадим новый нумератор для нашего случая с именем «СчетаФактурыВыданные». Внимание! Длина номера в текущей конфигурации  БУ 2.0 равна 12! Пусть не вводит в заблуждение число 11 с картинки (это было сделано давно, когда длина номера для документов была такой и в нашей конфигурации она остается такой до сих пор).

  3. У объекта типа «Документ.СчетФактураВыданный» установим свойство «Нумератор» в значение созданного в п.2 нумератора «СчетаФактурыВыданные».

  4. Создадим ОбщийМодуль с именем «ЭтоДопОбработчики».

  5. Вставим в этот модуль процедуру, которая будет следующего содержания:
    // Используется в Событии ПриУстановкеНовогоНомера 
    // для документа СчетФактураВыданный 
    Процедура  ПриУстановкеНовогоНомераДокументаСчетФактураВыданныйПриУстановкеНовогоНомера(Источник, СтандартнаяОбработка, Префикс) Экспорт
    
          ОбщегоНазначения.ДобавитьПрефиксОрганизации(Источник, Префикс);
    
          ОбщегоНазначения.ДобавитьПрефиксУзла(Префикс);
    
          Если ТипЗнч(Источник.Ссылка) = Тип("ДокументСсылка.СчетФактураВыданный") 
             И Источник.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс Тогда 
    
               Префикс = Префикс + "А"; 
          КонецЕсли; 
    
          Префикс = Лев(Префикс + "0000", 3) + Формат(Источник.Дата, "ДФ=""ггММдд"""); 
    
    КонецПроцедуры
  6. У объекта «Событие.ПриУстановкеНовогоНомераДокумента» из свойства «Источник» уберем «Документ.СчетФактураВыданный».
  7. Создадим новый объект «Событие. ПриУстановкеНовогоНомераДокументаСчетФактураВыданный», отметим
    1. в «Источнике»: «Документ.СчетФактураВыданный»,
    2. в «Обработчике»: созданную нами процедуру на шаге 5 «ЭтоДопОбработчики.ПриУстановкеНовогоНомераДокументаСчетФактураВыданныйПриУстановкеНовогоНомера».

Всё!

 

Процедура внедрения происходила очень давно, так что в случае обнаружения неточностей, "ляпов" или грубых ошибок, сообщите, пожалуйста. Поправлю.

Спасибо за внимание.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Ольга Фигуркина (@Sonya) 29.05.15 16:05
Надобность в такой нумерации бывает, хотя очень удивило в свое время, реализовали подобным способом.
2. Алексей Патюков (apatyukov) 03.06.15 07:39
ППП – основной префикс, строящийся по правилам типовой конфигурации,
ГГ – две последние цифры года выставления документа,
ММ – две цифры месяца выставления,
ДД – две цифры дня в месяце из даты документа.


ГГ-Излишний , так как контроль уникальности проходит в течении года.
3. Андрей Рубцов (rav_) 03.06.15 08:24
(2) apatyukov, согласен.
Плюс в том, что по номеру можно легко восстановить дату :), вдруг кому надо.
4. Алексей Патюков (apatyukov) 03.06.15 08:54
(3) rav_, дата и так указывается в первичке :)
5. Дмитрий Егоров (Diego_Iv) 04.06.15 09:59
(4) apatyukov,
Наверно, чтобы быстро отследить случаи, когда дата с/ф изменялась задним числом.
6. Дмитрий Жиляков (Zhilyakovdr) 04.06.15 14:15
//Номер дня в году в номере документа
Префикс = Строка(ДеньГода(Источник.Дата));
Префикс = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(Префикс, 3, "0", "Слева");
УстановитьПрефиксИнформационнойБазыИОрганизации(Источник, СтандартнаяОбработка, Префикс);
7. Андрей Рубцов (rav_) 04.06.15 14:36
(6) Zhilyakovdr, вполне можно и так.
Цель была указать подход к решению, а не описать шаблон префикса.

Если же обсуждать какой вариант шаблона лучше,
то уловить глазом ошибку в нумерации или поправить номер вручную внутри дня проще,
когда префикс именно такой, как в примере (или в посте 2), чем в Вашем случае,
но это только моё сугубо личное мнение.
8. Mr. Alf Garcia (mip128) 18.06.15 11:52
А что если поменяют дату у записанного документа? Или сначала запишут, потом ставят дату?
9. Андрей Рубцов (rav_) 19.06.15 06:39
(8) mip128,
"А что если поменяют дату у записанного документа?"
В конфигурации БУ 2.0 (именно для нее делалась реализация) при изменении даты интерактивно срабатывает механизм:
Процедура ДатаПриИзменении(Элемент)
	
	РаботаСДиалогами.ПроверитьНомерДокумента(ЭтотОбъект, мТекущаяДатаДокумента);
	...
...Показать Скрыть
,
который проверяет периодичность документа и при выходе даты из этого периода очищает номер. Поскольку тут делать ничего не пришлось (все уже было), то этот момент описан не был.

Сразу скажу, что если записывать документ программно, то при заполненной дате и пустом номере
система построит последний правильно, а если программно заполнить номер чем-нибудь "левым", то номер "правильным" не станет. Программно можно делать многое, главное - делать правильно (иначе зачем)!

"Или сначала запишут, потом ставят дату?"
Насколько я понимаю, система сама контролирует наличие даты у документа при его записи (по крайней мере в типовых конфигурациях).

Если всё хочется контролировать самому, то можно заставить систему проверять наличие корректной даты и корректного номера документа в обработчике события модуля документа "ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)" или в подписке на событие "ПередЗаписью" с параметрами обработчика (Источник, Отказ, РежимЗаписи, РежимПроведения) и отказаться от выполняемого действия в случае ошибки. Тогда даже поиски программиста-багоискателя не приведут к ошибке.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа