<?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) AnryMc, Не, ну ка бы при обмене данными признак проведенности можно вполне легко перетащить/установить. Тут вроде все ясно. Не ясно вот например «игнорирование документов, которые не являются регистраторами для плана счетов Хозрасчетный». Регистратором плана счетов Хозрасчетный? Описка походу. Ну и на кого нацелено сообщение «запросом с учётом RLS». В публикации указано что Бухам, а для них «RLS» примерно, что на заборе три буквы. Как бы по-лояльнее сформулировали бы, типа «с учетом ограничения доступа».
И указано что для всех конф. А по описанию — только Бух 3.0.
(2) &rew, спасибо, описки поправил.
По поводу прямого указания на бухгалтерию — не согласен, обработка заработает на всех конфигурациях, где есть план счетов (УНФ, УПП, БГУ и ещё куча аббревиатур).
(3) Я вот честно, не помню. Называется ли в БГУ регистр именно «Хозрасчетный». В УПП, документ же может быть проведен только по управленческому учету. Так что искать только по бух. регистру некошерно. Кстати для бух 3.0 подойдет если только в обычном приложении запустить. Сделайте на управляемом, выхлоп больше будет
(4) &rew, так и ищем документы, у которых нет проводок по бухучёту. Если кто-то снял галку «БУ» в документе — эта обработка покажет документ, и уже можно решать, что с ним таким красивым делать.
Управляемую форму сделаю со временем, когда контора начнет на 3.0 переходить 🙂
В моей обработке еще меньше галок, а значит и нервы еще спокойней 🙂
(6) где ж ты был в сентябре, когда вот это всё понадобилось… 🙁
Взял на заметку.
PS в толстых базах очень, очень полезны отборы по дате, организации, подразделению. Так хоть появится шанс увидеть окончание работы 🙂
(0) Если у Вас есть документы без проводок, значит у Вас могут быть документы с «кривыми» проводками (без проводок — это частный случай не правильных проводок). Поэтому — решать частный случай, на мой взгляд, не совсем верно. Да и зачем, если Вы должны выполнить регламентные операции.
(8)
… значит, в исходных данных для загрузки есть документы, которые не формируют проводки.
Часть из них правомерно не формируют проводки, с другой частью нужно разобраться.
Регламентные операции тут не при чём.
(9) Если речь идет о загрузке документов и после загрузки документы не проводятся автоматически, то поиск документов без проводок Вам не поможет, т.к. могут быть документы с «кривыми» проводками.
(10) Загрузка документов.
Документы проводятся автоматически.
МНОГО, МНОГО документов.
часть документов совершенно легально проведены и не делают проводок.
И есть часть, которые должны делать проводки, но не сделали (изменились параметры соответствия, новое значение реквизита, по которому не прописаны правила и т.д.).
Это смотрят пользователи, а не администраторы БД.
с «кривыми» проводками боремся совершенно другими средствами.