Анализ потребностей по данным продаж за период




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

    Исправил обнаруженную ошибку в отчете, добавил один показатель и переименовал другой.

    Все кто скачал сырую версию — пишите в личку с указанием версии отчета (для украины или для ЕРП), я вышлю доработанный отчет.

    Прошу прощения за невнимательность.

    Reply
  2. klaus38

    Доброго дня! Подскажите, на 11.4 мне какой вариант скачать? Где «для новых конфигураций семейства ERP»?

    Reply
  3. Sergex

    Да, второй для украины и старой УТ подходит, типа 11.1.

    Reply
  4. StormBP

    Добрый день!

    КА 2.4.

    Воспользовался вашим отчетом и обнаружил, что показатель Свободный остаток не учитывает текущие резервы.

    Т.е. по Ведомости Доступность товара — В наличии 10. К отгрузке 2, в резерве 2. Свободно 6

    А у вас — Свободный остаток — 8

    Reply
  5. Sergex

    (4) ОК, проверю сегодня. Возможно у нас ситуация с резервами не воспроизводилась.

    Вы можете уточнить каким документом у вас в учете зарезервированы 2 ед. товара?

    Reply
  6. StormBP

    (5) Заказ клиента, товар в статусе «Резервировать»

    Reply
  7. Sergex

    (6) Действительно, при удовлетворении требований заказчика — резервы игнорировались. Добавил вариант отчета учитывающий резервы.

    Reply
  8. Sergex

    Если кому то требуется вариант отчета с учетом резервов для старой версии и украины — пишите опубликую.

    Reply
  9. MiKe80

    ERP 2.2.4 хочу скачать отчет

    «Если кому то требуется вариант отчета с учетом резервов для старой версии и украины — пишите опубликую.»

    Залейте, пожалуйста или какую версию мне скачать? Просто боюсь ошибиться

    И вопрос, перемещения между складами сюда попадают?

    И оприходование излишек и списание недостачи?

    Reply
  10. Sergex

    (9) >И вопрос, перемещения между складами сюда попадают?

    >И оприходование излишек и списание недостачи?

    Опубликую.

    В продажи внутренние движения конечно не попадают.

    Но на остатках они естественно сказываются. А вы как хотите — обороты внутренних движений видеть?

    Reply
  11. MiKe80

    Какой из 3 файлов скачать чтобы посмотреть? Напомню, ЕРП 2.2.4?

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

    Reply
  12. Sergex

    (11)Для ЕРП или … для новых конфигураций семейства ERP или …для новых конфигураций семейства ERP (с учетом резервов) второй вариант учитывает резервирование первый — нет

    Reply
  13. s_demidov

    скачал Вашу отличную обработку! автору-респект!

    из найденных ошибок: «дней наличия» — считает дни, когда были продажи, а не физическое наличие товара на складе.

    мы чуть доработали его, добавив возможность фильтра по складам и выводить количество в единицах отчетов. могу прислать:-)

    Reply
  14. Sergex

    (13)Спасибо!

    Был бы рад посмотреть как вы доработали про «дней наличия»

    Reply
  15. Brawler

    Я правильно понимаю, что аналитики «Склад» нет?

    Reply
  16. Sergex

    (15) Аналитики склад нет, делалось под клиента где это не требовалось.

    Reply
  17. user981105

    (13)Добрый день.

    Сегодня тоже заметил , что «дней наличия» считает как-то не так.

    Можно прислать исправленную версию.

    Reply
  18. user981105

    (13)Можно прислать исправленную версию?

    Reply
  19. os@3

    Добрый день

    Для Украины вышла новая версия Управление торговлей

    BAS Управління торгівлею 3.2.8.1

    Какой вариант отчета выбирать?

    Анализ потребностей по данным продаж за период для старой УТ 11 и для УТ для Украины, редакция 3.1

    или

    Анализ потребностей по данным продаж за период для новых конфигураций семейства ERP (С УЧЕТОМ РЕЗЕРВОВ)

    Reply
  20. ukitaki

    Добрый день, у меня есть вопросы по обработке. Напишите пожалуйста на почту ukitaki@yandex.ru

    Reply
  21. kalimbach

    Добрый день. Обработку к УПП 1.6 пришить можно?

    Reply
  22. kalimbach

    Ошибся в предыдущем посту!! К УНФ 1.6 пришить можно?

    Reply

Leave a Comment

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