Имя: Пароль:
1C
1С v8
Создание zip архива в 1с 8
0 ilya1cnik
 
19.08.16
14:02
Добрый день, подскажите, может кто по личному опыту сталкивался с таким вопросом. Создаю выгрузку в dbf файлы, все отлично проходит и файлы создаются. Заказчику надо отправлять их в архиве, предчувствия возмущения пользователей от дополнительной ручной работы решил создать эти архивы программно. Код ниже

    Архив = Новый ЗаписьZipФайла(ПолныйПутьАрхив, "", "", МетодСжатияZIP.Сжатие, УровеньСжатияZIP.Максимальный, МетодШифрованияZIP.Zip20);
    Архив.Добавить(Файл.ПолноеИмя, РежимСохраненияПутейZIP.СохранятьОтносительныеПути);
    Архив.Добавить(Файл2.ПолноеИмя, РежимСохраненияПутейZIP.СохранятьОтносительныеПути);
    Архив.Добавить(Файл3.ПолноеИмя, РежимСохраненияПутейZIP.СохранятьОтносительныеПути);
    Архив.Добавить(Файл4.ПолноеИмя, РежимСохраненияПутейZIP.СохранятьОтносительныеПути);
    Архив.Записать();

все по синтаксис помощнику. Сам архив создается, пустой. Собственно два пути где ошибка...
1. Установлен 7-z и он не дружит с 1с.
2. Путь к файлам архива содержит Кириллицу.

может кто сталкивался и знает причину ошибки?
Спасибо!
1 Горогуля
 
19.08.16
14:05
3. файлы лежат на сервере, а ты смотришь в клиента
2 Горогуля
 
19.08.16
14:05
4. а какие файлы?
3 ilya1cnik
 
19.08.16
14:09
(1) (2) куда скидывать файлы пользователь сам выбирает, вот пример кода относительно первого файла

ИмяФайла = "1" +".dbf";
    ИмяФайла2 = "2" +".dbf";
    ИмяФайла3 = "3" +".dbf";
    ИмяФайла4 = "4" +".dbf";
        
    ИмяКаталога = Прав(СсылкаНаОбъект.Номер,6);
    ИмяАрхива = ИмяКаталога + ".zip";

    Док = СсылкаНаОбъект;
    
    Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
    Диалог = Новый ДиалогВыбораФайла(Режим);
    Диалог.Заголовок = "Выберите каталог для выгрузки...";
    Диалог.ПолноеИмяФайла = "";
    Диалог.ПредварительныйПросмотр = Истина;
    Диалог.Фильтр = "Формат DBF (*.dbf)|*.dbf";
    Если Диалог.Выбрать() Тогда
        ПутьДоФайла = Диалог.Каталог + "/" + ИмяКаталога ;
        СоздатьКаталог(ПутьДоФайла);
        ПолныйПуть = ПутьДоФайла + "/"+ ИмяФайла;
        ПолныйПуть2 = ПутьДоФайла + "/"+ ИмяФайла2;
        ПолныйПуть3 = ПутьДоФайла + "/"+ ИмяФайла3;
        ПолныйПуть4 = ПутьДоФайла + "/"+ ИмяФайла4;
        ПолныйПутьАрхив = ПутьДоФайла + "/"+ ИмяАрхива;

        Файл = Новый Файл(ПолныйПуть);
        Файл2 = Новый Файл(ПолныйПуть2);
        Файл3 = Новый Файл(ПолныйПуть3);
        Файл4 = Новый Файл(ПолныйПуть4);

    Иначе
        Отказ = Истина;
        Возврат "Файл не выгружен!";                  
    КонецЕсли;

    
    хВ = Новый xBase(ПолныйПуть);
    хВ.Кодировка =  КодировкаXBase.OEM;
    хВ.Поля.Добавить("INN","C",14,0);
    хВ.Поля.Добавить("DISTRIB","C",100,0);
    хВ.Поля.Добавить("DATEBEGIN","D",,0);
    хВ.Поля.Добавить("DATEEND","D",,0);
    хВ.Поля.Добавить("STORE","C",3,0);
    хВ.Поля.Добавить("STORETITLE","C",100,0);
    хВ.Поля.Добавить("EMAIL","C",50,0);
    
    
    Попытка
        Если Файл.Существует() Тогда
            //Сообщить("Файл "+ПолныйПуть+" - уже существует! Удалите");
            Возврат "Выгрузка невозжна, файл с таким именем существует!";
        Иначе
            хВ.СоздатьФайл(ПолныйПуть);
        КонецЕсли;
        
            хВ.Добавить();
            хВ.Кодировка =  КодировкаXBase.OEM;

            хВ.INN = "["+Док.Организация.ИНН+"]";
            хВ.DISTRIB = Док.Организация.Наименование;
            хВ.DATEBEGIN = Док.Дата;
            хВ.DATEEND = Док.Дата;
            хВ.STORE = "[0]";
            хВ.STORETITLE = Док.Склад;
            хВ.EMAIL = "[email protected]";
            хВ.Записать();  
            
    Исключение
        хВ.ЗакрытьФайл();
    КонецПопытки;
4 Горогуля
 
19.08.16
14:11
(3) ставлю на 3. код не смотрел
5 ilya1cnik
 
19.08.16
14:13
(4) Хорошо, рассмотрю такой вариант, спасибо за направление)
6 Горогуля
 
19.08.16
14:15
>"Выгрузка невозжна, файл с таким именем существует!"
это кто такой умный придумал? перезаписать файл - это бывает, это можно, не надо стесняться
7 Mauser
 
19.08.16
14:20
(6) Судя по
        ПолныйПуть = ПутьДоФайла + "/"+ ИмяФайла;
        ПолныйПуть2 = ПутьДоФайла + "/"+ ИмяФайла2;
        ПолныйПуть3 = ПутьДоФайла + "/"+ ИмяФайла3;
        ПолныйПуть4 = ПутьДоФайла + "/"+ ИмяФайла4;
        ПолныйПутьАрхив = ПутьДоФайла + "/"+ ИмяАрхива;

        Файл = Новый Файл(ПолныйПуть);
        Файл2 = Новый Файл(ПолныйПуть2);
        Файл3 = Новый Файл(ПолныйПуть3);
        Файл4 = Новый Файл(ПолныйПуть4);

Там такого в 4 раза больше
8 Горогуля
 
19.08.16
14:22
а я бы матом ругался, если б меня заставляли 4 раза имена файлов задавать
9 Chameleon1980
 
19.08.16
14:22
а слеш точно туда?
10 Горогуля
 
19.08.16
14:23
кстати, переменные ФайлХ зачем вообще?
11 Mauser
 
19.08.16
14:24
(10) Чтобы проверить Если Файл1.Существует() Тогда и так далее
Ты что, хочешь, чтобы все перепуталось???
12 ilya1cnik
 
19.08.16
14:26
(10) там 4 файла с разным содержимым, просто вопрос был в архиве)) сами dbf он отлично и безошибочно формирует)
13 Горогуля
 
19.08.16
14:26
(11) а, нуда. чтоб юзер знал, что удалять врукопашную
14 Горогуля
 
19.08.16
14:27
(12) с одной записью? неплохо
15 ilya1cnik
 
19.08.16
14:29
(14) Там каждый файл записывается поочередно
16 ilya1cnik
 
19.08.16
14:30
(14) Скинул пример формирования первого файла, чтоб понятно чего я хочу в архив добавить, там дальше много всего не хочу городить
17 Горогуля
 
19.08.16
14:31
(15) ты уже на сервере посмотрел? хотя нету там ни фига
18 Mauser
 
19.08.16
14:31
(13)
...
- Солнышко, мы сейчас с папой пойдём погулям, а чтобы скучно не было, мы тебе поставим послушать сказку.
Приходят через 30 минут и видят такую картину: их сынишка бъётся головой об стенку:
- Хочу! Хочу! Хочу!..
Родители в шоке. Одевают наушники:
- Хочешь, я расскажу тебе сказку? крх...
- Хочешь, я расскажу тебе сказку? крх...
- Хочешь, я расскажу тебе сказку? крх...
- Хочешь, я расскажу тебе сказку? крх...
19 Горогуля
 
19.08.16
14:34
я тут выгрузку делал в регламентированном формате. с полями У1..У5. так ломало писать стр.У1...стр.У5, что пришлось рисовать цикл. всего пять полей, да
20 Mauser
 
19.08.16
14:39
Кстати в (0) есть концептуальное такое буддийское, шифрование пустым паролем.
Мне нравится.
21 Горогуля
 
19.08.16
14:41
(20) и подсказка к нему в комментарии
22 IlyaSR
 
19.08.16
16:43
(18) ))) да, убил бы, если нужно так заполнять (8)