<?php // Полная загрузка сервисных книжек, создан 2025-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='\
Уже что то видел тут похожее, поэтому свое не стал выкладывать. Другие обработки не смотрел, эту решил глянуть, и что увидел?
1. Автор обрабатывает только Выписки банка, хотя есть еще документы да и просто ручные операции которые создают проводку с Кредитом по 62.2. Надо доработать.
2. Обработка закончилась, насоздавались СФ и ни какого отчета, весь список только в окне сообщений (которое у большинства бухгалтеров свернуто до минимума и они его вобже не видят). Да и «Сообщить» стоит перед тем как документ запишется 🙂 тоесть бухгалтеру сообщили что создана СФ, а ниже идет сообщение типа транзакция все обломилось. бухгалтер думает да хорошо. документ записался, а на самом деле нет.
3. Бухгалтер посмотрит что блин обработка не отработала, и запустит ее заново, и что произойдет? Да по второму разу пойдут документы авансовых СФ делаться 🙂 Автор, надо ставить проверку, а вдруг тут уже выписана авансовая СФ. А то ведь бухгатлет может случайно еще раз назать на кнопку «Заполнить» (почему «Заполнить»? хотябы назвал «Сформировать авансовые СФ» понятнее было бы и место позволяет).
А лучше поставить кнопку, что бы бухгалтер или просто смотрел отчет сколько у него будет авансовых счетов фактур и ужаслся сумме 🙂 а если надо ставил бы «галку» и формировал бы СФ.
3. Перед тем как создавать СФ на аванс надо для какждой операции проверить, а не лишняя ли это проводка (вдруг кто то ошибся и авансом тут не пахнет, или документ поступления занесли задним числом, а документы не перепровели и т.п.), а может эту проводку надо разбить на две, может тут только чать аванса и на всю сумму делать СФ не надо?
4. В комментарии надо писать что создано обраоткой документа, а не стандартную фразу, что бы было видно, это обработка не правильно все сделала или бухгалтер по второму разу СФ выписал.
5. Надо убрать префикс у документа, пусть нумеруются дальше по порядку (налоговая это понимает — авансовая СФ вседаки) , ну а если без буковки префикса «А» ни как не обойтись, то ставь ее в конец номера документа. А то будет у тебя бухгалтер выписывать простую СФ и что будет? Правильно нумерация сбита нумеруйте теперь СФ вручную.
З.Ы.
Автор правь обработку.
Бухгалтера не запускайте пока он не поправит.
Автор, извини, что так разошелся, накипело, только что полдня устранял результаты другой бездумно запущенной обработки.
Минус не ставлю, вседаки первая работа автора, плюс поставлю когда все исправишь.
охнефигасебе. скоко написал 🙂
(2) Причем в рамках нормативной лексики ;)))
12 скачиваний, 1 плюс. народ может жестоко обломиться 🙂 хотя это и несмешно
(4) Ну, плюсанувший-то не скачивал ;))
(5) А ты оказывается все видишь 🙂
(6) Я хожу по жизни с открытыми глазами (с) Войскунский, Лукодьянов. :))
После прочтения (1) уважаемым БУХГАЛТЕРАМ будет нелишним НАПОМНИТЬ, что прежде чем проверять скачанную из интернета ЛЮБУЮ обработку на рабочей базе, обзязательно проверьте ее работу на КОПИИ базы, или тестовой базе.
Афтор умер
Все я скачал см внимательно.
Нормальная вещь, а перед тем как работать надо всегда проверять,
а не БЕГОМ! СРАЗУ! использовать на рабочей базе(«8» согласен)
(1)Согласен можно доработать несколько вещей.
Хотя разошелся столько замечаний сделал указывая автору что и как ,
главная ошибка автора ,что он не описал как работает обработка,
ну еще и проверки нет это плохо. а замечание на счет префикса и
кнопочек сформировать ,заполнить, там у вас синенькая там зелененькая и др… ЭТО п.п 1,2,4,5 БРЕД (где это видано префикс в конце)
Все равно всем не угодишь… Кому понравиться будет пользоваться
достаточно полезная программа, на мой взгляд вполне в рабочем состояние. Спасибо разработчику.