Многие пользователи и системные администраторы сталкиваются с неприятной ситуацией: при попытке зайти в карточку организации в базе 1С:Бухгалтерия (например, релиз 3.0.64.48 на платформе 8.3.10) программа выдает критическую ошибку «значение не является значением объектного типа код состояния». Особенность данной проблемы заключается в том, что она чаще всего проявляется на устаревших операционных системах, таких как Windows Server 2003, в то время как на современных Windows 7 или 10 база работает абсолютно корректно. Давайте подробно разберем эту ситуацию, проанализируем причины ее возникновения и выясним, как правильно ее устранить.
Для начала разберем, что именно означает этот текст ошибки на уровне встроенного языка 1С. При открытии карточки организации современная конфигурация пытается выполнить множество полезных действий в фоновом режиме. Программа делает HTTP-запросы к внешним веб-сервисам: проверяет реквизиты контрагента через сервисы ФНС, подтягивает информацию для «1С:Спарк Риски», проверяет статус подключения к «1С-Отчетности» или просто загружает новости.
Если этот запрос к серверу по какой-то причине завершается аварийно или блокируется операционной системой, переменная, ожидающая ответ, принимает значение Неопределено. Разработчики в конкретном проблемном релизе не предусмотрели предварительную проверку ответа на пустоту. Программный код сразу пытается прочитать статус-код HTTP-ответа, обращаясь к свойству Ответ.КодСостояния. Поскольку объект ответа не сформирован, платформа закономерно генерирует ошибку о несоответствии типа.
Выясним причину, по которой сбой локализован на старых серверах. Основная проблема кроется в сетевых протоколах криптографии. Windows Server 2003 — это устаревшая операционная система, которая не имеет встроенной поддержки современных стандартов шифрования, в частности протокола TLS 1.2.
Внешние веб-сервисы, к которым обращается 1С (налоговая, серверы обновлений 1С), уже давно перешли на обязательное использование TLS 1.2 для всех HTTPS-соединений. Когда платформа 1С на Windows Server 2003 пытается установить защищенное соединение, сервер на другой стороне моментально сбрасывает его из-за несовместимости версий протокола. Ответ не приходит, возвращается пустота, и программа падает. На более свежих ОС (Windows 7, 10 и новее) поддержка TLS 1.2 включена по умолчанию, поэтому запросы проходят успешно.
Рассмотрим еще один важный аспект. Платформа 1С:Предприятие 8.3 (особенно версий 8.3.10 и старше) активно использовала внутренние компоненты браузера Internet Explorer для отображения некоторых веб-форм и информационных панелей внутри справочников. На Windows Server 2003 максимально возможная версия браузера — это IE 8.
Из-за устаревшего движка и невозможности работы с новыми SSL-сертификатами, веб-компонент внутри 1С не может корректно загрузить требуемые страницы. Некоторые администраторы отмечали, что очистка кэша IE иногда временно решает проблему. Это связано с тем, что очистка сбрасывает зависшие сессии, но она не устраняет корневую причину — отсутствие поддержки современного шифрования.
Посмотрим на практические шаги, которые помогут избавиться от ошибки раз и навсегда. Мы не будем прибегать к постоянной чистке кэша, так как это не дает стабильного результата. Рассмотрим правильные технические решения.
Если вы программист и поддерживаете нетиповую конфигурацию, где возникает похожая ошибка при работе с HTTPСоединение, вам необходимо всегда проверять ответ на равенство значению Неопределено. Разберем по шагам, как должен выглядеть безопасный код:
// Выполняем HTTP-запрос
Ответ = HTTPСоединение.Получить(HTTPЗапрос);
// Обязательная проверка перед чтением кода состояния
Если Ответ <> Неопределено Тогда
Если Ответ.КодСостояния = 200 Тогда
// Обработка успешного результата
ДанныеСервера = Ответ.ПолучитьТелоКакСтроку();
Иначе
Сообщить("Ошибка на стороне сервера. Код: " + Ответ.КодСостояния);
КонецЕсли;
Иначе
Сообщить("Не удалось установить соединение с сервером. Проверьте настройки сети.");
КонецЕсли;
Применяя такую конструкцию, вы защитите систему от падений при сбоях сети на стороне клиента, будь то старый Windows Server 2003 или временное отсутствие интернета у пользователя.