<?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='\
Описание методов и объектов будет позже.
Пока программно можно создавать только прямоугольник.
А вот поиграться визуальным редактированием можно уже сейчас.
Группировать объекты, вращать, растягивать, деформировать и т.п.
вещь нужная и есть немалое подозрение, что пригодится
Если бы существовала возможность вызывать определенное событие в 1С (например, открытие формы списка или элемента) при определенных действиях с фигурами (например, при двойном клике), было бы просто супер
(3) А в чем проблема-то это сделать?
В примере есть показ отработки двойного щелчка мышкой на фигуре.
А сам грозился уехать на две недели. Их однозначно кучка!
Вещь полезная.
хорошо бы еще импорт объектов векторных хоть бы одного формата поддерживать.
(6) в 3Д что ли?
(7) Пока отпуск задерживается 😉
(8) Корел выложил формат своих файлов?
Добавил программное создание всех фигур.
Добавил описание свойств и методов.
Продолжаем работу дальше…
(10) Кгхрм…
С тобой не соскучишься ;))
Придется знакомиться глубже. Если понравится, с тебя не слезу :))
>Придется знакомиться глубже. Если понравится, с тебя не слезу :))
Вау :)))))))))))))))))))))))))
(12) Не сомневался в твоем ответе.
Старый пошляк ;))))
>Старый пошляк ;))))
Модно подумать ты — пошляк молодой ;))))))))))))
(11) :))
Смотри еще в сторону групиировки простых элементов в сложный. Визуально.
Я пока программно это реализовываю. Ну и, конечно, будет ассоциация объекта с 1С-ными данными.
(15) Уже смотрю. Но интересует именно программная группировка.
А так, очень богатая штука получается.
А можешь добавить описание как ты сделал сам Активикс, чтобы он работал с 1С? Я в своё время пытался, но знаний не хватило. Также не разобрался до конца, почему одни активиксы работают в 1С, другие — нет.
(17) Описания никакого. Обыкновенный активикс по всем правилам.
(17) Любой активикс может работать с 1С.
А как схему напечатать или сохранить в графический файл?
(19) я почему вспомнил это: пробовал какой-то зарубежный активикс (было это полгода назад, забыл уже что за хрень, вроде так и называется Vector Graphics ActiveX), позволяющий рисовать векторную графику, прямо как этот активикс от Душелова. Ну вот он и отказался работать в 1С. Хотя даже в Wordе работал.
(20) Пока никак.
(21) Должен был заработать.
(22) Да точно (посмотрел свои записи) эта хрень Vector Graphics ActiveX v.1.6.7 в 1С не работает. А там более 1000 всевозможных графических методов.
подскажите как подключить в семерке
(24) Перем Рисование;
Процедура ПослеОткрытия()
Рисование= СоздатьОбъект(«АктивИкс»);
Рисование.УстановитьАтрибут(Форма, «АктХ»);
//»АктХ» — идентификатор элемента диалога, на месте которого будет создан элемент ActiveX.
//только для реквизитов диалога типа «Текст».
Рисование.СоздатьЭУ(«Душелов.VectorDrawing»);
Рисование.УстановитьФокус();
КонецПроцедуры
Добавил методы по группировке и редактированию.
(24)
например так:
АктивИкс = СоздатьОбъект(«АктивИкс»);
АктивХ.УстановитьАтрибут(Форма,»ИдАтрибутаНаФорме»);
АктивХ.СоздатьЭУ(«Душелов.VectorDrawing»);
АктивХ.УстановитьФокус();
та ё… не обновился 🙁
странно, не отрабатывают горячие клавиши нефига 🙁
и хинтов бы добавить еще..
(29) Какие? ctrl + a и прочие?
(31) ага, в клюшках вообще ни одна не срабатывает 🙁
Ctrl+z работает 🙂
В клюшках (в них самих) ваще нет сочетания CTRL+A (уроды, блин)
Помню, когда делал форматтер для клюшек приходилось программно нажимать пункт меню «Выделить всё»
(34) ну… опенконфом можно сделать (у меня работает) 🙂
(31) не работают так же Del, еще например..
ну дык опенконфом… я про то, что они не удосужились даже стандартные виндососвские замутить
(25, 27) спасибо
В ближайших планах — формирование собственной библиотеки примитивов и работа с 1С-ными объектами.
Уже сейчас вполне можно сделать аналог схемы бизнес-процессов полностью программно.
не, ну прикольно! ))) пригодится-нет, не знаю, альтернатива Paint ), еще бы цвет менять и сохранять… ваще PhotoShop будет!
(40) Цвет менять где?
Не регистрируется (((
(41) туплю, нав, у фигур не смогла…
(42) А что пишет?
(43) ЦветФона1, ЦветФона2
(44) ага, уже догадалась ))) спасибо. клёво!
Ну как обычно 🙂 Душелов жжот 🙂
Сделай пожалуйста дружищще описание методов и объектов.
Мне как раз сейчас такая штука нужна.
В табличном поле это не красиво выглядит да и изменять надо….
есть на крайнем севере поселок…..
вагончики стоят…..
— Хм ну вот ваши вагончики… можете просто щелкнуть по одному и посмотреть кто там живет….
— А если я вагончик передвину, ну или еще один поставлю, ну или уберу устаревший… как мне……..?
— Ну там есть справочник «Вагончики», ну там есть коодинаты….
— Коорди.. что? оО
Не весь топик прочитал….
того что есть в комментах уже достаточно
Душевное спасибо!!!!
Душелов, кинь мне на dushich(собака)mail.ru свой номер кошелька. Буду зарплатой делицца 🙂
(47) 🙂 В профиле у меня все указано 😉
Векторная графика в 1С — вещь достаточно необходимая. Если поискать, в сети можно нарыть несколько достаточно хороших ActivXов.
Только вот стоит ли разрабатывать что-то свое с нуля? Не проще взять к примеру открытый формат SVG и реализовать его средствами GDI?
(49) Платных?
Стоит разрабатывать. Как минимум за то, что в векторную фигуру передавать ссылку на 1С-овский объект. Мне проще свое написать, чем брать чужие, платные, ломать их и т.п.
(50)
Я не говорю, что не стоит, может проще пойти по другому пути, взяв за основу что-то зарекомендовавшее себя? Если бы, как вы писали выше, Corel открыл свой формат, возможно Вы бы взяли его за основу ведь так?
Почему платных? Тот же VGA версии 1,0 бесплатен, CorelSVG, AdobeSVG
Что имеется ввиду передавать ссылку?
Ассоциировать элемент графики с объектом 1С можно через какое-нибудь банальное id объекта.
(51) Ага. id.. И для того, чтобы, к примеру, при наведении мышкой на объект выпадало меню с действиями и с информацией о предварительной цене (к примеру ПВХ), наличии на складе. Что делать будем с этими зарекомендовавшими объектами? 😉
Вывести дополнительным слоем или в отдельном ЭУ формы 🙂
Не предполагал, что задумка у вас настолько глубока. Если удасться интегрировать ваш AX в среду настолько, насколько Вы описали — равных ему я думаю не будет.
но в дальнейшем, как обычно, встанет вопрос скорости отрисовки объектов, расширения за счет скриптов 🙂
Кстати, выпадать будет меню 1С?
(53) Ага, спасибо, и отдельный слой пересчитывать при масштабировании и скроллинге.
(55) Нет, меню выпадать будет собственное, но оно будет генерить события в 1С.
(53) Ага, спасибо, и отдельный слой пересчитывать при масштабировании и скроллинге.
Затраты времени для пересчета при масштабировании и скроллинге будут заметны при большом количестве объектов, к примеру в ГИС приложении.
Посмотрите библиотеку IbisMap разработки Rebelx — никаких задержек при большом количестве объектов
(55) Нет, меню выпадать будет собственное, но оно будет генерить события в 1С
Реализовывал это же на базе SVG пару лет назад — ничего сложного
Я думал, вы хотите реализовать обработку событий объекта графики с помощью объектов 1С — меню, диалогов и т.д.
Вот это было бы по настоящему….
(58) >Я думал, вы хотите реализовать обработку событий объекта графики с помощью объектов 1С — меню, диалогов и т.д.
А оно это надо? Можно и это окно вызывать. Передаешь объект 1С-овский, у него свой форма с меню, ее вызывать без проблем, как в моей Tray1C, где всплывающее окно 1Совское вызывается.
Кстати, в AX вы же можете получить контекст приложения?
Или это только в ВК?
(60) Я могу передать объект 1С и работать с ним в полной мере.
Контекст приложения только в ВК, хотя на эту тему еще подумать можно.
А скорость отрисовки объектов не смотрели? Ну к примеру миллиона?
Вот это было бы круто — вызывать объекты 1С а не собственные, а собственные использовать для целей графики (перемещения, масштабирования и тд)
(63) А какие объекты надо вызывать? У фигуры есть объект 1С, соответственно все методы и свойства используются 1С-овские.
А возможно в объекте графики хранить ссылку на объект 1С?
Чтобы к примеру отработал следующий код
Предположим, что в свойстве ссылка объекта фигура хранится ссылка на объект 1С СправочникНоменклатура
Процедура ЭлементУправления1ПриДвойномЩелчкеМышкойНаФигуре(Элемент, Фигура)
//Сообщить(«Нажат » + Фигура.Имя);
Фигура.Ссылка.ПолучитьОбъект().ПолучитьФорму().Открыть();
КонецПроцедуры
(65) Я про это выше и говорил.
что то в своей копии вашей библиотеки я этого не увидел..
может есть версия новее?
(44) Видимо, с сетевого диска просто не стартовало. Скопировала на локальный — всё пошло.
(67) Это все в разработке. Можно в комментариях посмотреть, что делается и что добавляется.
(68) Да, с сетевого не рекомендуется.
(69) ну тогда остается только пожелать терпения и удачи 🙂
А есть такая компонента для 1С которая могла бы например определить что подключено 2-а монитора и выводить мне нужную информацию на второй монитор из 1С ?
(71) Думаю, такой нет.
Добавил возможность загрузки и выгрузки описания фигур (собственные объекты).
Правда пока еще есть загрузку до конца не доделал (текст пока не грузится, как положено), но все в процессе разработки дальше. Тестировать можно дальше.
Так же слушаю предложения.
В ближайшее время добавлю работу с 1С-ными объектами, ассоциированными фигурам.
В качестве примера в архиве добавил «стрелку».
Я так понял из всего прочитанного выше вы хотите автоматизировать учет в кинотеатрах ?! Т.к. например в «USC примера» для автоматизации кинотеатров поддерживается монитор посетителя где кассир нажимает кнопку у себя и на втором мониторе показывается какие места свободны в зале. Ну а если в 1С невозможно реализовать работу с 2-я мониторами то не очень то и удобно это, особенно когда еще и зал то не один как было в моем случае, а аж 3-и и все разные по размерам и количествам мест. Думаю кассиру не очень объяснять на пальцах какое и где место свободно.
Или есть какая то другая альтернатива монитору посетителя ?
Т.к. я то же в свое время хотел написать по 8-ку автоматизацию кинотеатра.
(76) Это сюда 😉http://infostart.ru/projects/4030/
Я все жду когда появится вывод схемы в графический файл и на принтер. Это по моему должна быть первостепенная задача, которая должна быть реализована. Без этого весь смысл схемы теряется.
(78) Это как раз совсем не сложно сделать. Первостепенная задача — это движок разработать, а всякие «рюшечки» — это уже потом.
Добавил метод:
— СохранитьКартинку(ПутьКФайлу, ФорматФайла); //ФорматФайла — строка (bmp, emf, exif, gif, icon, jpg, memorybmp, png, tiff);
Фон картинки — цвет фона панели рисования.
Ну что, товарищи, результаты тестов есть? 😉
Какие пожелания бы хотелось видеть? А то релиз уже не за горами.
При закрытии обработки рекомендуется использовать метода «Закрыть()» для очистки памяти и предотвращение зависания 1С в задачах.
Добавил у фигур свойство «Объект», которое хранит ссылку на любой объект 1С.
Т.е. можно писать конструкции, вида:
«Прямоугольник.Объект.ПолучитьФорму().Открыть();»
Добавил описание фигуры (свойство «Текст») и вывод его при наведении мышкой на фигуру.
1. Хотелось бы задавать размеры редактируемого поля ну и его вертикальный и горизонтальный скроллинг.
2. Добавочное поле к каждому объекту «Title», которое выводилось бы всегда, либо в середине либо рядом с объектом (по выбору).
3. Поле Текст оставить, что-то я его не обнаружил в компоненте.
4. Возможность привязки соединительных линий к объектам и чтобы при перемещении объекта соединительная линия следовала за ним, ну и возможность установки стрелок у этих линий.
(84) 1. Ну да. Это у меня в планах стоит 🙂
2,3. Текст у фигуры. Он как раз и является «Title».
(4) Ага, аналог MS Visio и Бизнес-процессов 1С-ки.
Исправил ряд найденных ошибок.
Добавил пример сложной фигуры (компьютер).
Добавил свойства компоненты:
— Авторазмер //булево
— Ширина
— Высота
При отключенном авторазмере скриншот будет делаться заданной ширины и высоты, а так же сама панель будет скроллиться.
Добавлено свойство у фигур:
— ПоказыватьТекстВсегда; //булево — выводит всегда описание фигуры
и метод у фигур:
— Показать(); //скроллин видимого поля до выбранной фигуры
Свойство «Заблокирован» на что-нить влияет вообще ?
Или не реализовано ?
…
(89) Реализовано, но не до конца 😉
Как бы не можешь двигать и изменять размеры.
(90) как бы в в клюшках не работает 🙁
А оч. надо…
+91 т.е даёт и двигать и изменять размеры…
(91) Компонента еще в процессе разработки. И до блокирования руки дойдут.
Позже.
Обновил.
Добавил несколько новых методов и свойств.
Добавил демонстрационную конфигурацию «Визуализация сети», которая, используя компоненту, рисует сеть, можно посмотреть параметры компьютеров, щелкнуть мышкой по ним для открытия из форм…
— добавлена возможность двигать фигуры курсором
— тестовая реализация фигуры «стрелка»
эх печать бы… была бы пуля а не компонента
(96) А в чем проблема с печатью? Сохранить в картинку и вставить в печатную форму — не вижу проблемы.
Добавлена функция получения списка фигур, которые содержат выбранную координату
— ПолучитьФигурыПоКоординате(x, y); //возвращает массив объектов типа «Фигура» (ComSafeArray)
Добавлены свойства у объекта типа «Фигура»:
— ЗаблокированаДеформация //булево
— ЗаблокированаДеформацияПоВысоте //булево
— ЗаблокированаДеформацияПоШирине //булево
— ЗаблокированПоворот //булево
— ЗаблокированоПеретаскивание //булево
— ЗаблокированоПеретаскиваниеПоГоризонтали //булево
— ЗаблокированоПеретаскиваниеПоВертикали //булево
А результаты Деформирования объекта не записываются что ли?
Еще — если к существующим фигурам добавить стрелку , то при сохранении вываливается вот такая ошибка:
Рисование.Объект.Записать(КаталогИБ()+»Элементы»+Наименование+».xml»);
{Справочник.Элементы.Форма.Модуль(36)}: Dushelov.VectorDrawing1C: Не удалось привести тип объекта «Душелов.Graphics.Bidimensional.Common.ArrowAppearance» к типу «Душелов.Graphics.Bidimensional.Common.PolygonAppearance».
И что про то что удаленные фигуры все равно сохраняются в файл что скажете?
текст ошибки из (131)
************** Текст исключения **************
System.InvalidCastException: Не удалось привести тип объекта «Душелов.Graphics.Bidimensional.Common.ArrowAppearance» к типу «Душелов.Graphics.Bidimensional.Common.PolygonAppearance».
в Душелов._1C.Полигон.get_ЦветФона1()
в Душелов._1C.Фигура.AddPolygonSettings(XmlWriter writer)
в Душелов._1C.Фигура.AddFigure(XmlWriter writer)
в Душелов.VectorDrawing.ПолучитьОписаниеФигур()
в Душелов.VectorDrawing.Записать(String file)
в Душелов.VectorDrawing.записатьToolStripMenuItem_Click(Object sender, EventArgs e)
в System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
в System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
в System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
в System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
в System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
в System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
в System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ScrollableControl.WndProc(Message& m)
в System.Windows.Forms.ToolStrip.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
(10)Здравствуйте.
где же просмотреть описание методов поподробнее?
И пример обработки с масштабированием и обработкой событий???
SIL