Диаграмма - сохранение в файл на сервере.

1. Гость 04.05.23 09:42
Возникла задача сохранять диаграмму в файл на диске.
Вроде бы задача не сложная, но возникла непонятная проблема, нужна помощь зала

Если диаграмму сохранять на сервере, то сохраняется пустой графический файл
Если же с точно таким же кодом сохранять диаграмму на клиенте, то сохраняется картинка диаграммы корректно.

код примерно следующий:

ГрафикКартинка = График.ПолучитьКартинку(,,ФорматКартинки.PNG);
ГрафикКартинка.Записать("C:\temp\график.PNG");

где График - это Диаграмма.

По скольку код должен выполняться исключительно на сервере (в регл. задании), то непонятно что нужно сделать, чтобы информация по диаграмме корректно сохранялась в файл на сервере.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. truba 11.05.23 12:18 Сейчас в теме
(1) То, какими словами Вы описываете проблему смахивает на баг платформы.
Давайте конкретизировать - а есть ли эта диаграмма реально при запуске под правами пользователя рег. задания? Или может там нет ни данных по этими правами, ни диаграммы?
3. Evgeniy 105 11.05.23 13:23 Сейчас в теме
(2) данные диаграммы точно есть, проверял разными способами.
Более того, если на сервере эту диаграмму помещать в табличный документ и потом его сохранять как файл пдф, то график сохраняется в ПДФ файле корректно.
Данную проблему проверял на разных версиях платформы, к сожалению итог везде одинаковый (на сервере диаграмма генерирует пустую картинку)
4. truba 11.05.23 14:38 Сейчас в теме
(3) т.е. похоже на то, что тонкое место в реализации метода .Записать() именно у объекта Картинка при его вызове на сервере в фоновом задании. При передаче этого объекта в ТабДок дальше уже будут вызываться другие методы объекта Картинка и объекта ТабДок, которые отрабатывают нормально.
Отсюда вопрос - .Записать() прям сам всю логику сохранения реализует или тупо расширяет метод предка .Записать(), передавая ему подготовленную последовательность. Предок допутим объект Файл, методы которого Картинка наследует.

К чему вопрос - тут просматривается два возмоных сценария где фейлится:

1 - Подготовка данных потока записи родительскому методу .Записать(), т.е. на вход родительскому методу .Записать() поступает условный null вместо потока картинки. Тут баг явный и ничего кроме костылей не придумать, вероятно.

2 - именно .Записать() предка вызывает допустим какие то функции ОС, в зависимости от контекста записи и там, чисто теоретически не хватает каких нибудь dll для записи именно таких данных.

У меня пока такой проблемы не было с картинкой, стенд не поднимал, но сталкивался с похожим еще давно на 77 когда оказалось что методы архивирования в 7ке только обертка для методов ос и решение по ним лежало не в платформе, а в ос.
5. Evgeniy 105 11.05.23 15:22 Сейчас в теме
(4) проблема в методе График.ПолучитьКартинку()
Если его выполнять на клиенте и потом получать бинарные данные и полученной картинки, то видно что это нормальная картинка с графиком как на диаграмме.
Если же точно такой же код выполнять на сервере (не в регл. задании а просто в процедуре на сервере), то метод ПолучитьКартинку() получает пустой графический файл с указанным расширением
6. truba 11.05.23 17:19 Сейчас в теме
#ЗанудаON
Тип("Картинка") МояКартинка = График.ПолучитьКартинку(); это ж не файл, это объект в озу типа "Картинка".
ПолучитьКартинку - вероятно метод какого нибудь интерфейса Картинэйбл, реализуемым объектами Диаграмма, ДиаграммаГанта и т.д. Объекта Картинка есть "ПолучитьДвоичныеДанные()" - вероятно можно там глянуть содержимое.

Т.е. выпологаете что как минимум реализация метода .ПолучитьКартинку() или 1) для сервера написана криво или 2) вызывает какой то иной код, вне платформы, который на сервере не так обрабаывается как на клиенте?
7. Evgeniy 105 11.05.23 20:24 Сейчас в теме
(6) проверял двоичные данные получаемые из картинки. Они отличаются в зависимости от того, где метод ПолучитьКартинку выполняется (на сервер или на клиенте).

В итоге у меня все упирается в метод ПолучитьКартинку() и не корректное его выполнение на сервере, либо это хитрая логика 1С платформы.

Других вариантов как получить графический файл из диаграммы не нашел.
8. truba 11.05.23 20:51 Сейчас в теме
если судить по описанию в СП, то ПолучитьКартинку(Ширина,Высота,Формат) действительно различаются на клиенте и сервере. При этом Ширина,Высота имеют значение для генерации, нули по умолчанию. Если в эти аргументы вставить 200x200 условных поведение изменится? Может неверно значение по умолчанию отрабатывает, генерит картинку в 0х0 пикселей?
9. Evgeniy 105 11.05.23 23:57 Сейчас в теме
(8) Проверял варианты с указанием размеров. Если указывать размеры картинки, то на сервере создается пустая картинка указных размеров.
Внимание! Не забывайте отмечать решение на ваш вопрос, если оно найдено. Это повысит ваш рейтинг на форуме.
Оставьте свое сообщение

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