Добрый день!
Подскажите, как извлечь текст из zip который находится на по ссылке на сайте 1С? Содержимое zip в формате xml.
Надо сначала его извлечь из zip, а потом прочитать чxml?
---
```1c
    Имя = ПолучитьИмяВременногоФайла("zip");
    КопироватьФайл("http://downloads.1c.ru/ipp/ITSREPV/V8Update/Configs/HRM/31/83/v8upd11.zip", Имя);
    ЧтениеZIP = Новый ЧтениеZipФайла(Имя);
    ЧтениеZIP.ИзвлечьВсе(КаталогВременныхФайлов(), РежимВосстановленияПутейФайловZIP.Восстанавливать);
    ЧтениеZIP.Закрыть();
```

Распаковывает в папку %Temp%
---
```1c
    КаталогДляРаспаковки = КаталогВременныхФайлов()+"/src/";
    СоздатьКаталог(КаталогДляРаспаковки);
    ЧтениеZip = Новый ЧтениеZipФайла(ИмяФайла);
    ЧтениеZip.ИзвлечьВсе(КаталогДляРаспаковки, РежимВосстановленияПутейФайловZIP.Восстанавливать);
```
---
Как бы логично... Чтобы погладить кота Шредингера - его надо сначала достать из коробки. Ну, если он там есть.
---
Не получается. Не могу пока с сайта получить файл. Хочу воспользоваться копированием. Но ругается, что нет такого каталога.

```1c
    КопироватьФайл("downloads.1c.ru/ipp/ITSREPV/V8Update/Configs/HRM/31/83/v8upd11.zip", КаталогВременныхФайлов() + "ИмяФайла");
```
---
```1c
    downloads.1c.ru/ipp/ITSREPV/V8Update/Configs/HRM/31/83/v8upd11.zip
```

заменить на

```1c
    http://downloads.1c.ru/ipp/ITSREPV/V8Update/Configs/HRM/31/83/v8upd11.zip
```
---
Да, точно! Спасибо. Скопировать получилось.
---
Теперь пробую извлечь, ругается, что нет такого файла - Файл не обнаружен 'v8cscdsc.xml'. Хотя в zip он есть.

```1c
    ЧтениеZip = Новый ЧтениеZipФайла(ИмяФайла);
    ЧтениеZip.ИзвлечьВсе(ИмяФайла +"\", РежимВосстановленияПутейФайловZIP.Восстанавливать);
```
---
ИмяФайла это что?
В первой строке это должен быть путь к zip, а во второй строке путь к папке, в которую нужно распаковать.
А у вас получается во второй строке путь к файлу + еще слэш, как-то странно.
---
ИмяФайла это КаталогВременныхФайлов() + "ИмяФайла". У меня это временный файл, я его не скачиваю, а хочу открыть временно и получить последнюю версию. Можно как то без каталога или может как то временный каталог создать?
---
```1c
    Имя = ПолучитьИмяВременногоФайла("zip");
    КопироватьФайл("http://downloads.1c.ru/ipp/ITSREPV/V8Update/Configs/HRM/31/83/v8upd11.zip", Имя);
    ЧтениеZIP = Новый ЧтениеZipФайла(Имя);
    ЧтениеZIP.ИзвлечьВсе(КаталогВременныхФайлов(), РежимВосстановленияПутейФайловZIP.Восстанавливать);
    ЧтениеZIP.Закрыть();
```

Распаковывает в папку %Temp%
---
Да, так работает. А как теперь прочитать xml? "Имя" - это же файл zip, а какое теперь имя у распакованного файла xml?
---
а какое теперь имя у распакованного файла xml? МойФайл.xml конечно же ))
---
Путь к xml будет КаталогВременныхФайлов() + v8cscdsc.xml
---
(9)
Спасибо, все работает. Теперь на как то этот xml прочитать и найти последнюю версию..
---
методов работы с XML в 1С много, см. https://infostart.ru/public/311011/
Я бы в данном случае работал с ДокументDOM и Xpath.
---
Xpath для получения последней версии будет такой

```1c
    //v8u:updateList/v8u:update[last()]/v8u:version
```
---
v8u:updateList/v8u:update[last()]/v8u:version
Точно ли тут будет и последняя устаревшая версия ЗУП 3.1.14? Мне выше тут прислали ссылку, которую я сейчас и распаковала, но оказалось, что в ней только новый ЗУП, блин.
На сайте https://releases.1c.ru/project/HRM30 версии идут через одну примерно. А в xml скачанном только 3.1.18.
---
В этом файле сортировка просто по номеру версии, а не по дате выхода. Т.к. у ЗУП идут 2 параллельные ветки, то выпускаются они параллельно, в файле информации о дате выхода нет. Поэтому, если нужно именно по дате выхода, то с помощью файла не получится.
---
тут можно посмотреть пример:
https://infostart.ru/1c/articles/519499/
---
Хаха. Это практически мой написанный код сейчас. Остался вопрос откуда берется xml.
---
Там в коде все есть:

```1c
    // Качаем v8cscdsc.xml в виде v8upd11.zip
    // Создание HTTP-соединения с сервером обновлений
    СерверОбновлений = Новый HTTPСоединение("downloads.1c.ru",,мИтсЛогин,мИтсПароль,);
    ЗапросКСерверуОбновлений = Новый HTTPЗапрос("/ipp/ITSREPV/V8Update/Configs/"+мТипКонфигурации+"/"+мВерси­яРелиза+"/"+мВерсияПлатформы+"/v8upd11.zip");
    СерверОбновлений.Получить(ЗапросКСерверуОбновлений,ФайлСписокОбновленийZIP);
```

Там же определяется не крайняя возможная версия, а ищется крайняя версия, в которой указана текущая версия, с которой можно обновиться.
 Вот на нее и происходит обновление.

```1c
    ИначеЕсли ЧтениеXML.Имя = "v8u:target" Тогда
    ЧтениеXML.Прочитать();
    Если ЧтениеXML.Значение = ТекущаяВерсияКонфигурации Тогда //279 Новые в конце. на последнюю полученную и будем обновяться
    ВерсияДляОбновления = Версия;
    КонецЕсли;
```
---
Там в коде все есть:
// Качаем v8cscdsc.xml в виде v8upd11.zip
    // Создание HTTP-соединения с сервером обновлений
    СерверОбновлений = Новый HTTPСоединение("downloads.1c.ru",,мИтсЛогин,мИтсПароль,);
    ЗапросКСерверуОбновлений = Новый HTTPЗапрос("/ipp/ITSREPV/V8Update/Configs/"+мТипКонфигурации+"/"+мВерси­­яРелиза+"/"+мВерсияПлатформы+"/v8upd11.zip");
    СерверОбновлений.Получить(ЗапросКСерверуОбновлений,ФайлСписокОбновленийZIP);

Да, такой же путь и у меня.

(21) Там же определяется не крайняя возможная версия, а ищется крайняя версия, в которой указана текущая версия, с которой можно обновиться.
Вот на нее и происходит обновление.
Проблема в том, что нужно 2 версии скачать. И старую и новую.
---
что значит старую?
---
Ну сейчас ЗУП поддерживается в 2-х версиях. Одна так сказать старая, отмирающая, но пока она обновляется. И новая. Т.е. версий 2. И так будет и дальше. Та которая сейчас новая, через какое то время тоже будет уходить и на ее место будет новая. Но уходить не сразу, а постепенно. И вот пока этот процесс идет я ее называю старой.
---
тут сами решаете о стратегии. Если не нужно поддерживать "старый" релиз, то смотрите на наибольший номер релиза.
Смотрите посекторно.
---
Пока у меня нет стратегии. Хочу чтобы было правильно и не надо было на это отвлекаться еще помимо моих других обязанностей и проверять наличие выхода обновлений и менять что в константах.
---
```1c
    КаталогДляРаспаковки = КаталогВременныхФайлов()+"/src/";
    СоздатьКаталог(КаталогДляРаспаковки);
    ЧтениеZip = Новый ЧтениеZipФайла(ИмяФайла);
    ЧтениеZip.ИзвлечьВсе(КаталогДляРаспаковки, РежимВосстановленияПутейФайловZIP.Восстанавливать);
```