Форум программистов, компьютерный форум, киберфорум
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/43: Рейтинг темы: голосов - 43, средняя оценка - 4.91
 Аватар для Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
1C 8.x

Создать архив zip

16.01.2014, 19:51. Показов 9634. Ответов 55
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите почему в архив попадают только последние файлы а не все
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
МассивФайлов = НайтиФайлы(Файл, "*.txt");
    Для каждого ТекущийФайл из МассивФайлов Цикл
        ПолноеИмяФайл = СтрЗаменить(ТекущийФайл.Имя, "_",Символы.ПС);
        ИмяФайлаTXT = СтрПолучитьСтроку(ПолноеИмяФайл, 1);
        ФайлПТЗZip = "ptz.zip";
        ФайлПИТZip = "pit.zip";
        ФайлСЕГZip = "seg.zip";
        Если ИмяФайлаTXT = "пит" Тогда
            ЗаписьZIP =  Новый ЗаписьZipФайла(Файл + ?(Прав(Файл,1)="\","","\") + ФайлПИТZip);
            ЗаписьZIP.Добавить(Файл + ?(Прав(Файл,1)="\","","\") + ТекущийФайл.Имя);
            ЗаписьZIP.Записать();
        ИначеЕсли ИмяФайлаTXT = "птз" Тогда
            ЗаписьZIP =  Новый ЗаписьZipФайла(Файл + ?(Прав(Файл,1)="\","","\") + ФайлПТЗZip);
            ЗаписьZIP.Добавить(Файл + ?(Прав(Файл,1)="\","","\") + ТекущийФайл.Имя);
            ЗаписьZIP.Записать();
        ИначеЕсли ИмяФайлаTXT = "сег" Тогда
            ЗаписьZIP =  Новый ЗаписьZipФайла(Файл + ?(Прав(Файл,1)="\","","\") + ФайлСЕГZip);
            ЗаписьZIP.Добавить(Файл + ?(Прав(Файл,1)="\","","\") + ТекущийФайл.Имя);
            ЗаписьZIP.Записать();
        Иначе
            Предупреждение("Ошибка!");  
        КонецЕсли;
 
    КонецЦикла;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.01.2014, 19:51
Ответы с готовыми решениями:

ZIP-архив
1С:Предприятие 8.2. Подскажите, пожалуйста, необходимо сделать такую задачу: есть реквизит ФайлКартинки (тип ХранилищеЗначения), необходимо...

Создать zip архив
При нажатии на кнопку собирается csv файл и выдается пользователю на скачивание. Как сделать, чтоб этот файл выдавался заархивированным?...

Создать запароленый zip-архив
как создать архив zip с паролем? похоже универсального решения нет. может кто-то все же знает волшебную библиотеку?

55
 Аватар для Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
17.01.2014, 01:25  [ТС]
Студворк — интернет-сервис помощи студентам
duk337, исправил так

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("ИмяФайла",,"Имя файла");
    ТЗ.Колонки.Добавить("ПрефиксФайла",,"Префикс файла");
    ТЗ.Колонки.Добавить("ИмяАрхива",,"Имя архива");
    МассивФайлов = НайтиФайлы(Файл, "*.txt");
    Для каждого ТекущийФайл из МассивФайлов Цикл
        СтрокаТЗ = ТЗ.Добавить();
        ПолноеИмяФайл = СтрЗаменить(ТекущийФайл.Имя, "_",Символы.ПС);
        СтрокаТЗ.ИмяФайла = ТекущийФайл.Имя;
        СтрокаТЗ.ПрефиксФайла = СтрПолучитьСтроку(ПолноеИмяФайл, 1);
        Если СтрокаТЗ.ПрефиксФайла = "птз" Тогда
            СтрокаТЗ.ИмяАрхива = "ptz.zip";
        ИначеЕсли СтрокаТЗ.ПрефиксФайла = "пит" Тогда
            СтрокаТЗ.ИмяАрхива = "pit.zip";
        ИначеЕсли СтрокаТЗ.ПрефиксФайла = "сег" Тогда
            СтрокаТЗ.ИмяАрхива = "seg.zip";
        Иначе
            Предупреждение("Ошибка в имени архива!"); 
            Возврат;
        КонецЕсли; 
        ТЗ.Сортировать("ПрефиксФайла");
        Для каждого Стр Из ТЗ Цикл
            ЗаписьZIP =  Новый ЗаписьZipФайла(Файл + ?(Прав(Файл,1)="\","","\") + Стр.ИмяАрхива);
            СтруктураОтбор = Новый Структура("ПрефиксФайла",Стр.ПрефиксФайла);
            Строки = ТЗ.НайтиСтроки(СтруктураОтбор);
            Для каждого кСтр Из Строки Цикл
                Для каждого кол Из ТЗ.Колонки Цикл
                    ЗаписьZIP.Добавить(Файл + ?(Прав(Файл,1)="\","","\") + кСтр.ИмяФайла);  
                КонецЦикла; 
                ЗаписьZIP.Записать();
            КонецЦикла;
            КонецЦикла;
         КонецЦикла;
но выдает ошибку
{Форма.Форма.Форма(887)}: Ошибка при вызове метода контекста (Добавить)
ЗаписьZIP.Добавить(Файл + ?(Прав(Файл,1)="\","","\") + кСтр.ИмяФайла);
по причине:
Файл с таким именем в архиве уже существует: пит_лах_гбу_газ.txt - C:\Users\ermakov\Desktop\Разбор\16.01.20 14 - копия\отчет2\пит_лах_гбу_газ.txt


Добавлено через 6 минут
Dethmontt, спасибо за решение, но можете подсказать по моему коду как я делал что не так, мне охота понять в чем проблема
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
17.01.2014, 01:28
Цитата Сообщение от Ermak27 Посмотреть сообщение
мне охота понять в чем проблема
Это не реально...

Добавлено через 1 минуту
Лучше разберись как мой код работает, он раз в 100 читабильней чем последний предложенный тобой "вариант"
1
 Аватар для Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
17.01.2014, 01:31  [ТС]
Dethmontt, более менее понятно, только про Соответствие почитать, еще не работал с ним. А в предыдущем посте, где я сохранял по файлам тоже можно было использовать этот метод?
0
 Аватар для duk337
2956 / 1768 / 84
Регистрация: 03.11.2011
Сообщений: 8,280
17.01.2014, 01:32
Архивы=ТЗ.Скопировать();
Архивы.Свернуть("имяАрхива");
Для Каждого Ик Из Архивы Цикл
ЗаписьZIP = Новый ЗаписьZipФайла(<КаталогАрхива> + Ик.ИмяАрхива);
Отбор ТЗ
Цикл2 по массиву отбора ЗаписьZIP.Добавить(...) КонецЦикла2
ЗаписьZIP.Записать();
КонецЦикла

Делали же уже!
1
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
17.01.2014, 01:35
Цитата Сообщение от Ermak27 Посмотреть сообщение
Dethmontt, более менее понятно, только про Соответствие почитать, еще не работал с ним. А в предыдущем посте, где я сохранял по файлам тоже можно было использовать этот метод?
Ну в принципе да, если немного подшаманить...
0
17.01.2014, 01:35

Не по теме:

говорят, дятлы умирают от сотрясения мозга

0
17.01.2014, 01:36

Не по теме:

Цитата Сообщение от duk337 Посмотреть сообщение
говорят, дятлы умирают от сотрясения мозга
Видимо не все... :D

0
17.01.2014, 01:37

Не по теме:

я за себя начал уже опасаться :D

0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
17.01.2014, 01:39

Не по теме:

Ermak27, продолжай... Весело с тобой (иногда)



Добавлено через 1 минуту
Цитата Сообщение от Ermak27 Посмотреть сообщение
мне охота понять в чем проблема
Лучший способ понять что нужно делать это нарисовать для себя алгоритм на бумажке...
1
 Аватар для Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
17.01.2014, 01:43  [ТС]
Всем спасибо, я спать. Все спокойной ночи.
0
17.01.2014, 01:45

Не по теме:

Надо будет у админов поклянчить смайлик "Перекрестился"

0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
17.01.2014, 01:47
Название: 681451343.gif
Просмотров: 28

Размер: 32.7 Кб
0
 Аватар для duk337
2956 / 1768 / 84
Регистрация: 03.11.2011
Сообщений: 8,280
17.01.2014, 01:48
______
0
 Аватар для Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
17.01.2014, 08:55  [ТС]
я разобрался с кодом

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("ИмяФайла",,"Имя файла");
    ТЗ.Колонки.Добавить("ПрефиксФайла",,"Префикс файла");
    ТЗ.Колонки.Добавить("ИмяАрхива",,"Имя архива");
    МассивФайлов = НайтиФайлы(Файл, "*.txt");
    Для каждого ТекущийФайл из МассивФайлов Цикл
        СтрокаТЗ = ТЗ.Добавить();
        ПолноеИмяФайл = СтрЗаменить(ТекущийФайл.Имя, "_",Символы.ПС);
        СтрокаТЗ.ИмяФайла = ТекущийФайл.Имя;
        СтрокаТЗ.ПрефиксФайла = СтрПолучитьСтроку(ПолноеИмяФайл, 1);
        Если СтрокаТЗ.ПрефиксФайла = "птз" Тогда
            СтрокаТЗ.ИмяАрхива = "ptz.zip";
        ИначеЕсли СтрокаТЗ.ПрефиксФайла = "пит" Тогда
            СтрокаТЗ.ИмяАрхива = "pit.zip";
        ИначеЕсли СтрокаТЗ.ПрефиксФайла = "сег" Тогда
            СтрокаТЗ.ИмяАрхива = "seg.zip";
        Иначе
            Предупреждение("Ошибка в имени архива!"); 
            Возврат;
        КонецЕсли; 
                
        КопияТаб = ТЗ.Скопировать();
        КопияТаб.Свернуть("ПрефиксФайла,ИмяФайла,ИмяАрхива ");
 
        Для каждого Стр Из КопияТаб Цикл
            ЗаписьZIP =  Новый ЗаписьZipФайла(Файл + ?(Прав(Файл,1)="\","","\") + Стр.ИмяАрхива);
            СтруктураОтбор = Новый Структура("ПрефиксФайла",Стр.ПрефиксФайла);
            Строки = ТЗ.НайтиСтроки(СтруктураОтбор);
            Для каждого кСтр Из Строки Цикл
                Если кСтр.ИмяФайла = "" Тогда
                    КонецЕсли;
                    ЗаписьZIP.Добавить(Файл + ?(Прав(Файл,1)="\","","\") + кСтр.ИмяФайла);  
            КонецЦикла;
            ЗаписьZIP.Записать();
            КонецЦикла;
         КонецЦикла;
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
17.01.2014, 14:47
Браво... (всего то 54й пост)
0
о_____О
Эксперт 1С
 Аватар для OrkVasya
225 / 224 / 37
Регистрация: 19.11.2010
Сообщений: 1,061
17.01.2014, 15:12
Да, рекорд.
В файлы до сих пор записать пытаемся.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.01.2014, 15:12

Создать пустой ZIP архив с комментарием
Ребятушки, как создать пустой zip архив с комментарием? Так почему-то не работает: ZipOutputStream out = new...

Как создать архив ZIP на PErl?
Може кто подскажет как запихнуть в архив ZIP содержимое папки?

Программно создать zip-архив из txt-файла помощью WSH
Добрый день! Как программно создать zip-архив из txt-файла, используя объекты Windows Scripting Host ? И можно ли это сделать вообще?...

Как программно незаметно создать zip/rar архив и отправить на хост?
C++(лучше C++/CLI). Например: моя программа на компьютере с именем пользователя &quot;User01&quot;. Она берет файли из нужных мне папок и пакует...

Как создать ZIP-архив, который распаковывается сам в себя много раз?
Как можно сделать на python ZIP-архив, который распаковывается сам в себя много раз? Спасибо.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
56
Ответ Создать тему
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Video: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru