В современных реалиях бизнеса крайне важно своевременно получать актуальную информацию о состоянии контрагентов: действует ли юридическое лицо, не находится ли оно в стадии ликвидации и не изменились ли его ключевые реквизиты (например, КПП при переезде в другую налоговую инспекцию). В конфигурации «1С:Бухгалтерия предприятия 3.0» (БП 3.0) этот функционал встроен по умолчанию и работает «из коробки». Однако в «1С:Управление производственным предприятием 1.3» (УПП) стандартный механизм проверки либо отсутствует, либо реализован частично.
В этой статье мы подробно разберем, как реализовать автоматическую проверку контрагентов по ЕГРН в УПП 1.3, проанализируем основные технические сложности и ограничения бесплатного сервиса ФНС, а также рассмотрим варианты интеграции с платными API-сервисами.
При попытке перенести механизм проверки контрагентов напрямую из БП 3.0 в УПП 1.3 разработчики сталкиваются с рядом серьезных препятствий:
В связи с этим для УПП рекомендуется создавать обособленные подсистемы проверки, работающие через регламентные задания в фоновом режиме, или внедрять внешние обработки.
При использовании бесплатного сервиса проверки контрагентов от ФНС необходимо учитывать жесткие архитектурные рамки самого государственного веб-сервиса:
Сервис ФНС вернул ответы не по всем контрагентам. В БП 3.0 эта проблема нивелируется интерактивной проверкой при вводе документов, но в УПП этот механизм придется проектировать самостоятельно.Одной из главных жалоб пользователей при внедрении онлайн-проверки контрагентов является медленное открытие журналов и форм документов (например, «Поступление товаров и услуг», «Счет-фактура выданный»).
Выясним причину: по умолчанию система пытается отправить синхронный веб-запрос к веб-сервису ФНС прямо в момент инициализации формы, чтобы подсветить статус контрагента. Если интернет-соединение нестабильно или сервера ФНС перегружены, поток интерфейса «зависает» на время ожидания ответа (таймаут может достигать 30 секунд).
Решение проблемы:
РегистрСведений.СостоянияКонтрагентовФНС). При открытии формы код считывает данные из этого регистра мгновенно, без обращения к сети Интернет.Рассмотрим пример создания упрощенного механизма проверки контрагентов в УПП без перегрузки интерфейса.
Шаг 1. Создание регистра сведений
Создадим новый непериодический независимый регистр сведений СостоянияКонтрагентовФНС со следующей структурой:
Контрагент (Тип: СправочникСсылка.Контрагенты)Состояние (Тип: Число) — хранит код ответа ФНС (0 — действующий, 1 — ликвидирован/не существует, 3 — КПП не соответствует ИНН и т.д.)ДатаПроверки (Тип: Дата)СообщениеОшибки (Тип: Строка)Шаг 2. Написание регламентного задания
Разберем пример серверного кода для регламентного задания, которое выбирает контрагентов, требующих проверки, и пакетами отправляет их на веб-сервис:
Процедура ВыполнитьПроверкуКонтрагентовЕГРН() Экспорт
// Выберем контрагентов, измененных за последнее время или не проверявшихся более 30 дней
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Контрагенты.Ссылка КАК Контрагент,
| Контрагенты.ИНН КАК ИНН,
| Контрагенты.КПП КАК КПП
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияКонтрагентовФНС КАК Состояния
| ПО Контрагенты.Ссылка = Состояния.Контрагент
|ГДЕ
| НЕ Контрагенты.ЭтоГруппа
| И Контрагенты.ИНН <> """"
| И (Состояния.ДатаПроверки ЕСТЬ NULL
| ИЛИ РАЗНОСТЬДАТ(Состояния.ДатаПроверки, &ТекущаяДата, ДЕНЬ) > 30)";
Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
РезультатЗапроса = Запрос.Perform();
Если РезультатЗапроса.Пустой() Тогда
Возврат;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
ПакетКонтрагентов = Новый Массив;
Пока Выборка.Следующий() Цикл
СтруктураРеквизитов = Новый Структура("Контрагент, ИНН, КПП", Выборка.Контрагент, Выборка.ИНН, Выборка.КПП);
ПакетКонтрагентов.Добавить(СтруктураРеквизитов);
// Отправляем пакет по достижении лимита в 1000 записей (для минимизации рисков сбоев)
Если ПакетКонтрагентов.Количество() >= 1000 Тогда
ОтправитьЗапросКФНС(ПакетКонтрагентов);
ПакетКонтрагентов.Очистить();
КонецЕсли;
КонецЦикла;
// Отправка оставшегося хвоста пакета
Если ПакетКонтрагентов.Количество() > 0 Тогда
ОтправитьЗапросКФНС(ПакетКонтрагентов);
КонецЕсли;
КонецПроцедуры
Шаг 3. Обработка результатов и запись в регистр
В процедуре ОтправитьЗапросКФНС мы формируем SOAP-запрос к официальному веб-сервису налоговой службы. Получив XML-структуру ответа, мы анализируем возвращенные статусы и фиксируем их в нашем регистре сведений:
Процедура ЗаписатьСтатусКонтрагента(Контрагент, КодСтатуса, ТекстОшибки = "")
МенеджерЗаписи = РегистрыСведений.СостоянияКонтрагентовФНС.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Контрагент = Контрагент;
МенеджерЗаписи.Прочитать();
МенеджерЗаписи.Контрагент = Контрагент;
МенеджерЗаписи.Состояние = КодСтатуса;
МенеджерЗаписи.ДатаПроверки = ТекущаяДата();
МенеджерЗаписи.СообщениеОшибки = ТекстОшибки;
МенеджерЗаписи.Записать(Истина);
КонецПроцедуры
Шаг 4. Отображение статуса в формах документов
В формах документов (например, при выборе контрагента или при открытии формы) мы будем считывать статус из регистра СостоянияКонтрагентовФНС. Это избавит интерфейс от зависаний:
Процедура КонтрагентПриИзменении(Элемент)
Если ЗначениеЗаполнено(ЭтотОбъект.Контрагент) Тогда
СтатусПроверки = РегистрыСведений.СостоянияКонтрагентовФНС.Получить(Новый Структура("Контрагент", ЭтотОбъект.Контрагент));
Если СтатусПроверки.Состояние = 1 Тогда
ОбщегоНазначения.СообщитьПользователю("ВНИМАНИЕ: Выбранный контрагент прекратил деятельность по данным ЕГРН!");
ЭлементыФормы.Контрагент.ЦветТекста = ЦветаСтиля.Предупреждение;
ИначеЕсли СтатусПроверки.Состояние = 3 Тогда
ОбщегоНазначения.СообщитьПользователю("ВНИМАНИЕ: Не соответствует КПП контрагента по данным ФНС!");
ЭлементыФормы.Контрагент.ЦветТекста = ЦветаСтиля.Предупреждение;
Иначе
ЭлементыФормы.Контрагент.ЦветТекста = ЦветаСтиля.ТекстПоля;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Если руководство компании готово инвестировать средства в надежность данных и бесперебойность работы, оптимальным решением станет интеграция коммерческих сервисов. Они предлагают готовые модули сопряжения для старых конфигураций 1С (включая обычные формы УПП):
Проанализируем преимущества платных сервисов: они берут на себя всю работу по обходу ограничений ФНС (парсинг пакетов, борьбу со сменой КПП, асинхронную отправку данных), предоставляя вашей 1С уже очищенную, готовую и структурированную информацию в режиме реального времени.