Проблема при сохранении в Е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 Сейчас в теме
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 1475 23.06.16 11:20 Сейчас в теме
(1) kmpok, тут только самому писать код по формированию экселя. Типовой метод работает как умеет и такой результат пока не правится.
7. kmpok 23.06.16 12:02 Сейчас в теме
(4) Xershi, очень жаль, если так
11. ZhokhovM 725 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 позиций.
23. Ovrfox 14 29.06.16 08:53 Сейчас в теме
(22) Все таки нужно разобраться покупатели требуют ПРАЙС С КАРТИНКАМИ или, КАРТИНКИ для каждого ТОВАРА в прайсе.
Причем, по моему опыту, желательно второе и две- три картинки к каждой позиции и на светлом (прозрачном фоне) и в формате GIF.
А от понимания, что хотят покупаетли, сильно зависит постановка задачи.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)