Визуализатор 1С БД




Принцип обмена данными из 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='\

41 Comments

  1. GSoft

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

    Reply
  2. support

    Скриншоты!!!

    Reply
  3. AndrewEv

    Как в старом добром Access

    Reply
  4. Душелов

    А ничего так…

    Reply
  5. Ёпрст

    Дык это ж в каком году всё было еще реализовано то ?

    С антрессоли достал ? :)))

    Или просто под снеговик решил переделать?

    Reply
  6. GrayT

    (5)Да без малого 2 года назад. Просто вчера обнаружил тут свою разработку которую вообще в 2001 начинал делать — людям понравилось, они ее выложили. я так подумал а чего бы и мне пылью не тряхнуть 🙂

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

    Reply
  7. Unstoppable

    На Win2003 R2 инсталятору не удается зарегать ActiveMD

    Reply
  8. GrayT

    А самостоятельно-вручную тоже скорее всего не получается?

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

    Для v8 работа через обработку — единственный путь.

    Reply
  9. sashulyT

    (7) на Win2003 R2 у меня вывалилась ошибка при установке, но программа работает.

    (0) не хватает автоматического построения по всей конфигурации

    Reply
  10. GrayT

    «не хватает автоматического построения по всей конфигурации» — именно так и написано? Исходники дома не смогу глянуть.

    Работа через МД или xml — Что за конфа? Если ХМЛ — может вышлешь файлик на grayt DOG front.ru — постараюсь посмотреть вечерком чего и как

    Reply
  11. GrayT

    тьфу блин, запарился — думал у тебя ошибка такая вылазит 🙂 Притормозил малость :))

    Reply
  12. GrayT

    Авто построение по всей конфигурации — практически не выполнимая, да и не нужная вещь

    во-первых встают вопросы размещения объектов и трассировки связей чтоб они в глазах не мельтешили и не сливались (не выполнимо)

    во-вторых Это будет абсолютно не информативно. Разве что только для микроскопической конфиги сгодиться (потому и не нужно). Можно подумать за подсистемы конечно. Но все равно — обилие связей приводит к то му что приходиться формировать несколько диаграмм — для каждого конкретного случая. Да и размещать объекты приходиться в зависимости от того какую подсистему хочешь реально изучить/запротоколировать 🙂

    Reply
  13. sashulyT

    (12) Тогда скажу по другому: было бы удобно если можно было сформировать ближайшие связи объекта, т.е. передащил документ а программа сама вытащила и разместила используемые справочники. Количесвто колен связи можно настраивать.

    Reply
  14. GrayT

    Там по второй ссылке лежит еще одна программа — первый вариант. Вот там реализовано то что ты просишь (если я тебя правильно понял). Но там вместо практически полноценного графического редактора используется excel 🙁

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

    Reply
  15. sppr

    Хелп… Чего то по Висту Актив МД не устанавливается пишет что ошибка памяти

    Reply
  16. GrayT

    Виста зло 🙂

    А если серьезно — мне даже попробовать негде на висте 🙁 Но если ты так говоришь — значит скорее всего так оно и есть…. Я уже писал по поводу АктивМД. во-первых он только для семерки. во-вторых активМД заточен под оперативный учет и накладывает ряд ограничений (не все объкты конфигураций вытаскиваются)

    Reply
  17. awk

    То же на висте с activemd проблемы, правда на хп сп3 то же, пишит что конфа под паролем, а пароля и нет..

    Reply
  18. GrayT

    Ну делаю вывод что с АктивМД явные проблемы начиная с SP3 🙁 Что то там не так. То что с паролем не работает — там на самом деле все просто — если активМД не смог открыть МД-шник, считаю что это пароль….

    Reply
  19. Константин С.

    Прикольная штучка)))

    Вот только, неудобсто.

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

    В этом случае практическое применение насколько ограниченно.

    Reply
  20. Sergey K

    а можно последнии скрины выложить? для 8.1

    Reply
  21. alex_bob

    Плюсану за ActiveX

    Reply
  22. wirg

    отсутствие сохранения в другие форматы делает данную обработку бесполезной, идея хорошая, но это только логическое представление базы данных, а где физическая структура, как ErWin???

    Reply
  23. GrayT

    «Плюсану за ActiveX» — за какой из двух? 😉 Там их два и надо признать — оба не мои.

    ActivteMD (автор Павел Бычковяк если не ошибаюсь) и Pro Grapher (сайт первоисточник молчит к сожалению http://www.script-debugger.com )

    Что касается других форматов. Так понимаю что речь идет о векторных форматах. С этим проблемы — у используемого АктивХ нету функции экспорта в вектор 🙁

    Что касается физической структуры. Ну во-первых повторять ЕрВин ни кто и не старался. Смысл рисовать физику? Программа задумывалась именно как инструмент анализа, изучения и документирования логических связей.

    Reply
  24. Abadonna

    (35)>(автор Павел Бычковяк если не ошибаюсь)

    НЕ ОШИБАЕШЬСЯ 🙂

    Reply
  25. VitGun

    у мну не работает. при попытке загрузки из MD или из XML вылезает access violation.

    Reply
  26. Константин С.

    >>Что касается других форматов. Так понимаю что речь идет о векторных форматах.

    >>>С этим проблемы — у используемого АктивХ нету функции экспорта в вектор 🙁

    Ну векторы это круто конечно, но хватило бы

    >>>Pro Grapher supports:

    >>>Export to the .BMP, .JPG, .PNG and .EMF formats;

    Reply
  27. GrayT

    «у мну не работает. при попытке загрузки из MD или из XML вылезает access violation.» хм… скриншот можешь сделать? И выслать xml файл — попробую у себя.

    АктивХ Pro Grapher нормально установился?

    —————

    >>>Export to the .BMP, .JPG, .PNG and .EMF formats;

    Ну прикрутить экспорт в растровые форматы не проблема — сделаю на досуге 🙂

    Reply
  28. kosintaris

    УРААААА

    Reply
  29. il1973

    «+» однозначно.

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

    Reply
  30. bnxvs

    Плюс. Очень полезная вещь.

    Reply
  31. 5353

    А на УСН 7.7 не пойдет? Ошибка: ‘0,001’ is not a valid floating point value. 😥

    Reply
  32. GrayT

    (43) В какой момент такая ошибка возникает?

    Reply
  33. 5353

    Сразу при запуске((((( а программка ну ооооочень нужна.

    Reply
  34. GrayT

    Операционка какая? Если сразу при запуске то УСН тут не причем. Видимо проблемы с АктивХ графическим 🙁

    Reply
  35. anna_irk

    очень нужна данная обработка, но почему то не могу ее скачать…((

    есть другой ресурс, где это выложено?

    Reply
  36. Sergey_Murzinov

    Добротно, и качественно, рад

    Reply
  37. shomo

    Как то потыкался — потыкался ошибка через ошибку лезут… аж расстроился…

    Reply
  38. tonger

    Большое Спасибо!

    Очень полезная обработка

    Reply
  39. anna_irk

    очень помогло, спасибо

    Reply
  40. dandrontiy

    При первом запуске выдает ошибку:

    0.001 is not valid

    Потом при открытии ошибки не выдает

    Пытаюсь загрузить XML описания конфигурации — пишет что поддерживается только формат версии 1.

    Какой версии конвертации данных его можно сделать ?

    Начало XML Файла выглядит так:

    <?xml version=»1.0″ encoding=»UTF-8″?>

    <Конфигурация xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» Имя=»Acsyst»>

    <CatalogObject.Конфигурации>

    <Ref>c589adfc-36cd-496f-99c7-f740fc1e918c</Ref>

    <IsFolder>false</IsFolder>

    <DeletionMark>false</DeletionMark>

    <Parent>00000000-0000-0000-0000-000000000000</Parent>

    <Description>Trading-Figeding</Description>

    <Имя>Trading</Имя>

    <Синоним>Конфа (Trading-Figeding 8.1)</Синоним>

    <Комментарий/>

    <Версия>8.1.01.01</Версия>

    <ДатаОбновления>2011-12-09T18:06:50</ДатаОбновления>

    <Приложение>Предприятие81</Приложение>

    </CatalogObject.Конфигурации>

    <CatalogObject.Объекты>

    Reply
  41. GrayT

    А откуда вообще этот XML файл взялся?

    И еще — может стоит посмотреть вот на это — http://infostart.ru/public/101036/

    правда она под 8.2

    Reply

Leave a Comment

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