Отчет по больничным листам (для ЗУП)




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

47 Comments

  1. SternZ

    Если ЕНВД — только подразделение организации, все равно считается, что ЕНВД — вся организация

    Reply
  2. qwer_str1

    1. нет разбивки по месяцам, в случае переходного больничного. например 20.04.2008-10.05.2008 — 20 000 руб

    апрель-10 000 (за сч. раб 2, фсс 8)

    май-10 000 (за сч. раб 0, фсс 10)

    2. не кисло было бы добавить возможность открытия документа и сотрудника двойным кликом из отчета

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

    4. и вообще было бы замечательно иметь возможность настройки отчета… ведь в том и прелесть 8 🙂

    а вообще +

    Reply
  3. albert

    (3) А как это в программе отражается?

    Reply
  4. Lectat

    Жаль, а у нас совмещение режимов: енвд и общего,(((

    Reply
  5. SternZ

    (4) Нас уже двое 🙂

    Reply
  6. albert

    (2) п.2 Обновил файл.

    Reply
  7. Тётя Наташа

    Еще посчитать кол-во рабочих дней, кол-во БЛ, из них первичных, вывести средний заработок и стаж и будет супер

    Reply
  8. gutentag

    Отчет не видит начисления «Отпуск по беременности и родам». Но правда у меня в проверяемой организации УСН, а в остальном похоже на правду(специально не проверял)…

    Reply
  9. gutentag

    Отчет так же не видит начисление «При постановке на учет в ранние сроки беременности» (режим УСН)

    Reply
  10. albert

    (8,9) Отчет собирается только по документу «Начисления по б/л». У себя на работе дополнительно вывожу секцию по пособиям.

    Reply
  11. seregatula@mail.ru

    Народ, а для 7.7 такого отчета ни у кого нет????

    Reply
  12. albert

    (11) Там же есть стандартный «Расходы организации на цели социального страхования за счет ФСС»

    Reply
  13. seregatula@mail.ru

    (12) Спасибо! Отчет этот я видел просто не обратил внимание что в нем есть реестр начислений….

    Reply
  14. John_Bel

    Спасибо!

    Reply
  15. rustafaa@mail.ru

    Albert, ты писал

    У себя на работе дополнительно вывожу секцию по пособиям.

    ты это нигде не выкладывал?

    Reply
  16. albert

    (15) Нет, не выкладывал. На днях обновлю файл.

    Reply
  17. rustafaa@mail.ru

    (16) Альберт, когда выложишь — дай знать пожалуйста.

    Reply
  18. gutentag

    Замечание: Имхо для организации-упрощенца, отчет не корректно ставит дни «за счет ФСС» и «за счет работодателя». Во всяком случае отчет не совпадет с печатной формой «оборот листка нетрудоспособности» и данными которые на закладке «отражения пособия в учете» в документе «Расчет больничного листа»

    Reply
  19. fedora-73@mail.ru

    Спасибо! Все работает. Бухгалтерия довольна.

    Reply
  20. vvt

    (18) Подтверждаю, при УСН считает не правильно…

    Reply
  21. albert

    (18),(20) По сути при применении УСН нет такого понятия как «дни за счет ФСС» и «за счет работодателя»» (http://www.klerk.ru/articles/?31834).

    Отчет (который с пособиями) обновил. Для сборки отчета для организаций УСН в отборе ставить соответствующую галочку.

    Reply
  22. albert

    + (21) А так вот наверное более корректная работа http://infostart.ru/projects/2608/ от WiseSnake

    Reply
  23. gutentag

    (21) Спасибо за аргументированный ответ 🙂

    Reply
  24. gutentag

    (22) По организации-УСН, я с отчетом от WiseSnake сдал больничные в ФСС на возврат денег.

    Только у него при УСН, в колонке «дней всего» складывает дни = не правильно

    Reply
  25. Akv@rel

    Скачала, а на УПП не работает, может исправите?

    Reply
  26. ketr

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

    Также нет настройки списка колонок отчета. (это нужно если отчетом будет пользоваться кадровик, которому не нужно знать суммы начисленные по БЛ)

    Добавите эти возможности?

    Reply
  27. albert

    (26) в ближайшее время — врядли.

    Reply
  28. Chuves

    Отлично, спасибо!

    Для работы в текущей версии ЗУП 2.5.19.3 нужно немного подправить.

    Reply
  29. megatrend

    Ошибка при открытии в свежих версиях ЗиУП :

    {Форма.ФормаРасчетнаяВедомость(83)}: Метод объекта не обнаружен (СформироватьЗаголовокОсновнойФормы)

    Заголовок = УправлениеОтчетами.СформироватьЗаголовокОсновнойФормы(ДатаС,ДатаПо , «Отчет по больничным листам», 2);

    😮

    Reply
  30. albert

    (29) пофиксил

    Reply
  31. Мыльный Пузырь

    💡

    Reply
  32. Молодой 1Снег

    Будет ли отчет приведен в соответсвие с требованиями закона вступившими в силу в 2010 году? Теперь первые два дня оплачиваются за счет работодателя не зависимо от применяемого режима налогообложения.

    Reply
  33. albert

    (32) Обязательно посмотрю, если что не так — поправлю.

    Reply
  34. Молодой 1Снег

    (33) И как успехи? Моим расчетчикам был бы полезен такой отчет, а самому мне делать некогда 🙁

    Reply
  35. albert

    (34) Поправленный отчет выложен. 😎

    Reply
  36. Молодой 1Снег

    (35) Супер! Плюсую!

    Reply
  37. gutentag

    ❗ ОШИБКА в ОТЧЕТЕ: при формировании данных отчет показывает 2-дня вместо 3-х.

    Reply
  38. albert

    (37) Выложил поправленный отчет.

    Reply
  39. k@tya

    у меня 1С 8.1 ЗУП 2.5.33.4, говорит Внешний отчет не может быть прочитан текущей версией программы. А для какой он версии?

    Reply
  40. albert

    (39) Обработка для версии платформы 8.2

    Reply
  41. folika

    А позвольте узнать, откуда у Вас первоначальный вариант? 🙂

    Reply
  42. ~Ponk@~

    Печально, но у меня так же показывает 2 дня(((

    Reply
  43. albert

    (42) А по подробней можно? Релиз, исходная ситуация….

    Reply
  44. stel1985@mail.ru

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

    Reply
  45. KSM

    Спасибо огромное!!! Очень пригодилась

    Reply
  46. vovkakursk

    Классно! Спасибо огромное

    Reply
  47. Drizer2000

    Отчет работает неправильно, если есть корректировки по больничным листам прошлого периода.

    Reply

Leave a Comment

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