1С 8.0: автосохранение 8.0 (VB6)




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

21 Comments

  1. z-alexey

    Автосохранения чего????

    Reply
  2. pippa

    =) информационной базы (*.dt)

    Reply
  3. XPU-MY

    Привет! Я скачал твою прогу Автосохранеине для 1с 8, но не могу запустить. Ты не поскажешь что нужно для её запуска, какие проги ещё надо установить?

    Спаибо.

    Reply
  4. pippa

    скачай обновленный архив: в нем лежат необходимые dll-ки и почитай файл описания

    Reply
  5. XPU-MY

    Где надо писать эти команды regsrv32 comsvcs.dll или regsrv32 scrrun.dll?

    Reply
  6. pippa

    Пуск -> Выполнить…

    Reply
  7. XPU-MY

    Я всё сделал но она всё равно выдаёт ошибку что-то про файл MSCOMCT2.OCX и не запускается. Что это?

    Reply
  8. pippa

    ОК. извени — забыл… q[-_-]p

    Вобщем я добавил в архив MSCOMCT2.OCX

    скопируй его куда угодно и зарегистрируй (regsvr32 MSCOMCT2.OCX)

    Кстати, какая у тя виндоза?

    Reply
  9. XPU-MY

    XP

    Reply
  10. pippa

    ну как, работает?

    Reply
  11. XPU-MY

    Неа, пишет что MSCOMCT2.OCX не является исполняемым файлом и не одного модуля поддержки для этого файла не зарегистрированно. Всё dll зарегистрировал.

    Reply
  12. pippa

    ладно, сделаю инсталяцию нормальную — выложу… пока не качайте =\

    Reply
  13. XPU-MY

    Ок, ты тока скажи как сделаешь, ок? Очень надо, полезная штука будет…

    Мой майл mishaict@mail.ru

    Reply
  14. pippa

    Все. Положил в архив все что нужно. Качай и читай ридми. регистрируй все библиотеки в архиве.

    Reply
  15. XPU-MY

    Ура заработало!!!!!!!!! Слушай, такой вопрос, а одновременно два если запустить не чего страшного не будет. Просто у меня две базы?

    Reply
  16. XPU-MY

    А да, кстати, в этом архиве нет exe файла, мне то это не страшно потому что я его раньше скачал а если кто-то другой захочит то у него ничего не выйдет 🙂

    Reply
  17. XPU-MY

    А можно добавить, возможность устанавливать период больше 24 часов это было бы удобнее ведь не обязательно надо сохранять каждые 24 часа иногда надо через 48 например?

    Reply
  18. pippa

    все и ехешник тоже есть в архиве теперь

    Reply
  19. pippa

    по поводу планировщика согласен… просто не доделан… ладно через недельку выложу версию с нормальным планировщиком.

    Кстати, запускать параллельно две копии приложения на одном компе не рекомендую (сам не пробовал). вобщем через недельку доделаю и проверю

    Reply
  20. XPU-MY

    Ты знаешь что-то она не работает пишет мне что такая база не зарегистрированна на сервере 1С я посмотрел может быть я ошибся но нет всё правильно. Можешь привести пример, ну скриншот чтоли настройки для серверного варианта?

    Reply
  21. iDev

    мда… вобщем я переделал немого планировщик и добавил скриншот… только я забыл пароль этого логина, так что качай отсюда http://infostart.ru/projects/1105/?ref=12581

    Reply

Leave a Comment

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