---
title: Частые проблемы и устранение неполадок
description: Решения реальных проблем в TSync — отказы e-Factura и ANAF, не работающий cron, неотправленная почта, неожиданности со складом и правами, и что проверить перед обращением в поддержку.
product: TSync Intelligence 11.3.6
language: ru
canonical: https://docs.tsync.pro/ru/troubleshooting/
source: https://docs.tsync.pro/llms.txt
---

<h1>Частые проблемы и устранение неполадок</h1>
<p>Конкретные шаги для самых частых проблем. Базовые случаи (CSRF, login throttle, кэш CSS, диакритика, SMTP) описаны на странице <a href="../support/#chastye-problemy">Поддержка</a>; здесь — специфичные для TSync Intelligence.</p>

<h2 id="diagnosis">Быстрая диагностика — первые 3 проверки</h2>
<p>Прежде чем открывать логи или писать в поддержку:</p>
<ol>
  <li><strong>Cron работает?</strong> <code>Setup → Settings → Cron Job</code> — поле «Last cron run» должно быть в пределах 5 минут. Если нет — половина проблем (письма в очереди, истечение договоров, повторы) идёт отсюда.</li>
  <li><strong>Версия PHP подходит?</strong> Минимум PHP 8.1, рекомендуется 8.2 / 8.3. См. <code>Setup → Settings → System / Server Info</code>.</li>
  <li><strong>Каталоги доступны на запись?</strong> <code>application/cache</code>, <code>uploads/</code>, <code>application/logs</code> должны быть writable для пользователя веб-сервера.</li>
</ol>

<hr>

<h2 id="ajax-error-id">«Ошибка сети» на панели, которая не загружается</h2>
<p>Боковая панель, выдвижная карточка или список с надписью <strong>«Ошибка сети»</strong> почти никогда не связаны с сетью. Соединение до сервера дошло; сервер во время ответа наткнулся на ошибку и вернул пустой ответ, поэтому странице нечего было показать и она вывела самое общее сообщение, какое у неё есть.</p>
<p>Теперь такие случаи называют себя сами. Вместо пустого ответа вы получаете короткий код:</p>
<pre>Server error (REQ-4f2ab90c11)</pre>
<p><strong>Что делать:</strong> скопируйте код и приложите его к обращению. В тот же момент он записывается в <code>application/logs/</code> — в строку, описывающую, что именно отказало, так что разбирающийся пойдёт сразу к причине, а не будет пытаться её воспроизвести.</p>
<p><strong>Строка пишется и на боевой установке.</strong> Там обычное журналирование выключено (<code>log_threshold = 0</code>), и до v9.6.0 это проглатывало в том числе эту строку — вы получали код в браузере и ни одной строки нигде, то есть худшее из двух. Запрос, который умер, теперь фиксируется независимо от настройки подробности: одна строка, в том же ежедневном файле, под тем же кодом. Если каталог логов недоступен для записи, ничего не пишется и ничего не падает — значит, на хостинге с каталогом только для чтения будет код без строки, и первым делом проверьте права на папку.</p>
<p><strong>Чем это не является:</strong> это не ваш интернет, и повтор действия обычно не помогает. Если код один и тот же каждый раз — сбой детерминированный, и это хорошая новость: значит, его можно найти.</p>

<hr>

<h2 id="anaf">e-Factura ANAF — частые ошибки</h2>

<h3>«Token expired» / «401 Unauthorized» при загрузке</h3>
<p>OAuth-токен ANAF имеет ограниченный срок (60 дней access, 365 дней refresh). В <code>Setup → Settings → RO ANAF</code>:</p>
<ol>
  <li>Проверьте поле <strong>Token expires</strong>.</li>
  <li>Нажмите <strong>Refresh token</strong> — используется refresh token.</li>
  <li>Если refresh token тоже истёк (год): авторизуйтесь заново (Connect to ANAF).</li>
</ol>

<h3>«Invalid CIF» при генерации XML</h3>
<p>ANAF в XML требует CIF без префикса «RO», но при загрузке принимает с префиксом. Проверьте:</p>
<ul>
  <li>Поле клиента <strong>VAT Number</strong> — без пробелов и тире.</li>
  <li>Для физлиц: включите <em>Is individual</em> на клиенте; XML будет использовать CNP вместо CIF.</li>
</ul>

<h3>«Status: in processing» висит неделями</h3>
<p>Обычно ANAF отвечает за 1–3 часа. Если статус «in processing» висит дольше суток:</p>
<ol>
  <li>Проверьте статус напрямую в SPV (Spațiul Privat Virtual) — иногда callback не доходит до TSync.</li>
  <li>Принудительно: <code>RO ANAF → Pending uploads → Check status</code>.</li>
</ol>

<p>Полный список кодов ошибок ANAF: см. <a href="../modules/efactura-errors/">Ошибки e-Factura</a>.</p>

<hr>

<h2 id="cron">Cron не работает / работает неправильно</h2>
<p>Симптомы: письма в очереди не уходят, договоры не переходят в Expired, повторы не создаются, счётчики Summary устаревшие.</p>

<h3>Проверка</h3>
<ol>
  <li><code>Setup → Settings → Cron Job</code> — «Last cron run». Пусто или больше часа назад = cron не работает.</li>
  <li>На сервере: <code>crontab -l</code> или <code>cat /etc/cron.d/*</code> — ищите строку:
<pre><code>* * * * * /usr/bin/php /path/to/tsync/cron.php</code></pre></li>
  <li>Если её нет — следуйте <a href="../setup-cron-job/">Настройка cron</a>.</li>
</ol>

<h3>Cron запускается, но ничего не делает</h3>
<ul>
  <li>Проверьте пользователя cron — должен иметь право чтения <code>application/config/app-config.php</code>.</li>
  <li>Запустите вручную: <code>php /path/to/tsync/cron.php</code>. Ошибки видны сразу.</li>
  <li>Смотрите <code>application/logs/log-YYYY-MM-DD.php</code> — любая ошибка cron уходит туда.</li>
</ul>

<hr>

<h2 id="layout">Страница админки без сайдбара / сломанный layout</h2>
<p>Симптом: открываете страницу админки (или модуля custom), а левый сайдбар пропал, контент во всю ширину.</p>
<p><strong>Причина:</strong> view использует устаревший шаблон <code>$this->load->view('admin/includes/header')</code> + <code>... footer</code>. Правильно в TSync Intelligence — <code>init_head()</code> / <code>init_tail()</code> (они подгружают шаблон с сайдбаром).</p>

<h3>Решение</h3>
<p>В контроллере, рендерящем view, поменять:</p>
<pre><code class="language-php">// НЕПРАВИЛЬНО
$this-&gt;load-&gt;view('admin/includes/header');
$this-&gt;load-&gt;view('mymodule/myview', $data);
$this-&gt;load-&gt;view('admin/includes/footer');

// ПРАВИЛЬНО
$data['title'] = _l('module_name_lang_key');
init_head($data);
$this-&gt;load-&gt;view('mymodule/myview', $data);
init_tail();</code></pre>
<p>После правки — hard refresh (Ctrl+Shift+R), сайдбар возвращается.</p>

<hr>

<h2 id="pdf">PDF — нет шрифтов, диакритика, сломанный layout</h2>

<h3>«Could not include font» при генерации</h3>
<p>Шрифт TCPDF не найден. В TSync есть автоматический fallback в <code>App_pdf</code>: если шрифт из <em>PDF Settings → Font</em> не загружается, система переходит на <code>helvetica</code> и логирует warning.</p>
<ul>
  <li>Проверьте <code>Setup → Settings → PDF → PDF Font</code> — выберите известный шрифт (helvetica, dejavusans).</li>
  <li>Для расширенной латинской диакритики (ș, ț, ă, î) — используйте <code>dejavusans</code> или <code>freesans</code>.</li>
</ul>

<h3>«Maximum execution time exceeded» при больших PDF</h3>
<p>Длинные PDF (договоры &gt; 30 страниц, каталоги с фото) могут превышать <code>max_execution_time</code>:</p>
<ol>
  <li>Поднимите в <code>php.ini</code>: <code>max_execution_time = 300</code>.</li>
  <li>Или в <code>.htaccess</code>: <code>php_value max_execution_time 300</code>.</li>
  <li>Перед PDF сжимайте крупные изображения (max 1200px ширина, 80% JPEG).</li>
</ol>

<h3>Сломанный layout PDF (текст налезает)</h3>
<p>Обычно сложные HTML-таблицы с <code>colspan</code>/<code>rowspan</code>, которые TCPDF плохо рендерит. Упростите таблицу или добавьте <code>display: block</code> на проблемные ячейки.</p>

<hr>

<h2 id="mail-subject-charset">Тема письма приходит искажённой, а текст письма — нормальный</h2>
<p>Уведомление, чья <strong>тема</strong> читается как <em>«Contract urmeazÄƒ sÄƒ expire»</em>, тогда как <strong>тело</strong> того же письма правильно показывает ă, ș и ț, — это конкретный и хорошо понятный дефект, и сам этот разрыв является подсказкой. Тема и тело берутся из одной строки шаблона через одно соединение, поэтому будь дело в данных или в соединении, сломалось бы и то и другое.</p>
<p><strong>Байты всегда были UTF-8; неверной была наклеенная на них метка.</strong> Тело спасает собственный <code>&lt;meta charset&gt;</code>, которому почтовый клиент подчиняется; у заголовка темы такой страховки нет, поэтому сохранённое значение вроде <code>ISO-8859-1</code> велит почтовому клиенту получателя читать один символ как два.</p>
<p><strong>Что делать:</strong> обновиться. Миграция 955 исправляет сохранённое значение при замене файлов (уже правильные <code>utf-8</code> / <code>utf8</code> / <code>utf8mb4</code> она не трогает и сохраняет прежнее значение), а отправляющий код больше не зависит от правильности этой опции. Ваши почтовые шаблоны не затрагиваются — тело, которое из той же строки рендерится верно, и есть доказательство, что сохранённый текст никогда не был проблемой.</p>
<p><strong>Как проверить после:</strong> страница <code>Здоровье</code> сообщает о почтовой кодировке, отличной от UTF-8, как о предупреждении. Отправьте уведомление себе и прочитайте именно строку темы, а не только текст.</p>

<hr>

<h2 id="upload">«File too large» / неудачная загрузка</h2>
<p>TSync уважает два лимита PHP:</p>
<ul>
  <li><code>upload_max_filesize</code></li>
  <li><code>post_max_size</code></li>
</ul>
<p>Установите оба в <strong>одно значение</strong> (например, 50M) в <code>php.ini</code> или <code>.htaccess</code>:</p>
<pre><code>php_value upload_max_filesize 50M
php_value post_max_size 52M</code></pre>
<p>Перезапустите веб-сервер. Для файлов &gt; 100MB используйте <strong>External attachment</strong> (ссылка Drive/S3) вместо локальной загрузки.</p>

<hr>

<h2 id="permissions">«Недостаточно прав» на договорах / проектах / счетах</h2>
<p>Типичные сообщения: <em>«Your current permissions does not allow…»</em>, отсутствующие кнопки, «не вижу» сущностей.</p>

<h3>Диагностика</h3>
<ol>
  <li><code>Setup → Roles</code> — определите роль затронутого сотрудника.</li>
  <li>На нужной сущности (Contracts/Projects/Invoices…) проверьте флаги:
    <ul>
      <li><strong>view (own)</strong> — только сущности, где он создатель/назначенный.</li>
      <li><strong>view (global)</strong> — все сущности.</li>
      <li><strong>create / edit / delete</strong> — отдельно.</li>
    </ul>
  </li>
  <li>После сохранения роли сделайте <strong>logout + login</strong> сотруднику, чтобы сессия перезагрузилась.</li>
</ol>

<hr>

<h2 id="missing-module">Модуль активен, но не появляется в меню</h2>
<p>После <em>Setup → Modules → Activate</em> меню не меняется.</p>
<ul>
  <li><strong>Hard refresh</strong> (Ctrl+Shift+R) — меню частично кешируется в браузере.</li>
  <li>Проверьте <code>application/logs/log-YYYY-MM-DD.php</code> — активация могла упасть с ошибкой (опечатка в <code>install.php</code>, отсутствует hook).</li>
  <li>Проверьте права роли — модуль может быть активен, но у вас нет <em>view</em>.</li>
</ul>

<hr>

<h2 id="db-upgrade">Обновление выкачено, но новых функций нет</h2>
<p>Вы залили новый код, но забыли про обновление БД. <code>Setup → Settings → Update</code> покажет «Update applied successfully», но без явного запуска из админки миграции схемы не выполнятся.</p>

<h3>Принудительный апгрейд БД</h3>
<ol>
  <li>Войдите как админ.</li>
  <li>Перейдите по адресу <code>admin/upgrade</code> (URL).</li>
  <li>Система определит текущую версию БД и применит все недостающие миграции.</li>
</ol>

<p><strong>Конкретный пример:</strong> если после обновления подзадачи не появляются в модальном окне задачи — миграция 342 (колонка <code>parent_task_id</code> в <code>tbltasks</code>) не выполнилась. Запустите апгрейд выше.</p>

<hr>

<h2 id="backup">Бэкап и восстановление</h2>

<h3>Автоматический бэкап БД</h3>
<p>Внутренний модуль <strong>Backup</strong> делает ежедневный дамп при настройке:</p>
<ul>
  <li><code>Setup → Settings → Backup</code> — включите, выберите час, retention (например, 14 дней).</li>
  <li>Бэкапы складываются в <code>backups/</code> (создаётся автоматически).</li>
  <li>Cron TSync должен работать (см. выше).</li>
</ul>

<h3>Ручное восстановление</h3>
<ol>
  <li>Скопируйте <code>uploads/</code> из бэкапа поверх текущего каталога.</li>
  <li>Импортируйте SQL-дамп: <code>mysql -u user -p database &lt; backup.sql</code>.</li>
  <li>Очистите <code>application/cache/*.php</code>.</li>
  <li>Проверьте <code>application/config/app-config.php</code> — ключ шифрования должен совпадать с системой-источником (иначе сохранённые пароли и API-токены не расшифруются). См. <a href="../encryption-key-explained/">ключ шифрования</a>.</li>
</ol>

<hr>

<h2 id="logs">Чтение логов</h2>
<p>TSync пишет в <code>application/logs/log-YYYY-MM-DD.php</code>. Формат CodeIgniter — один файл в день, несколько уровней (ERROR, INFO, DEBUG).</p>

<h3>Временное включение DEBUG</h3>
<p>В <code>application/config/config.php</code>:</p>
<pre><code class="language-php">$config['log_threshold'] = 4; // 1=error, 2=debug, 3=info, 4=all</code></pre>
<p>После диагностики <strong>верните 1</strong> (только ERROR), чтобы не забивать диск.</p>

<h3>Быстрый фильтр</h3>
<pre><code>grep -i "ERROR\|EXCEPTION" application/logs/log-2026-05-05.php | tail -50</code></pre>

<hr>

<h2 id="warehouse-image-500">Прикрепление изображения к складской позиции отвечает пустой ошибкой</h2>
<p>Загрузка картинки для складской позиции — <code>Склад &rarr; Артикулы &rarr; (позиция) &rarr; изображение</code> — возвращала <strong>HTTP 500 с пустым телом</strong>: белый экран, ни сообщения, ни чего-либо, о чём можно сообщить, кроме «не работает». Исправлено в <strong>v11.2.3</strong>.</p>
<p><strong>Если у вас более старая сборка,</strong> тот же дефект затрагивал загрузку изображения артикула и логотипа на экране настроек склада, генерацию номера партии и имя файла подписи. Всё это была одна и та же скрытая ошибка, ждавшая запроса, в котором ничто другое не загрузило заранее определённый помощник.</p>
<p><strong>Что делать:</strong> обновитесь до v11.2.3 или новее. Обходного пути нет и настраивать нечего — а если вы видите пустой 500 на любом «глубоком» маршруте действия (не страница, а кнопка, которая отправляет данные), это форма именно этого класса дефектов: пришлите адрес страницы и время, и строка журнала назовёт отсутствующую функцию.</p>

<hr>

<h2 id="see-also">См. также</h2>
<ul>
  <li><a href="../support/">Поддержка</a> — как сообщать об ошибках, плюс базовые проблемы (CSRF, throttle, SMTP, диакритика).</li>
  <li><a href="../modules/efactura-errors/">Ошибки e-Factura</a> — полный список кодов ANAF.</li>
  <li><a href="../setup-cron-job/">Настройка cron</a></li>
  <li><a href="../encryption-key-explained/">Ключ шифрования</a></li>
  <li><a href="../404-not-found-after-installation/">Ошибка 404 после установки</a></li>
</ul>
