Улыбнитесь!!!




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

29 Comments

  1. Altair777

    А попросить реальный расчетный листик не пробовали? 🙂

    Имхо, в колхозах / совхозах (не принципиально) может быть, действительно, мно-о-о-ого надбавок…

    И бухгалтер прав — дело не в окладе 700 руб, а в должности, совмещении (народу не хватает) и всяких разных прочих условиях.

    Reply
  2. Abadonna

    (0)>у нас нет Иванова, откуда же я могу знать какая у него надбавка????

    — Девушка, а где мне найти Иванова?

    — Не знаю

    — А в цеху его нет?

    — Овцехуев у нас не работает

    Reply
  3. Altair777

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

    > сотрудник Иванов, оклад 700 руб

    Кстати, а в каком году это было? в 2005? Оклады по 700 руб?

    Мда…….

    Reply
  4. vasilykushnir

    (3) Думаешь Натаха — франч? Хотя это не столь важно. А + поставил — свою ситуацию вспомнил: звонит главбух — крыса не работает. Беру запасную, чапаю в бухгалтерию и от увиденной картины начинаю тихо офигевать: она водит мышкой по воздуху и естественно указатель не бегает. Пришлость обяснить, что в мышке есть датчик контакта со столом (в оптической-то!!!) и чтобы работала, надо придавливать мышку к столу. Через 5 минут звонят девчата-бухи — говорят так ГБ давит мышку, что скрип по всей бухгалтерии идет… Смех и слезы…

    Reply
  5. coder1cv8

    (3) Чё ты ворчишь вечно? ) Мне понравилось!

    Reply
  6. Altair777

    (4) А как назвать «организации занимающейся продажей, настройкой и обслуживанием 1С»?

    А в твоем случае проблема от усердия — ты же сказал дави, она и давит, старается. Послушные они у тебя там 🙂

    Reply
  7. Altair777

    (5) Ну, не вечно. Наоборот, я очень веселый. Иногда. 🙂

    Но просто грустно стало. Что смеятся надо на самом деле не над дедушкой (ему 80 лет?), а над Наташей.

    Reply
  8. vasilykushnir

    (7) А зачем смеятся над Наталей? Глянь фотку — очень даже аппетитная барышня… (во! поволокло дедулю…).

    Кстати, Натаха, а где это такое красивое место ты выбрала для фотографирования?

    PS: А на некоторые шпильки не обращай внимания — это больше от скуки, чем по злобе…

    Reply
  9. Altair777

    (8) Я сразу глянул. Поэтому и минус не поставил 🙂

    PS: А может я хочу ее внимание привлечь? 😉

    Reply
  10. Душелов

    (8) Не знаю, где там фотки увидел? 😉 Я что-то все пустое место вижу…

    (0) А когда такой главбух — твой непосредственный руководитель…

    Reply
  11. Altair777

    (10) Включи «Показывать изображения»

    У тебя Опера?

    Reply
  12. Душелов

    Ах да.. Я это все запретил, вместе с рекламой 🙂

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

    (10) А когда такой главбух — твой непосредственный руководитель…

    Был ровно в такой ситуации в 97 году (внедрял ЗПЛ 4.0 параллельно с деноминацией). Дело кончилось тем, что вмешался директор и перевел меня в свое личное подчинение. Через 2 года…

    Reply
  14. vasilykushnir

    (13) У меня это случилось гораздо раньше и более бурно: стоило строгача, 50% премии и обяснительной генеральному: когда ГБ сильно допекла, обяснился с ней чисто по-русски и словами, многих из которых даже наши грузчики раньше не слышали… А ей почему-то не понравилось, как я ее охарактеризовал, вот и нажаловалась генеральному…

    Reply
  15. Altair777

    (14) ГБ тебя допекла, но в чем дедушка виноват? Он купить хотел.

    Наташа должна была просто ответить:

    — Мы сделаем Вам все. Нестандартно. 🙂

    Reply
  16. vasilykushnir

    (15) Да лан… Не придирайся — девчушка-то действительно симпатичная. Ты лучше включи ее в круг своих друзей — мне-то уже стыдно по возрасту заигрывать с молоденькими…

    Reply
  17. Altair777

    (16) Я стесняюсь 🙂

    Кстати, подумал — налицо дискриманицая по половому признаку.

    Почему есть «Друзья», а нет «Подруг»?

    Reply
  18. vasilykushnir

    (17)>Почему есть «Друзья», а нет «Подруг»?

    А как???

    Reply
  19. Altair777

    (18) Добавить в профайле еще один раздел — «Подруги».

    И заодно уже, что б два раза не бегать — «Не просто подруги»

    Reply
  20. Душелов

    За чем «друзья», зачем «подруг»? Я сам себе… кхм… Хороший друг! :))

    Reply
  21. Abadonna

    Самое смешное здесь фраза: » а Вы продаете зарплату?»

    Вдумайтесь 😉

    Подходишь к кассе в своей конторе: «Света, продай зарплату»

    Reply
  22. Душелов

    Так ведь продают же поддельные деньги за полстоимости 🙂

    Reply
  23. vasilykushnir

    (21) А ведь не обратил внимание…

    Reply
  24. Nata

    (8) полностью согласна, что «от скуки».

    (3) по поводу «кого попало», как показало время – не «кого попало». А организация была только диллером, и собственно говоря, именно я этим и занималась…

    (7) не дедушка, а бабушка, хотя не принципиально.

    (21) ну не правильно высказалась… (прошу прощения за «корявый язык») писала сразу, не перчитывая потом.

    Reply
  25. Altair777

    (24)

    1) «от скуки»

    Кушнир мой большой друг — это он меня по дружбе так подначивает 🙂

    2) как показало время – не «кого попало»

    Вот именно, что время. А на тот момент Вы соответствовали? 😉

    Reply
  26. Nata

    Ну ладно, тогда еще один случай (интересно какие дальше будут комментарии).

    Звонят. Косяк в программе. Документ не проводится (расходная-накладная). Приезжаю. Продают 3,5 тыс. литров молока. Проверяю – остаток 3 тыс. литров. ????? Как?

    - (К) Понимаешь, у молока такое свойство: мы его покупаем с жирностью 3,5%, а когда оно постоит (Зимой) – у него жирность становится 4,2% и пишет мне пропорцию:

     10 л-3,5%

     Х л – 4,2%

    получается 12 л.

    А Летом мы в убытке, потому как летом жирность меньше….

    В кратце…

    - (Я) Вы разбовляете?

    - (К) Нет.

    Начинаю объяснять (на пальцах) купили 10-ти литровую бочку молока, ее, что, через 2 дня разорвет?

    - (К) Нет.

    - (Я) наливаем в чашку воды, что, через край полезет?

    - (К) Нет, это вода.

    - (Я) А молоко?

    - (К) Нет.

    - (Я) Так откуда 12 литров?

    - (К) Понимешь, у молока такое свойство… и.т.

    Начинаю смотреть: Покупает 10л по 10р за литр, продает 12л по 10р за литр. (типа прибыль прячем – без наценки).

    История длинная, на пол часа разговора. Дальше продолжать не буду. Основное написала….

    Reply
  27. Altair777

    (26) Мы корову одну брали? И сдавать будем одну, что бы не нарушать отчетности. 🙂

    Reply
  28. Abadonna

    (26)>а когда оно постоит (Зимой) – у него жирность становится 4,2%

    Ёпрст! У нас кабель в катушках по километру, часть лежит вне склада, на территории. А сейчас на улице минус тридцать. По всем законам физики он стал короче. Вот убытки-то! :)))))

    Reply
  29. Altair777

    (28) надо срочно акт составить и списать.

    А летом, когда он удлинится, сделать закупку 😉

    Reply

Leave a Comment

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