Перейти к содержанию

Runbook: 1С не подключается к 1Ф / ошибка аутентификации

1. Когда использовать

Признаки инцидента:

  1. В админке не проходит Проверить соединение для конфигурации 1С.
  2. При обмене появляются ошибки авторизации/доступа к веб-сервису 1С.
  3. События из 1С не доходят до 1Ф или «застревают» в очереди.
  4. После обновления 1С обмен перестал работать.

2. Как это работает (по коду)

2.1 Два разных направления обмена

  1. 1С -> 1Ф:
  2. 1С вызывает endpoint в 1Ф (/TC1CService.asmx и/или api/sync1c/send-1c-event),
  3. событие обрабатывает TC1CServiceCore.Send1CEvent.
  4. 1Ф -> 1С:
  5. 1Ф создаёт SOAP-клиент к адресу OneCAddress через SettingsLogic.Create1CSyncClient,
  6. операции: тест подключения, отправка настроек, первичная загрузка и прочие вызовы.

2.2 Проверка подключения в админке

POST /api/admin/sync1c/config/test-connection?name=...:

  1. Берёт настройки из SyncSettings1C.
  2. Создаёт SOAP client с учётом:
  3. OneCAddress,
  4. OneCUserName/OneCPassword,
  5. OneCCredentialType,
  6. режима безопасности (http/https binding).
  7. Вызывает client.TestConnection(true).
  8. Ошибки поднимаются как TCLogicException и фиксируются в Sync1CLog.

2.3 Обработка входящего события из 1С

Send1CEvent:

  1. Ищет конфиг и Record по ConfigurationName + OneCDocumentType.
  2. Если задан queue flow (InboxQueueFlowId), событие ставится в очередь (QueueType.OneC).
  3. Иначе выполняется синхронно (Handle1CEvent).
  4. Логирование идёт в Sync1CLog.

2.4 Отдельная очередь retry по 1С-событиям

Для части сценариев используется Sync1CEventQueues:

  1. Лимит повторов задаётся Sync1CQueueMaxRetryCount (0 = без лимита).
  2. Обработка: api/admin/sync1c/queue/process* и job EventQueue1CJob.
  3. Очистка проблемных записей: clear-by-retry-count.

3. Что смотреть при разборе (чек-лист)

  1. Уточнить направление проблемы:
  2. 1С не может достучаться до 1Ф,
  3. или 1Ф не может авторизоваться в 1С.
  4. Если это 1Ф -> 1С:
  5. вызвать config/test-connection,
  6. проверить OneCAddress, тип credential и логин.
  7. Если это 1С -> 1Ф:
  8. проверить доступность /TC1CService.asmx?WSDL и api/sync1c/test-connection,
  9. проверить, что событие реально приходит в Sync1CLog.
  10. Проверить актуальный XML-конфиг в SyncSettings1C (имя, адреса, credential type, queue flow).
  11. Проверить mapping пользователя 1С (Sync1CUsersMap) — при отсутствии mapping используется системный пользователь.
  12. Проверить очередь/повторы:
  13. рост RetryCount,
  14. записи с одинаковым объектом и повторными fail.
  15. При недавнем обновлении 1С отдельно проверить перепубликацию веб-сервиса и актуальность URL/WSDL.

4. Симптом -> вероятная причина -> проверка

Симптом Вероятная причина Что проверить первым
config/test-connection падает сразу неверный OneCAddress/credential type XML в SyncSettings1C, endpoint доступность
Ошибка авторизации к 1С неверные OneCUserName/пароль/режим auth настройки конфига + права пользователя сервиса 1С
send-1c-event даёт ошибку NoSuchSettings/currRecord is null неверное ConfigurationName или OneCDocumentType имя конфига и наличие record в XML
События копятся и не обрабатываются queue flow/retry проблема Sync1CEventQueues, RetryCount, Sync1CQueueMaxRetryCount
В логах есть входящие события, но данные не применяются проблема mapping/прав/валидации реквизитов Sync1CUsersMap, текст ошибок в Sync1CLog

5. SQL для быстрой диагностики

declare @config_name varchar(100) = '';
declare @user_1c_login varchar(256) = '';

-- Конфиги синхронизации
select
        s.Id,
        s.Name,
        len(s.XmlContent) as XmlSize
from dbo.SyncSettings1C s
where @config_name = '' or
      s.Name = @config_name
order by
        s.Name;

-- Последние логи синхронизации
select top (200)
        l.Id,
        l.[Date],
        l.SettingsName,
        l.Origin,
        l.[Message],
        l.TechData,
        l.Server1F,
        l.Server1C,
        l.Duration
from dbo.Sync1CLog l
where @config_name = '' or
      l.SettingsName = @config_name
order by
        l.[Date] desc;

-- Очередь событий 1С + ретраи
select top (200)
        q.Id,
        q.SettingsName,
        q.EventType,
        q.DateAdded,
        q.DateOfLastTry,
        q.RetryCount,
        q.TaskID,
        q.SubcatID,
        q.AdditionalID,
        q.ExtParamID,
        q.UserID
from dbo.Sync1CEventQueues q
where @config_name = '' or
      q.SettingsName = @config_name
order by
        q.DateAdded desc;

-- Mapping логинов 1С -> user 1Ф
select
        m.User1CLogin,
        m.UserID
from dbo.Sync1CUsersMap m
where @user_1c_login = '' or
      lower(m.User1CLogin) = lower(@user_1c_login)
order by
        m.User1CLogin;

6. Что приложить в задачу разработчикам

  1. Направление сбоя: 1С -> 1Ф или 1Ф -> 1С.
  2. Имя конфига (ConfigurationName) и точный текст ошибки.
  3. Результат config/test-connection (если запускали).
  4. SQL-снимок по SyncSettings1C, Sync1CLog, Sync1CEventQueues, Sync1CUsersMap.
  5. Было ли недавнее обновление/перепубликация 1С веб-сервиса.

Связанные документы

  • docs/domains/integrations/backend.md
  • docs/domains/integrations/data-flow.md
  • admin.md
  • admin.md
  • runbook-1c-connect-auth.md