Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Решение для упаковки файла (число прочтений - 3796 )
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Решение для упаковки файла
25. Июня 2009 :: 13:09
Печать  
Подскажите, есть ли решение, для того, чтобы сформировать .xls файл и упаковать его?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Решение для упаковки файла
Ответ #1 - 25. Июня 2009 :: 13:14
Печать  
Сформировать xls из 1с можно с помощью
1с (Таблица.Записать() ), Йоксел, ADO

Упаковать winrar
  
Наверх
 
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Решение для упаковки файла
Ответ #2 - 25. Июня 2009 :: 13:15
Печать  
Как сделать по отдельности я знаю, как это сделать совместно из обработки?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Решение для упаковки файла
Ответ #3 - 25. Июня 2009 :: 13:22
Печать  
Ну если против Йокселя ты ничего не имеешь то схема примерно следующая:
1. Формируешь табличку в 1С (Моксель)
2. Создаешь объект Йокселя и загружаешь в неё табличку из п.1
3. Йокселем сохраняешь эту табличку в формате xls
4. 1с++ поможет тебе упаковать этот файл.

Всё делается программно. Строк примерно столько же, сколько в этом посте Подмигивание (формирование самой таблички не считается)
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Решение для упаковки файла
Ответ #4 - 25. Июня 2009 :: 13:24
Печать  
В чем проблема сохраняешь в фай
После этого файл упаковываешь win-rar

C:\Program Files\WinRAR\winrar.exe a  ИмяАрхива  -df -m5 -s Имя_xls

Имена для надежности лучше полные ( с директориями )
Т.к. взависимости от того как вызовешь из 1с эту команду текущая директория будет разной.
  
Наверх
 
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Решение для упаковки файла
Ответ #5 - 25. Июня 2009 :: 13:30
Печать  
Спасибо, буду пробовать.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Решение для упаковки файла
Ответ #6 - 25. Июня 2009 :: 13:32
Печать  
Цитата:
1с++ поможет тебе упаковать этот файл.

Век живи век учись. Незнал или забыл о таком способе.
Есть плюсы и минусы перед winrar.
winrar лучше жмет
для 1с++ не нужно никакого другого софта.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Решение для упаковки файла
Ответ #7 - 25. Июня 2009 :: 13:45
Печать  
Z1 писал(а) 25. Июня 2009 :: 13:32:
Цитата:
1с++ поможет тебе упаковать этот файл.

Век живи век учись. Незнал или забыл о таком способе.
Есть плюсы и минусы перед winrar.
winrar лучше жмет
для 1с++ не нужно никакого другого софта.

Для меня был один главный минус winrar - я не знал когда он заканчивает упаковывать/распаковывать.
Если знаешь, как это сделать, поделись, пожалуйста.

У меня была примерно следующая задача:
из внешнего мира приходила упакованная табличка.
Мне надо было её программно распаковать и дальше шпарить. Как сделать (без ВК)? Единственное, что приходило в голову, так это повесить перед юзером предупреждение с таймаутом типа "Подожди, распаковывается" с заранее завышенным временем. После чего продолжается выполняться остальной код.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Решение для упаковки файла
Ответ #8 - 25. Июня 2009 :: 14:04
Печать  
JohnyDeath писал(а) 25. Июня 2009 :: 13:45:
Z1 писал(а) 25. Июня 2009 :: 13:32:
Цитата:
1с++ поможет тебе упаковать этот файл.

Век живи век учись. Незнал или забыл о таком способе.
Есть плюсы и минусы перед winrar.
winrar лучше жмет
для 1с++ не нужно никакого другого софта.

Для меня был один главный минус winrar - я не знал когда он заканчивает упаковывать/распаковывать.
Если знаешь, как это сделать, поделись, пожалуйста.

У меня была примерно следующая задача:
из внешнего мира приходила упакованная табличка.
Мне надо было её программно распаковать и дальше шпарить. Как сделать (без ВК)? Единственное, что приходило в голову, так это повесить перед юзером предупреждение с таймаутом типа "Подожди, распаковывается" с заранее завышенным временем. После чего продолжается выполняться остальной код.

Запустить приложение с ожиданием.

Можно сделать либо wsh.(параметры не помню )

Я написал свой старт  через Win Api
в интернете валяется мой com объект по сохранению бинарных файлов в 1с77. Там есть метод запускающий приложение
и ожидающий его завершения. ( если нужно будет то пиши в личку )

Кстати можно добавить в 1с++ метод
ЗапуститьПриложение_с_ожиданием_завершения
Сделать легко.  Пользы для всех будет много. Но это к
разработчикам 1с++.

  
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Решение для упаковки файла
Ответ #9 - 17. Июля 2009 :: 06:32
Печать  
JohnyDeath писал(а) 25. Июня 2009 :: 13:45:
Z1 писал(а) 25. Июня 2009 :: 13:32:
Цитата:
1с++ поможет тебе упаковать этот файл.

Век живи век учись. Незнал или забыл о таком способе.
Есть плюсы и минусы перед winrar.
winrar лучше жмет
для 1с++ не нужно никакого другого софта.

Для меня был один главный минус winrar - я не знал когда он заканчивает упаковывать/распаковывать.
Если знаешь, как это сделать, поделись, пожалуйста.

У меня была примерно следующая задача:
из внешнего мира приходила упакованная табличка.
Мне надо было её программно распаковать и дальше шпарить. Как сделать (без ВК)? Единственное, что приходило в голову, так это повесить перед юзером предупреждение с таймаутом типа "Подожди, распаковывается" с заранее завышенным временем. После чего продолжается выполняться остальной код.


У меня это вот так реализовано
Код
Выбрать все
// Для использования вместо функции "КомандаСистемы()", потому как под долбаной Win9x она не может выполнить
// командную строку длиной более 255 символов. А "ЗапуститьПриложение()" не ожидает завершения запущеной программы,
// и к примеру для архивирования не годится нихрена :( Поэтому пользуйте ЗапуститьПриложениеМодально()
//intWindowStyle
//0 Hides the window and activates another window.
//1 Activates and displays a window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when displaying the window for the first time.
//2 Activates the window and displays it as a minimized window.  
//3 Activates the window and displays it as a maximized window.  
//4 Displays a window in its most recent size and position. The active window remains active.
//5 Activates the window and displays it in its current size and position.
//6 Minimizes the specified window and activates the next top-level window in the Z order.
//7 Displays the window as a minimized window. The active window remains active.
//8 Displays the window in its current state. The active window remains active.
//9 Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window.
//10 Sets the show-state based on the state of the program that started the application.
Функция ЗапуститьПриложениеМодально(cmdLine, intWindowStyle = 0, bWaitOnReturn = -1) Экспорт
	WshShell = CreateObject("WScript.Shell");
	Возврат WshShell.Run(cmdLine, intWindowStyle, bWaitOnReturn);
КонецФункции
 



Когда-то очень давно понадобилось именно для архивации/розархивации ....
Кстати при параметре intWindowStyle по умолчанию не мелькает "досовское" окошко архиватора  Улыбка
  
Наверх
ICQ  
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Решение для упаковки файла
Ответ #10 - 20. Августа 2009 :: 10:01
Печать  
avgreen писал(а) 17. Июля 2009 :: 06:32:
У меня это вот так реализовано
Код
Выбрать все
// Для использования вместо функции "КомандаСистемы()", потому как под долбаной Win9x она не может выполнить
// командную строку длиной более 255 символов. А "ЗапуститьПриложение()" не ожидает завершения запущеной программы,
// и к примеру для архивирования не годится нихрена :( Поэтому пользуйте ЗапуститьПриложениеМодально()
//intWindowStyle
//0 Hides the window and activates another window.
//1 Activates and displays a window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when displaying the window for the first time.
//2 Activates the window and displays it as a minimized window.  
//3 Activates the window and displays it as a maximized window.  
//4 Displays a window in its most recent size and position. The active window remains active.
//5 Activates the window and displays it in its current size and position.
//6 Minimizes the specified window and activates the next top-level window in the Z order.
//7 Displays the window as a minimized window. The active window remains active.
//8 Displays the window in its current state. The active window remains active.
//9 Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window.
//10 Sets the show-state based on the state of the program that started the application.
Функция ЗапуститьПриложениеМодально(cmdLine, intWindowStyle = 0, bWaitOnReturn = -1) Экспорт
	WshShell = CreateObject("WScript.Shell");
	Возврат WshShell.Run(cmdLine, intWindowStyle, bWaitOnReturn);
КонецФункции
 



Когда-то очень давно понадобилось именно для архивации/розархивации ....
Кстати при параметре intWindowStyle по умолчанию не мелькает "досовское" окошко архиватора  Улыбка

Я тоже замечательно пользую метод Run() WScript.Shell и для работы с WinRAR-ом и для отправки по FTP.

Даю код целиком (+ curl в архиве), мало ли, кому пригодится:
Код
Выбрать все
ИмяАрхива="FTP"+НомМаг+СтрЗаменить(СокрЛП(КонПериод),".","");//+".zip";
Если ФС.СуществуетФайл(ПутьВыгрузки+ИмяАрхива+".zip")=1 Тогда ФС.УдалитьФайл(ПутьВыгрузки+ИмяАрхива+".zip"); КонецЕсли;
СтрФайлы="";
тзСписокФайлов.ВыбратьСтроки();
Пока тзСписокФайлов.ПолучитьСтроку()=1 Цикл
	СтрФайлы=СтрФайлы+?(тзСписокФайлов.НомерСтроки=1,""," ")+СокрЛП(тзСписокФайлов.ИмяФайлаВставки);
КонецЦикла;
Попытка
	// Пример команды: ("cmd.exe",boolShowWindow,boolWaitComplete),
	//					где boolShowWindow - показывать/прятать окно консоли (1/0),
	//					boolWaitComplete - ждать/не ждать окончания выполнения (1/0), для получения возврата - Ждать!
	РезАрх=oShell.Run(СокрЛП("C:\Progra~1\WinRAR\WinRAR.exe m -afzip -ep -ibck -inul -o+ "+ПутьВыгрузки+ИмяАрхива+" "+СтрФайлы),0,1);
	Если РезАрх=0 Тогда Информация("Создан zip-архив "+ИмяАрхива+"""");
	Иначе Информация("Ошибка создания zip-архива! Код ошибки: "+СокрЛП(РезАрх)); Возврат;
	КонецЕсли;
Исключение
	Информация("Критическая ошибка при создании zip-архива!"); Возврат;
КонецПопытки;
// Отправим по FTP
Попытка
	РезФТП=oShell.Run(СокрЛП(""""+КаталогИБ()+"curl.exe"""+" -T """+ПутьВыгрузки+ИмяАрхива+".zip"""+" ftp://user:password@10.10.10.10/reports/"),0,1);
	Если РезФТП=0 Тогда Информация("Отправка """+ИмяАрхива+".zip"""+" по FTP успешно завершена",,,,?(РежимВыполнения="Ручной","Сообщить","")); ФС.УдалитьФайл(ПутьВыгрузки+ИмяАрхива+".zip");
	Иначе
		ТхтОшибка="";
		Попытка
			Тхт=СоздатьОбъект("Текст"); Тхт.Открыть(КаталогИБ()+"CurlErrors.txt");
			ТхтОшибка=Тхт.ПолучитьСтроку(РезФТП);
		Исключение КонецПопытки;
		Информация("Ошибка отправки по FTP! Код ошибки: "+РезФТП+" - "+СокрЛП(ТхтОшибка));
	КонецЕсли;
Исключение
	Информация("Критическая ошибка при отправке по FTP!");
КонецПопытки;
 


P.S.: В процедуре "Информация()" я записываю в журнал регистрации и/или уведомляю пользователя
  

curl.rar ( 148 KB | Загрузки )
Наверх
IP записан
 
MrDen
Junior Member
**
Отсутствует



Сообщений: 50
Местоположение: Краснодар
Зарегистрирован: 19. Ноября 2008
Пол: Мужской
Re: Решение для упаковки файла
Ответ #11 - 21. Августа 2009 :: 19:28
Печать  
Периодически выполняемые операции архивации, отправки по SMTP, FTP и тп сделал в виде 1С Планировщика для 1С 7.7
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=5&lid=8399
  
Наверх
ICQ  
IP записан
 
Злоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 317
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Решение для упаковки файла
Ответ #12 - 25. Ноября 2009 :: 23:58
Печать  
так зипер/анзипер в винды встроен - запускать программно когда надо и все ... или я чего-то невтыкнул
  
Наверх
www  
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Решение для упаковки файла
Ответ #13 - 26. Ноября 2009 :: 07:26
Печать  
Злоп писал(а) 25. Ноября 2009 :: 23:58:
так зипер/анзипер в винды встроен - запускать программно когда надо и все ... или я чего-то невтыкнул

Даже не задумывался над таким вариантом. Сделал себе набор классов по работе с winrar, 7z и, на всякий случай, из BinaryData.Zip()/Unzip().

Спасибо за идею! Надо будет добавить.
Буду признателен, если подскажешь, где описание посмотреть.

P.S.: в репозитарий на суд общественный пока не выкладываю, не всем доволен.
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать