Реестр договоров (Silverlight)




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

13 Comments

  1. tango

    (0) «В справочнике «Договоры и иные возникновения обязательств» разработчик не реализовал контроль за расходованием средств по договору»

    подробнее можно? что именно не реализовано, и что реализовано вами в «данном приложении»?

    сорри, но разворачивать это, чтобы просто посмотреть, мало кто решится…

    Reply
  2. slimper

    В 1С есть только сумма договора, в приложении есть сумма оплаты и остаток средств (сумма-сумма оплаты=остаток) по договору

    Reply
  3. V_V_V

    А переход на управляемые формы 8.2 не решил бы проблему? Ведь тогда Вашу схему «база 1С -> windows служба -> промежуточная база (Sql)-> Web сервер» можно было бы свести к «база 1С -> Web сервер»

    Reply
  4. slimper

    (3) Не уверен, если у Вас дополнительно к бухгалтерии 10 — 20 клиентов, то Вы должны приобрести лицензии на этих пользователей. Зачем платить 1С, когда все можно сделать своими руками

    Reply
  5. tango

    а платить за SQL не надо? 😉

    Reply
  6. cool.clo

    (5) а вдруг у него express или нормальная версия уже была, в общем голь на выдумки хитра, плюс…(хотя, конечно проще лицензиями обзавестись)

    Reply
  7. slimper

    (5) Sql academic значительно дешевле чем сервер 1С.

    Reply
  8. Свой

    Microsoft переключает фокус с Silverlight на HTML5

    http://www.3dnews.ru/software-news/microsoft-pereklyuchaet-fokus-s-silverlight-na-html5

    Президент серверного подразделения Microsoft Боб Маглиа (Bob Muglia) на днях подтвердил уход Microsoft от фокусировки в веб на Silverlight в пользу HTML5. Silverlight теперь остаётся, в основном, платформой для разработки приложений Windows Phone 7.

    Таким образом, нарабатывать опыт в этой технологии неперспективно

    Reply
  9. slimper

    (8) Это только Ваша точка зрения. Выносить вердикт, не подлежащий сомнению, основываясь на одном заявлении представителя MS по меньшей мере некорректно

    Reply
  10. cool.clo

    (8) Да—ааа, а как это вы определяете, что перспективно, а что нет? (кода-то и сам windows был баловством, а сейчас ОС, занимающая одну из основных позиций в мире настольных компьютеров, да и не только)

    Reply
  11. Elisy

    (5) В некоторых вариантах можно не платить за MSSQL, например, когда он расположен у хостинг-провайдера. Вот статья на эту тему:

    Необычно-экономное использование 1С:Предприятие 8 на Asp.Net-хостинге для реализации Интернет-магазина

    Кстати, в конфигурации из статьи и данная задача «Реестр документов» упрощается

    Reply
  12. Elisy

    (8) Неверная информация. Есть опровержение по этому поводу:

    Microsoft продолжает считать Silverlight стратегическим продуктом

    Reply
  13. tango

    блин, прикольно.

    имхо, развитие технологий — нечто объективное (т.е. зависящее от внешнего неизменяемого источника, в отличие от колдовства, зависящего от произвола колдуна).

    А здесь выходит билька-гей — натуральный колдун. вопрос: почему/зачем его наложницу записали в сколков

    **

    сорри, это риторический вопрос

    Reply

Leave a Comment

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