Почему в 1С возникают ошибки при работе с ЭДО и DirectBank после перехода на платформу 8.3.11 и как их исправить?

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

При плановом обновлении платформы 1С:Предприятие администраторы и разработчики нередко сталкиваются с ситуацией, когда после перехода на новую ветку релизов (например, с 8.3.10 на 8.3.11) в конфигурациях перестают работать встроенные сервисы обмена данными: 1С-ЭДО и прямой обмен с банками (DirectBank). При этом пользователи получают сообщения вида «Ошибка получения входящих электронных документов на сервере оператора ЭДО» или сталкиваются с аварийным завершением процедур отправки банковских выписок и платежных поручений.

Разберем детально, почему возникает данная проблема, как устроены внутренние механизмы платформы и прикладных библиотек, а также рассмотрим пошаговые варианты устранения ошибок.

Причины сбоев при работе сервисов обмена на платформе 8.3.11

Проанализируем ключевые факторы, приводящие к неработоспособности сервисов взаимодействия с внешними серверами:

  1. Конфликт системных и прикладных функций встроенного языка: Начиная с версии 8.3.11, разработчики платформы добавили на системный уровень встроенные функции для выполнения побитовых операций: ПобитовоеИ, ПобитовоеИЛИ, ПобитовоеНЕ, ПобитовоеИсключительноеИЛИ, ПобитовыйСдвигВлево и ПобитовыйСдвигВправо. В предыдущих версиях прикладных библиотек — Библиотеке стандартных подсистем (БСП) и Библиотеке электронных документов (БЭД) — эти функции реализовывались программно в общих модулях с аналогичными именами. В результате при компиляции серверных модулей на новой платформе возникает синтаксический конфликт между системной функцией и функцией общего модуля, что блокирует алгоритмы криптографии и формирования пакетов обмена.
  2. Изменения в сетевом стеке объектов HTTP-взаимодействия: В платформе 8.3.11 была скорректирована внутренняя логика работы объектов HTTPСоединение и HTTPЗапрос, в частности формат формирования заголовков и обработка защищенных протоколов TLS/SSL. Некоторые шлюзы операторов ЭДО и банковские серверы при нестандартных заголовках возвращают ошибку 400 Bad Request или принудительно разрывают сетевую сессию.
  3. Особенности серверного контекста криптопровайдеров: Ужесточение требований к контексту криптографических операций при выполнении кода на стороне сервера 1С:Предприятия приводило к сбоям авторизации сертификатов при обращении к внешним веб-сервисам операторов.

Почему не помогает режим совместимости конфигурации?

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

Однако режим совместимости управляет лишь частью механизмов: компиляцией форм, обработкой некоторых синтаксических конструкций и запросов. При этом реализация системных объектов сетевого обмена (HTTPСоединение) и низкоуровневая интеграция с криптопровайдерами (CryptoPro CSP, ViPNet CSP) выполняются непосредственно ядром запущенной платформы 8.3.11. Поэтому сетевые ошибки и проблемы вызовов системных библиотек сохраняются даже при установленном режиме совместимости.

Способы решения проблемы

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

Способ 1. Фиксация рабочей версии платформы в параметрах запуска

Если обновление конфигурации до актуальных версий БСП/БЭД в данный момент невозможно, самым надежным решением является запуск информационной базы под стабильной версией платформы (например, 8.3.10).

Разберем по шагам, как закрепить версию запуска:

  1. Установите на сервере и рабочих станциях параллельно две версии платформы: 8.3.10 и 8.3.11.
  2. Откройте список информационных баз в стартере 1С.
  3. Выберите нужную информационную базу и нажмите кнопку «Изменить...».
  4. На последней вкладке настройки в поле «Версия 1С:Предприятия» явно укажите требуемую ветку, например: 8.3.10 или конкретный релиз 8.3.10.2772.
  5. При необходимости централизованной настройки отредактируйте конфигурационный файл 1cestart.cfg или распространите файл описания баз .v8i с установленным параметром Version=8.3.10.

Способ 2. Обновление типовой конфигурации и библиотек БСП/БЭД

Фирма «1С» оперативно выпустила обновления библиотек, в которых конфликт побитовых функций устранен. Для типовых конфигураций (1С:Бухгалтерия предприятия, 1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей) необходимо установить актуальный релиз конфигурации, подготовленный для работы с платформой 8.3.11 и выше.

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

Способ 3. Перенос криптографических операций на сторону клиента

Если ошибки ЭДО вызваны блокировкой криптографических операций на сервере, проанализируем настройку выполнения операций с электронной подписью на клиентском рабочем месте:

  1. Перейдите в раздел «Администрирование» — «Настройки электронной подписи и шифрования».
  2. На вкладке «Программы» проверьте параметры установленного криптопровайдера.
  3. В настройках параметров подписи отключите флаг «Проверять подписи и сертификаты на сервере» (или переключите создание подписи на клиентское приложение).
  4. Повторите операцию отправки или получения документов в рабочем месте 1С-ЭДО.

Способ 4. Корректировка кода в нетиповых конфигурациях

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

Посмотрим на пример вызова собственной реализации побитовой операции:


// До исправления в общем модуле (вызывало конфликт в 8.3.11):
Результат = МойОбщийМодуль.ПобитовоеИ(Значение1, Значение2);

// Вариант исправления 1: переименование прикладной функции
Результат = МойОбщийМодуль.ПрикладноеПобитовоеИ(Значение1, Значение2);

// Вариант исправления 2: вызов встроенной функции платформы 8.3.11
Результат = ПобитовоеИ(Значение1, Значение2);

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

← На главную