<?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='\
Обнаружен недочет. По п.3 и п.5 по в месяцах, в которых не было движения по основным средствам на соответствующих счетах, не показывается текущий остаток. В ближайшем времени исправлю
Исправил
Обнаружил (пока не исправимую ошибку): если выбрать период, включающий 2 последних месяца (ноябрь — декабрь) — не корректно отрабатывает запрос набора данных к оборотному регистру бухгалтерии (данные по пунктам 1 и 3 пропадают по некоторым месяцам). Смотрел в консоли запросов — при периодичности «месяц» и методе дополнений «Движения» — получаются данные на первый и на последний месяцы, пропуская промежуточные. С чем может быть связано — не могу понять. Возможно, что наши бухгалтера не внесли еще информацию по ОС за последний период. Данные за период январь 2013 — октябрь 2013 считаются корректно.
Там короме зданий и сооружений нужно включить еще одну группу: «объекты с гос. регистрацией» по моему как — то так
называется. Например, рельсовое полотно. Еще не земля и не здание , но тоже туда ….
Если не прав, поправьте….
(4) jonybanchicov, благодарю за замечание. Задал вопрос специалисту, жду ответа. Если подтвердит — добавлю
Добавлено
(7) husky, был изменен принцип формирования исходной модели данных. Ранее это был отчет на СКД, но в виду того, что я столкнулся с проблемой «пропадания» данных при некоторых условиях, при использовании дополнения в виртуальной таблице (и не смог ее оперативно решить)- решил его переделать на «старый манер». Важны были верные данные, а не красота решения и скорость… Хороший ли он сейчас — не могу сказать, у каждого человека свои критерии )
Вроде как не учтен момент поступления земельного участка в собственность после 2013 г.? Два раза вычитается!
Кроме того, в моем случае, плюсом по вновь введенному, в строку 3 почему то попал документ модернизация ОС в части того же земельного участка ( увеличение стоимости.
Остальная модернизация правильно не учлась, а по земеле вошла в строку 3.
Конф. — Управление производственным предприятием, редакция 1.3 (1.3.53.2)
(9) Sergyhmao, если еще актуально — я добавил расшифровку в отчет — для проверки. Если нужно — напиши в личку — вышлю на ящик обновленную версию.
Здравствуйте. Можно ли в отчет добавить Первоначальная стоимость ОС принятых на учет до 2013 и Амортизация основных средств принятых до 2013 с выводом списка по пунктам, для более удобного анализа отчета?
(11) Владимир,
Или добавить Остаточная стоимость ОС принятых до 2013 и остаточная стоимость принятых после 2013, с выводом списка ОС.
(12) Владимир, поддержка отчета более не планируется. Код открыт. Можете добавить Сами.
Не актуален. Идея хорошая. Реализация не очень. Кто собрался скачивать обратите внимание:
1. инв.номеров у отчете нет.
2. В моем случае остатки ввели на 01/01/15 (свертка базы) позже 01.01.2013г. Движимое имущество с Датой принятия к учету между 01/01/13 по 31.12.14 попало в недвижимое.
3. Расшифровок ячеек (элементарно, чтобы карточка ОС открылась) нет.
(14) a-m-gv, по моим задачам, на момент времени разработки, этого было достаточно. За неимением аналогов (опять же на момент разработки) сделал, как видел эту задачу. Описание сделал максимально подробное. Не ленитесь, читайте, прежде чем скачивать.