ZIP-архив в 1С: обновление, обмен, обработки и загрузка кодом
Содержание
Частая ошибка — искать в 1С кнопку «Загрузить ZIP». Такой универсальной команды нет: 1С:Предприятие 8.3 работает с тем, что лежит внутри архива. Сначала распакуйте ZIP и посмотрите расширение файлов: .cfu и .cf идут в Конфигуратор, .dt — в загрузку информационной базы, .epf и .erf — в дополнительные обработки, а архивы сообщений обмена программа распакует сама.
Исключения есть: синхронизация данных и программная загрузка через встроенный язык читают ZIP напрямую. Ниже по каждому случаю — куда нажимать и что проверить.
Что внутри архива и куда его загружать
Откройте архив любым архиватором или проводником Windows и посмотрите на содержимое. От него зависит маршрут.
| Что внутри ZIP | Что это | Куда загружать |
|---|---|---|
setup.exe и служебные файлы | Дистрибутив обновления конфигурации | Запустить установку шаблона, затем .cfu в Конфигуратор |
1cv8.cfu | Файл обновления | Конфигурация → Поддержка → Обновить конфигурацию |
1cv8.cf | Полная конфигурация | Конфигуратор, сравнение и объединение или загрузка |
*.dt | Выгрузка информационной базы | Администрирование → Загрузить информационную базу |
*.epf, *.erf | Внешняя обработка или отчёт | Дополнительные отчёты и обработки |
*.cfe | Расширение конфигурации | Список расширений |
Message_*.xml | Сообщение обмена | Синхронизация данных, распаковка не нужна |
Если в архиве лежит ещё один ZIP — распакуйте и его. Поставщики иногда упаковывают обработку вместе с инструкцией, а потом всё это ещё раз.
Способ 1. Обновление и выгрузка базы из ZIP через Конфигуратор
Конфигуратор не открывает ZIP. Ему нужен распакованный файл.
Обновление из дистрибутива с setup.exe
- Распакуйте архив в отдельную папку, например
D:\1C_upd\BP_new\. - Запустите
setup.exe. Установщик спросит каталог шаблонов. По умолчанию это%APPDATA%\1C\1cv8\tmplts. - Сделайте резервную копию базы .
- Откройте базу в Конфигураторе и выберите
Конфигурация → Поддержка → Обновить конфигурацию. - Укажите поиск в каталогах шаблонов или выбор файла обновления. Во втором случае найдите
1cv8.cfuв каталоге шаблонов, в папке с названием конфигурации и номером релиза. - Пройдите сравнение и объединение, затем
Конфигурация → Обновить конфигурацию базы данных.
Если вместо .cfu выбрать setup.exe или сам ZIP, Конфигуратор откажет: это не файл обновления.
Файл .cfu обновляет только с определённых релизов. Список допустимых исходных версий виден при выборе файла. Если ваш релиз туда не входит, нужен промежуточный дистрибутив.
Загрузка .dt из архива
Выгрузки баз почти всегда присылают в ZIP: .dt хорошо сжимается.
- Распакуйте
.dtна локальный диск, а не во временную папку архиватора. - Создайте новую пустую базу или откройте ту, которую можно перезаписать.
- В Конфигураторе:
Администрирование → Загрузить информационную базу, выберите файл.
Загрузка .dt полностью заменяет данные базы. Перед ней выгрузите текущую базу в отдельный .dt. Загрузка требует монопольного доступа: все пользователи должны выйти, иначе их сеансы придётся завершать.
Перед загрузкой сверьте версию платформы: выгрузку, сделанную на более новой платформе, старая может не принять. Номер версии отправителя спросите заранее, вместе с архивом.
Для теста на чужой выгрузке лучше всегда создавать новую базу. Так рабочие данные не пострадают от случайного клика по не той строке в списке.
Способ 2. ZIP в обмене данными: сообщения и правила
Здесь 1С работает с архивами сама. Ничего распаковывать руками не нужно.
Сообщения обмена через файл или FTP
В типовых конфигурациях на БСП (Бухгалтерия 3.0, УТ 11, ЗУП 3.1, КА, ERP) обмен настраивается в Администрирование → Синхронизация данных. При транспорте через сетевой каталог или FTP в настройках подключения есть флажок сжатия исходящих сообщений. Если он включён, программа кладёт в каталог ZIP вместо XML.
Принимающая база при синхронизации сама:
- 📥 находит архив сообщения в каталоге обмена;
- 📦 распаковывает его во временную папку;
- ✅ загружает XML и удаляет временные файлы.
Можно задать и пароль архива. Он должен совпадать в настройках обеих баз, иначе приём упадёт на распаковке.
Сжатие полезно при обмене через FTP и медленные каналы: XML с тысячами документов сжимается в разы.
Правила конвертации и универсальный обмен
Правила обмена для «Конвертации данных» часто приходят в ZIP. В настройке синхронизации правила можно загрузить из файла, а некоторые версии БСП принимают сразу архив с комплектом правил. Если форма не видит ZIP в фильтре выбора — распакуйте и загрузите .xml правил.
Обработка «Универсальный обмен данными в формате XML» читает XML-файл данных. Если вам прислали архив с выгрузкой из неё, распакуйте его и укажите XML в поле имени файла загрузки.
Способ 3. Внешняя обработка или отчёт в ZIP
Поставщики обработок почти всегда отдают их архивом: внутри .epf или .erf, иногда инструкция и пример файла.
Разовое открытие
- Распакуйте архив.
- В 1С откройте главное меню (кнопка с тремя полосками) →
Файл → Открыть. - Выберите
.epf. Платформа покажет предупреждение безопасности — подтверждайте, только если источник вам знаком.
Подключение к базе
Для постоянной работы обработку регистрируют: Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Нажмите «Создать» и выберите файл. Пункт виден, если в том же разделе включено использование дополнительных отчётов и обработок.
Расширения .cfe ставят иначе: Администрирование → Печатные формы, отчеты и обработки → Расширения, кнопка «Добавить из файла».
Внешняя обработка выполняется с правами пользователя и может менять любые данные. Обработку из неизвестного архива сначала проверьте в копии базы.
Способ 4. Загрузка ZIP кодом и через HTTP-сервис
Для своих задач (приём прайсов, сканов, выгрузок от контрагентов) архив разбирают встроенным языком. Платформа умеет это без внешних компонент: объект ЧтениеZipФайла читает архив, ЗаписьZipФайла создаёт.
Распаковка на сервере
Файл, который пользователь выбрал на своём компьютере, сначала попадает во временное хранилище. Для этого на клиенте вызывают асинхронный метод помещения файла (семейство «Поместить файл» / «Начать помещение файла»). Он возвращает адрес. Дальше работает сервер:
&НаСервереБезКонтекста
Функция РаспаковатьАрхив(АдресВХранилище)
ДанныеАрхива = ПолучитьИзВременногоХранилища(АдресВХранилище);
ИмяАрхива = ПолучитьИмяВременногоФайла("zip");
ДанныеАрхива.Записать(ИмяАрхива);
Каталог = ПолучитьИмяВременногоФайла();
СоздатьКаталог(Каталог);
Архив = Новый ЧтениеZipФайла(ИмяАрхива);
Файлы = Новый Массив;
Для Каждого Элемент Из Архив.Элементы Цикл
Файлы.Добавить(Каталог + ПолучитьРазделительПутиСервера() + Элемент.ПолноеИмя);
КонецЦикла;
Архив.ИзвлечьВсе(Каталог, РежимВосстановленияПутейФайловZIP.Восстанавливать);
Архив.Закрыть();
УдалитьФайлы(ИмяАрхива);
Возврат Файлы;
КонецФункции
Функция возвращает полные пути распакованных файлов. Дальше их читают как обычно: ТекстовыйДокумент, ЧтениеXML, табличный документ. После обработки удалите каталог через УдалитьФайлы(Каталог), иначе временная папка сервера будет расти.
Для архива с паролем передайте его вторым параметром: Новый ЧтениеZipФайла(ИмяАрхива, "пароль"). Проверить, зашифрован ли элемент, можно по свойству Зашифрован.
Обратная задача: собрать ZIP для отправки
Часто загрузка идёт в паре с выгрузкой: база принимает архив от контрагента и отвечает своим. Собрать ZIP на сервере так же просто:
&НаСервереБезКонтекста
Функция УпаковатьФайлы(МассивПутей)
ИмяАрхива = ПолучитьИмяВременногоФайла("zip");
Архив = Новый ЗаписьZipФайла(ИмяАрхива);
Для Каждого Путь Из МассивПутей Цикл
Архив.Добавить(Путь);
КонецЦикла;
Архив.Записать();
ДанныеАрхива = Новый ДвоичныеДанные(ИмяАрхива);
УдалитьФайлы(ИмяАрхива);
Возврат ПоместитьВоВременноеХранилище(ДанныеАрхива);
КонецФункции
Функция возвращает адрес во временном хранилище. На клиенте по нему файл отдают пользователю методом получения файла из хранилища, а на сервере двоичные данные можно сразу приложить к письму или отправить HTTP-запросом.
Пара практических деталей:
- 🗂 метод
Добавитьпринимает и маску вродеD:\out\*.xml— так проще, чем перебирать файлы циклом; - 🔐 пароль и метод шифрования задаются параметрами конструктора
ЗаписьZipФайла, если получатель требует закрытый архив; - 🧹 временные файлы удаляйте сразу, как в примере: на сервере с десятками пользователей они быстро занимают диск.
Приём ZIP через HTTP-сервис
Если архивы присылает внешняя система, удобнее HTTP-сервис. В Конфигураторе добавьте HTTP-сервис, шаблон URL и метод POST. Обработчик:
Функция ЗагрузкаАрхиваPOST(Запрос)
ДанныеАрхива = Запрос.ПолучитьТелоКакДвоичныеДанные();
ИмяАрхива = ПолучитьИмяВременногоФайла("zip");
ДанныеАрхива.Записать(ИмяАрхива);
Архив = Новый ЧтениеZipФайла(ИмяАрхива);
КоличествоФайлов = Архив.Элементы.Количество();
// здесь распаковка и разбор, как в примере выше
Архив.Закрыть();
УдалитьФайлы(ИмяАрхива);
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(СтрШаблон("Принято файлов: %1", Формат(КоличествоФайлов, "ЧГ=0")));
Возврат Ответ;
КонецФункции
Сервис публикуется на веб-сервере (IIS или Apache) через публикацию базы. Внешняя система отправляет архив телом запроса с заголовком Content-Type: application/zip. Пользователь, под которым приходит запрос, должен иметь права на нужные объекты.
Сначала проверяйте размер и число элементов архива, потом распаковывайте. Защита от «zip-бомбы» — простое сравнение суммы ИсходныйРазмер всех элементов с разумным пределом.
Без ручных действий: командная строка, FTP и облако
Когда архивы приходят регулярно, их разбирают по расписанию.
Распаковка и загрузка .dt пакетным файлом
В Windows 10 и Windows Server 2016 и новее ZIP распаковывает PowerShell. Дальше вызывается Конфигуратор в пакетном режиме:
@echo off
set ZIP=D:\1C_in\base.zip
set OUT=D:\1C_in\unpacked
powershell -NoProfile -Command "Expand-Archive -Path '%ZIP%' -DestinationPath '%OUT%' -Force"
"C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe" DESIGNER /F"D:\Bases\Test" /N"Администратор" /P"" /RestoreIB "%OUT%\base.dt" /Out"D:\1C_in\log.txt"
Вместо 8.3.xx.xxxx подставьте установленную версию платформы. Для серверной базы вместо /F указывают /S"сервер\база". Для обновления конфигурации из .cfu используют ключ /UpdateCfg, затем /UpdateDBCfg.
/RestoreIB заменяет данные базы и требует монопольного доступа. Активные сеансы будут мешать — запускайте ночью, предупредив пользователей.
FTP, сетевые папки и облачные хранилища
| Вариант | Как работает | Когда подходит |
|---|---|---|
| Синхронизация через FTP | Транспорт обмена в БСП, архивы сообщений кладутся на FTP-сервер | Филиалы без общей сети |
| Сетевой каталог | Тот же обмен через общую папку | Базы в одной локальной сети |
| Облачная папка (Яндекс Диск и т. п.) | Клиент облака синхронизирует папку, 1С видит её как локальный каталог | Небольшие объёмы, без своего FTP |
| Регламентное задание | Код из способа 4 по расписанию читает каталог с архивами | Свой приём файлов от контрагентов |
Облачную папку 1С не знает как облако. Для неё это обычный каталог на диске, поэтому важно, чтобы клиент синхронизации успел докачать архив до запуска обмена. Иначе 1С попытается открыть недокачанный файл.
Ошибки при загрузке ZIP в 1С
Отдельно про .dt. Если загрузка падает в середине, проверьте свободное место: распакованная база в несколько раз больше архива, а при загрузке нужен ещё запас под временные файлы СУБД или файловой базы.