Превышено максимальное время ожидания ответа сервера в 1С

📅 Опубликовано 4 августа 2026 г.
Коротко: ошибка «Превышено максимальное время ожидания ответа сервера» означает, что 1С разорвала HTTP-соединение раньше, чем внешний сервис успел ответить. Виноват не сам маркетплейс, а конкретный таймаут в одном из четырёх слоёв: параметр Таймаут объекта HTTPСоединение, настройки веб-сервера (nginx proxy_read_timeout, Apache Timeout, IIS Connection Time-out), кластер серверов 1С или лимиты API продавца. Лечится последовательной проверкой слоёв сверху вниз за 30–40 минут.
- В большинстве обращений, разобранных нашей сервисной службой за 2025–2026 гг., причина оказывалась на нашей стороне: таймаут веб-сервера или слишком большая порция данных, а не сбой у Ozon, Wildberries или Битрикс24.
- У объекта
HTTPСоединениезначение таймаута по умолчанию — 0, то есть ограничения нет вообще: зависший сокет держит рабочий процессrphostдо его перезапуска. - Значения по умолчанию у веб-серверов (документация nginx 1.2x, Apache 2.4, IIS 10) — 60, 60 и 120 секунд соответственно. Выгрузка остатков по 5000 позиций в один запрос в эти лимиты не укладывается.
- Обмен нужно вести небольшими порциями, а не «весь каталог целиком»; вебхуки CRM нужно принимать за доли секунды и класть в очередь.
- Повторные попытки обязаны различать коды: 429/500/502/503/504 — повторять с нарастающей паузой, 400/401/403 — повторять бессмысленно.
Что означает ошибка «Превышено максимальное время ожидания ответа сервера»?
Формулировка вводит в заблуждение: слово «сервер» здесь не всегда про сервер 1С. Платформа выдаёт этот текст в двух принципиально разных ситуациях, и первый шаг диагностики — понять, в какой именно вы находитесь.
Первая ситуация: исходящий вызов. Ваша конфигурация обращается к API маркетплейса или CRM через HTTPСоединение или WSПрокси, ответ не приходит за отведённое время, платформа закрывает сокет и возбуждает исключение. Сообщение приходит в связке с текстом вида «Ошибка работы с интернет» или кодом WinHTTP 12002. Здесь виноват либо ваш таймаут, либо длительность обработки на стороне вендора.
Вторая ситуация: входящий вызов. Внешняя система дёргает опубликованный HTTP-сервис или Web-сервис 1С, запрос идёт через IIS или Apache к модулю расширения веб-сервера, дальше в кластер. Если рабочий процесс не успел вернуть ответ, разрыв делает веб-сервер, а 1С только транслирует его в понятный текст. Здесь виноваты настройки публикации и время выполнения кода.
Практическое правило: если ошибку видит пользователь в интерфейсе 1С — это исходящий вызов. Если ошибку видит контрагент, а в вашем журнале регистрации записи нет вообще — это входящий вызов, и разбираться нужно с логами веб-сервера.
Где стоят таймауты: четыре слоя, которые нужно проверить
Обмен 1С с внешним миром проходит минимум через четыре независимых ограничителя. Обрыв делает тот, у кого лимит меньше — поэтому поднимать значение в одном месте бесполезно, пока не проверены остальные. Значения ниже взяты из официальной документации соответствующих продуктов; проверяйте их в вашей версии.
| Слой | Где настраивается | Значение по умолчанию | Рекомендуемое значение для обмена |
|---|---|---|---|
| Код конфигурации | Параметр Таймаут конструктора HTTPСоединение, WSОпределения, WSПрокси | 0 — без ограничения | 30–120 секунд |
| nginx (обратный прокси) | proxy_read_timeout, proxy_send_timeout, send_timeout | 60 секунд | 300–600 секунд |
| Apache 2.4 | Директивы Timeout, ProxyTimeout | 60 секунд | 300–600 секунд |
| IIS 10 | Connection Time-out сайта; Idle Time-out пула приложений | Зависит от версии и настроек сайта | 600 секунд; 0 (не выгружать пул) |
| Кластер 1С | Время ожидания управляемой блокировки, метод УстановитьВремяОжиданияБлокировкиДанных() | 20 секунд | Не повышать вслепую — сначала убрать конкуренцию |
| Внешний API | Лимит вендора на длительность и частоту запросов | Задаётся продавцом | Пагинация + обработка кода 429 |
Почему обмен с маркетплейсами обрывается по таймауту: 8 причин
1. Порция данных слишком большая
Запрос «отдай все заказы за месяц» или «прими 8000 остатков одним пакетом» формирует ответ в десятки мегабайт. Сервер продавца собирает его дольше минуты, и первый же слой с лимитом 60 секунд рвёт соединение. Признак: ошибка стабильно воспроизводится на больших объёмах и не воспроизводится на тестовом складе с 20 номенклатурами.
2. Таймаут в коде не задан вообще
Конструктор HTTPСоединение без явного шестого параметра создаёт соединение без ограничения по времени. Обмен внешне «висит», а через 10–20 минут падает по таймауту нижележащего слоя. Отдельная беда — такой сеанс удерживает лицензию и память рабочего процесса.
3. Прокси, межсетевой экран или DPI режут длинные сессии
Корпоративный прокси-сервер закрывает неактивные TCP-соединения по собственному расписанию. Для 1С это выглядит как таймаут ответа. Проверяется просто: тот же запрос через curl с того же сервера, но в обход прокси.
4. Медленное разрешение имён и TLS-рукопожатие
Если DNS-сервер отвечает не сразу или сервер пытается сначала подключиться по IPv6, к каждому запросу добавляются секунды. При выгрузке 200 порций подряд это превращается в отвал на середине. Симптом типичен и для интеграций с государственными системами — по той же схеме диагностируется ситуация, когда 1С не удалось запросить данные ГИС МТ.
5. Превышение лимитов частоты запросов на стороне API
Ozon, Wildberries и Яндекс Маркет ограничивают число обращений в единицу времени по каждому методу; конкретные значения публикуются в документации API продавца и меняются — сверяйте актуальную редакцию. При превышении сервис отвечает кодом 429 или начинает искусственно задерживать ответы, что 1С видит как таймаут.
6. Долгая обработка внутри самой 1С
Приём заказов сопровождается созданием документов «Заказ клиента», подбором номенклатуры по артикулу перебором в цикле и перезаписью в транзакции. Если на 300 заказов уходит 4 минуты, входящий вызов веб-сервера отвалится. Отдельный источник задержки — конкуренция за блокировки в момент массового проведения, тот же механизм даёт сбои на этапах регламентных операций: см. разбор ситуации, когда в 1С:ERP этап закрытия месяца не может быть выполнен.
7. Обмен запущен в клиентском сеансе, а не в фоновом задании
Выгрузка «по кнопке» из формы обработки живёт в рамках одного клиент-серверного вызова. Такой вызов ограничен и таймаутом веб-сервера при работе через тонкий клиент по HTTP, и терпением пользователя.
8. Нехватка ресурсов на сервере 1С
Рабочий процесс, упирающийся в лимит памяти, перезапускается по параметрам кластера. Все висящие на нём вызовы обрываются, а пользователь получает ровно то же сообщение о превышении времени ожидания. Проверяется по журналу регистрации и технологическому журналу: события EXCP, PROC, ATTN.
Как правильно задать таймаут в коде 1С?
Базовый принцип: таймаут задаётся всегда и явно, длительность ответа замеряется и пишется в журнал регистрации. Без замера вы никогда не отличите «сервис тормозит» от «наш код тормозит».
// Пауза между повторными попытками.
// Это активное ожидание — применять только для интервалов в единицы секунд
Процедура Подождать(Знач КоличествоСекунд)
МоментОкончания = ТекущаяУниверсальнаяДатаВМиллисекундах() + КоличествоСекунд * 1000;
Пока ТекущаяУниверсальнаяДатаВМиллисекундах() < МоментОкончания Цикл
// Ожидание
КонецЦикла;
КонецПроцедуры
// Получает порцию заказов маркетплейса.
// Возвращает структуру: Успех (Булево), Данные, ТекстОшибки (Строка), КодСостояния (Число)
Функция ПолучитьПорциюЗаказов(Настройки, Знач Смещение, Знач РазмерПорции = 50) Экспорт
Результат = Новый Структура("Успех, Данные, ТекстОшибки, КодСостояния");
Результат.Успех = Ложь;
Результат.ТекстОшибки = "";
Результат.КодСостояния = 0;
// Таймаут в секундах. Значение 0 означает отсутствие ограничения —
// в обменах с внешними API так делать нельзя
ТаймаутСекунд = 60;
Соединение = Новый HTTPСоединение(
Настройки.Хост,
443,
,
,
Настройки.Прокси,
ТаймаутСекунд,
Новый ЗащищенноеСоединениеOpenSSL());
Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Authorization", "Bearer " + Настройки.Токен);
Ресурс = "/v3/posting/list?limit=" + Формат(РазмерПорции, "ЧГ=0")
+ "&offset=" + Формат(Смещение, "ЧГ=0");
Запрос = Новый HTTPЗапрос(Ресурс, Заголовки);
НачалоЗамера = ТекущаяУниверсальнаяДатаВМиллисекундах();
Попытка
Ответ = Соединение.Получить(Запрос);
Исключение
// Сюда попадают сетевые сбои и превышение времени ожидания
Результат.ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ЗаписьЖурналаРегистрации("Обмен.Маркетплейс",
УровеньЖурналаРегистрации.Ошибка, , , Результат.ТекстОшибки);
Возврат Результат;
КонецПопытки;
Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - НачалоЗамера;
Результат.КодСостояния = Ответ.КодСостояния;
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку("UTF-8");
Если Ответ.КодСостояния = 200 Тогда
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоОтвета);
Результат.Данные = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Результат.Успех = Истина;
Иначе
Результат.ТекстОшибки = "HTTP " + Ответ.КодСостояния + ": " + Лев(ТелоОтвета, 500);
КонецЕсли;
// Порог 10 секунд подобран эмпирически: превышение означает,
// что при росте объёмов порция перестанет укладываться в таймаут
Если Длительность > 10000 Тогда
ЗаписьЖурналаРегистрации("Обмен.Маркетплейс",
УровеньЖурналаРегистрации.Предупреждение, , ,
"Медленный ответ: " + Длительность + " мс, ресурс " + Ресурс);
КонецЕсли;
Возврат Результат;
КонецФункции
Как обработать 429 и 503 и не получить блокировку по лимитам?
Слепой повтор запроса в цикле — самая частая ошибка самописных интеграций: при коде 429 он усиливает превышение лимита и приводит к временной блокировке ключа. Повторять нужно избирательно и с нарастающей паузой.
// Выполняет запрос с повторами при временных отказах сервиса
Функция ВыполнитьСПовторами(Настройки, Знач Смещение) Экспорт
МаксимумПопыток = 4;
ПаузаСекунд = 2;
КодыДляПовтора = Новый Массив;
КодыДляПовтора.Добавить(429);
КодыДляПовтора.Добавить(500);
КодыДляПовтора.Добавить(502);
КодыДляПовтора.Добавить(503);
КодыДляПовтора.Добавить(504);
НомерПопытки = 1;
Ответ = Неопределено;
Пока НомерПопытки <= МаксимумПопыток Цикл
Ответ = ПолучитьПорциюЗаказов(Настройки, Смещение);
Если Ответ.Успех Тогда
Возврат Ответ;
КонецЕсли;
// Код 0 означает сетевой сбой или таймаут — его повторяем
Если Ответ.КодСостояния <> 0
И КодыДляПовтора.Найти(Ответ.КодСостояния) = Неопределено Тогда
// Ошибки 400, 401, 403 повторять бессмысленно: проблема в запросе или токене
Возврат Ответ;
КонецЕсли;
// Экспоненциальная задержка: 2, 4, 8 секунд
Подождать(ПаузаСекунд);
ПаузаСекунд = ПаузаСекунд * 2;
НомерПопытки = НомерПопытки + 1;
КонецЦикла;
Возврат Ответ;
КонецФункции
Если сервис возвращает заголовок Retry-After, пауза берётся из него: перебирайте коллекцию Ответ.Заголовки и сравнивайте ключи через НРег() — регистр заголовков не гарантирован.
Как настроить таймауты веб-сервера при публикации 1С?
Публикация HTTP-сервисов и Web-сервисов 1С — самое частое место, где обрыв происходит без единой записи в журнале регистрации. Настраивайте лимит времени больше, чем максимальная длительность вашего кода, но не бесконечным.
upstream onec { server 127.0.0.1:8080; }
location /trade/ {
proxy_pass http://onec;
proxy_connect_timeout 30s;
proxy_send_timeout 600s;
proxy_read_timeout 600s; # по умолчанию 60s — типичная причина обрыва
send_timeout 600s;
client_body_timeout 600s;
client_max_body_size 64m; # иначе большие пакеты отбиваются с 413
}
Для Apache 2.4 достаточно двух директив в конфигурации виртуального хоста: Timeout 600 и ProxyTimeout 600. Для IIS нужны две команды, выполняемые от администратора:
appcmd set config "Default Web Site" /section:limits /connectionTimeout:00:10:00
appcmd set apppool "DefaultAppPool" /processModel.idleTimeout:00:00:00
Второй командой отключается выгрузка пула приложений по простою. Без неё первый запрос после 20 минут тишины тратит время на инициализацию модуля расширения и падает по таймауту — классическая «ошибка только по утрам».
Найдите специалиста для решения этой задачи на koderion.ru