Выявление минусов по товарам




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

34 Comments

  1. valent

    Для 7-ки ТиС такое бы!

    Reply
  2. CheBurator

    Для семерки тис — можно и без отчета: 😉

    поставь запрет отрицательных остатков — и перепроведись… где заткнется — там и минус.

    а предлагаемый отчет — полная лажа. не может быть остатка в минусе… вернее он-то может возникнуть, но только дожен обнаруживаться не спустя 5 месяцев, а на следующий день. так что от этого отчета — пользы мало. Разрухха не в клозетах, а в головах…

    Reply
  3. CheBurator

    для 7-ки — берешь штатный отчет «ведомость по остаткам ТМЦ», детализация фирма-склад-номенклатура-документ движения — и смотри себе на красноту…. вылысыпыдысты, блин

    Reply
  4. vasilykushnir

    (1) Че прав, для 7-ки это как два пальца… У меня есть специальная обработка «ЗакрытиеМинусовыхСерий». Ситуация: сделан приход по серии 103 (как в документе поставщика), часть товара успели продать, потом при тщательной проверке оказалось, что 103 серии кот наплакал, а в основном 104 серия. Приходный док переделывается, а в расходе продана серия, которой уже нет (по приходу) — в результате по 104 — избыток, по 103 — минуса. Ну не перепроводить все документы… Запускаю обработку и она закрывает минусовые серии плюсовыми (естественно, в первую очередь следит, чтобы цены совпадали — бухи нервничают, если при перекидке не выходим на нуль).

    Reply
  5. juliasoft

    (2) — так может сразу удалить из каталога? И тактичности вам не занимать.

    Мое мнение — вещь нужная. Надеюсь, кто-то из тех, что скачал эту обработку, меня поддержит.

    Reply
  6. support

    не обижайте девушку, нам такие нужны!

    Reply
  7. vasilykushnir

    (5) А че сразу так? зачем удалять, если люди качают? И тактичность каким боком? При чем здесь миллиция, если свинью молнией шибануло… Че высказал свое мнение — он же минусом не «наградил»…

    Reply
  8. vasilykushnir

    Не обижаем мы девушек — пусть трудится… Но и обижатся по любому поводу тоже не следует.

    Reply
  9. support

    Нужен скриншот

    Reply
  10. valent

    Насчет голов, пальцев и клозетов говорить мне не надо! Сам знаю.

    Но если говорю, что надо, значит так оно и есть! 😉

    Reply
  11. CheBurator

    нужная, нужная, пусть лежит.. пригодится в хозяйстве…

    ps все жду, когда на 8-ке начнут массово делать то, чего нет на 7-ке…

    Reply
  12. coder1cv8

    Ну как такой симпатичной девушке не поставить плюс?… )

    Reply
  13. tormozit

    Вот так =)

    Reply
  14. Abadonna

    Имя классное и интерфейс приятный (я не о проге ;))

    Однозначно +1

    Reply
  15. Ворона

    Честно скачала,чтобы посмотреть что изнутри…

    Может кому-то и понадобится,но имхо-конструктор!

    но мне не жалко.

    Reply
  16. vasilykushnir

    А можно поинтерисоватся в уважаемого kovalev_andrey: неужели вот так все сообщения понравились, что такая щедрость к плюсам? Там еще их есть, если нажать «Все комментарии»… Или это постое любопытство: а что будет если на плюсик нажать…

    Reply
  17. coder1cv8

    (16) Мне тоже интересно ))

    Reply
  18. tormozit

    (16) Это хакер. Написал простенький скрипт для поиска активных плюсонажимателей и перебора страниц. Короче и здесь пора вводить подтверждение кодом.

    Reply
  19. Abadonna

    (16) Кодер ставит плюс Кушниру. Теперь мне что ли Кодеру поставить 😉

    И понеслось…. Говори ли же Доржи — добалуешся

    Reply
  20. vasilykushnir

    А вот за одно только

    «Говори ли же Доржи — добалуешся » я таки влеплю тебе плюс

    Reply
  21. support

    наверное, juliasoft вообще не понимает, о чем идет речь 🙂

    Reply
  22. vasilykushnir

    (21) Она-то как раз понимает — девушка в высшей степени смышленная. Прав был ты, Доржи, когда заступился за нее — такие коллеги нужны нашему форуму.

    Reply
  23. leonko38

    Это очень хорошо, что есть такой отчет. Но вот для версии 7.7 такого отчета почему-то нет, а очень надо

    Reply
  24. juliasoft

    (23) Можно и для 7.7 сделать. Для какой конфигурации надо?

    Reply
  25. juliasoft

    http://infostart.ru/projects/1169/ — сделала такой-же отчет для 1С 7.7 конфигурация Торговля+Склад редакция 9.2

    Пользуйтесь на здоровье 🙂

    Reply
  26. Звездочет

    «переучет»- режет служ.

    Правильное значение-«инвентаризация».

    Reply
  27. poppy

    (26)

    Переучет правильнее назвать переинвентаризацией.

    ИМХО учет = инвентаризация. Соответственно, переучет = повторная инвентаризация.

    По контексту статьи, как ты правильно заметил, Звездочет, лучше использовать термин Инвентаризация.

    Reply
  28. margosha80

    Просто суппер. Очень полезная для меня обработка (я главбух). Спосибо!!!!!

    Reply
  29. zerix666

    Интересное решение

    Reply
  30. upt

    1 Формируете табличную часть инвентаризации.

    2 Сортируете по количеству по возрастанию.

    3 Вверху табличной части находите товары по которым отрицательный остаток.

    И ничего писать не надо!

    Reply
  31. juliasoft

    (30) — это не удобно.. а если много разных складов?

    ну и вы немного не допоняли.. прочитайте описание…

    цитирую «… Т.е. минусы не на дату конца отчета, а на любой момент времени из выбранного интервала.».

    Т.е. может быть такое, что на дату инвентаризации минусов нет, к примеру, расход был раньше прихода.

    Reply
  32. upt

    А для этого нужно стараться не проводить документы неоперативно, а если провели то выполнить проведение по партиям (кстати я это делаю каждый день) и все. Просто нужно не бороться с последствиями действий а пытаться их не допустить.

    Reply
  33. cbivanovo@

    А для Бух 7.7 у кого-нибудь есть такая же?

    Reply
  34. AlexO

    Вот девушки правильно пишут обработки:

    четко, по делу, без излишеств и надежно 🙂

    Reply

Leave a Comment

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