БлогУслугиКарьера
Обсудить проект
БлогУслугиКарьераОбсудить проект
Автоматизация

Почему ломается обмен 1С с сайтом: кодировки, блокировки, дубли

Обмен работал год и встал. Разбираем по симптомам: кракозябры, съехавшие даты, потерянные копейки, блокировки базы и задвоенные заказы — с диагностикой и лечением.

Редакция Feature
Редакция Feature·
28 авг
·
13 мин
·
Почему ломается обмен 1С с сайтом: кодировки, блокировки, дубли

Обмен работал год. Никто ничего не менял. В понедельник заказы с сайта перестали доходить до 1С.

«Никто ничего не менял» почти всегда означает, что обновилась конфигурация, сменилось время на сервере или у справочника выросло число позиций. Обмен с 1С ломается не от кода, а от окружения вокруг него, и ломается предсказуемыми способами.

Разберём эти способы по симптомам: что видит пользователь, где искать причину и чем лечить. Обзор методов интеграции есть в большом гайде, а про настройку OData мы написали отдельно.

С чего начинать любой разбор

Прежде чем гадать, загляните в два места.

Журнал регистрации 1С. Здесь видно, дошёл ли запрос до базы вообще, под каким пользователем он выполнялся и чем закончился. Половина разборов заканчивается прямо здесь: запрос не доходил, потому что у пользователя обмена отобрали роль после обновления.

Логи промежуточного слоя. Если между сайтом и 1С стоит middleware, у него должны быть логи с идентификатором запроса, длительностью и телом ответа при ошибке. Если их нет, начните с того, чтобы они появились — без них дальше вы будете угадывать.

Дальше идём по симптомам.

Симптом: кракозябры вместо русских букв

Классика, которая живёт десятилетиями. 1С исторически тяготеет к Windows-1251, веб живёт в UTF-8.

Опасность в том, что перекодировка может теряться не там, где вы смотрите. Точек, где текст меняет кодировку, обычно три: выгрузка из 1С, транспорт (заголовок Content-Type и параметр charset), приём на стороне сайта. Сломаться может любая.

Диагностика простая: возьмите строку с буквой «я» и проследите её байты на каждом этапе. В UTF-8 «я» занимает два байта, в Windows-1251 всего один. Как только вы видите, где двухбайтовая последовательность превратилась в вопросительные знаки, вы нашли место.

Отдельная разновидность беды: двойная перекодировка, когда текст переводят из 1251 в UTF-8 дважды. Выглядит характерно: вместо «Наименование» приезжает «Ðаименование». Значит, где-то в цепочке стоит лишняя конвертация, и лечится это её удалением, а не добавлением третьей.

Симптом: даты съехали на несколько часов

Форматом дат в 1С обычно занимаются сразу, а вот часовыми поясами почти никогда. Именно они дают самые неприятные ошибки, потому что данные выглядят правдоподобно.

1С хранит дату без указания зоны. Сайт, база данных и сервер приложений могут жить в разных зонах, и при передаче никто явно не говорит, в какой зоне пришло значение. Каждое звено достраивает её по своим настройкам.

Результат: заказ, оформленный в 23:40, попадает в 1С следующим днём. Отчёты за месяц расходятся на границе периода, и никто не понимает почему.

Лечение состоит из двух правил. Передавайте время в ISO 8601 с явным указанием зоны или в UTC, и фиксируйте зону на всех серверах цепочки. Договорённость «у нас всё в московском времени» работает ровно до первого сервера, который развернули с настройками по умолчанию.

Обмен с 1С встал?

Найдём причину и доведём интеграцию до стабильной работы

Починить обмен с 1С

Симптом: суммы расходятся на копейки

Цена в 1С хранится как число с фиксированной точностью. В JSON она превращается в число с плавающей точкой, а дальше начинается известная арифметика, в которой 0.1 + 0.2 не равно 0.3.

На одной позиции разница незаметна. На заказе из сорока строк она вырастает до рубля, и бухгалтерия приходит с вопросами.

Решение известное: не передавайте деньги числами с плавающей точкой. Есть два рабочих варианта: передавать сумму строкой либо целым числом в копейках. Второй удобнее, если обе стороны договорились и нигде по дороге не делят на сто «для красоты».

Заодно проверьте округление. Если сайт округляет к ближайшему, а 1С по своим правилам, расхождение появится даже при честной передаче.

Симптом: 1С «висит», пользователи жалуются на тормоза

Обмен и работа пользователей идут в одной базе и конкурируют за одни таблицы. Массовая запись из интеграции берёт блокировки, а менеджер в этот момент пытается провести документ и ждёт.

Что обычно вызывает это:

  • запись тысяч записей в одной транзакции вместо порционной
  • обмен в разгар рабочего дня
  • параллельные потоки, которые пишут в один и тот же регистр
  • отсутствие ограничения скорости на стороне middleware

Лечится очередью и порционностью. Отправляйте пакетами по несколько сотен записей, ограничивайте число одновременных потоков, тяжёлые выгрузки уводите на ночь. Если объёмы такие, что ночи не хватает, начинается разговор про отдельную базу для обмена или про репликацию, а не про настройку интеграции.

Симптом: заказы задваиваются

Сайт отправил заказ, 1С его приняла и начала отвечать, связь оборвалась. Сайт не получил подтверждения и отправил заказ повторно. В 1С их стало два.

Отличить «запрос не дошёл» от «ответ не вернулся» со стороны сайта невозможно в принципе. Поэтому защита строится на стороне приёмника: у каждого заказа должен быть внешний идентификатор с сайта, а 1С перед созданием обязана проверить, нет ли уже документа с таким идентификатором.

Это не про надёжность сети, а про архитектуру. Даже идеальный канал не отменяет перезапусков, деплоев и повторов из очереди.

Тот же принцип работает и в обратную сторону, когда события едут из 1С на сайт. Подробнее эта механика разобрана в статье про настройку API на сайте.

Симптом: обмен встал после обновления конфигурации

Обновление типовой конфигурации меняет структуру данных: появляются реквизиты, исчезают старые, меняются типы. HTTP-сервисы, написанные под прежнюю структуру, начинают отдавать ошибки либо, что хуже, отдают пустые значения без ошибки.

Опаснее всего второй вариант: обмен формально работает, данные приезжают, но часть полей пустая. Заметить это можно через неделю, когда накопятся заказы без контрагента.

Профилактика простая и дешёвая: набор проверок на стороне middleware, который гоняется после каждого обновления 1С. Запросить один известный товар, один документ и сверить, что нужные поля на месте и нужного типа. Пять минут работы, которые ловят большинство таких поломок в день обновления, а не через неделю.

Сюда же относится ситуация с ролями: обновление может сбросить права пользователя обмена. Проверка доступа должна входить в тот же набор.

Симптом: выгрузка отваливается по таймауту

Полная выгрузка каталога на пятьдесят тысяч позиций легко занимает десятки минут. Веб-сервер, прокси и HTTP-клиент к такому не готовы, и запрос обрывается где-то в середине.

Дальше начинается неприятное: часть данных уже записана, часть нет, а повтор запускает всё заново с начала.

Правильная схема в том, чтобы вообще не укладывать выгрузку в один запрос. Разбейте на страницы, ведите отметку последней успешной синхронизации и забирайте только изменения. Тогда обрыв стоит одной страницы, а не всей выгрузки.

Обсудим ваш проект?

Оставьте контакты — перезвоним и обсудим задачу

Чек-лист диагностики

  • Проверен журнал регистрации 1С: запрос дошёл, пользователь тот, ошибки нет
  • У middleware есть логи с идентификатором запроса и телом ответа при ошибке
  • Кодировка прослежена по всей цепочке, двойной перекодировки нет
  • Даты передаются в ISO 8601 с зоной или в UTC, зоны серверов зафиксированы
  • Деньги передаются строкой или в копейках, правила округления совпадают
  • Запись идёт порциями, число потоков ограничено, тяжёлое вынесено на ночь
  • У заказов есть внешний идентификатор, 1С проверяет его перед созданием
  • После обновления конфигурации прогоняется набор проверок обмена
  • Права пользователя обмена проверяются после каждого обновления
  • Выгрузка постраничная и инкрементальная, есть отметка последней синхронизации

Заключение

Почти все поломки обмена с 1С сводятся к тому, что две системы по-разному понимают одни и те же данные: байты текста, момент времени, сумму денег, факт создания документа. Код при этом может быть безупречным.

Отсюда практический вывод. Договорённости о форматах стоит зафиксировать письменно на старте проекта, а набор проверок после обновления написать до того, как случится первое обновление. Обе вещи занимают день и экономят те самые понедельники, когда «никто ничего не менял».

Читайте также

  • Интеграция 1С с сайтом через API: полный гайд для бизнеса
  • Обмен 1С с сайтом через OData: настройка с нуля
  • Мониторинг и алертинг веб-приложений

Обсудим ваш проект?

Оставьте контакты — перезвоним и обсудим задачу

Содержание
  • С чего начинать любой разбор
  • Симптом: кракозябры вместо русских букв
  • Симптом: даты съехали на несколько часов
  • Симптом: суммы расходятся на копейки
  • Симптом: 1С «висит», пользователи жалуются на тормоза
  • Симптом: заказы задваиваются
  • Симптом: обмен встал после обновления конфигурации
  • Симптом: выгрузка отваливается по таймауту
  • Чек-лист диагностики
  • Заключение
Поделиться:

Похожие статьи

Одна заявка пришла трижды: как убрать дубли в работе
Автоматизация

Одна заявка пришла трижды: как убрать дубли в работе

9 мин
Оплата пришла, заказ завис: как наладить сверку денег
Автоматизация

Оплата пришла, заказ завис: как наладить сверку денег

9 мин
CLAUDE.md: как настроить, чтобы агент не переспрашивал
Автоматизация

CLAUDE.md: как настроить, чтобы агент не переспрашивал

12 мин
Feature IT

Feature IT — платформа по обучению программированию и разработке цифровых продуктов. Мы создаём современные веб-решения для бизнеса и обучаем этому других!

Политика конфиденциальностиПользовательское соглашение

О компании

  • Блог
  • Карьера

Услуги разработки

  • Разработка сайтов под ключ
  • Веб-приложения на React/Next.js
  • Telegram-боты для бизнеса
  • Mini Apps (Telegram, VK)
  • SEO-оптимизированные сайты
  • Автоматизация бизнес-процессов
  • Поддержка и развитие IT-продуктов

Обучение

  • Курс Python с нуля
  • Алгоритмы и структуры данных
  • Паттерны проектирования
  • Подготовка к собеседованиям в IT
  • Практика на реальных проектах

Инструменты

  • Генератор UTM-меток
  • Счётчик символов