При работе в современных конфигурациях 1С пользователи часто сталкиваются с неприятной ситуацией: при заведении нового контрагента со статусом «Индивидуальный предприниматель» программа выдает предупреждение «Неверная длина ИНН». Ситуация выглядит крайне странно, ведь ИНН индивидуального предпринимателя состоит из 12 цифр, и именно такое количество знаков внесено в карточку. Более того, при принудительной проверке контрагента через сервис ФНС система подсвечивает статус зеленым цветом («Контрагент есть в базе ФНС»), но стоит лишь закрыть и снова открыть карточку, как предупреждение об ошибке возвращается.
В этой статье мы подробно разберем причины возникновения этой проблемы, проанализируем внутренние механизмы платформы 1С, приводящие к сбою, и рассмотрим несколько практических способов исправления ситуации — от простых пользовательских приемов до программного изменения кода.
Для того чтобы понять природу сбоя, проанализируем, как взаимосвязаны сущности в ERP-решениях 1С (таких как «Управление торговлей 11», «ERP Управление предприятием 2» и «Комплексная автоматизация 2»). В этих конфигурациях справочная информация разделена на два контура:
При создании нового контрагента через специализированный инструмент — Помощник регистрации нового партнера — программа автоматически генерирует обе сущности одновременно. В этот момент и происходит сбой, зарегистрированный фирмой 1С под кодом 00-00071678.
Алгоритм работы сервиса 1С:Контрагент при валидации ИНН ориентируется на реквизит «Вид контрагента»:
Из-за внутренней ошибки в коде «Помощника регистрации», в момент записи нового контрагента с видом «Индивидуальный предприниматель» в фоновом режиме запускается проверка, которая ошибочно идентифицирует объект как юридическое лицо. Алгоритм пытается сопоставить 12-значный ИНН с 10-значной маской, считает длину избыточной и записывает некорректный статус проверки («Неверная длина ИНН») в специальный регистр сведений. При последующем открытии карточки форма считывает ранее закэшированный статус из этого регистра, игнорируя тот факт, что в самой карточке указан верный тип контрагента.
Рассматриваемая нами проблема не уникальна. Разработчиками 1С фиксировались и другие схожие баги, имеющие аналогичные симптомы:
Ошибка копирования (Баг 10156213): Эта ошибка воспроизводилась при попытке скопировать существующую карточку контрагента-ИП с помощью клавиши F9. При копировании механизм инициализации реквизитов в общем модуле РаботаСКонтрагентамиПереопределяемый отрабатывал некорректно, сбрасывая контекст проверки, из-за чего система выдавала предупреждение о неверной длине ИНН у вновь создаваемой копии.
Проблема перехода со старых версий (перенос данных): Часто ложная индикация ошибки проявляется при миграции баз данных с устаревших платформ (например, при переходе с «Бухгалтерии предприятия 2.0» на редакцию 3.0). В старых версиях для индивидуальных предпринимателей часто выбирался общий вид контрагента «Физическое лицо». В новых версиях классификация стала более строгой. При некорректно выполненном переносе данных реквизит типа лица может заполниться неверно, что приводит к массовому подсвечиванию ИНН красным цветом по всей базе. Для корректной миграции между редакциями можно изучить раздел с готовыми решениями для переноса данных в 1С:Бухгалтерию.
Выяснив причину неполадки, перейдем к методам ее устранения. Рассмотрим по шагам возможные варианты действий.
Если проблемных контрагентов в базе немного, проще всего исправить их вручную, заставив систему принудительно обновить кэш проверки ФНС.
Записать (но не закрывайте карточку).Записать.Еще — Проверить контрагента.Эти действия заставят платформу стереть старую ошибочную запись в регистре состояний и перепроверить ИНН по правильной маске в 12 знаков. Ошибка исчезнет.
Если база содержит сотни некорректных записей, ручной обход неэффективен. В этом случае мы можем прибегнуть к очистке регистра сведений, хранящего результаты валидации. Для этой задачи можно использовать обработку для группового редактирования записей регистров сведений.
Вся информация о результатах проверок содержится в регистре сведений СостоянияКонтрагентов (или аналогичном регистре проверки ФНС в зависимости от версии БСП). Чтобы сбросить ошибочные статусы:
Функции для технического специалиста (или Все функции).Проверка контрагентов. Программа перепроверит ИНН заново и запишет корректные статусы.Если ваша конфигурация находится на поддержке с возможностью изменения или вы используете механизм расширений, вы можете устранить ошибку раз и навсегда на программном уровне. Затык обычно находится в общем модуле РаботаСКонтрагентамиПереопределяемый или специализированных процедурах проверки.
Для исправления алгоритма необходимо скорректировать проверку типа лица в момент записи объекта через Помощник. Проанализируем пример кода, который решает эту проблему:
// Пример корректировки проверки длины ИНН в общем модуле
Процедура ПроверитьКорректностьИННПриЗаписи(КонтрагентСсылка, ТекущийИНН, ВидКонтрагента) Экспорт
ДлинаИНН = СтрДлина(СокрЛП(ТекущийИНН));
// Принудительно определяем верную маску для ИП
Если ВидКонтрагента = ПредопределенноеЗначение("Перечисление.ЮрФизЛицо.ИндивидуальныйПредприниматель") Тогда
Если ДлинаИНН <> 12 Тогда
ВызватьИсключение "Для Индивидуального предпринимателя длина ИНН должна составлять 12 знаков!";
КонецЕсли;
ИначеЕсли ВидКонтрагента = ПредопределенноеЗначение("Перечисление.ЮрФизЛицо.ЮридическоеЛицо") Тогда
Если ДлинаИНН <> 10 Тогда
ВызватьИсключение "Для Юридического лица длина ИНН должна составлять 10 знаков!";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Внедрение аналогичного условия в процедуру валидации при работе помощника регистрации предотвратит запись ошибочного статуса «Неверная длина ИНН» в базу данных.
Поскольку ошибка 00-00071678 официально признана разработчиками 1С, наиболее надежным и правильным решением является обновление конфигурации «Управление торговлей» (или иной используемой вами программы) до актуального релиза. В версиях, выпущенных после исправления бага, библиотеки стандартных подсистем обновлены, и валидация ИНН при использовании Помощника регистрации работает корректно без дополнительных настроек. Для автоматического обслуживания и обновления нескольких информационных баз 1С в фоновом режиме удобно использовать инструменты пакетной обработки.