Почему в 1С автоматически меняются номера счетов-фактур и как это исправить

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

Шаг 1. Поиск источника изменений в журнале регистрации

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

  1. Откроем Журнал регистрации в разделе администрирования.
  2. Установим отбор по событию Данные. Изменение или Данные. Проведение.
  3. В поле Данные выберем конкретный документ СчетФактураВыданный, номер которого был самопроизвольно изменен.
  4. Проанализируем колонки Пользователь, Приложение и Сеанс: если запись произведена под пользователем регламентных заданий (например, DefUser или системный сеанс фонового задания), в описании события будет видно имя фонового процесса.

Чаще всего виновниками перезаписи номеров выступают следующие механизмы:

  1. Фоновая синхронизация данных: если настроен регулярный обмен между базами (например, из 1С:Управление торговлей в 1С:Бухгалтерия), регламентное задание загрузки может заменять номер на значение из базы-источника.
  2. Регламентные операции по учету НДС: автоматические обработки формирования или регистрации счетов-фактур на аванс, а также закрытие месяца могут программно перезаписывать существующие объекты.
  3. Сервис электронного документооборота (1С-ЭДО): при получении или отправке подтверждений модуль ЭДО может сопоставлять и обновлять данные документа в соответствии с формализованным XML-файлом.

Шаг 2. Программная защита номера от перезаписи в модуле объекта или расширении

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

Посмотрим на пример кода, предотвращающего перезапись номера для уже существующих документов:


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
    // Если документ уже существует в базе данных, восстанавливаем исходный номер
    Если Не ЭтоНовый() Тогда
        ЭтотОбъект.Номер = ЭтотОбъект.Ссылка.Номер;
    КонецЕсли;
    
КонецПроцедуры

Рассмотрим подробнее логику работы данного кода: при любой попытке фонового процесса, внешней обработки или обмена перезаписать реквизит Номер, программа считывает текущий сохраненный номер из базы данных по ссылке Ссылка.Номер и возвращает его в записываемый объект. Таким образом, созданные вручную номера не будут сбрасываться.

Шаг 3. Сброс и восстановление счетчика автонумерации

Ручной ввод номеров с нарушением длины, добавлением нестандартных символов или префиксов сбивает внутренний механизм автонумерации платформы 1С. В результате при создании следующих документов система может выдавать ошибки неуникальности или пытаться заполнить номера заново.

Для устранения сбоя автонумератора выполним программный сброс кэша нумерации для соответствующего метаданного:

ОбновитьНумерациюОбъектов(Метаданные.Документы.СчетФактураВыданный);

Этот метод заставляет платформу пересчитать максимальный занятый номер в текущем периоде нумерации (как правило, в пределах календарного года) и восстанавливает корректный порядок генерации новых номеров.

Шаг 4. Настройка правил обмена данными

Если в ходе проверки журнала регистрации выяснилось, что номера затираются при синхронизации, скорректируем правила конвертации данных:

  1. В правилах конвертации объектов (ПКО) для документа СчетФактураВыданный отключим флаг Обновлять номер при загрузке.
  2. В обработчике ПослеЗагрузки или ПередЗаписьюПолученныхДанных добавим условие, запрещающее обновление реквизита Номер, если объект не является новым в информационной базе приемника.
← На главную