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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *