Частые проблемы и устранение неполадок
Конкретные шаги для самых частых проблем. Базовые случаи (CSRF, login throttle, кэш CSS, диакритика, SMTP) описаны на странице Поддержка; здесь — специфичные для TSync Intelligence.
Быстрая диагностика — первые 3 проверки
Прежде чем открывать логи или писать в поддержку:
- Cron работает?
Setup → Settings → Cron Job— поле «Last cron run» должно быть в пределах 5 минут. Если нет — половина проблем (письма в очереди, истечение договоров, повторы) идёт отсюда. - Версия PHP подходит? Минимум PHP 8.1, рекомендуется 8.2 / 8.3. См.
Setup → Settings → System / Server Info. - Каталоги доступны на запись?
application/cache,uploads/,application/logsдолжны быть writable для пользователя веб-сервера.
«Ошибка сети» на панели, которая не загружается
Боковая панель, выдвижная карточка или список с надписью «Ошибка сети» почти никогда не связаны с сетью. Соединение до сервера дошло; сервер во время ответа наткнулся на ошибку и вернул пустой ответ, поэтому странице нечего было показать и она вывела самое общее сообщение, какое у неё есть.
Теперь такие случаи называют себя сами. Вместо пустого ответа вы получаете короткий код:
Server error (REQ-4f2ab90c11)
Что делать: скопируйте код и приложите его к обращению. В тот же момент он записывается в application/logs/ — в строку, описывающую, что именно отказало, так что разбирающийся пойдёт сразу к причине, а не будет пытаться её воспроизвести.
Строка пишется и на боевой установке. Там обычное журналирование выключено (log_threshold = 0), и до v9.6.0 это проглатывало в том числе эту строку — вы получали код в браузере и ни одной строки нигде, то есть худшее из двух. Запрос, который умер, теперь фиксируется независимо от настройки подробности: одна строка, в том же ежедневном файле, под тем же кодом. Если каталог логов недоступен для записи, ничего не пишется и ничего не падает — значит, на хостинге с каталогом только для чтения будет код без строки, и первым делом проверьте права на папку.
Чем это не является: это не ваш интернет, и повтор действия обычно не помогает. Если код один и тот же каждый раз — сбой детерминированный, и это хорошая новость: значит, его можно найти.
e-Factura ANAF — частые ошибки
«Token expired» / «401 Unauthorized» при загрузке
OAuth-токен ANAF имеет ограниченный срок (60 дней access, 365 дней refresh). В Setup → Settings → RO ANAF:
- Проверьте поле Token expires.
- Нажмите Refresh token — используется refresh token.
- Если refresh token тоже истёк (год): авторизуйтесь заново (Connect to ANAF).
«Invalid CIF» при генерации XML
ANAF в XML требует CIF без префикса «RO», но при загрузке принимает с префиксом. Проверьте:
- Поле клиента VAT Number — без пробелов и тире.
- Для физлиц: включите Is individual на клиенте; XML будет использовать CNP вместо CIF.
«Status: in processing» висит неделями
Обычно ANAF отвечает за 1–3 часа. Если статус «in processing» висит дольше суток:
- Проверьте статус напрямую в SPV (Spațiul Privat Virtual) — иногда callback не доходит до TSync.
- Принудительно:
RO ANAF → Pending uploads → Check status.
Полный список кодов ошибок ANAF: см. Ошибки e-Factura.
Cron не работает / работает неправильно
Симптомы: письма в очереди не уходят, договоры не переходят в Expired, повторы не создаются, счётчики Summary устаревшие.
Проверка
Setup → Settings → Cron Job— «Last cron run». Пусто или больше часа назад = cron не работает.- На сервере:
crontab -lилиcat /etc/cron.d/*— ищите строку:* * * * * /usr/bin/php /path/to/tsync/cron.php - Если её нет — следуйте Настройка cron.
Cron запускается, но ничего не делает
- Проверьте пользователя cron — должен иметь право чтения
application/config/app-config.php. - Запустите вручную:
php /path/to/tsync/cron.php. Ошибки видны сразу. - Смотрите
application/logs/log-YYYY-MM-DD.php— любая ошибка cron уходит туда.
Страница админки без сайдбара / сломанный layout
Симптом: открываете страницу админки (или модуля custom), а левый сайдбар пропал, контент во всю ширину.
Причина: view использует устаревший шаблон $this->load->view('admin/includes/header') + ... footer. Правильно в TSync Intelligence — init_head() / init_tail() (они подгружают шаблон с сайдбаром).
Решение
В контроллере, рендерящем view, поменять:
// НЕПРАВИЛЬНО
$this->load->view('admin/includes/header');
$this->load->view('mymodule/myview', $data);
$this->load->view('admin/includes/footer');// ПРАВИЛЬНО
$data['title'] = _l('module_name_lang_key');
init_head($data);
$this->load->view('mymodule/myview', $data);
init_tail();
После правки — hard refresh (Ctrl+Shift+R), сайдбар возвращается.
PDF — нет шрифтов, диакритика, сломанный layout
«Could not include font» при генерации
Шрифт TCPDF не найден. В TSync есть автоматический fallback в App_pdf: если шрифт из PDF Settings → Font не загружается, система переходит на helvetica и логирует warning.
- Проверьте
Setup → Settings → PDF → PDF Font— выберите известный шрифт (helvetica, dejavusans). - Для расширенной латинской диакритики (ș, ț, ă, î) — используйте
dejavusansилиfreesans.
«Maximum execution time exceeded» при больших PDF
Длинные PDF (договоры > 30 страниц, каталоги с фото) могут превышать max_execution_time:
- Поднимите в
php.ini:max_execution_time = 300. - Или в
.htaccess:php_value max_execution_time 300. - Перед PDF сжимайте крупные изображения (max 1200px ширина, 80% JPEG).
Сломанный layout PDF (текст налезает)
Обычно сложные HTML-таблицы с colspan/rowspan, которые TCPDF плохо рендерит. Упростите таблицу или добавьте display: block на проблемные ячейки.
Тема письма приходит искажённой, а текст письма — нормальный
Уведомление, чья тема читается как «Contract urmează să expire», тогда как тело того же письма правильно показывает ă, ș и ț, — это конкретный и хорошо понятный дефект, и сам этот разрыв является подсказкой. Тема и тело берутся из одной строки шаблона через одно соединение, поэтому будь дело в данных или в соединении, сломалось бы и то и другое.
Байты всегда были UTF-8; неверной была наклеенная на них метка. Тело спасает собственный <meta charset>, которому почтовый клиент подчиняется; у заголовка темы такой страховки нет, поэтому сохранённое значение вроде ISO-8859-1 велит почтовому клиенту получателя читать один символ как два.
Что делать: обновиться. Миграция 955 исправляет сохранённое значение при замене файлов (уже правильные utf-8 / utf8 / utf8mb4 она не трогает и сохраняет прежнее значение), а отправляющий код больше не зависит от правильности этой опции. Ваши почтовые шаблоны не затрагиваются — тело, которое из той же строки рендерится верно, и есть доказательство, что сохранённый текст никогда не был проблемой.
Как проверить после: страница Здоровье сообщает о почтовой кодировке, отличной от UTF-8, как о предупреждении. Отправьте уведомление себе и прочитайте именно строку темы, а не только текст.
«File too large» / неудачная загрузка
TSync уважает два лимита PHP:
upload_max_filesizepost_max_size
Установите оба в одно значение (например, 50M) в php.ini или .htaccess:
php_value upload_max_filesize 50M
php_value post_max_size 52M
Перезапустите веб-сервер. Для файлов > 100MB используйте External attachment (ссылка Drive/S3) вместо локальной загрузки.
«Недостаточно прав» на договорах / проектах / счетах
Типичные сообщения: «Your current permissions does not allow…», отсутствующие кнопки, «не вижу» сущностей.
Диагностика
Setup → Roles— определите роль затронутого сотрудника.- На нужной сущности (Contracts/Projects/Invoices…) проверьте флаги:
- view (own) — только сущности, где он создатель/назначенный.
- view (global) — все сущности.
- create / edit / delete — отдельно.
- После сохранения роли сделайте logout + login сотруднику, чтобы сессия перезагрузилась.
Модуль активен, но не появляется в меню
После Setup → Modules → Activate меню не меняется.
- Hard refresh (Ctrl+Shift+R) — меню частично кешируется в браузере.
- Проверьте
application/logs/log-YYYY-MM-DD.php— активация могла упасть с ошибкой (опечатка вinstall.php, отсутствует hook). - Проверьте права роли — модуль может быть активен, но у вас нет view.
Обновление выкачено, но новых функций нет
Вы залили новый код, но забыли про обновление БД. Setup → Settings → Update покажет «Update applied successfully», но без явного запуска из админки миграции схемы не выполнятся.
Принудительный апгрейд БД
- Войдите как админ.
- Перейдите по адресу
admin/upgrade(URL). - Система определит текущую версию БД и применит все недостающие миграции.
Конкретный пример: если после обновления подзадачи не появляются в модальном окне задачи — миграция 342 (колонка parent_task_id в tbltasks) не выполнилась. Запустите апгрейд выше.
Бэкап и восстановление
Автоматический бэкап БД
Внутренний модуль Backup делает ежедневный дамп при настройке:
Setup → Settings → Backup— включите, выберите час, retention (например, 14 дней).- Бэкапы складываются в
backups/(создаётся автоматически). - Cron TSync должен работать (см. выше).
Ручное восстановление
- Скопируйте
uploads/из бэкапа поверх текущего каталога. - Импортируйте SQL-дамп:
mysql -u user -p database < backup.sql. - Очистите
application/cache/*.php. - Проверьте
application/config/app-config.php— ключ шифрования должен совпадать с системой-источником (иначе сохранённые пароли и API-токены не расшифруются). См. ключ шифрования.
Чтение логов
TSync пишет в application/logs/log-YYYY-MM-DD.php. Формат CodeIgniter — один файл в день, несколько уровней (ERROR, INFO, DEBUG).
Временное включение DEBUG
В application/config/config.php:
$config['log_threshold'] = 4; // 1=error, 2=debug, 3=info, 4=all
После диагностики верните 1 (только ERROR), чтобы не забивать диск.
Быстрый фильтр
grep -i "ERROR\|EXCEPTION" application/logs/log-2026-05-05.php | tail -50Прикрепление изображения к складской позиции отвечает пустой ошибкой
Загрузка картинки для складской позиции — Склад → Артикулы → (позиция) → изображение — возвращала HTTP 500 с пустым телом: белый экран, ни сообщения, ни чего-либо, о чём можно сообщить, кроме «не работает». Исправлено в v11.2.3.
Если у вас более старая сборка, тот же дефект затрагивал загрузку изображения артикула и логотипа на экране настроек склада, генерацию номера партии и имя файла подписи. Всё это была одна и та же скрытая ошибка, ждавшая запроса, в котором ничто другое не загрузило заранее определённый помощник.
Что делать: обновитесь до v11.2.3 или новее. Обходного пути нет и настраивать нечего — а если вы видите пустой 500 на любом «глубоком» маршруте действия (не страница, а кнопка, которая отправляет данные), это форма именно этого класса дефектов: пришлите адрес страницы и время, и строка журнала назовёт отсутствующую функцию.
См. также
- Поддержка — как сообщать об ошибках, плюс базовые проблемы (CSRF, throttle, SMTP, диакритика).
- Ошибки e-Factura — полный список кодов ANAF.
- Настройка cron
- Ключ шифрования
- Ошибка 404 после установки