Картинка=СоздатьОбъект("Картинка");
Объект.РежимРисования(3);
Картинка.НарисоватьШтрихкод(Картинка,58,Знч);
Картинка.Сохранить("qr.bmp");
Не сохранется...
На форме (в Картинке) рисуется.
Есть решение?
А что такое "qr.bmp" - ?
Где он должен быть?
Тут в СП:
Сохранить(<?>);
Синтаксис:
Сохранить(<ИмяФайла>)
Назначение:
Сохранить картинку в файле в формате загрузки.
Параметры:
<ИмяФайла> - строка с именем файла.
Строка с именем файла должна быть с полным путем к нему, ну, например: "C:\Temp\qr.bmp"...
Иначе, он просто не понимает, где сохранять.
А вообще, не все так просто...
С полным путем то он сохраняет, только в непойми-каком формате, и полученный файл не открывается...
Процедура Сформировать()
ЗагрузитьВнешнююКомпоненту("FormEx.dll");
Сервис = СоздатьОбъект("Сервис");
Карт = СоздатьОбъект("Картинка");
Карт.РежимРисования(3);
Сервис.НарисоватьШтрихкод(Карт,58,"https://forum.dorex.pro/index.php?topic=202.0");
Картин.УстановитьКартинку(Карт);
Карт.Сохранить("C:\Temp\qr.bmp");
КонецПроцедуры
Картин - идентификатор картинки на форме.
Так и на форме рисуется, и в файл сохраняется, но файл некорректного формата.
Цитата: MWW_Ruza от 01 декабря 2024, 21:50Строка с именем файла должна быть с полным путем к нему, ну, например: "C:\Temp\qr.bmp"...
Иначе, он просто не понимает, где сохранять.
Ну, конечно, это для краткости изложения :).
И речь, конечно, о возможности чтения файла...
Йокселем воспользуйся
Такая проблема только с картинками, на которых штрих-код рисуется? Картинка, полученная методом РасширениеФормы::ПолучитьКартинку(), нормально сохраняется?
Может это пригодится: метод Сохранить() выгружает картинку в файл с именем <ИмяФайла> в формате загрузки (загрузили в формате bmp — в этом формате и сохраним). Файл может быть следующих форматов:.wmf .emf .ico .bmp .dib .rle.
Может попробовать каждый из этих форматов?
Хотя, как я понимаю, штрихкод в zint в Сервис::ПолучитьКартинку() в .png рисуется, поэтому штатными средствами вряд ли.
Цитата: Харлампий Дымба от 02 декабря 2024, 11:20Может это пригодится: метод Сохранить() выгружает картинку в файл с именем <ИмяФайла> в формате загрузки (загрузили в формате bmp — в этом формате и сохраним). Файл может быть следующих форматов:.wmf .emf .ico .bmp .dib .rle.
Может попробовать каждый из этих форматов?
Хотя, как я понимаю, штрихкод в zint в Сервис::ПолучитьКартинку() в .png рисуется, поэтому штатными средствами вряд ли.
Да, и пробовали предварительно загружать существующий файл указанных форматов, потом генерировать штрих-код. Результата нет.
Тут похоже Формекс вообще ни при чем - это штатнвй метод 1С сохранения картинки так отрабатывает...
Вот, закомментировано все, что касается Формекса, и только загружается картинка готовая из библиотеки:
(https://content.foto.my.mail.ru/mail/m_w_w/590/h-597.jpg)
Процедура Сформировать()
ЗагрузитьВнешнююКомпоненту("FormEx.dll");
// Сервис = СоздатьОбъект("Сервис");
Карт = СоздатьОбъект("Картинка");
// Карт.РежимРисования(3);
// Сервис.НарисоватьШтрихкод(Карт,58,"https://forum.dorex.pro/index.php?topic=202.0");
Карт.Загрузить("Стрелки");
Картин.УстановитьКартинку(Карт);
Карт.Сохранить("C:\Temp\qr.bmp");
КонецПроцедуры
Пустая форма, кроме кнопки сформировать только один объект - картинка с идентификатором "Картин".
"Стрелки" - картинка из библиотеки картинок конфигурации.
Файл - пишется нормально, никаких ошибок не дает - но он так-же не читаем, как и QR-код, если его нарисовать Формексом...
Вот, что на выходе: https://cloud.mail.ru/public/dJkX/JHpQrangt
PS #7 - А как формат сохранения задать? Только расширением файла? Ну, пробовал, все доступные в методе расширения - кроме имени файла (точнее, его расширения), ничего не меняется, содержимое остается тем-же.
Цитата: АЛьФ от 02 декабря 2024, 11:02Картинка, полученная методом РасширениеФормы::ПолучитьКартинку(), нормально сохраняется?
Надо попробовать... Но, тут задача у ТС похоже немного другая, если я правильно понял, ему нужно картинку сохранять из формы, а не из печатной формы...
А тут, из СП:
// процедура вызывается из объекта Картинка, расположенного на печатной форме
Если только что-то мудрить с отрисовкой ПФ без ее вывода, и созранения в файл картинки, полученной в нее этим методом... Надо попробовать такие "танцы с бубном". Только пока не понятно, будет без вывода ПФ работать или нет.
Не, с печатной формой тоже не работает, хоть с Показать(), хоть без:
Процедура Сформировать()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Секция_1");
// Таб.Показать();
КонецПроцедуры
Процедура ПолучитьКартинку(Карт)
Картин = СоздатьОбъект("Картинка");
Картин.Загрузить("Стрелки");
Карт.УстановитьКартинку(Картин);
Карт.Сохранить("C:\Temp\qr.bmp");
КонецПроцедуры
(https://content.foto.my.mail.ru/mail/m_w_w/590/h-598.jpg)
Файл сохранчется, но так-же не читаем.
Все вы позабыли... Даже то что не знали ;)
Картинка=СоздатьОбъект("Картинка");
Сервис=СоздатьОбъект("Сервис");
Сервис.НарисоватьШтрихкод(Картинка,58,Штрихкод);
Система=СоздатьОбъект("Система");
Система.СохранитьКартинку(ИмяКаталога,ИмяФайла,Картинка);
Так, (файлик предварительно сохранен из интерфейса конфигуратора интерактивно и открывается), пересохраненный программно, тоже не читаем:
Процедура Сформировать()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Секция_1");
Таб.Показать();
КонецПроцедуры
Процедура ПолучитьКартинку(Карт)
Картин = СоздатьОбъект("Картинка");
// Картин.Загрузить("Стрелки");
Картин.Загрузить("C:\Temp\Стрелки.bmp");
Карт.УстановитьКартинку(Картин);
Карт.Сохранить("C:\Temp\qr.bmp");
КонецПроцедуры
Да, так:
Процедура Сформировать()
ЗагрузитьВнешнююКомпоненту("FormEx.dll");
ЗагрузитьВнешнююКомпоненту("1CPP.dll");
Картинка = СоздатьОбъект("Картинка");
Сервис = СоздатьОбъект("Сервис");
Сервис.НарисоватьШтрихкод(Картинка,58, "https://forum.dorex.pro/index.php?topic=202.new#new");
Система = СоздатьОбъект("Система");
Система.СохранитьКартинку("C:\Temp\", "Qr.bmp", Картинка);
КонецПроцедуры
Работает, сохраняет идеально... Только это уже не FormEx, и не штатные методы 1С, а 1cpp...
Задачу решает полностью, без затрат практически, все равно во всех рабочих базах 1cpp используется, но не отвечает на вопрос - почему штатный метод 1С уродует картинку при сохранении.
Цитата: MWW_Ruza от 02 декабря 2024, 12:42Тут похоже Формекс вообще ни при чем - это штатнвй метод 1С сохранения картинки так отрабатывает...
Насколько я помню, 1С при сохранении bmp в начало файла пишет размер файла.
Цитата: MWW_Ruza от 02 декабря 2024, 12:42PS #7 - А как формат сохранения задать?
Так вот получается, что никак. Типа сохраняет в том формате, в котором картинка была перед этим загружена через Загрузить(). А мы-то картинку через Сервис::
ПолучитьКартинку()опечатка Сервис::НарисоватьШтрихкод() получаем. Там, если я правильно понял, штрихкод рисуется в png.
Может и правда Йоксель поможет.
А может ТС проще параллельно рисовать на форме и такой же отрисовывать в таблицу mxl, чтобы потом хранить. Надо по задаче смотреть.
Кстати, вопрос - а где-бы взять нормальный als к 1cpp - ? А то мой видимо очень старый и не знает половину методов...
(https://content.foto.my.mail.ru/mail/m_w_w/590/h-599.jpg)
А то "трудно вспоминать, когда не знаешь, да еще и забыл" и быстро подсмотреть негде...
На сайте конечно можно, но, это то еще занятие, учитывая тот объем инфы, которая там есть...
Цитата: MWW_Ruza от 02 декабря 2024, 14:55но не отвечает на вопрос - почему штатный метод 1С уродует картинку при сохранении.
Картинка
Сохранить(<?>);
Синтаксис:
Сохранить(<ИмяФайла>)
Назначение:
Сохранить картинку в файле
в формате загрузки.Параметры:
<ИмяФайла> - строка с именем файла.
Без конвертирования!
Цитата: Харлампий Дымба от 02 декабря 2024, 15:00Типа сохраняет в том формате, в котором картинка была перед этим загружена через Загрузить().
Не работает. Пробовал. См. выше.
Цитата: Харлампий Дымба от 02 декабря 2024, 15:00Может и правда Йоксель поможет.
Может и поможет, скорее всего. Но, и 1cpp отрабатывает отлично.
Да и хрен с ним, Система.СохранитьКартинку работает, что вам еще надо то?
Цитата: Djelf от 02 декабря 2024, 15:04Сохранить картинку в файле в формате загрузки.
Параметры:
<ИмяФайла> - строка с именем файла.
Без конвертирования!
Ну, не знаю, может я конечно что-то и накосячил в пробном примере, но именно это я пробовал в #13, результирующий файл все равно нечитаем.
Цитата: Djelf от 02 декабря 2024, 15:09Да и хрен с ним, ******* - работает, что вам еще надо то?
Лично мне - вообще не надо, такой задачи пока не было :-) , просто "за державу (клюшки) обидно" :-)
Еще раз напоминаю про als на 1cpp по свежее, поделитесь если у кого то есть...
Ерунда все это! Печально что Система.ПолучитьOLEКартинку записывать не может, но это тоже простительно, встроенный конвертер графики в 1с++ это было бы очень тяжело... Неподъемно ;)
У меня такая сборка als: https://cloud.mail.ru/public/WvQm/7aGstiVi3
Ооо!!!
То, что надо, спасибо огромное!
И как я без этого раньше жил, столько всего есть, что через жо... приходилось делать :-)
Да, конечно лучше чем у меня, но все равно, как я понимаю, по 1cpp als не полный...
Вот, как-то на инфостарте в одной из моих тем отвечали:
"(10) Мы используем объект из 1cpp для определения статуса Ctrl Alt Shift:
// Процедура заполняет признак состояния доп клавиш (Ctrl,Shift,Alt) в глобальные переменные
Процедура глСтатусКлавиши() Экспорт
Перем Клавиатура;
Попытка
Клавиатура=СоздатьОбъект("1cpp.Клавиатура");"
Да, это работает на моей версии 1cpp, т.е. - метод поддерживается.
Но, ни в одном als про него и упоминания нет...
В твоем наборе als "Клавиатура" есть только в "Табличном документе от trad"...
Но, это не то.
Наверняка есть еще что-то, что не описано.
Самая полная документация по 1cpp есть в исходниках (rst) и в chm.
CHM брать здесь: https://www.1cpp.ru/forum/YaBB.pl?num=1303385763
Вот, что у меня нашлось.
Добавлю еще алс-ку