<?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='\
очень удобно, часто просят добавить или доработать.
Нужный отчётик! Девчатам из отдела труда должен понравиться. Спасибо. По скриншоту только не понял — данные берутся из штатного расписания или он тянутся из регистра сведений?
Вопрос по скриншоту: доплата за ночные часы как плановое начисление???
Да, доплата за ночные часы как плановое начисление.
просто суперская вещь !!!!
всем рекомендую
вещь что надо, пользуюсь этим все лето
для экономистов покатит
для экономистов точо нужная вещь
наши экономисты были рады
Очень хороший отчет,,,,мои расчетчики были очень рады
подскажите,а можно настроить данный отчет так,чтобы показатели видов расчета были не только в процентах,но и считались в зависимости от своего показателя.У нас просто все надбавки от оклада процентом и очень бы хотелось ,чтоб была еще и сумма данного начисления.Спасибо заранее
Спасибо, очень пригодился
Спасибо!
Отчет немного некорректно работает:
ВЫБОР
КОГДА РаботникиОрганизации.ПериодЗавершения <= &парамДатаСобытия
И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
ТОГДА РаботникиОрганизации.ПодразделениеОрганизацииЗавершения
ИНАЧЕ РаботникиОрганизации.ПодразделениеОрганизации
КОНЕЦ КАК ПодразделениеОрганизации,
Пример. Период завершения заполнен и дата меньше парамДатаСобытия то есть мы попадаем на ТОГДА РаботникиОрганизации.ПодразделениеОрганизацииЗавершения
Но вид действия «Прекратить»
А отчет благополучно выдает этот Вид расчета в список
я извиняюсь немного не так.
ВЫБОР
КОГДА РаботникиОрганизации.ПериодЗавершения <= &парамДатаСобытия
И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
ТОГДА РаботникиОрганизации.ПодразделениеОрганизацииЗавершения
ИНАЧЕ РаботникиОрганизации.ПодразделениеОрганизации
КОНЕЦ КАК ПодразделениеОрганизации,
Это просто считываете текущее подразделение с работника.
Работников работающих на дату отчета ты отбираешь
Но в регистре сведения «Плановые начисления …»
Есть такие действия как Прекратить и период завершение итп
И там надо на них завязываться, а не просто левым совединением выдать то что дала виртуальная таблица среза последнх на дату.
У тебя она выдаст запись, например, которой это плановое начисление и прекращалось как раз.
Спасибо! Отчет пригодился, но есть одно пожелание.
пожелание: если использовать отбор по подразделению, то при выборе группы отчет не формируется, было бы здорово если обрабатывалась и текущая ситуация.
А он показывает персональные надбавки?
Спасибо, пригодилось
Большое спасибо за отчет. Очень понадобился.
Хороший отчет, спасибо. Если б еще группировал по дополнительным свойствам сотрудников, цены б не было
Пригодился расчетчикам когда проверяли при переходе с другой программы все ли виды начислений добавили
Отчет работающий, что уже хорошо.Но многого не хватает…