При работе с платформой 1С:Предприятие 8.3 через веб-серверы (IIS или Apache) системные администраторы и программисты часто сталкиваются с загадочным поведением: расширение конфигурации, которое исправно работало после запуска, через некоторое время «отваливается». Код из расширения перестает исполняться, формы принимают типовой вид, и система ведет себя так, будто расширения вовсе не существует. При этом обычный перезапуск тонкого клиента временно решает проблему.
В этой статье мы подробно разберем, почему это происходит, как механизмы веб-сервера влияют на сеансы 1С и какие шаги необходимо предпринять, чтобы обеспечить стабильную работу системы в режиме 24/7.
Рассмотрим типовой сценарий, в котором проявляется данная проблема. Как правило, это рабочие места с высокой интенсивностью использования, например, кассовые зоны в магазинах («1С:Розница») или склады. Компьютеры не выключаются сутками, сеанс 1С открыт постоянно. База опубликована на веб-сервере IIS, используется тонкий клиент, а сама информационная база может быть как файловой, так и клиент-серверной.
Проблема проявляется следующим образом: отладчик показывает, что выполнение кода просто не заходит в процедуры, аннотированные как &Вместо, &Перед или &После. Основная конфигурация работает, но слой расширения становится «прозрачным». Это особенно критично для версий платформы ниже 8.3.14, где механизмы динамического подключения метаданных через HTTP-протокол еще не были достаточно отлажены.
Одной из главных причин «исчезновения» расширения является механизм работы веб-сервера IIS. По умолчанию в настройках пула приложений (Application Pool) включена периодическая рециркуляция (перезапуск рабочих процессов). Это происходит либо по расписанию (раз в 1740 минут), либо при достижении определенных лимитов памяти.
Разберем по шагам, что происходит в этот момент:
w3wp.exe, в котором крутилось соединение с 1С.Для стабилизации ситуации проанализируем настройки IIS. Рекомендуется увеличить интервал рециркуляции или вовсе отключить его (установив значение 0), если база используется круглосуточно. Также стоит проверить параметр «Idle Time-out» (тайм-аут бездействия), который по умолчанию составляет 20 минут.
Даже при работе через веб-сервер тонкий клиент активно использует локальный кэш на компьютере пользователя (папки %LocalAppData%\1C\1cv8). В этих папках хранятся скомпилированные образы расширений. При длительной работе без перезапуска программы может возникнуть ситуация, когда связь между идентификатором сеанса и локальным кэшем метаданных нарушается.
Поскольку расширение является «надстройкой» над основной конфигурацией, при возникновении любой ошибки доступа к файлам кэша расширения платформа может принять решение продолжить работу без него, чтобы не прерывать сеанс пользователя полностью. В результате мы видим работающую программу, но без функционала расширения.
Файл default.vrd управляет параметрами публикации базы на веб-сервере. Если в нем неверно настроено управление пулом соединений, это может приводить к преждевременному разрыву связи. Посмотрим на структуру секции point. Для повышения стабильности работы расширений можно попробовать явно указать параметры пула.
Пример структуры файла default.vrd с параметрами пула:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/MyBase"
ib="Srvr=MyServer;Ref=MyBase;">
<pool size="10" timeout="600" />
</point>
Параметр pool size определяет количество удерживаемых соединений, а timeout — время их жизни в секундах. Правильная настройка пула позволяет избежать «дребезга» соединений, который часто становится причиной потери контекста расширения.
Проанализировав ситуацию, мы можем предложить несколько вариантов решения проблемы, от простых административных мер до изменения архитектуры решения.
Рассмотрим пример кода для принудительного закрытия системы:
Процедура ПриУстановкеПараметровСеанса(ТребуемыеПараметры)
// Код проверки времени
ТекущийЧас = Час(ТекущаяДата());
Если ТекущийЧас = 3 Тогда
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
КонецПроцедуры
.cmi и .cref. Проанализируем логи антивируса и добавим папку с базой (для файлового варианта) и временные папки системы в исключения.Выясним причину окончательно: нестабильность расширений на веб-сервере в старых версиях 1С связана с некорректной обработкой восстановления HTTP-сессий. Система пытается сэкономить ресурсы и восстановить соединение без полной переинициализации метаданных, что приводит к потере слоя расширения.
Для исправления ситуации мы рекомендуем в первую очередь обновить платформу до актуального релиза. Если это невозможно — настройте параметры пула в IIS и обеспечьте регулярный перезапуск клиентских приложений (хотя бы раз в сутки). Это позволит избежать накопления ошибок в кэше и обеспечит бесперебойную работу расширений.