В практике разработки на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда один и тот же программный код идеально работает в толстом или тонком клиенте при прямом подключении к базе, но выдает критическую ошибку при попытке запуска через веб-сервер. Особенно остро эта проблема проявилась с внедрением асинхронного программирования. Рассмотрим детально ситуацию, когда при открытии формы или выполнении обработки система сообщает об отсутствии определения процедуры, хотя визуально в модуле всё описано верно.
Разберем типичный сценарий: у нас есть процедура, помеченная ключевым словом Асинх (Async). Она предназначена для работы с файловой системой или другими неблокирующими операциями. При запуске через веб-клиент или через тонкий клиент, подключенный по протоколу HTTP/HTTPS, система выдает ошибку: «Ожидается определение процедуры/функции». При этом поиск по тексту модуля подтверждает наличие метода.
Выясним причину такого поведения. Ключевое слово Асинх было введено в платформу для поддержки современной модели асинхронности (начиная с версии 8.3.18). Когда клиент обращается к базе через веб-сервер, за интерпретацию и передачу кода отвечает модуль расширения веб-сервера (например, isapi_1glw.dll для IIS или wsap24.dll для Apache). Если версия этого модуля «старше», чем версия платформы, на которой написан код, или если веб-клиент не может транслировать этот код в JavaScript, возникает синтаксическая ошибка еще на этапе загрузки модуля.
Проанализируем пример кода, который может вызвать подобное поведение:
&НаКлиенте
Асинх Процедура НайтиСтраницу(НазваниеКаталога, ОргинальноеИмя, Файлы, Путь)
Результат = Ждать ВопросАсинх("Продолжить поиск?", РежимДиалогаВопрос.ДаНет);
Если Результат = КодВозвратаДиалога.Да Тогда
// Логика поиска
КонецЕсли;
КонецПроцедуры
Если веб-сервер использует устаревшие компоненты, он «спотыкается» на слове Асинх, не понимает его и считает, что определение процедуры вообще отсутствует.
Первым делом проверим соответствие версий. Часто администраторы обновляют серверную часть 1С и платформу на рабочих станциях, но забывают обновить публикацию на веб-сервере. В итоге веб-сервер продолжает использовать библиотеки от старого релиза, который ничего не знает про Асинх.
Выполним следующие шаги для актуализации публикации:
Проверим файл default.vrd. В нем должна быть указана корректная строка подключения. Иногда стоит полностью удалить публикацию из списка веб-сервера (например, в консоли управления IIS) и создать её заново из 1С.
Если обновление публикации не помогло, проанализируем ситуацию с кэшированием. Веб-серверы (особенно IIS) агрессивно кэшируют скомпилированные модули. Даже после изменения кода в базе, сервер может пытаться отдать клиенту старую версию «бинарного» представления модуля.
Рассмотрим порядок полной очистки временных файлов на стороне сервера:
C:\Windows\Temp\1C или профиль локальной службы.v8remote_... и содержимое папок кэша.Посмотрим на ситуацию с точки зрения IIS. Рекомендуется также зайти в консоль управления IIS, выбрать ваш пул приложений (Application Pool) и выполнить команду Recycle (Переработка). Это принудительно завершит рабочие процессы и создаст их заново с чистой памятью.
Выясним, не связана ли проблема с режимом совместимости конфигурации. Если в проблемной базе установлен режим совместимости с версиями ниже 8.3.18, использование Асинх может вести себя непредсказуемо, особенно в веб-клиенте. Платформа может блокировать использование новых синтаксических конструкций, чтобы обеспечить работу на старых движках.
Проанализируем настройки:
Асинх в пользу стандартных процедур обратного вызова через ОписаниеОповещения.Важно помнить, что веб-клиент — это, по сути, трансляция кода 1С в JavaScript. Если вы поместили процедуру с Асинх в модуль, который не предназначен для веб-клиента или имеет некорректные флаги компиляции (например, только «Сервер» без «Клиент (управляемое приложение)»), интерпретатор веб-браузера не сможет корректно построить дерево вызовов.
Если ошибка воспроизводится только в одной базе на одном сервере, но работает в других, сравним файлы default.vrd. Рассмотрим пример структуры этого файла:
<vrs:point xmlns:vrs="http://v8.1c.ru/8.2/virtual-resource-system"
base="/MyBase"
ib="Srvr="MyServer";Ref="MyBase";">
<vrs:standardOdata enable="false"/>
<vrs:analytics enable="false"/>
</vrs:point>
Убедимся, что в проблемной базе нет специфических параметров, ограничивающих работу веб-компонентов. Также стоит проверить версию самого веб-браузера на клиентском месте. Устаревшие браузеры могут не поддерживать современные стандарты обработки скриптов, которые генерирует платформа 1С для реализации асинхронности.
Подведем итог: чаще всего проблема «невидимости» асинхронных процедур через веб-сервер кроется в несоответствии версии модуля расширения веб-сервера фактической версии платформы или в зависшем кэше пула приложений. Регулярная перепубликация базы после обновлений и контроль режима совместимости позволяют избежать подобных ошибок.