Отчет по сверхурочным работам для программы "1С:Зарплата и Кадры 7.7"




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

20 Comments

  1. bb1962

    Отчет позволяет проконтролировать не превышен ли предел сверхурочной работы за указанный период (как правило это год). В качестве параметров отчета задаются: вид расчета, соответствующий сверхурочным работам, предел сверхурочной работы в часах.

    Перейти к публикации

    Reply
  2. TrinitronOTV

    нужный отчет, большое спасибо

    думается, что как раз к теме прохоровской поправке в трудовой кодекс о рабском труде

    Reply
  3. JER_MARK

    Каким образом отчет это контролирует? Откуда берет данные о сверхурочной работе?

    Reply
  4. bb1962

    (2) Данные из журнала расчетов «Зарплата», вид расчетов задается.

    Reply
  5. victuan

    Обработка ни о чем.

    Расчетчику нужно самостоятельно и своевременно контролировать кому вводить переработку (нужный вид расчета). Если это не сделано, то отчет ничего и не покажет.

    Рекомендую http://infostart.ru/public/89130/

    Reply
  6. bb1962

    (4) Как раз Ваш отчет и не контролирует предел сверхурочных работ.

    Вашим пользователям и нужен данный отчет, чтобы они видели чего же они навводили.

    Кстати, через пять минут тестирования Вашего отчета, добавив сотруднику один день работы (8 часов)

    получил то, что на картинке

    Reply
  7. victuan

    (5)Да, получается, что у вас работник за учетный период (1 кв 08) отработал сверхурочно 344 часа. И что? Теперь не оплачивать их вдвойне раз превышен лимит? А если вы возражаете против этого числа (типа оно завышено), то возможны варианты:

    — не верно задан график работы работника;

    — не верно задан учетный период (надо выбрать год, вместо квартала);

    — на самом деле имеет быть место неучтенная переработка, которая в нарушение другой статьи ТК не была оплачена в нужном размере.

    Reply
  8. bb1962

    (6) Не угадали. Ни одним из трех Ваших вариантов такого результата не достичь.

    342 часа в двойном размере, при том, что в полуторном только 2 часа. Это как, в сутках сколько часов тогда?

    Reply
  9. victuan

    (7)Я и не гадал. Я свои ответы на догадках не строю.

    Причем тут двойные или полуторные часы? Обработка показывает кол-во фактически отработанных часов. Если при норме 480 часов, в журнале расчетов обнаружено фактически отработанных 824, то это о чем говорит?

    Reply
  10. bb1962

    (8) Упертый Вы товарищ. Я уж было хотел раскрыть «секрет», но пока не буду.

    Это говорит о том, что в Вашем отчете есть ошибка.

    342 часа в двойном размере, не может быть при двух часах в полуторном.

    Ни при каких обстоятельствах не может.

    Reply
  11. victuan

    (9)Причем здесь сутки? Первые 2 часа вообще за учетный период, а не за сутки.

    Если вы выбрали стиль общения загадками, то прощайте. Загадывайте себе сами.

    Reply
  12. bb1962

    (10) Вот так считают … и не в керосиновой лавке.

    Reply
  13. victuan

    (11)Во-первых, меня не интересуют неграмотные самописки и неграмотные бухгалтеры.

    Во-вторых, у меня описывается вариант при суммированном учете рабочего времени, при котором общее количество сверхурочных часов определяется по итогам учетного периода, из которых первые два часа сверхурочной работы оплачиваются в полуторном размере.

    Reply
  14. bb1962

    (12) Как же Вы предсказуемы. Я ждал именно этого: «неграмотные самописки и неграмотные бухгалтеры».

    Самописка кстати не моя, я на этом проекте — случайный прохожий. А контора по всей России филиалы имеет (потому и самописка не моя), так что «неграмотных бухгалтеров» не мало, да и не только в этой организации.

    Но это пустой спор, его действительно надо прекратить.

    PS: Таких вот грамотных в самой «1С» кстати не мало, там тоже любят пользователей носом в бумажки тыкать.

    Я не против вдумчивого изучения нормативной базы, но край то надо видеть.

    Reply
  15. oleg_judin

    На мой взгляд надо учитывать что первые два часа сверхурочной работы оплачиваются в полуторном размере, а остальные в двойном (читай ТК), и уже на основании этого строить отчет по сверхурочным работам

    Reply
  16. bb1962

    (14) Читаем ТК, только все по разному. И что? Как в ДАННОМ отчет нужно (и можно ли) учитывать работы в полуторном размере? И зачем? Здесь выводится общее количество часов и объяснено для чего.

    Reply
  17. MYRZILKA123

    попробую скорей всего мне подойдет спасибо

    Reply
  18. vovkakursk

    спасибо. хороший отчет

    Reply
  19. baralgin1003

    Очень нужная и полезная вещь. Списибо большое!

    Reply
  20. ARTEM123456

    Очень хороший отчет.

    Вещь действительно нужная.

    Списибо большое!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *