При настройке обмена данными между базами 1С:Предприятие 8.3 пользователи и администраторы часто сталкиваются с неприятной ошибкой: "Обработка: ТранспортСообщенийОбменаFTP: Архив не содержит файл сообщения обмена". При этом, если открыть архив вручную, файл внутри присутствует, но его название состоит из нечитаемых символов (так называемых «крякозябр»). Особенно остро эта проблема проявляется на операционных системах Windows 10 и Windows 11.
В данной статье мы подробно разберем, почему возникает эта ситуация, как она связана с версией платформы 1С и какие существуют способы решения этой проблемы.
Проанализируем техническую сторону вопроса. Основная причина кроется в спецификации формата ZIP и том, как разные версии платформы 1С работают с кодировками имен файлов. Для поддержки национальных символов (в нашем случае — кириллицы) в заголовке файла внутри архива должен быть установлен специальный флаг — «Бит 11», который сигнализирует системе, что имя записано в кодировке UTF-8.
В ходе эксплуатации релизов платформы 8.3.9 и 8.3.10 было замечено, что встроенные механизмы обмена записывают имя файла в кодировке UTF-8, но некорректно выставляют этот флаг. В результате:
Рассмотрим по шагам основные способы устранения этой неисправности.
Это самый простой и быстрый метод, который помогает в большинстве случаев, если объем передаваемых данных позволяет не сжимать их. Если файл обмена будет передаваться в открытом виде (как .xml), проблема с кодировкой внутри ZIP-архива исчезнет сама собой.
Разберем, как это сделать:
Важно: Этот способ может не подойти для медленных каналов связи, так как объем передаваемого трафика существенно возрастет.
Как показывает практика и обсуждения специалистов, проблема была массово зафиксирована в ветках 8.3.9 и 8.3.10. Проанализируем ситуацию с версиями:
8.3.8.2197 часто решает проблему.ЗаписьZipФайла были переработаны, и ошибки с установкой флага Бит 11 были исправлены.Рекомендуется привести обе базы (источник и приемник) к единой стабильной версии платформы (например, актуальной версии 8.3.22 или выше).
Иногда «крякозябры» появляются из-за специфических настроек операционной системы. Проверим параметры локализации:
Если вы используете собственные обработки для создания архивов, необходимо явно указывать кодировку имен файлов. Начиная с версии 8.3.12, объект ЗаписьZipФайла позволяет управлять этим процессом.
Посмотрим на пример правильного создания архива:
// Создание объекта записи ZIP с явным указанием кодировки имен файлов
Архив = Новый ЗаписьZipФайла(ПутьКФайлуАрхива, , , МетодСжатия.Дефляция, УровеньСжатия.Оптимальный, МетодШифрования.ZipCrypto, КодировкаТекста.UTF8);
// Добавление файла в архив
// Имя файла внутри архива теперь будет корректно обработано с установкой Бита 11
Архив.Добавить(ПутьКФайлуСообщения, РежимСохраненияПутейZip.НеСохранятьПути);
Архив.Записать();
При использовании КодировкаТекста.UTF8 в современных релизах платформы, 1С корректно прописывает флаги в заголовке ZIP, и файлы будут читаться без ошибок на любых версиях Windows.
Если ни один из способов выше не применим, можно попытаться исключить русские буквы из названия внутреннего файла. Имя файла обмена обычно формируется как Message_<ПрефиксИсточника>_<ПрефиксПриемника>.xml.
Если изменить префиксы баз на латинские (например, вместо "МБ" использовать "MB"), то проблема с кодировкой исчезнет, так как латиница одинаково отображается во всех кодировках. Однако помните, что изменение префикса в уже работающей базе — это сложная процедура, которая затронет нумерацию всех новых документов.
Мы проанализировали проблему некорректного отображения имен файлов в архивах обмена 1С. Подведем итог: наиболее эффективным и правильным решением является обновление платформы 1С до актуальных релизов или отключение архивации в настройках синхронизации. Если же вы ограничены старыми версиями систем, проверьте настройки Unicode (UTF-8) в региональных стандартах Windows.