Имя: Пароль:
1C
 
Сохранение табличного документа в *.xlsb
,
0 ixilimuse
 
10.11.14
08:05
Всем доброго времени суток!

Имею дело с очень объемными отчетами. Приходится бить отчет на части с помощью отборов и выгружать по частям, а потом в экселе собирать в один файл. Все потому что 1С вылетает с ошибкой о нехватки памяти, при попытке сохранить полную версию отчета в эксель. Хотя физически на сервере для этого дела 32 Гб ОЗУ.

Так вот. Почитал про бинарную книгу Excel. Что она и сохраняется быстрее и весит меньше и на открытие более шустрый файл получается.

Нагуглил что типа файла этого имеет константу = 50 = XLSB.

Попытался сохранить так:
Результат.Записать(ПутькФайлу, 50);

Что интересно - сохраняет. Причем в разы быстрее обычного ТипФайлаТабличногоДокумента.XLSX

Но размер такого файла чуть ли не на 3 раза больше оказался чем обычный XLSX. А должен был быть меньше. Да и открываться экселем - отказывается. Говорит формат вообще не опознанный)

Кто сталкивался с подобными методами? Как решить проблему?

Есть у меня в запасе идея через COM открывать экземпляр экселя, в новую книгу забивать данные из ТабДока, и самим же экселем сохранять в нужном формате. Но подозреваю это будет очень ресурсоемким методом. Да и скорее всего долгим. Но если других вариантов - не останется - буду делать так)
1 aka AMIGO
 
10.11.14
08:28
(0) может, не тем Excel"ем открываешь?
в 2007-м есть вот такое сохранение: http://gyazo.com/c00155e6664592678102e65b91ab0af6
2 dk
 
10.11.14
08:31
(1) чего-то ты не то курил
50 - это если записывать из Excel по COMу, а 1с xlsb вроде не умеет записывать
3 dk
 
10.11.14
08:31
упс (2) к (0)
4 mehfk
 
10.11.14
08:32
Результат.Записать(ПутькФайлу, 50);  Нет такого
5 aka AMIGO
 
10.11.14
08:32
(3) ладно :)
(0) кстати, размерчик сохраненного файла в 5 раз меньше исходного: http://gyazo.com/ae38c6f9a9019e8dcf233a4ab3e65dd5
6 mehfk
 
10.11.14
08:32
Сохранит в формат по-умолчанию - MXL
7 mehfk
 
10.11.14
08:33
ТипФайлаТабличногоДокумента (SpreadsheetDocumentFileType)
Значения

ANSITXT (ANSITXT)
DOCX (DOCX)
HTML (HTML)
HTML3 (HTML3)
HTML4 (HTML4)
HTML5 (HTML5)
MXL (MXL)
MXL7 (MXL7)
ODS (ODS)
PDF (PDF)
TXT (TXT)
XLS (XLS)
XLS95 (XLS95)
XLS97 (XLS97)
XLSX (XLSX)

Описание:

Содержит варианты форматов файлов для сохранения табличного документа. Используется для определения параметра <ТипФайлаТаблицы> метода Записать.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Возможен обмен с сервером.
См. также:

ТабличныйДокумент, метод Записать
8 aka AMIGO
 
10.11.14
08:41
Извинямси, а в 8-ке не проходит методика подсмотра макросов в Excel при выполнении какой-либо операции?.. ну, как это существует в 7-ке.
9 aka AMIGO
 
10.11.14
08:42
(8) + естественно, подсмотр на предмет копирования правильных команд
10 АНДР
 
10.11.14
08:59
ИМХО Из 1С выгружать форматированный текст или XML, затем подсовывать этот файл Excel'ю для конвертации. Для очистки программистской совести можно Excel'ем управлять по COM.
11 aka AMIGO
 
10.11.14
09:06
(10) памяти ему не хватает..
12 АНДР
 
10.11.14
09:09
(11) ...сконвертироваться в формат Excel.
13 ixilimuse
 
10.11.14
11:19
(4) Да, теперь я убедился что такого нет, но в глубине души - надеялся что прокатит)))

А то что предопределенного типа файла - нет я понял, потому и пытался цифру подсунуть искуственно, думая что внутри этот метод таки использует какие-то DLL ки МикрософтОфиса...
И то что не произошло исключения - подкрепило мои надежды. Но видимо зря)) Зря надеялся)

Подозреваю так что все дороги ведут меня к COM :)

XML можно было бы использовать как промежуточный этап, но боюсь с ним тоже памяти не хватит)
14 ixilimuse
 
10.11.14
11:22
(1) (5) Да-да. Именно что должен быть меньше размер))
А эксель тот) 2010й офис, из самого экселя он позволяет сохранять бинарную книгу. Проблемка все таки в отсутствии поддержки данного формата в 1С платформе.
15 АНДР
 
10.11.14
11:45
(15) Есть обоснованное предположение, что результата сохранения по COM - не дождётесь.
16 Ndochp
 
10.11.14
11:58
(0)А эти отчеты потом люди читают или машины?
Если машины, то может с ними договориться можно? АДО вместо COM например
17 ixilimuse
 
10.11.14
12:11
(15) Тоже есть такие думки потому и пытаюсь найти какую-то альтернативу)
(16) Читают к сожалению люди. Отдел актуарных расчетов получает эти файлы, проверяет на валидность и отправляют эти же эксель файлы на дисках в нац.банк.
18 ixilimuse
 
10.11.14
12:19
(16) Но спасибо за мыслишку! )) Чет некая бредовенькая идейка родилась сейчас..
Может в данной ситуации имеет смысл выгружать таблицу в какой-нибудь MS Access например, и тут же запускать какой-нить простенький exe, вся суть которого сведется к выгрузке данных и Access в Excel с определенным форматом )) Изврат конечно. Но все быстрее чем цикличная передача данных в книгу экселя через COM
19 b_ru
 
10.11.14
12:48
(18) Зачем .exe? Достаточно в самом Access макрос написать.

Но с выгрузкой в .txt из 1С с последующим автоматическим открытием этого .txt экселем через COM и сохранением в .xlsb(x) было бы правильнее.
20 ixilimuse
 
10.11.14
13:13
(19) Спасибо за рационализацию мыслей. Надо будет поэксперементировать. На сколько легко удастся сохранить в txt.

Ну и на счет макроса тоже уже передумал с эксешником. Даже если не макросы то через тот же Com реализовать выгрузку в Excel)
21 Ndochp
 
10.11.14
13:18
(17) Врут они все. Если у сервера 1С не хватает памяти на то, чтобы сохранить эксель файл, то у человека не хватит внимания его проверить (если только там не картинки с котиками). Единственно, по опыту, часто бывает что формат включает в себя всякую хрень в шапке типа списка фильтров, кто утвердил и тд. А проверяют все равно программы на той стороне. Вот тогда, что пересохранение текстовика, что АДО идут лесом. Можно конечно сначала выгрузить табличные данные, а потом уже экселем(COM, макрос) вставить нужные данные в шапку и подвал.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший