Резерв отпусков. Управленческий учет отпусков. Для любых баз ЗиК




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

56 Comments

  1. инн123

    В ЗиК 7.7 выдает ошибку :

    Период.ИспользоватьОбъект(«СостояниеФизЛица», Сотрудник);

    {N:SOFTTD1CIKPRBASIC_SQLEXTFORMSА_РЕЗЕРВОТПУСКОВ.ERT(98)}: СостояниеФизЛица не является константой или периодическим параметром!

    Reply
  2. danich

    Отзывы из отпуска учитываются (документы сторно, исправления)?

    Reply
  3. samadurov

    (1) Это потому, что в отчете не учитывается расположение сотрудников по группам в справочнике «Сотрудники»

    Reply
  4. mrdug
    инн123 пишет:

    В ЗиК 7.7 выдает ошибку :

    Период.ИспользоватьОбъект(«СостояниеФизЛица», Сотрудник);

    {N:SOFTTD1CIKPRBASIC_SQLEXTFORMSА_РЕЗЕРВОТПУС КОВ.ERT(98)}: СостояниеФизЛица не является константой или периодическим параметром!

    да, скорее всего это из-за групп в справочнике Сотрудники, у нас их нет просто.

    Заменил отчет. Будут пропускаться группы и помеченные на удаление.

    Если у кого-то еще проблемы возникнут — пишите, не стесняйтесь, постараюсь помочь.

    Reply
  5. sanits

    Классная штучка, огромное спасибо. Но есть проблемка: есть сотрудники, у которых не верно считает не использ. дни отпуска (принят 11.01.2010, отгулял в августе 14 дней, а на сегодняшний день в резерве 35 дней отпуска) в чем может быть проблема? Спасибо.

    Reply
  6. danila_evropa

    Вот бы для ЗУП 2.5 такой отчет.. а то пришлось самому делать)

    Reply
  7. mrdug
    sanits пишет:

    Но есть проблемка: есть сотрудники, у которых не верно считает не использ. дни отпуска (принят 11.01.2010, отгулял в августе 14 дней, а на сегодняшний день в резерве 35 дней отпуска) в чем может быть проблема?

    Извините, раньше не мог ответить, только добрался до форума.

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

    Reply
  8. ross

    Вещь хорошая, но не попадает выплата Компенчсаций за неиспользованный отпуск

    Reply
  9. nano1c

    а для КА или ЗУП есть чтолибо подобное?

    Reply
  10. АлексейН

    Попадают сотрудники,

    если в документе ПриказОПриемеНаРаботу установлена дата окончания работы

    т.е. принятых на период работы, по ним документов об увольнении нет.

    Вставляем начиная со строки 116

    😀

    //Пропускаем принятых на работу с указанием даты увольнения в документе ПриказОПриемеНаРаботу
    //т.е. принятых с.. по.. ,  меньше даты отчета
    ДатаУвольненияИзДок = Период.ТекущийДокумент().Окончание;
    Если ПустоеЗначение(ДатаУвольненияИзДок) = 0 Тогда
    Если (ДатаУвольненияИзДок <= ДатаОтчета) Тогда
    Продолжить;
    КонецЕсли;
    КонецЕсли; 
    Reply
  11. netserfer

    Спасибо, немного допилил, бухи счастливы

    Reply
  12. mrdug
    ross пишет:

    Вещь хорошая, но не попадает выплата Компенчсаций за неиспользованный отпуск

    Извините, сейчас не могу поддерживать отчёт, 8.2 занимаюсь. Как вариант, вы можете либо сами попробовать доделать, либо отдать программисту на небольшую доработку.

    Reply
  13. alon

    Количество дней без сохранения считается в сумме за все года и получается больше 14 (например 8 в 2010 и 8 в 2011). Хотя должно считаться раздельно для каждого года, и тогда эти периоды не учитываются.

    Для себя исправил.

    Reply
  14. mayak15

    Да, не попадает выплата компенсаций за неиспользованный отпуск

    Reply
  15. TrinitronOTV
    mayak15 пишет:

    Да, не попадает выплата компенсаций за неиспользованный отпуск

    да уже видимо бесполезно обсуждать этот отчет — автор уже в пространстве 8.2

    Reply
  16. kxl

    не работает так как надо…

    пришлось допиливать

    Reply
  17. mrdug
    kxl пишет:

    не работает так как надо…

    пришлось допиливать

    Рад бы помочь, но возможности нет 🙁

    Reply
  18. IDija

    А в комплексной работает?

    Reply
  19. mrdug

    Попробуйте. Если не получится — ничего не сломается.

    Reply
  20. opolyakova

    хотелось бы скачать, но коменты оставлять надо…

    Reply
  21. mrdug
    хотелось бы скачать, но коменты оставлять надо…

    А что без комментов не даёт скачать?

    Reply
  22. mary_F

    Доработала под требования своего отдела кадров. Спасибо за отчет, ОК доволен!

    Reply
  23. vit_new

    У наших работников есть дополнительные отпуска. И, вообще считаю, за основу в таких отчетах следует брать реальную информацию из журнала расчета зарплаты.

    Reply
  24. mrdug
    vit_new пишет:

    И, вообще считаю, за основу в таких отчетах следует брать реальную информацию из журнала расчета зарплаты.

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

    Reply
  25. vit_new

    Скачал, попробовал отчет.

    1. Прогулы,отпуска по уходу до 3-х лет, учебные отпуска, компенсации отпуска (должны вычитаться из отпускного стажа)

    2. Нужна какая-то доработка по дополнительным дням отпуска.

    3. Дни, сверх 14-ти дней за свой счет, вычитаются за каждый рабочий год отдельно.

    Reply
  26. el.comarova

    Да без учета дополнительных отпусков нормально. А под 8.2 такой не делали?

    Reply
  27. mrdug
    el.comarova пишет:Да без учета дополнительных отпусков нормально. А под 8.2 такой не делали?

    Только в перспективе. Тут (на инфостарте) есть отчет по резервам для 8.2, правда он платный.

    Reply
  28. opolyakova

    неправильно считает

    Reply
  29. mrdug
    opolyakova: неправильно считает

    mrdug (21.09.2011): Извините, сейчас не могу поддерживать отчёт, 8.2 занимаюсь. Как вариант, вы можете либо сами попробовать доделать, либо отдать программисту на небольшую доработку.
    Reply
  30. baronzelan4

    Есть ошибки. Но в целом не плохо. Спасибо!

    Reply
  31. chugada

    Очень актуальный обработка. Бухам как всегда все нужно вчера, а тут такой подарок.

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

    Reply
  32. kris_vod

    Может у кого нибудь есть,поделитесь плиз…..Стоит комплексная версия 7.7 надо как всегда вчера,резерв отпусков, чтобы учитывались: в счет отпуска, дополнительный отпуск (Вредные условия труда),оечредной отпуск,и не входили в расчет отпусков по учебе, по уходу за ребенком и без сохранения зп. ОЧень очень нужно.

    Reply
  33. keysnofelet

    один раз пригодился отчет, видимо настает время опять его запустить

    Reply
  34. nvilku

    спасибо огромное, хорошая обработка! Очень помогла для формирования отчетности!! Единственно, неправильно считает резерв отпусков у сотрудников находящихся в декретном отпуске

    Reply
  35. МаринаККК

    В отчет не попадает компенсация за неиспользованный отпуск, а так отлично..спасибо

    Reply
  36. Tolpinski

    Не хватает фильтра «стандартного» для зик по сотрудникам, а так +

    Reply
  37. emptyteam
    Tolpinski пишет:

    Не хватает фильтра «стандартного» для зик по сотрудникам, а так +

    Да, очень не хватает фильтра!! А так большое спасибо!

    Reply
  38. server_sam

    а мне понравился отчет немного доработать и все готово

    Reply
  39. Ariko-sv

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

    Reply
  40. Sbelyi78

    Правда очень полезно, вот только при расчете сумм надо брать среднедневную за месяц или за 12 месяцев?

    Reply
  41. KrakoZyabl

    Спасибо большое, очень пригодилась обработочка!

    Reply
  42. flash82

    Спасибо большое, очень пригодилась, но надо немного доделать…

    Reply
  43. vpozitive

    Почему то средний не выводит, ан двух базах проверяла((((((((((((((((((((((((((

    Reply
  44. Boroda

    Что-то такие противоречивые отзывы… Так и не понял стоит ли скачивать и использовать в работе или повременить из-за довольно многих недоработок…

    Reply
  45. mrdug

    (52) Boroda, рад бы доработать, но базы подходящей нет под рукой. Пришлось оставить так.

    Reply
  46. Кошки рулят

    (52) Boroda, Фигня. Безграмотная поделка, к тому же, без необходимого функционала.

    Мы с бухтой сделали это намного круче …

    Reply
  47. mrdug

    (54) Кошки рулят,

    вот и пришлите г-ну Boroda вашу грамотную разработку 🙂

    Reply
  48. Кошки рулят

    (55)

    1. Не могу. Авторов-то двое — как же можно раздавать чужое? На этом ресурсе об авторское право ноги вытирают, но это НЕ значит что все кто здесь такие.

    2. Не хочу. С какой радости?

    Reply
  49. RomxxxStar

    Спасибо

    Reply
  50. msa777

    Большая просьба дать ссылку на этот отчет или закинуть на мой ящик msa102@mail.ru

    mrdug писал вам сообщение с этой просьбой и удалили похоже…

    Заранее благодарен всем кто отзавется!!!! 🙂

    P.S.

    нет у меня к сожалению валюты сайта…

    Reply
  51. alina71

    В 1С зарплату ведем с 2004 года, а почти все работники приняты на работу намного раньше. Соответственно «использовано» дней считает только с 2004 года, а «заработано» с даты приема на работу. Как быть?

    Reply
  52. Shura2000

    в шапке уже исправленный отчет лежит?

    Reply
  53. var-s

    Может и опоздас с коментарием….

    но пока минусов довольнотоко много…

    1. не учитывает административные отпуска по отработанному времени.

    2. не учитывает дополнительные дни отпуска.

    3. не учитывает неоплачиваемые дополнительные дни отпуска

    плюс найден только один

    выдает цифры с которыми делай что хочеш(

    Reply
  54. Sol777

    Весьма актуальный вопрос. Спасибо. Плюс.

    Reply
  55. shkev

    Спасибо большое хороший отчет ) У самого руки не доходили для 7.7 написать Плюс

    Reply
  56. MariP

    не взлетела:

    Если ТаблицаОтпуск.ДнейДопОтпуска >0 Тогда

    {D:1C_BASES1С ERTЗИКОТПУСКРЕЗЕРВОТПУСКОВ1.2.ERT(229)}: Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)

    Reply

Leave a Comment

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