ZIP-архив в 1С:Предприятии 8.3: обмены, обработки и распаковка кодом
Содержание
Загрузить архив ZIP в 1С можно тремя путями. Пакет обмена из синхронизации платформа распакует сама, если положить его в папку обмена. Файл универсального обмена XML можно отдать обработке прямо в .zip. Всё остальное (внешние обработки, .dt, .cfu, выгрузки из сторонних программ) сначала распаковывают, а уже потом загружают содержимое. Для своих задач есть объект встроенного языка ЧтениеZipФайла: он распаковывает архив на сервере без 7-Zip и WinRAR.
Порядок действий общий для платформы 8.3 и не зависит от конфигурации. Разница только в том, где лежит команда загрузки для конкретного вида данных. Её и разберём по типам содержимого архива.
Что лежит в архиве и куда его загружать
Сначала откройте архив обычным проводником и посмотрите, что внутри. От расширения вложенных файлов зависит весь дальнейший путь.
| Что внутри ZIP | Что это | Куда загружать |
|---|---|---|
Message_*.xml или сам архив Message_*.zip | пакет синхронизации данных | папка обмена, затем запуск синхронизации |
.xml с правилами или данными обмена | выгрузка универсального обмена | обработка «Универсальный обмен данными в формате XML» |
.epf, .erf | внешняя обработка или отчёт | справочник дополнительных отчётов и обработок |
.dt | выгрузка информационной базы | Конфигуратор, загрузка информационной базы |
.cf, .cfu, setup.exe | конфигурация или обновление | Конфигуратор, режим обновления конфигурации |
.xml, .csv, .txt от другой программы | данные для разбора | обработка с ЧтениеZipФайла |
Файлы .xlsx и .docx по устройству тоже ZIP-архивы. Распаковывать их не нужно: 1С читает табличный документ Excel напрямую.
Права, без которых загрузка не начнётся
Проверьте учётную запись до того, как искать причину в архиве:
- 🔑 для внешних обработок нужна роль, которая разрешает добавлять дополнительные отчёты и обработки, или право интерактивного открытия внешних обработок;
- 🛡️ на платформе 8.3.22 и новее у пользователя может стоять флажок «Защита от опасных действий» в свойствах пользователя в Конфигураторе: при открытии внешнего файла программа покажет предупреждение;
- 🗂️ в клиент-серверной базе файлы читает служба сервера 1С, а не ваш Windows-пользователь. У её учётной записи (по умолчанию
USR1CV8) должно быть право на чтение и запись в папку с архивом; - 💾 на диске нужно свободное место примерно в 3-5 раз больше размера архива: текстовые XML сжимаются сильно.
Как загрузить ZIP-пакет синхронизации данных
Типовые конфигурации на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, КА, ERP) обмениваются сообщениями через синхронизацию данных. Если в настройках транспорта включено сжатие, каждое сообщение уходит в виде архива с именем вида Message_<код отправителя>_<код получателя>.zip. Распаковывать его вручную не нужно.
Ручная загрузка такого архива нужна, когда автоматический канал сломался: FTP недоступен, почта не дошла, файл прислали на флешке.
- Откройте
Администрирование → Синхронизация данных. - Перейдите к списку настроек синхронизации и откройте нужную настройку.
- В параметрах подключения посмотрите путь к каталогу обмена (вариант «через локальный или сетевой каталог»).
- Скопируйте полученный архив в этот каталог, не меняя имени файла.
- Если архив защищён паролем, проверьте, что пароль в настройке совпадает с паролем на стороне отправителя.
- Вернитесь в список и запустите синхронизацию по этой настройке.
После загрузки откройте журнал синхронизации или монитор обмена: там видно, сколько объектов принято и были ли предупреждения.
Не переименовывайте архив. Программа ищет файл по кодам узлов в имени. Архив Message_BP_UT.zip, сохранённый как Message_BP_UT(1).zip, просто не будет найден.
Если пришёл архив от другого узла
Сообщение подходит только той базе, для которой его сформировали. Номер сообщения в архиве должен идти по порядку. Если загрузить устаревший пакет, программа его пропустит как уже принятый, и данные не появятся. В этом случае попросите отправителя выгрузить свежее сообщение.
ZIP в универсальном обмене данными в формате XML
Обработка «Универсальный обмен данными в формате XML» умеет выгружать результат сразу в архив. На вкладке выгрузки для этого есть флажок сжатия файла. Загружает она такой архив тоже напрямую.
Порядок загрузки:
- Сделайте резервную копию базы -приёмника. Универсальный обмен пишет в базу без промежуточного просмотра.
- Откройте обработку через
Файл → Открытьв режиме 1С:Предприятие (или через список дополнительных обработок, если её туда добавили). - Перейдите на вкладку загрузки данных.
- В поле имени файла выберите
.zip. Если диалог показывает только.xml, переключите фильтр на «Все файлы». - Если архив с паролем, введите его в поле пароля архива.
- Нажмите команду загрузки и дождитесь протокола.
Не загружайте выгрузку из чужой конфигурации без проверки правил обмена. Правила связывают объекты источника и приёмника. Если они составлены под другие версии, обработка создаст дубли контрагентов и номенклатуры.
Сами правила обмена (обычно .xml, подготовленные в «Конвертации данных») тоже иногда присылают в ZIP. Их распакуйте и укажите на вкладке выгрузки. Файл правил обработка в архиве не читает.
Внешняя обработка или отчёт из ZIP-архива
Разработчики и сайты с обработками часто отдают файлы .epf и .erf в архиве. Окно добавления дополнительной обработки ждёт именно .epf или .erf, архив оно не примет. Сначала распакуйте файл.
Разово открыть обработку
- Распакуйте архив в отдельную папку, например
D:\1C\Obrabotki. - В 1С откройте главное меню (кнопка с тремя полосками или стрелкой в заголовке окна) и выберите
Файл → Открыть. - Укажите файл
.epf. - Если появилось предупреждение о защите от опасных действий, прочитайте его. Подтверждайте, только если источник обработки вам известен.
Подключить постоянно
В Бухгалтерии 3.0, ЗУП 3.1 и УТ 11 путь одинаковый: Администрирование → Печатные формы, отчеты и обработки.
- Включите флажок «Дополнительные отчеты и обработки».
- Перейдите по ссылке с тем же названием.
- Нажмите «Добавить из файла» и выберите распакованный
.epfили.erf. - Программа может спросить про безопасный режим. Обработке, которая работает с файлами, нужны разрешения: в БСП их показывают списком перед подключением.
- Настройте размещение (в каких разделах видна команда) и пользователей, затем запишите.
Внешняя обработка выполняется с правами пользователя, который её запустил. Код из непроверенного архива может удалить данные или отправить их наружу. Откройте модуль в Конфигураторе и просмотрите его до подключения в рабочей базе.
Распаковка ZIP средствами встроенного языка 1С
Когда архив приходит от банка, маркетплейса или складской программы, штатной команды загрузки нет. Тогда пишут небольшую обработку. В платформе 8.3 для этого есть два объекта:
- 📦
ЧтениеZipФайла— открыть архив, перебратьЭлементы, извлечь один файл методомИзвлечьили все сразу методомИзвлечьВсе; - 🗜️
ЗаписьZipФайла— собрать архив: методыДобавитьиЗаписать, можно задать пароль и метод шифрования.
Пользователь выбирает файл на своём компьютере, а читать его нужно на сервере. Поэтому архив сначала передают во временное хранилище, а на сервере записывают во временный файл.
Пример: загрузить архив и прочитать все XML из него
Код формы внешней обработки. Команда формы «ЗагрузитьАрхив» вызывает выбор файла:
&НаКлиенте
Процедура ЗагрузитьАрхив(Команда)
Оповещение = Новый ОписаниеОповещения("ЗагрузитьАрхивЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(Оповещение, , "", Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьАрхивЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
Возврат;
КонецЕсли;
Если ВРег(Прав(ВыбранноеИмяФайла, 4)) <> ".ZIP" Тогда
Сообщить("Выбран не ZIP-архив: " + ВыбранноеИмяФайла);
Возврат;
КонецЕсли;
Итог = РазобратьАрхивНаСервере(Адрес);
Для Каждого Строка Из Итог Цикл
Сообщить(СтрШаблон("%1: %2 символов", Строка.Имя, Формат(Строка.Длина, "ЧГ=0")));
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция РазобратьАрхивНаСервере(Адрес)
Итог = Новый Массив;
ИмяАрхива = ПолучитьИмяВременногоФайла("zip");
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
ДвоичныеДанные.Записать(ИмяАрхива);
Каталог = ПолучитьИмяВременногоФайла();
СоздатьКаталог(Каталог);
Архив = Новый ЧтениеZipФайла(ИмяАрхива);
Архив.ИзвлечьВсе(Каталог, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
Архив.Закрыть();
Файлы = НайтиФайлы(Каталог, "*.xml");
Для Каждого Файл Из Файлы Цикл
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(Файл.ПолноеИмя, КодировкаТекста.UTF8);
Содержимое = Текст.ПолучитьТекст();
Итог.Добавить(Новый Структура("Имя, Длина, Текст", Файл.Имя, СтрДлина(Содержимое), Содержимое));
КонецЦикла;
УдалитьФайлы(ИмяАрхива);
УдалитьФайлы(Каталог);
Возврат Итог;
КонецФункции
Что здесь происходит:
НачатьПомещениеФайлаоткрывает диалог и передаёт файл во временное хранилище формы.- На сервере двоичные данные пишутся во временный
.zip, рядом создаётся пустой каталог. ИзвлечьВсес режимомНеВосстанавливатьскладывает все файлы в один каталог без вложенных папок.- Каждый XML читается целиком, функция возвращает имя, длину и текст файла.
- Временные файлы и каталог удаляются, чтобы не копить мусор на сервере.
Для разбора самих XML замените чтение через ТекстовыйДокумент на ЧтениеXML или XDTOФабрика, если формат описан схемой.
Если архив защищён паролем, передайте его вторым параметром: Новый ЧтениеZipФайла(ИмяАрхива, "пароль").
Как извлечь один файл, а не весь архив
Переберите Архив.Элементы и сравните Элемент.Имя с нужным. Затем вызовите Архив.Извлечь(Элемент, Каталог). Так удобно, когда в архиве сотни файлов, а нужен один реестр. Размер до распаковки показывает свойство ИсходныйРазмер: по нему легко отсечь подозрительно большие файлы.
Загрузка ZIP-архивов по расписанию через командную строку
Ежедневную загрузку архива можно запустить без пользователя. Схема простая: планировщик Windows запускает bat-файл, тот открывает 1С с внешней обработкой и передаёт путь к архиву через параметр /C.
@echo off
set ARCH=D:\Obmen\in\data.zip
set EPF=D:\Obmen\load_zip.epf
set V8="C:\Program Files\1cv8\common\1cestart.exe"
if not exist "%ARCH%" exit /b 0
%V8% ENTERPRISE /S "srv1c\buh" /N "Obmen" /P "%OBMEN_PWD%" ^
/Execute "%EPF%" /C "%ARCH%" /DisableStartupMessages /Out "D:\Obmen\log.txt"
move /Y "%ARCH%" "D:\Obmen\done\"
Ключи, которые здесь используются:
| Ключ | Назначение |
|---|---|
ENTERPRISE | запуск в режиме 1С:Предприятие |
/S или /F | серверная база (сервер\база) или файловая (путь к каталогу) |
/N, /P | имя и пароль пользователя |
/Execute | открыть внешнюю обработку сразу после старта |
/C | строка параметра, в обработке она доступна через ПараметрЗапуска |
/DisableStartupMessages | подавить стартовые сообщения |
/Out | файл для служебных сообщений |
В обработке логику помещают в обработчик открытия основной формы. Она берёт путь из ПараметрЗапуска, распаковывает архив так, как в примере выше, загружает данные и завершает сеанс командой ЗавершитьРаботуСистемы(Ложь).
Для такой учётной записи заведите отдельного пользователя с минимальными правами. У него в Конфигураторе снимите флажок «Защита от опасных действий». Иначе предупреждение о внешнем файле остановит запуск, и окно будет висеть, пока его никто не закроет.
Пароль не храните в bat-файле открытым текстом. В примере он берётся из переменной окружения OBMEN_PWD. Ещё вариант — аутентификация операционной системы для служебного пользователя.
Если архив нужно просто распаковать до запуска 1С, это делает PowerShell без сторонних программ:
powershell -NoProfile -Command "Expand-Archive -Path 'D:\Obmen\in\data.zip' -DestinationPath 'D:\Obmen\work' -Force"
Выгрузка базы и обновления в ZIP
Сюда же относятся архивы с .dt и обновлениями конфигурации. 1С их из ZIP не читает:
- 📁
.dtраспакуйте, затем в Конфигураторе выберитеАдминистрирование → Загрузить информационную базу. Загрузка заменит все данные базы, поэтому сначала выгрузите текущую; - 🔄 дистрибутив обновления с сайта поддержки распакуйте и запустите
setup.exe: он положит.cfuв каталог шаблонов. После этого в Конфигураторе откройтеКонфигурация → Поддержка → Обновить конфигурациюи выберите файл обновления.
Переименовать .zip в .dt нельзя: это разные форматы, и Конфигуратор сообщит об ошибке формата файла.