Дипломный проект "Учет деятельности фирмы — 1C:Франчайзи"




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

23 Comments

  1. lihomanov

    надо проверить!!!

    Reply
  2. lihomanov

    Держи + за смехалку, а копировать не хорошо! видел одну похожию конфу!

    Reply
  3. nosferatu20913

    А обработка по выгрузке и загрузке справочников явно плагиат 🙂

    http://blog.infostart.ru/2007/03/20/16

    Reply
  4. Altair777

    (2),(3) А Вы что-то другое ожидали от нынешних студентов? 🙂

    Reply
  5. e.kogan

    Франчайчи? Это кто чаем торгует, что ли?.. 😀

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

    Ужос 😀

    Reply
  7. Димча

    «… и ни на что не претендует …» — конфа защищена паролем и ко всему не претендует на открывание.

    «… Может кто-нибудь чего-нибудь себе из нее выдернет …» — подскажите заодно пароль или способ его сломать.

    Reply
  8. Димча

    (7) — ссори — комментарий не к той базе

    Reply
  9. PolAlex2

    надо же какая куча вопросов и комментариев возникла 🙂

    (8) Вероятно да 🙂 Никакого пароля у меня нет.

    А что — кто-то еще не знает как снять пароль на конфигурацию 7.7???

    (4) > «Вы что-то другое ожидали от нынешних студентов?»

    Ну не совсем нынешних… это вообще то 2002 год 😉

    (3) > «А обработка по выгрузке и загрузке справочников явно плагиат»

    Почему плагиат??? Это и есть та самая всем известная обработка «Выгрузка и загрузка справочников». Так же можно сказать что и ее автор тоже плагиатор, ибо по той самой ссылке сказано: «Автор только немного расширил функционал разработки (которая распространяется на всем известных дисках информационно-технического сопровождения (ИТС) с незапамятных времен)»

    (2) а копировать не хорошо! видел одну похожию конфу

    Эту конфу ты мог видеть только на 1c.proclub.ru 😉 Больше я ее нигде не выкладывал…. А по поводу копирования — когда я писал диплом — ничего похожего не видел и не копировал.

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

    Reply
  10. Pim

    (9) а не расскажите как такую картинку на заставку сделать?

    Reply
  11. PolAlex2

    (10) а какие проблемы?

    в архиве есть папка Pic, в ней лежил «подложка» — Slice.bmp

    Она вроде всегда в самой 7.7 лежит, в Bin

    Берешь ее и сверху кладешь что тебе надо. Только не забудь еще палитру подгрузить!! взять ее можно из того же из Bin — это файлики «main.ACT», «main.cpl», или «main.PAL».

    Для фотошопа это «main.ACT». Без 1С-ной палитры будут косяки с цветами.

    Либо возьми готовый макет со слоями у меня — файлики с расширением .ufo.

    Это в форммате Ulead PhotoImpact, очень хорошая и мощная программа для таких целей. Палитру вроде фотошоповскую хавает.

    Вот еще прочитай статейку — http://vip1c.narod.ru/stat/stat_1.htm

    Инфы про это много.

    Reply
  12. katerinaUniv

    Я в данный момент пишу диплом на 8-ке CRM-ку для франча, так что выложу обязательно!!! Обещаю плагиатом не заниматься, а рассматривать данный дипломный проект как аналог. После завершения выложу обязательно (защита в мае)

    Reply
  13. PolAlex2

    (12) >> пишу диплом на 8-ке CRM-ку для франча

    Тогда очень советую ознакомиться с продуктом «1С-Рарус: Управление фирмой Франчайзи».

    Это как раз конфа для франчей, основанная на УТ +CRM Prof (УТ и ВСК)

    Reply
  14. katerinaUniv

    спасибо за совет, а с самой конфигурацией как можно ознакомиться (не покупая ее)?

    Reply
  15. PolAlex2

    (14) Конфа продается только для Франчайзи.

    Вероятно ты работаешь во франче? Тогда ты (или твой руководитель) можете подать заявку в 1С на получение демо-доступа к конфигурации (на 2 недели вроде, но можно потом продлить). Это бесплатно. На сайте 1С есть вся инфа, проде сервис так и называется — «Демо-сервер».

    Можно будет погонять ее и посмотреть как что реализовано. Есно доступа к конфигуратору не будет 😉

    Может заодно начальство и прикупит :))) Многие франчи на ней работают.

    Описание конфы тут — http://www.rarus.ru/press/news/57288/?phrase_id=107258

    Reply
  16. katerinaUniv

    спасибо.

    Reply
  17. PolAlex2

    ну и как говорится «безгранично великий интернет велик в своей безграничности» 🙂

    Reply
  18. CoreakaKas

    Добрый день. Скачал Дипломный проект «Учет деятельности фирмы — 1C:Франчайзи», установил 1С Предприятие 7.7: Бухгалтерский учет. На Windows 7 отказывается работать вообще. На ХР при загрузке выдает ошибку метаданных. В чем проболема?

    Reply
  19. PolAlex2

    >Добрый день. Скачал Дипломный проект «Учет деятельности фирмы — 1C:Франчайзи», >установил 1С Предприятие 7.7: Бухгалтерский учет. На Windows 7 отказывается >работать вообще. На ХР при загрузке выдает ошибку метаданных. В чем проболема?

    Конфигурация для оперативного учета, под компонентой «бух. учет» не пойдет.

    В описании ошибка, щас исправлю.

    P.S. Всегда работал под комплексной, сначала даже не понял в чем дело может быть 🙂

    Reply
  20. RailMen

    Автоматизация работы франчайзи — велосипед в зародыше мысли своего создания.

    Хотя я тут вспомнил себя на 3 курсе Универа — писал прогу на досовском паскеле по формированию табеля учета рабочего времени. Вот уж это был деревянный велосипедище )))

    Reply
  21. PolAlex2

    Ну во первый, в то время ничего универсального не было. Это щас есть 2 конфы «1С: Совместно» + несколько Совместимых. А раньше у всех только были свои доморощенные были.

    А во вторых — это ж для диплома, а не для жизни 😉

    Reply
  22. Gendalf_beliy

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

    Reply
  23. Gendalf_beliy

    (12) katerinaUniv, я посмотрел по Вашим публикациям, но ничего похожего пока не нашел. Вы просто не выложили или я плохо смотрел?

    Reply

Leave a Comment

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