Добрый день. Ситуация в следующем: В 1с программно формируется табличный документ (прайс-лист с картинками) и сохранятся в Exсel средствами платформы 1С.
Далее файл открывается через COMОбъект, добавляются для ячеек формулы, ссылки. Пытаемся перезаписать
Книга.Saveas(Объект.Путь,18)
При сохранении выходит ошибка:
"Ошибка при вызове метода контекста (SaveAs): Произошла исключительная ситуация (Microsoft Excel): Документ не сохранен."
Ошибка выходит не всегда, а только когда 1С немного перегружается и занимаемая память переваливает за 500-600мб. Например, если выгружать прайс небольшими каталогами, то все ок! Но стоит так сделать 5-6 раз подряд и опять вылазит та же самая ошибка. Лечится только перезаходом в 1С.
В коде отключены всплывающие окна (DisplayAlerts=false). При ручном открытии файла прайса и его сохранении выходит ошибка:
"Обнаружены ошибки при сохранении... путь к файлу.... Возможно приложению Microsoft Excel удастся сохранить этот файл, внеся в него некоторые исправления...." Но ему не удается.
То данная ошибка уходит, но появляется другая. В макете 1С картинка полностью растянута по ширине и высоте ячейки, но при сохранении строка
изменяет размер и снизу картинки появляется пространство. Скрин приложил.
Пробовал на разных компьютерах, на разных версиях платформы 1С и с разными версиями Exсel. Проблемы аналогичные.
Кто-нибудь сталкивался с подобным? как решали?
(3) alex-l19041, Платформа 8.3.7. - 8.3.8 Пробовал разные
(5) espero2000, Ошибка повторяется даже если формулы не устанавливать. Проблема именно в картинках. Если выгружать в формат XLS и из файла вручную удалить все фотки, то сохранение проходит без проблем. Но если останется хотя бы одна картинка, то выпадает ошибка "Обнаружены ошибки при сохранении... путь к файлу.... Возможно приложению Microsoft Excel удастся сохранить этот файл, внеся в него некоторые исправления...."
Такое ощущение, что 1С не прописывает картинкам какие то нужные параметры, когда ей перестает хватать памяти или каких то других ресурсов. Например, в полном прайсе 1500 позиций, а если выгружать по 300, то все ок.
(1) kmpok, было дело, может размер картинки уменьшить при выгрузке в ексел и еще проверь, что картинок не должно быть на заднем фоне, бывает что за картинкой стоит еще картинка, ну и конечно память(+1-2 гига хватит). И не забывайте, что прайсы должны записываться на клиенте:
&НаКлиенте
Процедура ВыгрузитьВExcel(Команда)
л_Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
л_Диалог.МножественныйВыбор = Ложь;
л_Диалог.Заголовок = "Укажите путь выгрузки excel...";
л_Диалог.Фильтр = "Excel 2007(*.xlsx)|*.xlsx";
Если л_Диалог.Выбрать() Тогда
л_ТабДок = новый ТабличныйДокумент;
л_АдресОтчета = ВыгрузитьВExcelНаСервере(л_ТабДок);
Если л_АдресОтчета<>Неопределено Тогда
л_ДанныеФайла = ПолучитьИзВременногоХранилища(л_АдресОтчета);
Если ТипЗнч(л_ДанныеФайла)<>Тип("ДвоичныеДанные") Тогда
Сообщить("Ошибка получения сформированного отчета с сервера.");
Возврат;
КонецЕсли;
Попытка
л_ДанныеФайла.Записать(СокрЛП(л_Диалог.ПолноеИмяФайла));
Исключение
ТекстОшибки = ОписаниеОшибки();
Сообщить(ТекстОшибки);
Возврат;
КонецПопытки;
Сообщить("Выгрузка прайса завершена!");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ВыгрузитьВExcelНаСервере(л_ТабДок)
л_Объект = РеквизитФормыВЗначение("Отчет");
л_Объект.ВыгрузитьВТабДок(л_ТабДок);
л_ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
Попытка
л_ТабДок.Записать(л_ИмяВременногоФайла, ТипФайлаТабличногоДокумента.XLSX);
л_АдресОтчета = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(л_ИмяВременногоФайла));
Исключение
л_АдресОтчета = Неопределено;
КонецПопытки;
ЗначениеВРеквизитФормы(л_Объект,"Отчет");
Возврат л_АдресОтчета;
КонецФункции
Поражаюсь, как вообще может придти в голову мысль вставлять в файл эксель несколько тысяч картинок.
По сабжу: при попытке переварить (1), испытываю легкий стресс. Кажется, скоро топикстартеры будут запихивать в одну тему сразу вопросов так двадцать.
Так-то присоединился бы к (5), но при множественных допущениях, что остальные факты соответствуют заявленному.
Было похожее: при сохранении файла с формулами выскакивало такое же сообщение: Произошла исключительная ситуация (Microsoft Excel).
Разобрался, оказалось ставил в формулах неправильные параметры (неверно задавал диапазон).
Если без формул, то у вас сохраняется нормально?
Вот такая идея.
Как реализовать - вопрос второй. Но работать будет точно. Я проверял.
Изображения публикуются на web-сервере
Файл создаётся не в формате Excel а в формате HTML.
По тексту все src= изменяются и берутся с web-сервера.
Файл становится на много меньше и сохраняется.
HTML документ в таком случае открывается с помощью программы Excel.
Единственное неудобство.
При открытии нужно наличие интернет соединения.
Шаблон такого файла можно получить просто в пакете Office 2003 - Сохранить как web документ.
Если такая идея подходит, то детали реализации можно обсудить.
(12) А не проще тогда сделать то же самое с файлом Excel?
Вместо картинок вставляем поля со ссылкой на внешние картинки по относительну пути "Картинки/<ИмяФайла>"
Высылаем клиенту архив с фалом и картинками. А продвинутым только файл (картинки уже высылали в прошлый раз)
(13) Такой вариант тоже нормальное решение.
В принципе, картинки могут быть тут же в соседней папке.
Для доступа к изображениям меняется только XMLschema. Там меняется лишь ссылка на местоположение (web или локальная папка).
Только проблема ТУТ в большом количестве картинок в файле Excel. И не важно где эти файлы внутри или снаружи - тормоза будут те же.
А в случае HTML - не будет проблем с сохранением.
(14) Если я не ошибаюсь, Excel динамически кеширует картинки, которые отображает. Т.е. пока не промотаешь весь файл по страчнично - картинки в пямять не загрузятся.
Если в файле сделать группировку, скрывающую строки группами, то неотображаемые строки не будут потреблять память под картинки.
Так что будет лучше, чем картинки сразу внутри файла.
(15) Ovrfox Это всё правильно, но проблема, поднятая в данной теме находится, в несколько иной плоскости.
В сообщении (4) был дан следующий ответ.
Типовой метод работает как умеет и такой результат пока не правится.
И это очень похоже на правду.
Я же предлагаю решение проблемы через реализацию совершенно иного алгоритма.
Данный алгоритм я уже проверял и проблем с огромными файлами не было.
Основной смысл - это построение файла и работу с ним можно реализовать, минуя драйвер Excel.
Т.е. мимо любых глюков и багов сторонней программы.
(14) CaptainMorgan, для получателя разница огромная, если он использует автоматизированную загрузку этих файлов. Называется настройки безопасности при открытии файла с форматом, не соответствующим расширению.
Если клиенты не используют загрузку из этих прайсов, то они просто будут получать предупреждение при открытии, что тоже не добавляет доверия.
Есть один недобрый вариант - формировать xlsx самостоятельно, не средствами 1С либо Excel. В случае с прайс-листами это относительно не сложно, если структура прайс-листа простая.
формировать xlsx самостоятельно, не средствами 1С либо Excel. В случае с прайс-листами это относительно не сложно, если структура прайс-листа простая
Единственный момент.
Формат HTML более прост, по сравнению с xlsx и его гораздо удобнее править.
А на счёт
Называется настройки безопасности при открытии файла с форматом, не соответствующим расширению
Всё это решаемо.
Шаблон созданный в Excel 2003 - легко может быть сохранён в формат xlx или xlsx.
Вообще если пойти по пути формирования файла минуя драйвер Excel, то и не нужны "заморочки" публикации изображений на web-сервере.
А если ещё пойти по пути конвертации изображений в формат base64, то вообще можно исключить неудобства связанные с "кучей" файлов. Всё будет в одном файле.
К стати, при большем размере файла - работать с ним будет гораздо быстрее.
(18) CaptainMorgan, в чем разница между правкой html и достаточно простого xml? xlsx таки обычный xml, в случае простой структуры документа - не сложный для понимания, даже если не знаешь формата.
В любом случае - тонны картинок - это тонны картинок. Это зло.
(22) Все таки нужно разобраться покупатели требуют ПРАЙС С КАРТИНКАМИ или, КАРТИНКИ для каждого ТОВАРА в прайсе.
Причем, по моему опыту, желательно второе и две- три картинки к каждой позиции и на светлом (прозрачном фоне) и в формате GIF.
А от понимания, что хотят покупаетли, сильно зависит постановка задачи.