<?php // Полная загрузка сервисных книжек, создан 2026-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='\
ОЧЕНЬ БОЛЬШОЕ СПАСИБО! Искал эту форму, (упр.образования требовало), я эту форму написал сам,но не работала выгрузка в свод отчетов 8.1, а эта форма вроде загрузилась, надо проверить (только под другим приказом загружается — 128н, а надо 115н, щас разберусь…). А есть что-нибудь по автозаполнению формы 128 и 138 (в 77 и 8.1)? А есть эта форма (230-я) для 8.1?
Пожалуйста! Да, забыл добавить, что поддерживается выгрузка в Свод отчетов (в 7.7 точно, но по идее в 8 тоже должно). По автозаполнению форм 128 и 138 пока ничего нет, т. к. пока нет ясности и четких инструкций по заполнению этих форм 🙁 Для 8.1 230 формы у меня к сожалению нет. Да, и не забываем плюсовать!!
(2) 💡 =»+» 😉
держи ++++ 😀
СПАСИБО от всей души за бескорыстную помощь!
++++++++++++++++++++++++++++++++++++++
(7) Пожалуйста! 😀
Сдавая эту форму не забывайте что не существует законодательно утвержденного баланса со счетами 303.07 — 303.11. любые требования испольнительного органа о сдаче 130 баланса вышестоящим — тем более не законнны, т.к. этот баланс годовой. с 230 разделительно-ликвидационным ситуация аналогичная. нет утвержденного баланса-значит нет и нормальной его выгрузки, значит в форматах не зарезервинованы коды строк — и автоматическая и корректная сдача его главному распорядителю — не возможна. за обработку автору плюс , а вот просить плюсовать — не стоит — не вежливо, здесь этого многие (и я в том числе) не любят
(9) Понятно, что требовать с учреждений ф.230 в течение года — это местная инициатива распорядителей. А по поводу того, что нет нормальной выгрузки, это вы зря! Моя форма выгружается без проблем, а если её предварительно загрузить в Свод отчетов, то данные также без проблем туда загрузятся 😀
А что касается того, что я просил плюсовать мою обработку, так давайте порассуждаем. Если бы я выложил какую-нибудь очередную обработку, например, по перенумерации элементов какого-нибудь справочника или что-то подобное (никого не хочу обидеть, упаси боже), то моя настойчивая просьба плюсовать, конечно была бы сверхнаглостью. Но данная форма является узкоспециализированной (проще говоря никому кроме бюджетников она не нужна), эта форма является регламентированной и, поскольку, сейчас как раз «отчетная» пора, то в этой форме пользователи явно заинтересованы. То есть те 80 с лишним человек, которые уже скачали эту обработку, по-вашему, сделали это чисто из любопытства или ради интереса покопаться в коде? Я думаю, что они в ней нуждались и она им пригодилась именно в этот момент. Поэтому я не вижу ничего зазорного в своём напоминании 🙂
И ещё раз моя искренняя благодарность тем сознательным людям, которые не пожалели своих сил и времени, чтобы нажать плюс 🙂
Спасибо за обработку