Как автоматически проверять контрагентов в ЕГРН в конфигурации 1С:УПП 1.3?

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

В современных реалиях бизнеса крайне важно своевременно получать актуальную информацию о состоянии контрагентов: действует ли юридическое лицо, не находится ли оно в стадии ликвидации и не изменились ли его ключевые реквизиты (например, КПП при переезде в другую налоговую инспекцию). В конфигурации «1С:Бухгалтерия предприятия 3.0» (БП 3.0) этот функционал встроен по умолчанию и работает «из коробки». Однако в «1С:Управление производственным предприятием 1.3» (УПП) стандартный механизм проверки либо отсутствует, либо реализован частично.

В этой статье мы подробно разберем, как реализовать автоматическую проверку контрагентов по ЕГРН в УПП 1.3, проанализируем основные технические сложности и ограничения бесплатного сервиса ФНС, а также рассмотрим варианты интеграции с платными API-сервисами.

Архитектурные различия: почему нельзя просто перенести код из БП 3.0 в УПП 1.3?

При попытке перенести механизм проверки контрагентов напрямую из БП 3.0 в УПП 1.3 разработчики сталкиваются с рядом серьезных препятствий:

  1. Разница интерфейсных платформ. БП 3.0 полностью построена на управляемых формах, а УПП 1.3 базируется на обычных формах. Перенос кода отображения статусов проверки («один в один») потребует тотальной переработки визуальной части документов и справочников.
  2. Зависимость от БСП. В БП 3.0 проверка завязана на Библиотеку стандартных подсистем (БСП) новых версий, функции которой активно используют фоновые задания платформы 1С:Предприятие 8.3. В УПП 1.3 используется устаревшая версия БСП, что делает прямую интеграцию невозможной без глубокого рефакторинга.

В связи с этим для УПП рекомендуется создавать обособленные подсистемы проверки, работающие через регламентные задания в фоновом режиме, или внедрять внешние обработки.

Технические ограничения веб-сервиса ФНС России

При использовании бесплатного сервиса проверки контрагентов от ФНС необходимо учитывать жесткие архитектурные рамки самого государственного веб-сервиса:

Борьба с медленным открытием документов в 1С

Одной из главных жалоб пользователей при внедрении онлайн-проверки контрагентов является медленное открытие журналов и форм документов (например, «Поступление товаров и услуг», «Счет-фактура выданный»).

Выясним причину: по умолчанию система пытается отправить синхронный веб-запрос к веб-сервису ФНС прямо в момент инициализации формы, чтобы подсветить статус контрагента. Если интернет-соединение нестабильно или сервера ФНС перегружены, поток интерфейса «зависает» на время ожидания ответа (таймаут может достигать 30 секунд).

Решение проблемы:

  1. Локальное кэширование статусов. Нам необходимо отказаться от динамических веб-запросов при открытии документов. Вместо этого все результаты проверок должны записываться в локальный регистр сведений (например, РегистрСведений.СостоянияКонтрагентовФНС). При открытии формы код считывает данные из этого регистра мгновенно, без обращения к сети Интернет.
  2. Фоновое обновление по расписанию. Настроим регламентное задание, которое будет запускаться в нерабочее (ночное) время, опрашивать веб-сервис ФНС по измененным или новым контрагентам и обновлять локальный регистр кэша.

Реализация собственной подсистемы проверки в УПП 1.3 (пошаговое руководство)

Рассмотрим пример создания упрощенного механизма проверки контрагентов в УПП без перегрузки интерфейса.

Шаг 1. Создание регистра сведений

Создадим новый непериодический независимый регистр сведений СостоянияКонтрагентовФНС со следующей структурой:

Шаг 2. Написание регламентного задания

Разберем пример серверного кода для регламентного задания, которое выбирает контрагентов, требующих проверки, и пакетами отправляет их на веб-сервис:


Процедура ВыполнитьПроверкуКонтрагентовЕГРН() Экспорт

    // Выберем контрагентов, измененных за последнее время или не проверявшихся более 30 дней
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |	Контрагенты.Ссылка КАК Контрагент,
        |	Контрагенты.ИНН КАК ИНН,
        |	Контрагенты.КПП КАК КПП
        |ИЗ
        |	Справочник.Контрагенты КАК Контрагенты
        |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияКонтрагентовФНС КАК Состояния
        |		ПО Контрагенты.Ссылка = Состояния.Контрагент
        |ГДЕ
        |	НЕ Контрагенты.ЭтоГруппа
        |	И Контрагенты.ИНН <> """"
        |	И (Состояния.ДатаПроверки ЕСТЬ NULL 
        |		ИЛИ РАЗНОСТЬДАТ(Состояния.ДатаПроверки, &ТекущаяДата, ДЕНЬ) > 30)";
        
    Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
    РезультатЗапроса = Запрос.Perform();
    
    Если РезультатЗапроса.Пустой() Тогда
        Возврат;
    КонецЕсли;
    
    Выборка = РезультатЗапроса.Выбрать();
    ПакетКонтрагентов = Новый Массив;
    
    Пока Выборка.Следующий() Цикл
        
        СтруктураРеквизитов = Новый Структура("Контрагент, ИНН, КПП", Выборка.Контрагент, Выборка.ИНН, Выборка.КПП);
        ПакетКонтрагентов.Добавить(СтруктураРеквизитов);
        
        // Отправляем пакет по достижении лимита в 1000 записей (для минимизации рисков сбоев)
        Если ПакетКонтрагентов.Количество() >= 1000 Тогда
            ОтправитьЗапросКФНС(ПакетКонтрагентов);
            ПакетКонтрагентов.Очистить();
        КонецЕсли;
        
    КонецЦикла;
    
    // Отправка оставшегося хвоста пакета
    Если ПакетКонтрагентов.Количество() > 0 Тогда
        ОтправитьЗапросКФНС(ПакетКонтрагентов);
    КонецЕсли;

КонецПроцедуры

Шаг 3. Обработка результатов и запись в регистр

В процедуре ОтправитьЗапросКФНС мы формируем SOAP-запрос к официальному веб-сервису налоговой службы. Получив XML-структуру ответа, мы анализируем возвращенные статусы и фиксируем их в нашем регистре сведений:


Процедура ЗаписатьСтатусКонтрагента(Контрагент, КодСтатуса, ТекстОшибки = "")
    
    МенеджерЗаписи = РегистрыСведений.СостоянияКонтрагентовФНС.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.Контрагент = Контрагент;
    МенеджерЗаписи.Прочитать();
    
    МенеджерЗаписи.Контрагент = Контрагент;
    МенеджерЗаписи.Состояние = КодСтатуса;
    МенеджерЗаписи.ДатаПроверки = ТекущаяДата();
    МенеджерЗаписи.СообщениеОшибки = ТекстОшибки;
    
    МенеджерЗаписи.Записать(Истина);
    
КонецПроцедуры

Шаг 4. Отображение статуса в формах документов

В формах документов (например, при выборе контрагента или при открытии формы) мы будем считывать статус из регистра СостоянияКонтрагентовФНС. Это избавит интерфейс от зависаний:


Процедура КонтрагентПриИзменении(Элемент)
    
    Если ЗначениеЗаполнено(ЭтотОбъект.Контрагент) Тогда
        
        СтатусПроверки = РегистрыСведений.СостоянияКонтрагентовФНС.Получить(Новый Структура("Контрагент", ЭтотОбъект.Контрагент));
        
        Если СтатусПроверки.Состояние = 1 Тогда
            ОбщегоНазначения.СообщитьПользователю("ВНИМАНИЕ: Выбранный контрагент прекратил деятельность по данным ЕГРН!");
            ЭлементыФормы.Контрагент.ЦветТекста = ЦветаСтиля.Предупреждение;
        ИначеЕсли СтатусПроверки.Состояние = 3 Тогда
            ОбщегоНазначения.СообщитьПользователю("ВНИМАНИЕ: Не соответствует КПП контрагента по данным ФНС!");
            ЭлементыФормы.Контрагент.ЦветТекста = ЦветаСтиля.Предупреждение;
        Иначе
            ЭлементыФормы.Контрагент.ЦветТекста = ЦветаСтиля.ТекстПоля;
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Платные альтернативы для УПП: стоит ли тратить бюджет?

Если руководство компании готово инвестировать средства в надежность данных и бесперебойность работы, оптимальным решением станет интеграция коммерческих сервисов. Они предлагают готовые модули сопряжения для старых конфигураций 1С (включая обычные формы УПП):

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

← На главную