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




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

75 Comments

  1. albert

    Записи в регистр «ПособияСоциальномуСтрахованию» в основном попадают документом «РасчетЕСН», что не есть хорошо 🙁

    Reply
  2. WiseSnake

    Albert не очень понимаю минус (2). Просьба прокомментировать.

    Reply
  3. Abadonna

    (3) А ты поставь ему минус на (1) :)))))))))

    Reply
  4. albert

    (3) «Это есть правильно» — у всех своя степень правильности. Просто когда меняешь один документ хочешь сразу в отчете увидеть результат, не перезаполняя другой документ.

    «Критика и предложения по доработками приветствуются» — Ваша фраза 🙂

    Reply
  5. WiseSnake

    (5) >>Критика и предложения по доработками приветствуются

    Абсолютно верно, но не безосновательный минус!

    > Просто когда меняешь один документ хочешь сразу в отчете увидеть результат, не перезаполняя другой документ

    Ну по первых если вести как я написал в (2) то есть «пo дaнным тeкущeгo дoкумeнтa» (а это документ «Начисление больничного», если вы не в курсе), то ничего перезаполнять не надо, при проведении документа все будет работать

    Во вторых на крупных предприятиях несколько расчетчиков и обязанности распределены в связи с большим объемом работы, и формированием проводок (регламентированном учетом) занимаются совсем не те люди которые вбивают больничные и им намного удобнее формировать и проверять заполняя документ «Расчет ЕСН».

    >»Это есть правильно» — у всех своя степень правильности

    Если каждый будет делать так как считает нужным, то хуже будет только клиенту. Необходимо узнать как должно работать. Предложить варианты клиенту и только если никакой из них не подходит то уже дорабатывать программу. А не искать легких путей. Это мое личное субъективное мнение.

    (4) 🙂 Не думаю что это разумно… тем более что человек все таки ответил…

    Reply
  6. WiseSnake

    И в третьих, на мой взгляд, по регистру брать более правильно, так как 8ка очень много позволяет пользователям и возможна такая ситуация что суммы в регистре задвоятся! (например если сначала сделали документ «Расчет ЕСН», а потом решили сделать отражение в «Начислении больничного», а такая не проверяется в ЗУП) а это неверные регламентированные отчеты, что чревато! А в этом отчете такие ситуации видны

    Reply
  7. Abadonna

    (6,7) Я тебе минус скомпенсирую плюсом на (7) 😉

    Reply
  8. WiseSnake

    (8) Пасиб :). Примного благодарен. От Вас особенно приятно 😉

    Reply
  9. albert

    Исходя из (7) резонным считаю добавление в описание отчета условий его использования.

    Reply
  10. WiseSnake

    (10) считаю (7) прописными истинами, на этом построена 8ка. А исходя из (6) делаю вывод что надо написать описание КАК работает отчет. Описание будет добавлено в обработку во 2й версии.

    Reply
  11. ElDgy

    По функциональности, проверено на реальной базе: например если есть больничный от 31.08.2008:

    период с 28.07.2008 по 25.08.2008

    28.07 — 29.07 — 2 дня за счет работодателя

    30.07 — 31.07 — за счет фсс

    01.08 — 25.08 — за счет фсс

    В отчет суммы попадают полностью, а вот дни за счет работодателя — пусто (должно быть 2), а за счет фсс только 25 (должно быть 27).

    Кстати очень нужный отчет (IMHO)

    Reply
  12. ElDgy

    Забыла написать: период формирования отчета — август.

    (при формировании за июль информации по этому больничному нет)

    Reply
  13. WiseSnake

    (13) Считаю это правильным. Больничный отражается в месяце НАЧИСЛЕНИЯ

    (12) Я не могу смоделировать подобную ситуацию… У выходит все правильно. Как отражается Ваш больничный в регламентированном учете (самим документом или РасчетомЕСН)? Проверьте движения регистратора по данному больничному.

    Окажу всякую помощь в решении данной проблемы.

    Reply
  14. ElDgy

    1.Проводки формирует сам документ.

    2. Согласна что правильно что больничный отражается в месяце начисления, но ведь он оплатил переходящие дни (суммы абсолютно верны).

    3.Даже при формировании с января по август он теряет переходящие с месяца на месяц дни если больничный зарегистрирован в следующем месяце (пример в посте 12) При этом суммы верны, как раз пользовались уже этим отчетом при проверке формирования отчетности в фсс за 9 месяцев.

    Reply
  15. WiseSnake

    Файл обновлен…

    Версия 2:

    -Выведена как еще одна группировка «причина нетрудоспособности»

    -Добавлен реквизит «Первичность», указывающий первичный это больничный или вторичный.

    -Добавлен реквизит «Разница дней» вычисляющая разницу между днями в документе и собранными по регистрам.(для проверки)

    -Если существует разница, то ошибочные общие дни подсвечиваются красным! (для проверки)

    Примечание: замечено, что часто при проведении больничного неверно попадают дни в регистр, при перепроведении дни исправляются… причина пока не выяснена.

    Reply
  16. gutentag

    ОШИБКА в отчете:

    Отчет Видит начисление «При постановке на учет в ранние сроки беременности» и

    Не видит начисления «Отпуск по беременности и родам»

    Reply
  17. WiseSnake

    (17) Вы ничего не путаете? Я могу прислать скриншот где он ВИДИТ эти начисления.

    Reply
  18. gutentag

    (18) …проверил еще раз — не видит. но правда у меня режим УСН, конфигурация (2.5.12.1).

    Я тоже могу прислать скриншот, где не обработка не видит «Отпуск по беременности и родам»

    Reply
  19. WiseSnake

    (19) больничные проведены корректно? Что в движениях по регистру «пособия социальному страхованию»?

    Reply
  20. gutentag

    Имхо «больничный лист» проведен корректно.

    У меня в документе записано:

    Причина нетрудоспособности = Отпуск по беременности и родам

    Начислить = Отпуск по беременности и родам

    Нетрудоспособность с 19.11.2008 по 07.04.2009

    Reply
  21. Abadonna

    Сорри за OFF. А с чего это вдруг мне пришло с этой ссылкой такое:

    Информационное сообщение сайта Инфостарт — все для 1С

    ——————————————

    Игорь(gutentag) ответил 09.12.08 14:12:48 в «Отчет по больничным листам для ЗУП 8.1»

    Имхо «больничный лист» проведен корректно.

    У меня в документе записано:

    Причина нетрудоспособности = Отпуск по беременности и родам

    Начислить = Отпуск по беременности и родам

    Нетрудоспособность с 19.11.2008 по 07.04.2009

    Адрес комментария:

    http://infostart.ru/projects/2608/?p=2#comm21

    ________________________________________

    Меня ни больничные, ни отпуски по родам в жизни никогда не волновали :)))

    Стопудово не заходил в эту ветку

    Reply
  22. WiseSnake

    (22) Заходили;) пост 4,8… походу пачиму та считается что Вы подписались :), мне тоже что то подобное приходило, но я не обратил внимания… пока

    Reply
  23. WiseSnake

    (21) Я просил движения регистра посмотреть… Они вообще есть? Вы их можете посмотреть?

    Reply
  24. gutentag

    В регистре «Пособие по больничному листу» — не отображается

    В регистре «Основные начисления работников организации» — отображается.

    Почему так — не знаю. Имхо глюк в программе :-/

    Reply
  25. WiseSnake

    (25) Ну отражаться больничные могут 2мя способами или прямо документом больничного если стоит галка Oтpaжaть в учeтe: пo дaнным тeкущeгo дoкумeнтa на закладке Oтpaжeниe пocoбия в учeтe. Скорее всего она у Вас не стоит! Или документом «Рассчет ЕСН» о чем говорилось в посте 1,2.

    Reply
  26. gutentag

    (26) Спасибо за помощь!

    Я Поставил галку в «по данным текущего документа» и Ваша обработка увидела «Отпуск по беременности и родам». Так же и увидел это начисление и отчет в «4-ФСС».

    Почему не отображалось «Пособие по больничному листу» в «Рассчет ЕСН» и отчете «4-ФСС» — для меня полная загадка :-/

    Reply
  27. WiseSnake

    (27) Именно по этой причине и для проверки был создан этот отчет…. Он так же будет совершенствоваться. Я уже знаю о паре случаев когда криво проводится регистр и соответственно криво отражаются больничные в отчетности. Вскоре выйдет новый релиз уже не тестовый… Там будет механизм отслеживания таких ситуаций и таких больничных. В отчет будут попадать только правильные данные, а «кривые» больничные будут отслеживаться и выделяться!

    Сейчас просто нет времени на это… Так что пожелайте мне успехов ))))))

    Reply
  28. gutentag

    (28) Ура !

    Reply
  29. Olyunchik

    Замечательно, неплохо было бы чтобы сразу выводил дату начала и дату окончания, без доп. настроек… Пасибки

    Reply
  30. relax2105

    Хорошый отчет!

    Reply
  31. relax2105

    как раз то, что мне надо было ….

    Reply
  32. serg2003

    то что надо, правда меня просили, чтоб это все в Расчетной ведомости выводило, как в 7-ке, ну да пока так посмотрим, мож потом разберусь и туда пихнем.Спасибо.

    Reply
  33. rebuzx

    Спасибо.

    Собирался свою писать, но теперь нет необходимости!

    Reply
  34. RailMen

    Спасибо.

    Собирался свою писать, но теперь нет необходимости!

    Reply
  35. WiseSnake

    Пожалуйста!

    Reply
  36. John_Bel

    Спасибо!

    Reply
  37. Filippov_NV

    Определение Первичный-Вторичный идет по Регистратору, а надо по ДОкументуОснованию (если регистратор — РасчетЕСН, то всё становится первичным. Дни тоже есть в Документе

    Reply
  38. Filippov_NV

    А за отчет — спасибо! Немножко подправлял — в условие включил Регистратор Сссылка Документ.РасчетЕСН, и указал в нужных местах ДокументОснование вместо Регистратора

    Reply
  39. WiseSnake

    (38, 39) Вот это я понимаю комментарии. Вам спасибо. Действительно Вы правы, поправлю как будет время.

    Reply
  40. WiseSnake

    (38) Поправил… Вроде )))

    Reply
  41. mariyanna

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

    Reply
  42. angler225

    Толковый отчет, вот если бы добавить пособие

    По уходу за ребенком до полутора лет, то цены ему не было. Смотрел внутренности, ничего особо не понял. Не представляю как это сделать.

    Reply
  43. angler225

    берется из РегистрНакопления.ПособияПоУходуЗаРебенкомДоПолутораЛет

    Reply
  44. WiseSnake

    Уважаемый angler225, еще много в этом отчете можно доработать,из-за кривизны учета созданного 1С это довольно таки трудоемко сделать, но я учту Ваше пожелание.

    Reply
  45. angler225

    Да конечно, это весьма не просто. Наверное для семерки это было сделать проще поскольку, таких отчетов уже есть.

    Reply
  46. WiseSnake

    (46) Ну ЗиК он намного старше, да и то в нем косяки годами не правятся. А в ЗУП изначально не продумали регистры по этому шаг влево шаг в право выливается в геморой на сами знаете какое место…

    Reply
  47. gutentag

    Имхо ошибка: для «Организации на УСН», отчет в колонке «дней всего» складывает дни «Дни за счет работодателя» и «Дни за счет ФСС».

    Reply
  48. WiseSnake

    (48) А красным подсвечивает?

    Вот на счет этого посмотрите:

    -Добавлен реквизит «Разница дней» вычисляющая разницу между днями в документе и собранными по регистрам.(для проверки)

    -Если существует разница, то ошибочные общие дни подсвечиваются красным! (для проверки)

    сформируйте и посмотрите разницу дней.

    Reply
  49. gutentag

    (49) Да, Красным подсвечивает. Реквизит «Разница дней» в отчете если УСН — автоматически не выводится

    Имхо для УСН в отчете надо сделать исключение — не надо складывать дни.

    Reply
  50. Золотко

    А у меня в отчет не все больничные попадают(

    Reply
  51. WiseSnake

    (51) А в регистры они у Вас попадают? А в другие отчеты (типовые!) попадают?

    Reply
  52. Золотко

    В регистры данные попадают. И в типовые отчеты попадают все больничные, а в этот только один

    Reply
  53. WiseSnake

    (53) Ну что я Вам могу посоветовать:

    1. Напишите мне релиз конфигурации на которой Вы пытаетесь сформировать отчет.

    2. Поэкспериментируйте с параметрами(период отчета) и отборами.

    Пока все…

    Reply
  54. Золотко

    (54) Нашла ошибку. У меня вообще только один больнчный попадает за счет ФСС, ни один в За счет работтодателя, все в Сумму начисления. Хотя все проводки у меня поставлены(

    Не подскажите где может быть ошибка в отражении?

    Reply
  55. IgorXml

    Спс. Я бы тебе больше чем один + поставил.

    Reply
  56. WiseSnake

    (56) Всегда рад помочь!

    Reply
  57. IgorXml

    (57) Доработку сделал в Вашем отчете. 😀 В описании отчета есть только: «Отчет «Анализ начислений работникам»». Я там добавил ссылку на http://www.infostart.ru/public/16458

    Reply
  58. galyna

    Спасибо, очень хороший отчет.

    Reply
  59. hummer83

    Большое спасибо за отчет))

    Reply
  60. starletka

    а что делать если перепроведение не помогло -и дни все равно задваивает?

    Reply
  61. WiseSnake

    (61)

    1. Не использовать отчет

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

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

    Будет ли отчет переделан под платформу 8.2?

    Стандартными средствами не конвертируется =(

    Reply
  63. Boroda

    Отчёт очень хороший, понравился. Но вот на новом релизе ЗУП (2.5.27.5) перестал работать. Вываливается ошибка. Вы его корректировать не будете?

    Reply
  64. WiseSnake

    (64) Любой каприз за Ваши деньги.

    >> Вы его корректировать не будете?

    Возможно и буду, но когда, неизвестно….

    Reply
  65. Hamann2000

    Если автор не против могу выложить исправленную версию.

    В УПП не работает только в последней (1.2.33) по той же причине что и в ЗУП 2.5.27-28. После исправления все нормально. В 1.3 не работает по причине 8.2

    Reply
  66. WiseSnake

    (66)Конечно выкладывай… Мне тоже ссылочку кинь 😉

    Reply
  67. pasha_d

    а можно ссылочку? =)

    Reply
  68. Hamann2000

    К сожалению данный отчет не будет формироваться в последних релизах ЗУП, начиная с 30-го(УПП 1.2 с 35-го), т.к. Документ «Больничный лист» перестал формировать движение в регистре ПособияСоциальномуСтрахованию

    Reply
  69. HarleyDavidson

    Спасибо!

    Reply
  70. guzelia

    Отчет хороший! Пригодился. Единственно, что он мне нужен был для кадровиков, а там права доступа не дают формировать отчет и им необязательно суммы видеть. Поэтому пришлось немного дорабатывать под себя.

    Reply
  71. igo-osetro

    Спасибо! Отчет хороший, но не много дорабатывать пришлось под свои нужды

    Reply
  72. 1c2008

    Отличный отчет, взяли как основу для собственной разработки.

    Reply
  73. Drizer2000

    А есть отчет для более новых конфигураций, например, для 2.5.49.2? При формировании выдается ошибка:

    {Форма.Форма.Форма(19)}: Метод объекта не обнаружен (ЗаполненРегламентированныйПроизводственныйКалендарь)
    Если ФормированиеПечатныхФорм.ЗаполненРегламентированныйПроизводственныйКалендарь(НачалоПериода, КонецПериода) тогда
    
    Reply
  74. Alexev

    На 2.5.56.3 работает без проблем. Спасибо большое!

    Reply
  75. sound

    Не работает на 2.5.76.1. Разработчики конфигурации попереносили функции в другие модули, типа было ФормированиеПечатныхФорм, стало ФормированиеПечатныхФормЗК, ну и другие ошибки есть.

    Reply

Leave a Comment

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