Почему EVatService.GetList возвращает ошибку Error 404 NOT_FOUND при успешном подключении в 1С 7.7?

Программист 1С v7.7 Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При интеграции платформы 1С:Предприятие 7.7 с порталом Электронных счетов-фактур (ЭСЧФ) Республики Беларусь (vat.gov.by) программисты часто сталкиваются с неочевидным поведением компоненты EInvVatService. Типичная ситуация: на одном и том же рабочем месте развернуты две базы данных 1С 7.7. В одной базе обмен работает идеально, а во второй — процесс авторизации на портале проходит успешно (выводится сообщение «Подключение успешно»), но при попытке получить список документов методом GetList сервер возвращает ошибку Error 404 NOT_FOUND.

В этой статье мы подробно разберем, почему возникает эта ошибка, как диагностировать скрытые опечатки в адресах подключения и какие дополнительные системные настройки необходимы для стабильного обмена ЭСЧФ на платформе 1С 7.7.

Анализ проблемы и разбор исходного кода

Рассмотрим проблемный участок кода, который используется для инициализации подключения и запроса входящих ЭСЧФ:


// 1. Определение адреса и инициализация подключения
АдресСервера = СокрЛП(Константа.АдресСервераОбменаЭСЧФ);
Если ПустоеЗначение(АдресСервера) = 1 Тогда
    АдресСервера = "https://ws.vat.gov.by:443/InvoicesWS/services/InvoicesPort";
КонецЕсли;

Если EVatService.Connect(АдресСервера) = 0 Тогда
    Сообщить("Подключение успешно");
Иначе
    Сообщить("Ошибка подключения: " + EVatService.LastError);
    Возврат;
КонецЕсли; 

// 2. Запрос списка поступивших счетов-фактур
Попытка
    InvList = EVatService.GetList(ПреобразоватьДату(НаДату) + "T00:00:00Z"); 
Исключение
    Сообщить("Не удалось получить список ЭСЧФ: " + EVatService.LastError); 
    Возврат;
КонецПопытки;

При выполнении этого кода в проблемной базе первая часть отрабатывает штатно: метод Connect возвращает 0, что сигнализирует об успешном соединении. Однако на шаге вызова GetList программа уходит в ветку исключения и выдает html-ответ от сервера:


HTTP ERROR: 404
Problem accessing /Invoices/InvoicesPort. Reason: NOT_FOUND
Powered by Jetty://

Возникает логичный вопрос: как веб-служба может успешно авторизовать пользователя, но затем утверждать, что запрашиваемый ресурс (метод получения списка) не найден?

Выявление причины: коварство тестового и боевого веб-сервисов

Проанализируем детально структуру адресов, используемых порталом ЭСЧФ. Портал предоставляет два независимых контура для работы: тестовый и промышленный (боевой). Адреса точек подключения к ним различаются структурой путей:

Основная проблема заключается в том, что в рабочей базе адрес считывался напрямую из кода (где он был зашит по умолчанию в жестком виде), а в проблемной базе (например, УСН) значение считывалось из периодической константы Константа.АдресСервераОбменаЭСЧФ. В этой константе была допущена критическая опечатка — адрес вел на тестовый контур или содержал некорректный путь без сегментов WS/services/.

Почему проходила авторизация? Авторизация по сертификату открытого ключа шифрования (через ПО «Авест») происходит на уровне TLS-рукопожатия (клиентский сертификат предъявляется при установлении защищенного HTTPS-соединения с веб-сервером). Веб-сервер успешно принимает сертификат и одобряет соединение (метод Connect завершается успешно). Но когда дело доходит до вызова конкретного SOAP-метода GetList, запрос отправляется по некорректному пути, где веб-служба обработки документов просто не развернута. В результате сервер Jetty возвращает стандартную ошибку веб-сервера 404 NOT_FOUND.

Чтобы решить эту проблему, необходимо тщательно проверить значение константы в проблемной базе данных и привести ее к единому стандарту:


// Правильное значение константы для боевого портала:
https://ws.vat.gov.by:443/InvoicesWS/services/InvoicesPort

Дополнительные технические аспекты настройки обмена ЭСЧФ в 1С 7.7

Для того чтобы избежать других скрытых проблем при работе с компонентой EVatService в среде 1С 7.7, разберем ключевые настройки операционной системы и криптографического ПО.

1. Проблема актуальности XSD-схем

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

Выясним, как правильно разместить схемы:

  1. Скачайте актуальный архив разработчиков портала (обычно распространяется в файле eInvVat.zip).
  2. Найдите внутри архива папку xsd.
  3. Скопируйте все файлы схем напрямую в каталог вашей информационной базы 1С 7.7 по следующему пути: [КаталогБазы]\ExtForms\xsd\.

2. Автоматическое обновление списков отзыва сертификатов (СОС)

Очень часто обмен ЭСЧФ внезапно прекращает работать с ошибкой «Нет доверия к сертификату» или «Срок действия СОС истек». Это связано с тем, что персональные сертификаты шифрования ЗАО «Авест» требуют регулярного обновления списков отзыва.

Для решения этой проблемы настроим автоматическое обновление через планировщик задач Windows:

3. Настройки безопасности Windows и антивирусного ПО

Поскольку компонента EVatService работает через защищенные сетевые сокеты, защитные механизмы ОС могут блокировать сетевую активность устаревшего движка 1С 7.7 (файлы 1cv7.exe или 1cv7s.exe).

Рассмотрим, на что обратить внимание при администрировании рабочего места:

4. Регистрация библиотеки ActiveX в системе

Если при попытке инициализировать объект обмена возникает системная ошибка «Не удалось создать объект EInvVatService.Connector», это свидетельствует о проблемах регистрации ActiveX-компоненты в системном реестре.

Выполним ручную регистрацию библиотеки по шагам:

  1. Запустите командную строку Windows от имени Администратора.
  2. Выполните команду регистрации библиотеки (укажите ваш фактический путь к dll-файлу компоненты):
    
    regsvr32 "C:\Program Files (x86)\EInvVatService\EInvVatService.dll"
    
  3. Убедитесь, что появилось сообщение об успешной регистрации библиотеки.

5. Оптимизация вызова GetList и экономия памяти в 1С 7.7

Платформа 1С 7.7 критична к объему используемой оперативной памяти. Если запрашивать большой объем данных за длительный период, то при вызове метода GetList и последующем разборе XML-документов программа может аварийно завершиться с ошибкой нехватки памяти.

Чтобы этого избежать, рекомендуем сохранять параметр ToDate (возвращаемый объектом списка документов) в константу или специальный регистр настроек после каждого успешного сеанса обмена. При следующем запуске передавайте эту дату-время в качестве входящего параметра. Это позволит скачивать только новые документы, минимизируя нагрузку на систему:


// Пример оптимизированного запроса с использованием сохраненной метки времени
ПоследняяДатаЗапроса = Константа.ДатаВремяПоследнегоПолученияЭСЧФ; // Формат: "YYYY-MM-DDTHH:MM:SSZ"
Если ПустаяСтрока(ПоследняяДатаЗапроса) = 1 Тогда
    ПоследняяДатаЗапроса = ПреобразоватьДату(РабочаяДата()) + "T00:00:00Z";
КонецЕсли;

Попытка
    InvList = EVatService.GetList(ПоследняяДатаЗапроса);
    // Обработка списка документов...
    
    // Сохранение метки времени для следующего сеанса обмена
    Константа.ДатаВремяПоследнегоПолученияЭСЧФ = InvList.ToDate;
Исключение
    Сообщить("Ошибка запроса документов: " + EVatService.LastError);
КонецПопытки;

Используя предложенные методики настройки адресов и системного окружения, вы обеспечите стабильную и бесперебойную работу механизмов обмена ЭСЧФ в любых конфигурациях на платформе 1С 7.7.

← На главную