<?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) Если бы я был директором, то Ваш совет был бы уместен.
(2) Это хорошая идея!
Непонятно, что такое архив: это что отдельный справочник или регистр данных или какой-то внешний источник данных (xml или dbf или еще что-то)
(4) Посмотрите код (он открыт) и всё станет понятно.
(5) Вы разместили свою разработку с правом доступа: Пользователи. К сожалению, теперешние правила сайта infostart.ru не позволяют пользователям этого ресурса с рейтингом менее 30 скачивать более одного материала в сутки.
Нужно было, если лень писать подробное описание, размещать с более открытым доступом.
Мне, например, не хочется тратить время на лишний клик и разборку что там и как делается. По-моему, достаточно прочитать грамотно написанное описание для сабжа.
Обработку не смотрел 🙂 , но идея считаю правильная, поэтому я у себя добавил кусочек кода в процедуру ПриНачалеРаботыСистемы() и он выполняет те же действия — всех уволенных ранее текущей даты перемещает в архив
(6) см. Конф.УПП 1.2 или ЗУП: Справочники.СотрудникиОрганизаций реквезит Актуальность.
Удобная обработка
Очень удобная обработка. Не надо в ручную перемещать уволенных в архив. Спасибо автору
Спасибо! Очень нужная и удобная вещь. Вопрос: можно ли ее сделать как регламентное задание, т.е. чтобы оно автоматически запускалась каждый день? Заранее благодарен.
(12) Konstatine, посмотрите мою публикациюhttp://infostart.ru/public/76926/
Там показано, как можно запускать обработки из командной строки или файла *.bat. А уж чем запускать батник — вариантов море, от стандартных средств ОС до бесплатных разработок.
На скриншоте название организации стер, а в заголовке ее все равно видно
(14) chainick,
Спасибо. Правда, это уже неактуальное название. Но на будущее буду внимательнее.
Добрый день. Есть организация, которая обеспечиват работой подростков. Они принимаются на работу сроком на 1 месяц. В 7 зик им заводили документ приема на работу с датой начала и датой окончания. Документ увольнения не заводили. За год прошло 900 подростков, каждый работал по несколько месяцев. Все это перенеслось в 8 ЗикБУ. С помощью вашей обработки я их всех убрала в архив. Большое спасибо. Ставлю плюсик.
Спасибо, очень помогло! Просто и гениально.
Вопрос в тему «уволенных», как не показывать уволенных при выборе? Например, при формировании расчетки?
Пишу Иванов А.А. и вываливается весь список ивановых, которые работали когда либо в организации без разницы архивные они или нет, ЗИКБу 1.0101
А чем не устраивает стандартная обработка от 1С «Универсальный подбор и обработка объектов». Там просто отобрать по справочнику «Сотрудники» тех, у кого дата увольнения меньше заданной и потом установить им реквизит «Не находится в архиве» как «Нет».
(19) В окне подбора сотрудников вверху жмете кнопку «Действия» и убираете галку «Использовать архив сотрудников».
(20) А где она берется? Мы работаем на 1С_ЗикБу_1.0.104.1 и в перечне Обработок программ обработку » Универсальный подбор и обработка объектов» я не вижу….
На дисках ИТС поискать?
(22) да. Обработка с диска.
(23) Зря искала- мне она не помогла. Реально люди в архиве, стоит режим » не использовать Архив», а при формировании отчетов все архивные вместе с реальным сотрудником вываливаются в списке выбора и очень затрудняют работу.
(24) ну так форма другая для подбора. Для нее тоже надо выбрать в «Действиях», чтобы архивных не показывало. А что касается вывода архивных в отчетах… в настройках отчета все замечательно ставится, потому как «Не находится в архиве» — это реквизит элемента справочника.
(25) Это вы предлагаете фильтрацию, а я хочу без погружения вникуда выбрать именно нужного сотрудника….
(26) насколько понял из скрина, Вы руками создали список сотрудников, и в нем находятся архивные. В таком случае, их отсекать можно в настройках отчета. Либо убрать их из списка выбранных сотрудников ( как вариант, очистить список, выставить в окне подбора «Не показывать архив» и заполнить список заново).