Имя: Пароль:
1C
 
Упаковка файла в ZIP архив
0 vol4arka
 
07.02.10
00:16
Можно ли стандартными средствами 1с упаковать файл в ZIP архив?
1 Скользящий
 
07.02.10
00:20
пакетный режим.
2 zak555
 
07.02.10
00:20
(0) да : 1cv7.md, 1cv7.dd + *.dbf
не только ZIPом )))
3 vol4arka
 
07.02.10
00:29
Не для архивации базы, просто упаковать созданный файл
4 zak555
 
07.02.10
00:30
(3) стоп,
"упаковать" что ?
5 Ковычки
 
07.02.10
00:30
можно стандартными средствами виндуз
6 Ковычки
 
07.02.10
00:30
в коде 1С
7 zak555
 
07.02.10
00:30
(5) нет - это не этот метод! ))
8 vol4arka
 
07.02.10
00:32
В коде 1С стандартными средствами виндуз подходит. Подскажешь?
9 Ковычки
 
07.02.10
00:32
если понимать под стандартными средствами код 1с - то это тот метод ))
10 Ковычки
 
07.02.10
00:32
(8) не единожды на форуме было
11 Ковычки
 
07.02.10
00:35
болванка

//*******************************************

Процедура Сформировать()
   Архив="c:\temp\Моя новая папка.zip";
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   ФСО=СоздатьОбъект("scripting.filesystemobject");
   Файл=ФСО.opentextfile(Архив,2,-1);
   Скрипт.AddObject("Файл",Файл);
   Скрипт.Eval("Файл.write(String.fromCharCode(80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))");
   Файл.Close();
   Шел=СоздатьОбъект("shell.application");
   Папка=Шел.namespace(Архив);
   Папка.copyhere("c:\temp\tmp\");
   Стр="Создаем архив - "+Архив;
   Пока (ВвестиСтроку(Стр,Стр,СтрДлина(Стр),0,1)<>0) и (ФС.СуществуетФайл(Архив)=0) Цикл
   КонецЦикла;
КонецПроцедуры


//*******************************************

Функция ПросмотрРекурс(Архив="",Путь="",Сп)
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Шел=СоздатьОбъект("shell.application");
   Папка=Шел.namespace(Архив+"\"+Путь);
   Скрипт.AddObject("Папка",Папка);
   Вложения=Скрипт.Eval("new Enumerator(Папка.Items())");
   Пока Вложения.atEnd(0)=0 Цикл
       Сп.ДобавитьЗначение(Вложения.item(0).path);
       Если Вложения.item(0).IsFolder=-1 Тогда
           ПросмотрРекурс(Архив,Вложения.item(0).path,Сп);
       КонецЕсли;
       Вложения.moveNext(0);
   КонецЦикла;
КонецФункции

Функция Просмотр()
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Архив="c:\temp\Моя новая папка.zip";
   Путь="tmp";
   Сп=СоздатьОбъект("СписокЗначений");
   ПросмотрРекурс(Архив,Путь,Сп);
   СпВыб=СоздатьОбъект("СписокЗначений");
   Для к=1 По Сп.РазмерСписка() Цикл
       ПутьФайла=Сп.ПолучитьЗначение(к);
       Расширение=СтрЗаменить(ПутьФайла,".","
       |");
       Расширение=СтрПолучитьСтроку(Расширение,СтрКоличествоСтрок(Расширение));
       Расширение=?(Расширение=ПутьФайла,"",Расширение);
       Если Расширение="vbs" Тогда
           Шел=СоздатьОбъект("Shell.Application");
           Папка=Шел.NameSpace(Архив);
           Файл=Папка.ParseName(ПутьФайла);
           Темп=Шел.NameSpace(КаталогВременныхФайлов());
           ФС.УдалитьФайл(КаталогВременныхФайлов()+СтрЗаменить(Файл.path,"/","\"));
           Темп.CopyHere(Файл);
           СпВыб.ДобавитьЗначение(КаталогВременныхФайлов()+СтрЗаменить(Файл.path,"/","\"));
       КонецЕсли;
   КонецЦикла;
   Текст=СоздатьОбъект("Текст");
   Для к=1 По СпВыб.РазмерСписка() Цикл
       Текст.Открыть(СпВыб.ПолучитьЗначение(к));
       Сообщить("<<----"+СпВыб.ПолучитьЗначение(к)+"---->>");
       Для н=1 По Текст.КоличествоСтрок() Цикл
           Сообщить(Текст.ПолучитьСтроку(н));
       КонецЦикла;
       Сообщить("<<-------->>");
       Текст.Очистить();
       ФС.УдалитьФайл(СпВыб.ПолучитьЗначение(к));
   КонецЦикла;
КонецФункции    // Просмотр
12 vol4arka
 
07.02.10
00:37
Спасибо
13 Aleksey_3
 
07.02.10
01:01
А чем КомандаСистемы то не угодила?
14 f333
 
07.02.10
01:10
(13) код в студию)
15 Aleksey_3
 
07.02.10
01:57
ФС.УстТекКаталог(ПутьКБазеПриВыгрузке);
ИмяАрхива=База.ПрефиксАрхиваВыгрузки;
ИмяАрхива=Сокрлп(ИмяАрхива)+Строка(НомерПакетаВыгрузкиДляАрхива)+".7z";
//перенос файлов в архив
Команда=""""+КаталогИБ()+"7za.exe"""+" a -y "+ИмяАрхива+" "+Строка(НомерПакетаВыгрузкиДляАрхива)+".mod";

КомандаСистемы(Команда);

Кусок из рабочий конфы пакую модовские файлы с помощью 7z
16 Aleksey_3
 
07.02.10
01:59
Команда="7za a -r -y -x!*.cdx -x!*.lck -x!*.lst -x!new_stru\*.* """+ФайлАрхива+"""";
КомандаСистемы(Команда);

Упаковка БД без cdx, lck, lst файлов и без каталога new_stru
17 Aleksey_3
 
07.02.10
02:00
КомандаСистемы(<?>);
Синтаксис:
КомандаСистемы(<СтрокаКоманды>)
Назначение:
Вызывает на исполнение команду DOS.
Параметры:
<СтрокаКоманды> - строка, содержащая команду.
Последовательность поиска программы (если не задан путь):
 текущий системный каталог;
 каталог Windows;
 системный каталог Windows;
 все каталоги, указанные в переменной PATH.
18 Ковычки
 
07.02.10
02:22
(15) 7za.exe - компонента системы ?
19 Aleksey_3
 
07.02.10
02:25
(18) Компонента 7z, точнее консольная ее часть
20 Ковычки
 
07.02.10
02:27
(19) зачем ?

виндувз предоставляет 3 инструмента для создания архивов
21 Ковычки
 
07.02.10
02:42
да забыл - в виндузе есть еще довольно извращенный метод создавать gzip штатно
22 Aleksey_3
 
07.02.10
02:42
Ну да, там где можно будет обойтись пару строчек, мы будем писать код на пару страниц? Почему тогда сразу не писать на языке 1С процедуру сжатия и распаковки?
Или к примеру подключимся по оле к 8-ке. А 8-ка уже умеет работать с zip архивами. И мы получим чистый код на 1С
23 Ковычки
 
07.02.10
02:49
(22)
это пару страниц ? (можно и короче)

Процедура Сформировать()
   Архив="c:\temp\Моя новая папка.zip";
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   ФСО=СоздатьОбъект("scripting.filesystemobject");
   Файл=ФСО.opentextfile(Архив,2,-1);
   Скрипт.AddObject("Файл",Файл);
   Скрипт.Eval("Файл.write(String.fromCharCode(80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))");
   Файл.Close();
   Шел=СоздатьОбъект("shell.application");
   Папка=Шел.namespace(Архив);
   Папка.copyhere("c:\temp\tmp\");
   Стр="Создаем архив - "+Архив;
   Пока (ВвестиСтроку(Стр,Стр,СтрДлина(Стр),0,1)<>0) и (ФС.СуществуетФайл(Архив)=0) Цикл
   КонецЦикла;
КонецПроцедуры
24 Torquader
 
07.02.10
10:30
(23) А кто сказал, что использование COM-компонента MSScriptControl - это стандартными средствами 1С, чем это лучше использования 7zip ?
Конечно, можно радоваться, что в вашем случае это будет работать без установки сторонней программы, но, например, на Windows 2000 оно не заработает. И если 7zip можно легко скачать, что заставить работать такой код на Windows 2000 будет достаточно сложно.
25 Ковычки
 
07.02.10
12:48
(24) в вин 2000 заработает, заработает и в вин 9х (но качать тогда)
26 Ковычки
 
07.02.10
12:49
кстати можно обойтись и без нее
27 Ковычки
 
07.02.10
13:18
один из вариантов (самый отвязный)

echo off
set zip=new.zip
echo off && (
   echo n %zip%
   echo f 100 116 50,4b,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   echo r cx
   echo 16
   echo w
   echo q
   ) | debug 2>&1> nul
28 Torquader
 
07.02.10
13:56
У меня 2000-ная в Zip-папки не заходила.
А создать пустой ZIP можно просто скопировав с шаблона.
Программист всегда исправляет последнюю ошибку.