Монитор движения денежных средств




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

22 Comments

  1. AnneLe1981

    Скачала Вашу обработку, но 1С ( платформа 8.3.5.1248, версия 3.0.37.29) ее не установила, написала следующее сообщение:

    Невозможно подключить дополнительный отчет из файла.

    Возможно, он не подходит для этой версии программы.

    Техническая информация:

    Метод объекта не обнаружен (СведенияОВнешнейОбработке).

    Помогите решить проблему

    Reply
  2. Князь

    (1) AnneLe1981, доработал обработку. Теперь она корректно регистрируется.

    Reply
  3. AnneLe1981

    спасибо, все работает, наслаждаюсь отчетом. Хотелось бы выбирать период, (месяц, квартал), а так все нравится

    Reply
  4. АЛЕНА

    почему не открывается в 1С БП-2?

    Reply
  5. Князь

    (4) АЛЕНА, формы управляемые, а запускаете вы, скорее всего в обычных формах. Можно разрешить использование управляемых форм в обычном приложении.

    Reply
  6. АЛЕНА

    Что мне нужно сделать?

    Reply
  7. Bukaska

    (6) АЛЕНА, Это ничего не сделать.. как разрешить редактирование конфигурации, где вы и поставите в свойствах конфигурации: разрешить управляемые формы в обычном приложении..

    Но!!! Это для тех отчетов и обработок, которые встроены в конфигурацию.. а на внешние отчеты и обработки оно не распространяется(((

    Так что думаю.. ради одного отчета с поддержки лучше не снимать.. а переделать под обычные формы)

    Reply
  8. CheBurator

    Сделать настройку

    Вкл или выкл показ графстолбцов по которвм нет движения

    Reply
  9. CheBurator

    Сделать детализируемый отчет

    Который сожно по вертикали и горизонтали разворачивать только ПРИ НЕОБХОДИМСОТИ

    ЕСЛИ МНЕ НЕТ В ЛАННЫЙ МОМЕНТ НУЖДЫ сорри капс заел смотреть все подробно то зачем мне обозревать вю простыню

    Reply
  10. Князь

    (8) CheBurator, давайте обсудим стоимость доработки отчёта под ваши требования.

    Reply
  11. АЛЕНА

    У меня нет особых требований. Странно как-то, вы опубликовали отчет, который невозможно открыть.

    Reply
  12. Князь

    46 скачали. Не открылось только у вас.

    Reply
  13. mkprotasov

    Добрый день!

    У меня 1С:Предприятие 8.3 (8.3.5.1517)

    Добавил файл в раздел Дополнительные внешние отчеты, теперь не могу его нигде найти.

    Подскажите, как запустить?

    Reply
  14. Князь

    (13) mkprotasov, в окне добавления внешнего отчёта нужно зайти по ссылке размещение и указать разделы.

    Reply
  15. mkprotasov

    (14) нет у меня такой ссылки (

    Reply
  16. mkprotasov

    (14) подскажите, на скриншоте куда нужно нажать? )

    Reply
  17. Князь

    (16) mkprotasov, у вас редакция 2.0. Работает на обычных формах. Отчёт писался на управляемых формах, поэтому в качестве внешнего вы его не подключите. Через Файл-Открыть его можно будет использовать, если в конфигурации разрешено использование управляемых форм в обычном приложении

    Reply
  18. user597294

    «дивиденты»

    Reply
  19. Sedow

    Привет.

    в КА 2.2 и БП 3.0 будет работать?

    Reply
  20. Князь

    (19)Под БП 3.0 отчёт писался.

    Данные собирает по счетам. Так что если план счетов одинаковый, то и в КА 2.2 пойдёт.

    Reply
  21. leboska

    Добрый день. А как редактировать (переименовывать, добавлять, исключать) графы отчета?

    Reply
  22. roman3333

    в БП3.0.74 на УФ будет работать?

    Reply

Leave a Comment

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