Табель учета рабочего времени — унифицированная форма Т13. Для ЗиУП 8.1. Обновлен 17 08 2009




Принцип обмена данными из 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='\

29 Comments

  1. Serj1C

    Скриншот зачет )))

    Reply
  2. ChinChin

    Как раз на прошлой неделе по командировкам в 1С писал — пока молчат 🙁

    Reply
  3. zup_tptu

    Начало хорошее. Только табель Т-13 должен формироваться разный не только в случае перевода сотрудника в другое подразделение, но также и на другую должность.

    Спасибо за работу.

    Reply
  4. RailMen

    zup_tptu!

    Поговорил сегодня с нач кадрового отдела. Говорят по должности табель не кто не формирует, да и в типовом отбор по должности отсутствует. Может огород городить с должностью нет необходимости? Или есть?

    Reply
  5. SteiganX

    Возможность формировать с разбивкой по должностям была бы не лишней, хотя огород, наверное, нагородится неслабый.

    У нас один сотрудник в середине месяца сменил должность, потом два раза был в командировке и в конце месяца вышел в отпуск. В отчете по нему косячок: в колонках «неявки по причинам» задваиваются дни/часы по кодам К и ОТ. Пока нет возможности покапаться в коде отчета, но предполагаю что это (1) из-за двух командировок или же (2) из-за смены должности.

    Reply
  6. RailMen

    SteiganX!

    1) Задваивается мой отчет или типовой?

    2) Опиши периоды кадровых приказов: с 1 по 5 — Я, 6-7 К, 8-15 Я и т.п.

    3) Расчетные документы, которые были проведены в этом месяце по этому сотруднику

    4) Проверь совпадают ли периоды расчетных и кадровых неявок.

    Reply
  7. SteiganX

    1) Проблема именно с «УнифицированнаяФормаТ13 MAG 14 08 2009 ЗиУП 2_5_15», с типовым по «ОТ» все ок, ну а «К» не выводится вовсе.

    2) Период — апрель 2009 (пятидневка — 22 раб.дня), сотрудник принят давно. Кадровые документы:

    1. 13.04.2009 0:00:01 — Кадровое перемещение организаций — с 13 — смена должности.

    2. 13.04.2009 9:39:34 — Командировки организаций — с 14 по 14 (1 день)

    3. 13.04.2009 13:39:34 — Возврат на работу организаций — возврат 15

    4. 20.04.2009 14:33:26 — Командировки организаций — с 22 по 24 (3 дня)

    5. 21.04.2009 10:26:05 — Возврат на работу организаций — возврат 25

    6. 27.04.2009 15:16:29 — Отпуска организаций — 29 по 08 мая (2 дня в апреле)

    3) Расчетные документы:

    1. 16.04.2009 0:00:00 — Оплата по среднему заработку — 14-14 апр (1 день)

    2. 22.04.2009 12:01:10 — Премии работников организаций — премия за 4 квартал 2008

    3. 27.04.2009 0:00:00 — Оплата по среднему заработку — 22-24 апр (3 дня)

    4. 27.04.2009 16:22:30 — Начисление отпуска работникам организаций — 29 апр-08 мая (2 дня в апр.)

    5. 30.04.2009 23:59:59 — Начисление зарплаты сотрудникам организаций:

    5.1. Оклад по дням — старая ставка — 8 дней

    5.2. Оклад по дням — новая ставка — 8 дней

    4) Вроде все совпадает

    Reply
  8. SteiganX

    Ну и, соответственно, в отчете «УнифицированнаяФормаТ13 MAG 14 08 2009 ЗиУП 2_5_15» выводится: К 8(64), ОТ 4(30)

    Reply
  9. SteiganX

    Еще уточню: 13.04 произошло перемещение с изменением и должности, и подразделения.

    Reply
  10. bns

    чел чемто гитлера напоминает :)…

    Reply
  11. ptaha

    Подскажите!!! Формируя этот отчет по сотруднику, я так и не вижу двух строк по сотруднику, который перемещался у меня по подраздлениям, а все также одна строка в которой указаны все дни работы и если выбираю «выводить с разбивкой по подразделениям» он всего лишь делает одно и то же только с разными подразделениями только и всего, а где же отдельно у каждого подразделения по этому сотруднику количество только в этом подразделении отработано никто не знает и как проверить!!! Это нужно мое мнение, во всяком случае на практике встречаются личности которые требуют такую разбивку. Спасибо!!!

    Reply
  12. Ирка

    Я правильно поняла, кадровое перемещение сотрудника из одного подразделения в другое учитывается только тогда, когда ставим отбор по конкретному подразделению? Возможно ли с помощью вашего отчета получить табель по всему предприятию в разрезе подразделений с учетом кадровых перемещений сотрудников из одного подразделения?

    Reply
  13. Ирка

    из одного подразделения в другое?

    Reply
  14. IronKitty

    До момента проведения бухгалтерских документов начисления зарплаты Т13 формируется по кадровым документам. После проведения — по бухгалтерским.

    Но всё одно — это недоработка у 1с, что кадровые перемещения из подразделения в подразделение не отражаются в Т13. ОДНАКО! И в этой обработке — НЕ ОТРАЖАЮТСЯ ! Вот тебе и скриншотЪ….

    Reply
  15. e.kogan

    Те, кому нужны гибкие отборы, нормальный вывод должностей и т.д.: посмотрите мою разработку (http://infostart.ru/projects/3405/). Там всё должно считаться нормально. Корректно отрабатываются ВСЕ кадровые перемещения и изменения графиков. Корректно (относительно введённых данных, конечно) рассчитываются ВСЕ отклонения (как кадровые (план), так и расчётные (факт)).

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

    Reply
  16. TashaSPb

    Мде.. похоже клиенты с табелем не только у меня активизировались))

    Автору спасибо.

    Reply
  17. ChinChin

    На новом релизе (2.5.18.2) не пашет… Хотя в типовом командировки по прежнему включаются в отработанное время. В 1С ответили странно туманно:

    «Да, такое поведение отчета Т-13 отделом разработки признано правильным, поскольку время командировки является рабочим временем и в остальных формах учета времени не относится к неявкам. В частности, в более подробной форме Т-12 как раз командировки явно не включены в раздел неявок (последние там перечислены), т.е. на самом деле командировки неявками не являются и, по-видимому, в текст описания неявок в Т-13 попали по ошибке.»

    Т.е. сослались на то, что они так делают в Т-12, хотя рекомендациях по заполнению различие между ними не делается. При этом, если верить постановлению Госкомстата РФ №1 от 05.01.2004:

    «…При отражении неявок на работу, учет которых ведется в днях (отпуск, дни временной нетрудоспособности, служебные командировки, отпуск в связи с обучением, время выполнения государственных или общественных обязанностей и т.д.), в Табеле в верхней строке в графах проставляются только коды условных обозначений, а в нижней строке графы остаются пустыми….»

    Т.е. служебные командировки это все-таки неявки!!!

    Reply
  18. Vida

    Спасибо за отчетик! :{}

    Нашла ошибочку: когда на дату кадрового перемещения приходится не явка, а какое-нибудь отклонение (например сотр в это время был в отпуске) то отчет это отклонение отображает не верно. А именно продляет его до начала следующего отклонения, либо до конца месяца.

    А так же присоединяюсь к замечанию ptaha

    Reply
  19. Vida

    Извиняюсь. Оказывается эта ошибка и в стандартном отчете есть. 🙁

    Reply
  20. abcd777

    Не учитывается дата возврата кадрового перемещения.

    Reply
  21. ivorontsov

    Спасибо за отчетик!

    Reply
  22. mariyanna

    Спасибо! Хороший отчет!

    Reply
  23. Sean1s

    Спасибо, работает.

    Reply
  24. vovkakursk

    Спасибо. Очень здорово!

    Reply
  25. igo-osetro

    Хорошая разработка помогла по работе! Большое спасибо автору за этот Табель.

    Reply
  26. tehas

    (10) bns, ваще ужас =)

    Reply
  27. Tolpinski

    Я бы сменил изображение, времена изменились, можно и за экстремизм попасть %)

    Reply
  28. yandukov

    Для зуп 8,3 есть такой отчет?

    В конфигурации если было кадровое перемещение он не видит. ставит последнее место работы. Отдел кадров это не устраивает

    Reply
  29. RailMen

    (28) для ЗУП редакций 3.3.х, 3.4.х и 3.5.х этот отчет я не делал.

    Reply

Leave a Comment

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