Проблема при сохранении в Еxcel

1. kmpok 23.06.16 10:58 Сейчас в теме
Добрый день. Ситуация в следующем: В 1с программно формируется табличный документ (прайс-лист с картинками) и сохранятся в Exсel средствами платформы 1С.
ДокРез.Записать(Объект.Путь, ТипФайлаТабличногоДокумента.XLS)

Далее файл открывается через COMОбъект, добавляются для ячеек формулы, ссылки. Пытаемся перезаписать
Книга.Saveas(Объект.Путь,18)

При сохранении выходит ошибка:
"Ошибка при вызове метода контекста (SaveAs): Произошла исключительная ситуация (Microsoft Excel): Документ не сохранен."

Ошибка выходит не всегда, а только когда 1С немного перегружается и занимаемая память переваливает за 500-600мб. Например, если выгружать прайс небольшими каталогами, то все ок! Но стоит так сделать 5-6 раз подряд и опять вылазит та же самая ошибка. Лечится только перезаходом в 1С.

В коде отключены всплывающие окна (DisplayAlerts=false). При ручном открытии файла прайса и его сохранении выходит ошибка:
"Обнаружены ошибки при сохранении... путь к файлу.... Возможно приложению Microsoft Excel удастся сохранить этот файл, внеся в него некоторые исправления...." Но ему не удается.

Если сохранять прайс в новом формате
ДокРез.Записать(Объект.Путь, ТипФайлаТабличногоДокумента.XLSX)
.........
Книга.Saveas(Объект.Путь,-4143)

То данная ошибка уходит, но появляется другая. В макете 1С картинка полностью растянута по ширине и высоте ячейки, но при сохранении строка
изменяет размер и снизу картинки появляется пространство. Скрин приложил.

Пробовал на разных компьютерах, на разных версиях платформы 1С и с разными версиями Exсel. Проблемы аналогичные.
Кто-нибудь сталкивался с подобным? как решали?
Прикрепленные файлы:
+
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. alex-l19041 8 23.06.16 11:19 Сейчас в теме
(1) kmpok, платформа ?
+
6. kmpok 23.06.16 12:02 Сейчас в теме
(3) alex-l19041, Платформа 8.3.7. - 8.3.8 Пробовал разные
(5) espero2000, Ошибка повторяется даже если формулы не устанавливать. Проблема именно в картинках. Если выгружать в формат XLS и из файла вручную удалить все фотки, то сохранение проходит без проблем. Но если останется хотя бы одна картинка, то выпадает ошибка "Обнаружены ошибки при сохранении... путь к файлу.... Возможно приложению Microsoft Excel удастся сохранить этот файл, внеся в него некоторые исправления...."

Такое ощущение, что 1С не прописывает картинкам какие то нужные параметры, когда ей перестает хватать памяти или каких то других ресурсов. Например, в полном прайсе 1500 позиций, а если выгружать по 300, то все ок.
+
4. Xershi 1484 23.06.16 11:20 Сейчас в теме
(1) kmpok, тут только самому писать код по формированию экселя. Типовой метод работает как умеет и такой результат пока не правится.
+
7. kmpok 23.06.16 12:02 Сейчас в теме
(4) Xershi, очень жаль, если так
+
11. ZhokhovM 729 23.06.16 14:32 Сейчас в теме
(1) kmpok, было дело, может размер картинки уменьшить при выгрузке в ексел и еще проверь, что картинок не должно быть на заднем фоне, бывает что за картинкой стоит еще картинка, ну и конечно память(+1-2 гига хватит). И не забывайте, что прайсы должны записываться на клиенте:
&НаКлиенте
Процедура ВыгрузитьВExcel(Команда)
	л_Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    л_Диалог.МножественныйВыбор = Ложь;
    л_Диалог.Заголовок = "Укажите путь выгрузки excel...";
	л_Диалог.Фильтр = "Excel 2007(*.xlsx)|*.xlsx";
    Если л_Диалог.Выбрать() Тогда
		л_ТабДок = новый ТабличныйДокумент;
		л_АдресОтчета = ВыгрузитьВExcelНаСервере(л_ТабДок);
		Если л_АдресОтчета<>Неопределено Тогда
			л_ДанныеФайла = ПолучитьИзВременногоХранилища(л_АдресОтчета);
			Если ТипЗнч(л_ДанныеФайла)<>Тип("ДвоичныеДанные") Тогда
				Сообщить("Ошибка получения сформированного отчета с сервера.");
				Возврат;
			КонецЕсли;
			Попытка
				л_ДанныеФайла.Записать(СокрЛП(л_Диалог.ПолноеИмяФайла));
			Исключение
				ТекстОшибки = ОписаниеОшибки();
				Сообщить(ТекстОшибки);
				Возврат;
			КонецПопытки;
			Сообщить("Выгрузка прайса завершена!");
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ВыгрузитьВExcelНаСервере(л_ТабДок)
	л_Объект = РеквизитФормыВЗначение("Отчет");
	л_Объект.ВыгрузитьВТабДок(л_ТабДок);
	л_ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
	Попытка		
		л_ТабДок.Записать(л_ИмяВременногоФайла, ТипФайлаТабличногоДокумента.XLSX);
		л_АдресОтчета = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(л_ИмяВременногоФайла));
	Исключение		
		л_АдресОтчета = Неопределено;
	КонецПопытки;
	ЗначениеВРеквизитФормы(л_Объект,"Отчет");
	Возврат л_АдресОтчета;
КонецФункции
Показать
+
19. PiotrLoginov 26.06.16 19:05 Сейчас в теме
Поражаюсь, как вообще может придти в голову мысль вставлять в файл эксель несколько тысяч картинок.
По сабжу: при попытке переварить (1), испытываю легкий стресс. Кажется, скоро топикстартеры будут запихивать в одну тему сразу вопросов так двадцать.
Так-то присоединился бы к (5), но при множественных допущениях, что остальные факты соответствуют заявленному.
+
20. v3rter 27.06.16 10:33 Сейчас в теме
(19) PiotrLoginov,
Поражаюсь, как вообще может придти в голову мысль вставлять в файл эксель несколько тысяч картинок.
Легко - прайс-листы поставщиков с картинками. Не все готовы расстаться с парой сотен килорублей за прикручивание 1С к сайту онлайн.
+
2. пользователь 23.06.16 11:05
Сообщение было скрыто модератором.
...
5. espero2000 13 23.06.16 11:31 Сейчас в теме
Было похожее: при сохранении файла с формулами выскакивало такое же сообщение: Произошла исключительная ситуация (Microsoft Excel).
Разобрался, оказалось ставил в формулах неправильные параметры (неверно задавал диапазон).
Если без формул, то у вас сохраняется нормально?
+
8. Isperator 23.06.16 12:06 Сейчас в теме
Спасибо за статью, информация пригодится.
+
9. dkonakov 10 23.06.16 13:05 Сейчас в теме
В 8.3.8.1747 у меня нормально сохраняется прайс с картинками, но там есть баг http://forum.infostart.ru/forum86/topic117873/message1577719/?result=edit#postform
Поэтому пока не переходим, сохраняем в ODS или как то так. Нужно ждать фикс платформы.
+
10. v3rter 23.06.16 14:23 Сейчас в теме
2000-3000 картинок в файле и эксель сам по себе начинает виснуть при открытии и чудить при редактировании.
+
12. CaptainMorgan 24.06.16 05:50 Сейчас в теме
Вот такая идея.
Как реализовать - вопрос второй. Но работать будет точно. Я проверял.

Изображения публикуются на web-сервере
Файл создаётся не в формате Excel а в формате HTML.
По тексту все src= изменяются и берутся с web-сервера.

Файл становится на много меньше и сохраняется.
HTML документ в таком случае открывается с помощью программы Excel.
Единственное неудобство.
При открытии нужно наличие интернет соединения.

Шаблон такого файла можно получить просто в пакете Office 2003 - Сохранить как web документ.

Если такая идея подходит, то детали реализации можно обсудить.
+
13. Ovrfox 14 24.06.16 11:00 Сейчас в теме
(12) А не проще тогда сделать то же самое с файлом Excel?
Вместо картинок вставляем поля со ссылкой на внешние картинки по относительну пути "Картинки/<ИмяФайла>"
Высылаем клиенту архив с фалом и картинками. А продвинутым только файл (картинки уже высылали в прошлый раз)
+
14. CaptainMorgan 24.06.16 11:29 Сейчас в теме
(13) Такой вариант тоже нормальное решение.
В принципе, картинки могут быть тут же в соседней папке.
Для доступа к изображениям меняется только XMLschema. Там меняется лишь ссылка на местоположение (web или локальная папка).
Только проблема ТУТ в большом количестве картинок в файле Excel. И не важно где эти файлы внутри или снаружи - тормоза будут те же.
А в случае HTML - не будет проблем с сохранением.

А для получателя разницы не будет.
+
15. Ovrfox 14 24.06.16 13:00 Сейчас в теме
(14) Если я не ошибаюсь, Excel динамически кеширует картинки, которые отображает. Т.е. пока не промотаешь весь файл по страчнично - картинки в пямять не загрузятся.
Если в файле сделать группировку, скрывающую строки группами, то неотображаемые строки не будут потреблять память под картинки.
Так что будет лучше, чем картинки сразу внутри файла.
+
16. CaptainMorgan 25.06.16 22:34 Сейчас в теме
(15) Ovrfox Это всё правильно, но проблема, поднятая в данной теме находится, в несколько иной плоскости.
В сообщении (4) был дан следующий ответ.
Типовой метод работает как умеет и такой результат пока не правится.

И это очень похоже на правду.
Я же предлагаю решение проблемы через реализацию совершенно иного алгоритма.
Данный алгоритм я уже проверял и проблем с огромными файлами не было.

Основной смысл - это построение файла и работу с ним можно реализовать, минуя драйвер Excel.
Т.е. мимо любых глюков и багов сторонней программы.
+
17. nickpugachev 25.06.16 23:27 Сейчас в теме
(14) CaptainMorgan, для получателя разница огромная, если он использует автоматизированную загрузку этих файлов. Называется настройки безопасности при открытии файла с форматом, не соответствующим расширению.
Если клиенты не используют загрузку из этих прайсов, то они просто будут получать предупреждение при открытии, что тоже не добавляет доверия.

Есть один недобрый вариант - формировать xlsx самостоятельно, не средствами 1С либо Excel. В случае с прайс-листами это относительно не сложно, если структура прайс-листа простая.
+
18. CaptainMorgan 26.06.16 06:03 Сейчас в теме
(17) nickpugachev тоже дельное предложение.
формировать xlsx самостоятельно, не средствами 1С либо Excel. В случае с прайс-листами это относительно не сложно, если структура прайс-листа простая

Единственный момент.
Формат HTML более прост, по сравнению с xlsx и его гораздо удобнее править.
А на счёт
Называется настройки безопасности при открытии файла с форматом, не соответствующим расширению

Всё это решаемо.
Шаблон созданный в Excel 2003 - легко может быть сохранён в формат xlx или xlsx.
Вообще если пойти по пути формирования файла минуя драйвер Excel, то и не нужны "заморочки" публикации изображений на web-сервере.

А если ещё пойти по пути конвертации изображений в формат base64, то вообще можно исключить неудобства связанные с "кучей" файлов. Всё будет в одном файле.
К стати, при большем размере файла - работать с ним будет гораздо быстрее.
+
21. nickpugachev 28.06.16 13:41 Сейчас в теме
(18) CaptainMorgan, в чем разница между правкой html и достаточно простого xml? xlsx таки обычный xml, в случае простой структуры документа - не сложный для понимания, даже если не знаешь формата.

В любом случае - тонны картинок - это тонны картинок. Это зло.
+
22. dkonakov 10 28.06.16 16:15 Сейчас в теме
(21) а почему вы считаете, что тонны картинок зло? У нас процентов 50 покупателей ТРЕБУЮТ прайс с картинками. При нашей номенклатуре в 15000 позиций.
maxst22; +1
23. Ovrfox 14 29.06.16 08:53 Сейчас в теме
(22) Все таки нужно разобраться покупатели требуют ПРАЙС С КАРТИНКАМИ или, КАРТИНКИ для каждого ТОВАРА в прайсе.
Причем, по моему опыту, желательно второе и две- три картинки к каждой позиции и на светлом (прозрачном фоне) и в формате GIF.
А от понимания, что хотят покупаетли, сильно зависит постановка задачи.
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот