<?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='\
«клетки этого цвета расшифруются» — использованные дни не расшифровываются!
«годовые периоды работы» — не показывает периоды. Только сотрудник и дата приема. При «расшифровке» проваливаюсь в карточку сотрудника, а хотелось бы как раз периоды увидеть.
Да, желтая клетка где ФИО сотрудника выводит в карточку сотрудника в любом варианте.
Если используется режим <По всем сотрудникам>, тогда Сводные данные, расшифровка
Периодов в поле <Использовано>, то же самое, если сформирована в режиме <По списку сотрудников>, то выводится расклад всех периодов. А там увидите еще желтые клетки.
Так как, модуле использованы стандартные параметры Журнала зарплата, то от релиза конфи не должен завесить , и использована локальная обработка ячейки. Я уж еще раз проверил. Если все таки проблемы вышли MD, протестирую.
Приношу свои извинения. Все работает. Видимо сбой был в программе. Обработка отличная. Спасибо!
Хорошая обработка. что примечательно, учитывает документы-исправления 🙂
Удачная обработка! Спасибо, пригодилась.
Обработка понравилась.
Но возник вопрос, почему ВНУТРЕНННЕМУ совместителю ставится половина отпуска?
Совместитель имеет такие же права на отпуск, как и основной сотрудник с той только разницей, что гулять он должен одновременно и по основному месту работы и по совместительству.
Насколько я понимаю требования ТК, человеку за год вне зависимости от количества мест работы и количества занимаемых должностей положено 28 к.д. отпуска.
Можно подключить этот отчет без доработки документа «приказ по отпуску» используя механизм описанный здесь:
http://infostart.ru/public/79583/
почему ВНУТРЕНННЕМУ совместителю ставится половина отпуска?
Значит у него в истории 0.5 ставка
28 к.д.,это у кого (учреждения, организации) сколько принято. Поэтому дни можно уточнить выбором.
Можно подключить этот отчет без доработки документа «приказ по отпуску» используя механизм описанный здесь:
Конечно.Внедри Константа.КаталогВнешнихФорм и включай Отчет по отпускам StarterExtForms.ert,
Я лично это не использую, так и так приходится изменить конфи и лазит в допонительные возможности,
а внедрил в Документе <ПриказОбУвольнении> установил кнопку <Поазать дни>, так как именно это место
очень возмущает уволняющих.
(9) Я конечно не настаиваю на (7). Но могу сказать несколько плюсов (7):
1. Сделав 1 (ОДИН) раз изменение в глобальнике (2 места) и парочкой новых обработок можно к ЛЮБОМУ документу, без его изменения подключать различные отчеты и обработки, а возможности скрыты в них очень и очень большие, главное иметь прямые руки!!!
2. Изменения в глобальнике позволяют немного убыстрится ЗиКу (для больших и медленных баз это заметно).
Решать пользователю!
gucci76 Согласен.
Спасибо! Очень пригодилась!
Хорошая обработка. Спасибо-очень пригодилась.
спасибо за отчет
Спасибо.Отчет интенсивно используют и бухгалтера и кадровики
спасибо за отчет
а у меня почему-то по некоторым документам начисления отпуска идёт задвоение количества использованных дней, а в расшифровке показывается два раза один и тот же документ
а у меня почему-то по некоторым документам начисления отпуска идёт задвоение количества использованных дней, а в расшифровке показывается два раза один и тот же документ
(16) TrinitronOTV, (16) TrinitronOTV,
Очень интересно. Причин может быть два: 1)База требует полной индексации, 2)запись в журнала ЗП Отпуска очередного является перерасчетом другой записи прошлого периода. Если последняя, то в модуле я его не учитывал,
просто живым примером не встречался в проведениях по отпускам.
TrinitronOTV, Очень интересно. Причин может быть два: 1)База требует полной индексации, 2)запись в журнала ЗП Отпуска очередного является перерасчетом другой записи прошлого периода. Если последняя, то в модуле я его не учитывал, просто живым примером не встречался в проведениях по отпускам.
спасибо за разъяснение
Обработка работает хорошо…а главное пригодилась на деле, спасибо
спасибо, посмотрел один из вариантов
Спасибо, использовала,когда искала работников без отпусков- официально надо проводить отпуска ,а там по факту-как хотят.
Спасибо, отличный отчет
Спасибо. Собираюсь написать такой же отчет для ЗУП 82, может кто подскажет есть ли он уже реализован.
Спасибо, автору, отчет весьма хорош! но возник вопрос, учитывается ли отпуск за свой счет при расчете количества дней отпуска??
(24) Nikola178,
Обработка называется <Отчет по очередным отпускам> и учет ведется по виду расчета <Отпуск очередной> из Журнала
расчетов <Зарплата> и она дает возможность определить количество дней неиспользованного очередного отпуска для возмещения, в случае увольнения и т.п.. Отпуск за свой счет не относится к регламенту, это воля администрации и сотрудника и нет необходимости ввести учет по нему. Модуль открыто, и заменить отпуск очередной на отпуск за свой счет не представляет трудности.
Другое дело, только недавно столкнулся ошибочным результатом при обращении функции <глПолучитьТаблицуИсторииРеквизитов>(глобальный модуль): если внештатника уволили и тут же приняли в штат, то выдается, что он не работает и соответственно чел-дни далее не нарастают. Пришлось добавить своею подобную функцию локально. Обновление выставлю как будет время и если не затормозят.
(24) Nikola178,
Извините Никола, Я в торопясь с первого раза не совсем осознал суть вопроса <учитывается ли отпуск за свой счет при расчете…>, сегодня выставлю обновление, где предусмотрен флажок <Исключить Отпуска за свой счет из Отпускного стажа>. Конечно скорость обработки чуть повысилась, но выбор варианта предусмотрел и в расшифровке.
Спасибо.
Прикольно получается, если сотрудник принят на работу скажем в 69 году (ну бывают такие ветераны на предприятиях) ему стаж берется от 1969 года и неиспользованных отпусков — страшно сказать, более тысячи дней. Короче, надо как-то выкрутиться и ставить расчет количества дней выбирая между датой приема и началом учета в программе. Наверное так. Если дата приема < даты начала учета, то брать дату начала учета.
ИМХО — лучше создать новый документ для остатков отпусков, а также реквизит у сотрудника или даже справочник, где хранятся дополнительные дни отпуска (например для северных районов или если должность позволяет или за ненормированный рабочий день).
К этому отчету можно и расчет резервов прикрутить.
Хорошая обработка. Спасибо! Надеюсь очень пригодится.
(27) JER_MARK,
Спасибо, учел Ваше предложение и обновил, в моей практике такое не встречалось.
(28) gucci76,
Мы тут работаем только типовой конфигурацией, модернизация — это другая тема.
(31) Новые метаданные никак на типовизну (с точки зрения обновления) не влияют.
Или у вас базовая?
(32) gucci76,
Не издевайся, профессионал, не доведи до спама. (Для пользователей только отвечу, структуры конфигураций что проф, что базовая одинаковы).
(33) С чего взял, что издеваюсь? Я серьезно. Кстати, я даже не настаивал, а высказал свое мнение (ИМХО).
В базовую добавить ничего нельзя. А в проф можно. Что я без раздумья делаю, т.к. при обновлении это никак не сотрется. А типовые объекты 100 раз проанализирую прежде чем изменить.
А в ЗИКе я давно уже «специалист» ))))
спасибо, полезная обработка