Информационные системы в оптовой торговле. Часть 5. Казначейский учет




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

12 Comments

  1. VmvLer

    Какой-то реферат студента, состряпанный на коленке на 3 балла.

    Возможно кто-то и получит зачет благодаря этому материалу.

    Reply
  2. TODD22
    При большом количестве платежей утверждать каждый платеж становиться нецелесообразно. Для этого вводят статьи расходов и лимиты по ним.

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

    Лимиты и утверждение платежа никак не связаны. Могут стоять лимиты и требовать подтверждение каждого платежа. Зависит от принятого в компании подхода.

    Reply
  3. Ликреонский

    (2) При сотнях платежей быстро отпадет желание утверждать

    Reply
  4. VmvLer

    (3) это ваш субъективный взгляд и что там у кого отпадает в контексте платежей — решают руководители конкретной организации или кураторы.

    Логичнее было назвать тему

    «Мой взгляд на казначейский учет»

    Reply
  5. TODD22

    (3)У нас их тысячи….

    Reply
  6. TODD22

    (3)То что стоит лимит на закупку ТМЦ на 20 млн в месяц не означает что всякий кому не лень может без согласования закупать пока лимит не выберет.

    Reply
  7. Ликреонский

    (4) Вы можете написать статью и называть как угодно

    Reply
  8. Ликреонский

    (6) Руководитель отдела сам создает или поручает кому-нибудь закупать по плану. Явно лимит утверждали убеждая топ менеджеров конкретными выкладками, планами, проектами. Если закуплено будет не то, тогда репрессии.

    Reply
  9. Ликреонский

    (5) Топ менеджер утверждает каждый платеж, выясняя у каждого на что и зачем. Не жалко ему времени или он такой скурпулезный?

    Reply
  10. TODD22

    (9)Утверждает заявки ответственный человек. Если у вас в компании кроме ТОП менеджера ответственных за утверждение заявок нет то не надо переносить свой опыт на других.

    В компниях есть фин диры, фин менеджеры и тд. А есть ещё многоэтапный процесс согласования.

    Не жалко ему времени или он такой скурпулезный?

    В разных подразделениях разные правила. В одном фин дир подписывает не глядя заявки если они менее 100К рублей, в другом по масштабам ещё больше предприятие заявки до 5К подписывают не глядя, остальные надо согласовывать.

    Правила и маршруты согласования могут быть очень разными, зависит от предприятия и принятых на нём правил.

    Если закуплено будет не то, тогда репрессии.

    За такую схему надо того кто её придумал увольнять. Задача в принципе не допускать закупки «не того». Если вы купите «не того» на 10 млн рублей, то потом хоть за репресируйтесь.

    Явно лимит утверждали убеждая топ менеджеров конкретными выкладками, планами, проектами.

    Утверждённый лимит совершенно не означает что именно сегодня можно взять деньги со счёта и пойти их тратить.

    У вас похоже очень мало опыта в фин учёте.

    Reply
  11. Ликреонский

    (10)

    У вас похоже очень мало опыта в фин учёте.

    Во первых учет казначейский, финансовый это другое.

    Стиль работы как у Вас не единственный правильный.

    Reply
  12. TODD22

    (11)

    Стиль работы как у Вас не единственный правильный.

    Так я о «правильности» и не говорил….

    Я же вроде написал:

    Зависит от принятого в компании подхода.
    Во первых учет казначейский, финансовый это другое.

    Не суть…

    Reply

Leave a Comment

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