Расширенная работа с графикой в среде 1С 7.7 и 1С 8.*




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

87 Comments

  1. maljaev

    Можно к примеру прикрутить эту вещь к просмотрщику изображений товаров, фотографий сотрудников. Я лично писал с помощью 1С и этой библиотеки обработку, с помощью которой уменьшал размеры 10000 фотографий со своего форума в зависимости от различных условий.

    Reply
  2. maljaev

    Ой, забыл добавить что и в среде 1С 8.* можно также без проблем работать с этой библиотекой — ведь библиотека ActiveX, а значит не требует своей загрузки, следовательно и проблем быть не должно.

    Reply
  3. maljaev

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

    Reply
  4. Бит

    Вещь красивая, а лицензию GflAx вы читали?

    Reply
  5. maljaev

    Бит, я не настолько силен в английском, но она вроде бесплатная? Или есть нюансы, типа «только для некоммерческого использования»?

    Reply
  6. Abadonna

    (5)>Бит, я не настолько силен в английском,

    «GFL SDK/GFLAx» is provided as Freeware for private non-commercial or educational use (including non-profit organization).

    You must contact me for commercial use and distribution. webmaster@xnview.com

    @GFL SDK/GFLAx» разработан как бесплатный для частного некоммерческого использования или использования в образовательных целях (включая не приносящие денежной выгоды организации)

    Для использования в коммерческих целях или распространения программы вы должны связаться со мной по адресу

    webmaster@xnview.com

    Reply
  7. Abadonna

    +(6) Так что тут несколько двусмысленная ситуация… Использование ее программистом 1С, особенно, если он за эти «красотульки» возьмет с заказчика деньги, однозначно можно расценить, как коммерческое использование.

    Плюс налицо распространение

    Reply
  8. JohnyDeath

    (7) а может он здесь выкладывает свою обработку в образовательных целях? 😉

    Reply
  9. Abadonna

    Жень, да я ж не спорю 😉 Но наличие самого GflAxSetup.exe, а не ссылки на него уже как бы подразумевает distribution

    Reply
  10. maljaev

    Ну значит, нужно удалить дистрибутив GflAx и дать ссылку на сайт разработчика. А уж как программист будет его использовать — его дело. Правильно?

    Reply
  11. Abadonna

    (10) Вот это самое идеальное решение 😉

    Reply
  12. O-Planet

    Обсуждают буржуйскую лицензию… Мир так поменялся, или я что-то пропустил? (Или и то, и то?)

    Reply
  13. Бит

    (10)ИМХО убирать не обязательно, но ссылку на разработчика лучше дать,

    вы лично не получаете ни каких денег за это.

    НУ и не забывать про лицензию 🙂

    А кто захочет, сам свяжется с разработчиком данного продукта.

    А в общем повторюсь весч красивая.

    Reply
  14. CheBurator

    Пример чуток кривовато написан — идет неправильная сдвижка картинки при двигании кнопками, +задумывается при перерисовке масгтабом > 100%, и движение картинки при больших масштабах не просматривается… — бум дотачивать…

    Reply
  15. CheBurator

    блин! и als нету!!!

    Reply
  16. CheBurator

    Кому интересно — доточил пример до «удобоваримого» вида — обращайтесь…

    Reply
  17. maljaev

    При проверке не заметил отмеченных недостатков о двиганье картинки. Нормально двигается при масштабах 10%-100%, точнее двигается так как задумано, можно только скажем шаг увеличить — но это уж дело вкуса. Насчет ALS — ты блин загнул, давай теперь ко всем сторонним актив-иксам ALS-ки писать… Дока какая-никакая есть и то ладно.

    Reply
  18. CheBurator

    выложен исправленный рабочий пример сюда: http://infostart.ru/projects/2188/

    (17) неа, неверно двигается — возьми картинку размера большего чем подложка…

    а именно: сильно простое условие написано в процедуре сдвига — не все варианты отрабатывает правильно — если интересно будет — можешь код у меня глянуть — но это не суть важно! важно то, что есть хороший активикс! за что и спасибо!

    Reply
  19. CheBurator

    про als — это ясное дело я чтоб побурчать — дока вполне внятная и понятная.

    Reply
  20. maljaev

    Ладно, спасибо, посмотрю как ты сдвиг организовал. Я ведь тоже не на маленьких картинках обкатывал, в основном обкатка шла на 3-мегапиксельных фотках.

    Reply
  21. константин

    Построение графиков, класно придумано, однозначно 2+,с фотографиями… не понятно,че с ними делать можно в 1С?

    Reply
  22. maljaev

    Да все что угодно можно делать. Можно использовать любые алгоритмы для хранения и просмотра фотографий товаров или сотрудников, можно организовать к примеру пакетное наложение водяных знаков на изображения перед экспортом их скажем в интернет магазин. Можно использовать 1С для личных целей, если нужно скажем обработать свой фотоальбом с использованием различных преобразований или получением информации о фотках, а фоток скажем несколько тысяч. Вообще, если фантазией пораскинуть, можно очень много разных применений библиотечке найти, мне прочто сейчас некогда придумывать да и не к чему — кому нужно тот сам сообразит как использовать. Я в основном использую для работы с очень большими коллекциями фоток из тысяч и десятков тысяч штук — тут напишешь алгоритм как тебе нужно, да еще на привычном языке.

    Reply
  23. aparnikov_ve

    Подскажите, как данную тему можно применить для вставки фотографии сотрудника в картучку сотрудника и чтобы она распечатывалась (фотография), например в форме Т2.

    Reply
  24. maljaev

    Для работы с картинками (получение атрибутов картинки, поворот, масштабирование, конвертация и прочие преобразования) можешь использовать функционал GflAx. Хранить картинку можно различными способами. Самый простой — во внешнем файле, а в одном из реквизитов номенклатуры держать название этого файла. Сложнее — хранить внутри самой базы, это не всегда нужно но бывает… При выводе на печать ты либо используешь то изображение товара что у тебя есть, либо на основании его подготавливаешь промежуточный файл с необходимым размером сторон (так как 1С не умеет нормально масштабировать картинки). Далее используешь штатные средства 1С для печати картинок.

    1. В макет таблицы вставляешь картинку.

    2. В свойствах картинки на закладке «Текст» пишешь:

    ПриВыводеКартинки(Таб.ТекущийОбъект,Файл)

    3. В модуль вставляешь процедуру:

    Процедура ПриВыводеКартинки(Картинка,Файл)

    Картинка.РежимРисования(3);

    Картинка.Загрузить(Файл);

    КонецПроцедуры

    4. Выводишь таблицу:

    СпрТовары=СоздатьОбъект(«Справочник.Товары»);

    Таб=СоздатьОбъект(«Таблица»);

    СпрТовары.ВыбратьЭлементы();

    Пока СпрТовары.ПолучитьЭлемент()=1 Цикл

    Файл=КаталогСКартинками+СпрТовары.ИмяКартинки;

    Таб.ВывестиСекцию(«Строка»);

    КонецЦикла

    Таб.Показать();

    Reply
  25. maljaev

    Тьфу, перепутал немного. 🙂 Тебе сотрудников надо, а я для товаров пример привел. В принципе ничего страшного, алгоритм действий единый.

    Reply
  26. maljaev

    Самая моя серьезная работа с использованием библиотеки GflAx — ФОТОБРАУЗЕР (http://infostart.ru/projects/2439/). Можно посмотреть, только разобраться в случае чего в 2000 строк кода будет непросто — код нормально структурирован, но мало откомментирован.

    Reply
  27. bnik

    Спасибо за разработку. Давно искал нормальную DLL для картинок.

    Эта обработка ведь для образовательных целей :).

    Автор ведь денег не берёт, так и претензий по авторству и распространению быть не может.

    Reply
  28. SumMrak

    а для рисования графиков и кривых в 8.0 эта компонента подходит?

    Reply
  29. maljaev

    Подойдет. Хотя для графиков средства в 8 и так неплохие, но если хочется чего-нибудь высокохудожественного или кривые сложные тогда пожалуйста.

    Reply
  30. BilDver

    Спасибо. Очень вовремя подвернулась разработка…

    Reply
  31. vkr

    Спасибо! Очень интересная идея для одной моей программульки…

    Reply
  32. vladimir-boy

    Автору огромный респект! Настоящий профи!!! Данная разработка- очень серьёзный инструмент в 1с7.7 и мне просто необходима. И у меня, к сожалению, возникла проблемка- график (рис.2) выводится на ура, ну как его распечатать, когда

    опция и меню принтера притушена, что делать?????

    Подскажите пожалуйста!!! Заранее мегаспасибо!!!

    Reply
  33. maljaev

    (32) Перед выводом в форму график сохраняется как обычная картинка формата BMP. Соответственно не представляет никакого труда вывести эту картинку в любую печатную форму (смотрите пост №24).

    Reply
  34. venger

    (22) > Можно использовать 1С для личных целей, если нужно скажем обработать свой фотоальбом с использованием различных преобразований или получением информации о фотках, а фоток скажем несколько тысяч.

    — Да, сюда можно прюкрутить, например, эх, когда руки дойдут:-)

    http://www.infostart.ru/projects/1527/

    Reply
  35. maljaev

    (35) Объясни пожалуйста, а зачем в 1С распознавание каптчи? Просто я не понял задумки.

    Reply
  36. rNix

    Я только начал изучать 1с Предприятие 8.1. У меня есть проблема с использованием gflax в 8-й версии: выбираю Форма -> Вставить ActiveX -> и в диалогом окне отсутствует данный элемент. Он установлен, переустановлен на более позднюю версию и все же не отображается, несмотря на то что в 7.7 он работает, а так же успешно подключается и работает в VBA. Некоторые другие ActiveX после установки появляются там сразу. Пробовал через

    Форма = Отчеты.Отчет1.ПолучитьФорму(«Форма»);

    Форма.ЭлементыФормы.ДобавитьActiveX(«GflAx.GflAx.1″,»gflax»);

    График = ЭлементыФормы.gflax;

    Ошибки нет, но использовать gflax неудается.

    Как поступить в данном случае?

    Reply
  37. maljaev

    gflax не имеет визуальных activex-контролов. результат его работы — обычная картинка.

    Reply
  38. rNix

    И все же, как мне быть? Задача заключается в построении анимированного графика, если остальное мне как то видится еще, то главной задачей для меня сейчас является рисование линии на форме, или хотя бы точки. Подскажите пожалуйста пример рисования линии в 8 версии.

    P.S.: в данный момент занимаюсь извращением: составляю линию из отдельных полей картинок с изображением черного квадрата 3х3 пикселя %)

    Reply
  39. maljaev

    (40) я в восьмерке не силен. тем не менее процесс мне представляется так:

    1. кладешь на форму картинку.

    2. создаешь объект gflax (в восьмерке это вроде Новый(), в семерке СоздатьОбъект()), идентификатор можешь посмотреть в примере для семерки.

    3. с помощью объекта gflax рисуешь в буфере картинку, сохраняешь в bmp-файл.

    4. загружаешь файл в лежащую на форме картинку.

    5. при необходимости возврощаешься к п.3

    Можешь посмотреть пример к семерке, по аналогии заточишь под себя. если ты ни в 7.7, ни в 8.1 не силен, то помочь не могу.

    Reply
  40. rNix

    (41)

    Меня смутило понятие идентификатор, google по запросу «идентификатор gflax» ничего не дал. Нашел в 7.7 это

    Картинка=СоздатьОбъект(«GFLAX.GFLAX»);

    Возможно имелся ввиду тип, но может быть я и ошибаюсь.

    В разных вариациях потестил след. часть кода в 8.1 (Нарисовать Линию и Получить Цвет здесь не приводится)

    Форма = Отчеты.Отчет1.ПолучитьФорму(«Форма»);

    Форма.ЭлементыФормы.ДобавитьActiveX(«GflAx.GflAx.1″,»GFLAX»);

    Картинка = Новый(«GFLAX.GFLAX»);

    НарисоватьЛинию(Картинка, 1, 2, 3, 4, 1,ПолучитьЦвет(220,250,255));

    Ошибки были, либо неверный тип «GFLAX.GFLAX», либо GFLAX не найдено поле (метод).

    Пока что не нашел ни одного примера для 8.1 с использованием этого AX, и наводит на мысль, что поддержка 8.1 — пустые слова.

    Reply
  41. Душелов

    А можно вот это к примеру использовать http://infostart.ru/projects/4028/

    Если я правильно понял идею.

    Reply
  42. maljaev

    (42) насчет пустых слов не говори если не уверен. activex-библиотеки можно использовать где угодно хоть в VBScript хоть в delphi хоть в 1С 7.7/8.1. если я не могу написать тебе пример на 8.1 это не значит что это невозможно. ты я гляжу тоже не очень в восьмерке силен, так может не стоит пока залезать в дебри, потренируйся на чем попроще. кстати документация по функциям и свойствам gflax приводится, хотя она и не идеальна но я по ней учился.

    Reply
  43. rNix

    (43)

    Мб и поможет, но нужно рисование прямой линии, соединяющей произвольные две точки, здесь же только функция времени.

    (44)

    Документация достойная, сразу получилось подключить в VBA, а значит возможно я там смогу нарисовать то, что мне нужно, сохранить и открыть в 1с. Жаль, что я сразу не понял того, что в 1с это делается таким же путем (сохранение-открытие), а следовательно построение анимации будет хуже, чем я предполагал. Осталось получить ответ на важный вопрос: Можно ли использовать напрямую GFLAx в 8.1 и рисовать на встроенном элементе управления?

    Reply
  44. Душелов

    (45) А задача какая-хоть?

    Reply
  45. rNix

    Построить анимацию графика линий фокуса, приближающихся к центру (что то вроде спирали, которая закручивается в центр, и таких одновременно 4 штуки)

    Reply
  46. Душелов

    (47) А анимированно зачем?

    Reply
  47. rNix

    (48)

    Задача в курсовой такая

    Reply
  48. Душелов

    (49) С тебя пиво http://infostart.ru/projects/4039/

    Reply
  49. Душелов

    (49) А почему именно в 1С, а не на нормальном ЯП?

    Reply
  50. rNix



    http://imageshost.ru/links/e24af35b74040b24c4b53461b649723c

    Своим извращением решил задачу, жаль что без помощи выложенного здесь средства.

    (49) -> (48) не я ее придумал себе

    Reply
  51. liding

    Извините, если вопрос покажется наивным. Я не потрудился разобраться со всеми функциями библиотеки. Однако первое впечатление от запуска обработки для вывода графиков в 1с 7.7 двойственное. С одной стороны, все очень красиво, просто супер, а если учесть что это сделано просто, и без всяких .net на открытой библиотеке моей любимой xnview, то хвалить можно бесконечно. Аналогов я не нашол. НО! в демонстрационной обработке омрачает впечатление очень медленный расчет. Быстродействие довольно слабенькое. Может можно его увеличить (в идеале сделать мгновенный вывод) если скажем снизить качество графики. Если это возможно, то как?

    Reply
  52. CheBurator

    а вы прогоните через отладчик замером производительности — на чем именно больше всего тормозит… сразу все ясно станет

    Reply
  53. maljaev

    Дело в том, что для реализации всех красот (градиентов, полупрозрачности, сглаживания и т.д.) используется практически попиксельный расчет. Ну и сами можете представить, как напрягает 1С выполнить двойной цикл скажем 500х500 пикселей (250’000 точек), да еще с обращением к библиотеке для каждого пиксела. Пришлось расчет перенести из 1С в VBScript, что увеличило скорость в 4 раза, но все равно не достаточно для быстрого расчета (VBScript — тоже интерпретатор, только побыстрее 1С). Вариант вижу один — использовать GflAx для большинства функций графики, которые было бы крайне тяжело и долго реализовывать самому, но написать еще одну ActiveX-библиотеку на C++ для выполнения попиксельных расчетов. Тогда скорость возросла бы минимум раз в 100. Я пока нахожусь на стадии изучения Visual Studio 2008, когда научусь писать библиотеки — попробую реализовать, т.к. теоретически это должно быть несложно. Если конечно кто-нибудь меня не опередит.

    Reply
  54. vladimir-boy

    Здравствуйте, уважаемый автор!!!

    Будьте добры!Помогите пожалуйста понять, что неправильно делаю, хотя вроде всё должно быть правильно!!!

    У меня возникло впечатление, что данная компонента у меня подглючивает!!!

    Если я создаю картинку допустим 1000*1000, то в некоторых участках вообще невозможно что-либо отобразить (элементарную линию или прямоугольник и т.д.), а в некоторых участках рисуется неадекватные параметрам фигуры!!!

    Привожу элементарный пример построения прямоугольника, который несоответствует своим пропорциям и параметрам:

    Функция ПолучитьЦвет(Красный,Зеленый,Синий)

    Возврат Окр(Синий)*65536+Окр(Зеленый)*256+Окр(Красный);

    КонецФункции

    //*******************************************

    Процедура Выполнить()

    картинка=СоздатьОбъект(«GFLAX.GFLAX»);

    картинка.NewBitmap(1000,1000,ПолучитьЦвет(255,255,255));

    Картинка.DrawRectangle(200,0,400,150);

    Картинка.SaveFormat=4;

    картинка.SaveBitmap(КаталогИБ()+»picturesgraf.bmp»);

    График.Загрузить(КаталогИБ()+»picturesgraf.bmp»);

    График.РежимРисования(2);

    КонецПроцедуры

    Заранее сердечно благодарю!!!

    Reply
  55. vladimir-boy

    ..и кстати если координаты прямоугольника в вышеприведённом примере изменить на следующие, то плучается в принципе искомый прямоугольник 200*150- то есть, что хотел, однако, это ниесть хороший тон программирования

    :)))))))))))))))))))))))))))))))))))))))))))))))))))))))))

    Картинка.DrawRectangle(200,0,200,150);

    Reply
  56. vladimir-boy

    ..кто нить пожалуйста протестируйте пример выше!!!(Возможно у меня только такие «чудеса»)!!!

    Зараннее большое спасибо!!!

    Reply
  57. Душелов

    (58) А попробуйте мою в (50)

    Reply
  58. vladimir-boy

    (59)Здравствуйте мастер-профессионал!!!

    Я кстати изучал Вашу серъёзную разработку, но не совсем разобрался как в ней можно в отчёте в печатной форме допустим сформировать график, а потом вывести его на принтер.

    А на форме я выводил различные геом. фигуры легко, что конешн радует!!!

    Reply
  59. maljaev

    (56-57) Почитайте доку по флаксу, пожалуйста:

    DrawRectangle(X As long, Y As long, Width As long, Height As long)

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

    Reply
  60. vladimir-boy

    (61)Здравствуйте почтенный автор!!!

    Простите меня пожалуста, что я так «протормозил». Честно говоря не обратил внимание на параметры рисования прямоугольника и зациклился на координатах.

    Впредь теперь буду тщательно изучать доку!!!

    МегаСпасибо Вам за помощь и за ВАШ труд!!!

    Reply
  61. Душелов

    (60) Сохранить, как картинку и вставить в печ. форму.

    Reply
  62. mgor

    Отличная компонента!

    В 8.1 подключается так:

    Картинка = Новый COMОбъект(«GFLAx.GFLAx»);

    Reply
  63. fimka

    То, что искал!

    Сделал на ней печать отсканированных сертификатов по 2 на лист А4.

    Если кому надо — могу выложить.

    Reply
  64. TolikL

    При помощи этой компоненты можно совместить две картинки;

    Пример на 1с 7.7

    Картинки=СоздатьОбъект(«GFLAx.GFLAx»);

    Картинки.MergeAddFile(«D:12345.JPG»,90,1,1);

    Картинки.MergeAddFile(«D:123.JPG»,20,1,1);

    Картинки.Merge();

    Картинки.SaveFormat = 1;

    Картинки.SaveBitmap(«D:123456789_» + Строка(Y)+».JPG»);

    Reply
  65. maljaev

    Я знаю что можно. А если использовать не JPG а PNG, то накладывать можно с учетом альфа-канала, то есть прозрачности. Я так водяные знаки делал.

    Reply
  66. GSA3D

    В SDK по Gfl есть еще справка по GflLib — там куда больше всего интересного, чем в GflAx. Только как его к 8.1 прикрутить я так и не понял.

    На 8.1 кстати не появилось еще примеров?

    Reply
  67. maljaev

    GflLib — это библиотека для использования в проектах на С/С++. GflAx — библиотека для использования в приложениях, поддерживающий COM (ActiveX), в том числе 1С 7.7, 1с 8.1, 1С 8.2. Работа с GflAx из 1с 8.1 и 1С 8.2 в обычном режиме практически ничем не отличается от 1С 7.7, разница только в команде инициализации объекта, поэтому смысла выкладывать отдельно примеры для них не вижу. 1С 8.2 в режиме управляемого приложения скорее всего не поддерживает GflAx, хотя могу и ошибаться.

    Reply
  68. GSA3D

    GflAx не поддерживает работу с EXIF, насколько я понял

    Reply
  69. maljaev

    Не знаю, может и не поддерживает, по крайней мере в методах не видел. Но всё же берет откуда-то DPI, с которым было сделано изображение, а это очень важно при печати сканированных бланков. А EXIF можно получить из 1С без GflAx, то ли WSH то ли FSO, не помню точно…

    Reply
  70. GSA3D

    И вот такой еще вопрос.

    При изменении масштаба, сдвиге картинке и т.д. каждый раз записывается на диск временная картинка.

    В реальной работе не приведет ли это к тому, что у пользователей будут через несколько месяцев умирать жесткие диски?

    Ну при условии, скажем, что просматривается в день около сотни фотографий + еще несколько операций по изменению масштаба и т.д.

    Reply
  71. maljaev

    (72) GSA3D, записывается потому что 1С 7.7 может взять и отобразить картинку только с диска, или как вариант использовать дополнительные ВК. Насчет 1С 8 не знаю, может она уже и способна взять картинку непосредственно из памяти. На жестком диске это никак не скажется, вы просто не представляете какое количество дисковых операций одна только Windows делает даже в режиме простоя, по сравнению с этим чтение/запись картинок это капля в море.

    Reply
  72. recop

    Интересно, а какие, например, дополнительные BK можно использовать для того, чтобы бесконечно не переписывать картинку?

    Reply
  73. nirbolz

    (73) да 1с 8 может брать картинки из хранилища значений.

    Reply
  74. eugen91

    Уважаемый автор. Подскажите, есть ли возможность при помощи это обработки удалять фон на картинка к товару?

    Reply
  75. maljaev

    Вряд ли. Это и вручную-то не так просто сделать как кажется. С помощью «волшебной палочки» получается коряво.

    Как я делаю обычно в Photoshop:

    1) копируем исходный слой в буфер (Ctrl+A, Ctrl+C)

    2) создаем копию слоя из буфера (Ctrl+V)

    3) переходим на исходный слой, скрываем его (Слои -> Скрыть слои), затем переходим на слой-копию

    4) добавляем к слою-копии слой-маску (Слои -> Слой-маска -> Показать все)

    5) переходим на слой-маску (Alt + щелчок по слою-маске)

    6) вставляем изображение из буфера (Ctrl+V)

    7) инвертируем слой-маску (Ctrl+I)

    8) идем в кривые (Ctrl+M), центральную точку кривой тянем до верха

    9) переходим на слой-копию (Alt + щелчок по слою)

    10) любуемся результатом, если удовлетворяет то выполняем сведение (Слои -> Выполнить сведение)

    Это работает (с некоторыми вариациями) когда фон однотонный, иначе только ручками (лассо, ластик, штамп и т.д.)

    Reply
  76. CheBurator

    CHM файл — пустой, только оглавление, текстовки — нет…

    Reply
  77. maljaev

    (78) CheBurator, ты на каких виндах открываешь? Не знаешь прописных истин? 😉

    Reply
  78. cool.vlad4

    (78) CheBurator, скорее всего контент заблокирован по причине установленных настроек безопасности в IE. правой кнопкой мыши -> свойства -> разблокировать

    Reply
  79. CheBurator

    (79) не знаю…

    вин7проф

    Reply
  80. CheBurator

    (80) ПКМ где?

    Reply
  81. maljaev

    (82) CheBurator, ПКМ по .chm-файлу, в его свойствах.

    Reply
  82. CheBurator

    уф, блин. задолбала эта интеллектуальность софта 😉

    Reply
  83. maljaev

    А я на своих Win 8.1 что-то в групповых политиках подшаманил (уже не помню что) — и не задалбливает! 🙂

    Reply
  84. ISP

    скажите, можно ли с помощью этой dll сделать снимок экрана?

    Reply
  85. maljaev

    (86) ISP, нет, снимок экрана можно сделать с помощью FormEx если я правильно помню.

    Reply
  86. mortall

    Подскажите, а как объекту Gflax присвоить значение стандартного объекта 1С «Картинка» (версия 7.7)?

    Reply
  87. CheBurator

    (88) тут наоборот — с помощью Gflax готовишь картинку, которую понимает 77, и подсовываешь ее — эту картинку в штатный объект «картинка» 77. Полистай у меня в профиле, я по примеру Автора (Маляева) сделал смотрелку простенькую.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *