1c-minder: обработка для создания ментальных карт (mind maps) в 1С:Предприятие 8




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

29 Comments

  1. azimut70

    Полезная. Теперь можно обмениваться картами даже с теми у кого нет MindMapper-а.

    Reply
  2. WKBAPKA

    Ментальные карты очень полезная штука, все никак не могу дочитать книжечку до конца… плюс, адназначна

    Reply
  3. Istur

    Отличная вещь!! Спасибо, давно искал нечто подобное.

    Reply
  4. sound

    Прикольно. И код открыт. Спасибо, будем юзать.

    Reply
  5. sound

    Выделяю все объекты на схеме (ctrl+A), хочу передвинуть все (стрелка влево), 1С-ка вылетает (8.1.13.37), как победить?

    Reply
  6. kharts

    Спасибо всем за отзывы!

    По поводу ошибки, то на версии 8.1.13.41 не удалось воспроизвести. Будет время — поставлю 8.1.13.37 — посмотрю. В любом случае, думаю, что это ошибка платформы (сам несколько раз замечал ее падения, например, при попытке сохранить схему в виде картинки).

    Reply
  7. sound

    чувствую пора уже на 41-ю версию, все руки не доходят блин, а косяков на 13.37 уже реально много навалилось

    Reply
  8. Flashback1979SE

    Очень полезная вещь для структурирования мысли. Особенно, если что-то глобалить.

    Reply
  9. Арчибальд

    «Смотрит, все понимает, а сказать не может…» 😀

    Reply
  10. AlexBugs

    Напишем русский ARIS в 1С! 🙂

    Reply
  11. Anything

    (0) Отличная работа. Не знаю, будет ли кто делать в 1С ментальные карты, но схемки для пользователей рисовать можно.

    1. Не хватает комбинации клавиш для создании «соседнего» узла.

    2. Не хватает удобной навигации по узлам, например, стрелками.

    3. Хорошо бы при создании нового узла сразу переключаться в режим ввода текста.

    В качестве фантазии на тему развития: можно добавить элементам функциональность. Например, по двойному клику мог бы открываться документ, форма списка справочника и т. п. Или выполняться произвольный код. Не знаю, насколько это реализуемо, но я заметил у всех элементов поле «Подсказка», в которое можно запихнуть во внутреннем текстовом формате всё, что угодно.

    P.S. Сам для ментальных карт всегда пользуюсь FreeMind.

    Reply
  12. kharts

    (11)

    Спасибо!

    По поводу замечаний:

    1. Сам думал над этим. Но, к сожалению, графическая схема не хранит в себе информации об иерархии структуры элементов. Т.е. понятие «соседнего» узла нужно как-то самому отслеживать. Как вариант, вышестоящим по иерархии элементом можно считать тот, из которого выходит стрелка, входящая в текущий узел.

    2. По поводу передвижения по схеме: стрелками так просто точно не получится (их нажатия перехватывает платформа). А вот какой-то другой комбинацией можно попробовать.

    3. А вот переключаться на ввод текста сразу после создания нового элемента — это сделать совсем нетяжело.

    Reply
  13. Anything

    (12)

    Как вариант, вышестоящим по иерархии элементом можно считать тот, из которого выходит стрелка, входящая в текущий узел.

    Угу. Я так и предполагал.

    А вот какой-то другой комбинацией можно попробовать.

    Если можно сделать стрелки с Ctrl или Alt, то будет вполне приемлемо.

    Reply
  14. e.kogan

    Создать узел не получается, хоть убейте (( никак. И горячими клавишами, и кнопкой пробовала. Платформа 41.

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

    Reply
  15. kharts

    (14)

    Чтобы создать первый узел новой схемы нужно нажать «Новая схема» (в левом верхнем углу).

    Понимаю, что, может, не удобно и не совсем логично, но уже работаю над тем, чтобы в обработке были вкладки, и там, наверное, при открытии новой вкладки сразу будет создаваться корневой узел. А сейчас создание первых и последующих узлов — немного разные операции с точки зрения логики работы обработки, поэтому я сделал две разные кнопки.

    А по поводу перетаскивания — даже не знаю… По моему, в текущей конфигурации обработки (кардинально ее не переписывая) это сделать невозможно. Может у кого-то есть мысли по этому поводу?

    Reply
  16. e.kogan

    (15) Первый создаётся. А остальные — никак.

    Reply
  17. kharts

    (16)

    Даже не знаю…

    Пробовал тоже на 8.1.13.41. Все получается. Единственная мысль, которая приходит на ум, это то, что при попытке добавить новый узел самый первый не является активным. В таком случае обработка не находит активного элемента и не знает, куда добавлять новый.

    Reply
  18. e.kogan

    (17) Да, дело оказалось именно в этом.

    Reply
  19. sommid

    вроде прикольная штука. Вот если еще добавить:

    1. добавление объектов из метаданных (как при этом отрисовывать пока смутно представляю.. как минимум в качестве текста синоним объекта. наверно круто было бы и внутренности (реквизиты, таб.части) показывать но с возможностью скрыть/свернуть

    2. возможность выбора картинки из стандартной библиотеки 1С и из общих картинок конфиги

    Reply
  20. Alef

    Использую MindManager, уже на девятую версию переехал

    Reply
  21. Kamikadze

    плюс за интересность. Идея вобще не новая, но реализация — неплохая. здесь главное понять логику записей в grs-файле — и можно творить чудеса.

    Reply
  22. olya_sn

    Попробовала, понравилось, буду пользоваться. Очень хорошая идея. Благодарю!

    Reply
  23. Worst

    Интересно, реально ли из 1С создавать в MM графы подобно

    http://www.graphviz.org/Download.php

    и возможно ли передавать события в 1С при клике в ММ например на узел?

    Reply
  24. klen_2007

    Большое спасибо! Здорово, только после 60 узлов рисует с задержками. На какое количество узлов она расчитана?

    Reply
  25. kharts

    (24) klen_2007, Проблема может быть из-за того, что при добавлении каждого узла вся графическая схема переформировывается и перерисовывается заново. Может, можно как-то более оптимально сделать, но пока руки не дошли придумать.

    Reply
  26. mikhailv

    Добрый день!

    Обработка зависла наглухо при создании очередного (примерно 10-го) узла.

    Хотел уточнить, для каких целей создавался этот инструмент?

    1) Чтобы можно было нарисовать mind-карту в 1С руками

    или

    2) чтобы был API, чтобы можно было нарисовать mind катру программно в 1С?

    Если 1, то зачем? Чем не устроил xmind

    Если 2, то чем не устроили, например,

    http://philogb.github.io/jit/

    https://github.com/kennethkufluk/js-mindmap

    В них можно сотворить что-то наподобие этого:

    http://kenneth.kufluk.com/google/js-mindmap/

    http://philogb.github.io/jit/demos.html

    После некоторых танцев с бубнами поле HTML-документа перестаёт притворяться IE6 и начинает дружить с канвой.

    Reply
  27. KIF

    Автор молодец, что хотя бы попытался…

    Интерес делать это внутри 1С в том, что можно было бы прикреплять объекты данных 1С, сохранять саму схему в справочниках — а потом из неё (например) формировать инструкции. А на «управляемых формах» — вообще бы могло выглядеть очень красиво ( со ссылками на конкретные документы). Да и возможность влиять на код — тоже достаточно важно

    Но юзобилити на самом деле очень посредственное получилось. Видать платформа не позволяет делать то же, что в специализированных программах. Жаль.

    Reply
  28. white-mount

    Скачал, автору благодарность.

    Reply
  29. Akbis

    Есть ли опыт после такого произвольного создания схем привязывать к ним бизнес процессы?

    Reply

Leave a Comment

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