Локальный информер обновлений для 1С:Предприятие




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

24 Comments

  1. maljaev

    Сделай поддержку прокси и авторизации на нем. А то не работает нифига с проксей.

    Reply
  2. isn

    не работает

    Reply
  3. mad_maksim

    А откуда берет информацию?

    Reply
  4. jhfrek

    Прикольно!!! Молодец! Буду теперь им пользоваться всегда.

    Reply
  5. Пашук

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

    ===============================

    Во время обновления произошла ошибка.

    Запустить отладку?

    Строка: 1

    Ошибка: Синтаксическая ошибка

    ===============================

    Reply
  6. Dwiss

    Молодца, прикольно сделано, особенно красиво скины переключаются!

    Reply
  7. Asdam

    Программулина удобная, жаль что только по российским конфигурациям.

    Reply
  8. nosferatu

    to Пашук тестил на 5ти машинах, на одной так же вылезла ошибка, нашел в чем косяк, буду править, к вечеру перезалью.

    to mad_maksim от сюда http://1caf.ru/table_renew/index.php

    Reply
  9. DARKDEAD

    Однозначно +. А то в запарке и забываешь, что настал новый отчетный период и нужны новые отчеты.

    Reply
  10. roosxx

    А на украинские конфигурации можно????

    Reply
  11. Dimrik

    У меня тож ошибка

    ===============================

    Во время обновления произошла ошибка.

    Запустить отладку?

    Строка: 1

    Ошибка: Синтаксическая ошибка

    ===============================

    Reply
  12. Dwiss

    Есть предложение дописать сию классную штучку, расширить возможности#k8SjZc9Dxk

    1. Добавить спр. контрагенты

    2. Программы 1с и версии у контрагентов

    3. Чтоб выскакивал список кому необходимо обновление

    Думаю будет актуально и удобно сразу видеть что у кого надо обновить, просто организаций у меня например 40

    Reply
  13. zaic

    +13

    4. Добавить спр. конкуренты

    5. Программы 1с и версии у конкурентов

    6. Чтоб выскакивал список кому чего не хватает

    🙂

    Reply
  14. nosferatu

    to D_Wiss идея хорошая, надо подумать как лучше реализовать

    У кого ошибка вылазит, потерпите ещё чуток, косяк в битриксе, а не в проге, пока не удается исправить

    Reply
  15. Dwiss

    (14) Это лишнее 🙂

    Reply
  16. nosferatu

    У кого вылизала ошибка:

    Строка: 1

    Ошибка: Синтаксическая ошибка

    Зайдите в программу и нажмите обновить, должно заработать

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

    Reply
  17. dima_gsv

    Не работает через корпоративный прокси сервер ISA

    Reply
  18. nosferatu

    поддержку прокси позже прикручу. как время будет

    Reply
  19. send

    А нельзя-ли в текстовиках дату выхода конф и их номера записать без дополнительных символов.

    т.е. в виде

    10.06.2008 «Управление торговлей» 10.3.5.1

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

    Reply
  20. nosferatu

    http://www.infostart.ru/profile/41620/ Не понял, где поменять. Приведите пример как сейчас и как вы хотели бы видеть. Можно сюда скинуть http://1caf.ru/forum/index.php?PAGE_NAME=read&FID=7&TID=305

    Кстати, поддержка прокси сегодня-завтра появится

    Reply
  21. dimension

    Сначала работала, а через пару дней:

    «Исключение неизвестное программное исключение (0x0eedfade) в приложении по адресу 0x7c812a5b»

    004242F7 mov ecx, ebx

    004242F9 mov eax, esi

    004242FB mov esi, [eax]

    004242FD call dword ptr [esi+$0C]

    00424300 cmp ebx, eax

    00424302 jz +$17

    00424304 mov ecx, [$6B8644]

    0042430A mov dl, $01

    0042430C mov eax, dword ptr [EReadError]

    00424311 call -$00014402

    00424316 call -$0001FF3F ; <— EXCEPTION

    0042431B pop edi

    0042431C pop esi

    0042431D pop ebx

    0042431E ret

    EurekaLog 6.0.15

    Application:

    ——————————————————-

    1.1 Start Date : Mon, 29 Sep 2008 10:14:26 +0400

    1.2 Name/Description: LI.exe

    1.3 Version Number : 0.9.0.3

    1.4 Parameters :

    1.5 Compilation Date: Tue, 9 Sep 2008 12:12:04 +0400

    1.6 Up Time : 16 seconds

    Exception:

    ——————————————————

    2.1 Date : Mon, 29 Sep 2008 10:14:42 +0400

    2.2 Address : 00424316

    2.3 Module Name : LI.exe

    2.4 Module Version: 0.9.0.3

    2.5 Type : EReadError

    2.6 Message : Stream read error.

    2.7 ID : 6ECA

    2.8 Count : 1

    2.9 Status : New

    2.10 Note :

    Reply
  22. nosferatu

    Ну эта ошибка похоже приходит с винта. Попробуйте удалите папку LI и скачайте программу еще раз и установите повторно. Ярлычок из папки LI не вытаскивайте.

    Reply
  23. dimension

    Переустановил в ту же папку, те же грабли. А поставил на другой диск — все ОК!

    Reply
  24. toxavich

    несомненно респект, вот только еще бы Украинские конфы…

    Reply

Leave a Comment

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