Выгрузка и подготовка данных для программы "Перечень льготных профессий" для 1С: ЗУП 2.5 (ОТКРЫТЫЙ КОД)




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

62 Comments

  1. Black-fog

    Огромная просьба к приобретающим обработку: оставляйте пожалуйста отзывы и пожелания. А то счетчика продаж на страничке нету и понять что это за продукт людям сложно. Заранее спасибо =)

    Reply
  2. Zolotova78

    Подскажите, а для бюджета работает обработка?

    Reply
  3. Black-fog

    ХЗ. Я с бюджетом не работал никогда, даже конфу ни разу не видел. Для выборки данных используются таблицы Документов пенс. отчетности, регистры РаботникиОрганизаций и ШтатноеРасписаниеОрганизаций + механизм доп. свойств объектов. Если в бюджетке те же метаданные используются, то должно работать

    Reply
  4. amv79

    Уважаемый разработчик! Подскажите, когда последний раз вносили изменения в обработку, почему возник вопрос, т.к. программа «Перечень льготных профессий 3.6.3 от 22.09.2015 «.

    Надеюсь, что структура файла XML совпадает с требованиями ПФР, а именно поля Адрес и Дата рождения — присутствуют?

    При приобретении обработки можно ли самим вносить изменения и сколько будет стоит дальнейшее обновление обработки

    Спасибо

    Reply
  5. Black-fog

    (4) amv79, Реквизиты присутствуют. В последний перечень все загружается. На видео вроде бы всё видно. И адрес и дату рождения. выгрузка будет поддерживаться в актуальном состоянии пока я работаю в этом франче. У нас знаете-ли каждое второе предприятие по вредникам отчитывается) Код модуля закрыт (основные процедуры заполнения там), но в модуле формы можно дописать что-нибудь по мелочи.

    Reply
  6. kitenok1982

    Добрый вечер, а есть возможность доработать обработку, чтобы в перечень попадали сведения о стаже не только по 1 и 2 спискам (27-1, 27-2), но и льготный стаж например по медикам (27-ГД, 27-ГДХР 27-СМ, 27-СМХР)

    Reply
  7. Black-fog

    А как это выглядит в базе? Я просто не имел дела с такими случаями. В индивидуальных сведениях эти данные заполняются автоматически?

    Reply
  8. Black-fog

    (6) kitenok1982, А как это выглядит в базе? Я просто не имел дела с такими случаями. В индивидуальных сведениях эти данные заполняются автоматически?

    Reply
  9. kitenok1982

    (8) да автоматически на основании поля «Основание выслуги лет» в должности сотрудника.

    Reply
  10. Black-fog

    (9) kitenok1982, Увы, но нет. Т.к. в ЗУП 2.5 таких полей нету, то и в выгрузке они отсутствуют, а для доработки нужна база и заполненный перечень ЛП как пример. Ни тем ни другим я не располагаю.

    Reply
  11. kitenok1982

    (10) эти поля есть.

    Reply
  12. Black-fog

    исправил ошибки

    Reply
  13. 88Ksuha88

    Спасибо огромное!! всё работает! и за обратную связь тоже спасибо!!!

    Reply
  14. 88Ksuha88

    Было выявлено небольшое несоответствие при формировании таблицы»отчет по работнику».

    В разделе командировки за период с 01.01.2016 по 31.03.2016

    выводятся на экран командировки прошлого периода, а точнее самые последние за 2015 год Н.р с 03.12.2015 по 14.12.2015- при этом

    в разделе «периоды работы»- дата начала и дата окончания периода- программа разбивает все точно без ошибок исключительно период за 1 квартал.

    Так же в разделе командировки- был указан сотрудник, который уже уволен. Т.е есть одно физ лицо и 2 сотрудника. Один уже уволен еще 2013, а второй работает с 2014. В таблице по сотруднику указывается две командировки: одна по уволенному сотруднику, другая по работающему. Табельные номера у сотрудников разные.

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

    Reply
  15. Black-fog

    добавил возможность изменения пенс возраста и выгрузку колонки ОснованиеВыслугиЛет

    Reply
  16. babikoff

    Не дает изменить модуль формы!

    Reply
  17. Black-fog

    Мне дает. При сохранении спрашивает пароль, но если нажать отмена норм сохраняет на диск

    Reply
  18. Black-fog

    (16) babikoff, Мне дает. При сохранении спрашивает пароль, но если нажать отмена норм сохраняет на диск

    Reply
  19. user595534_petrov

    Здравствуйте.

    Приобрели вашу обработку. Большое спасибо, сильно облегчает. Вопрос такой:

    как организовать кооллективную работу с корректированием списков? Ну или можно ли сохранять данные не локального пользователя, а глобально, видимые для всех пользователей. Сейчас данные сохраняются только для отдельного пользователя. Если заходить под одним и тем же аккаунтом, то сохраняются данные того, кто первый сохранил. Цель — распределить работу по разным людям. Ну или хотя бы сделать так, чтобы можно было работать по очереди разным пользователям с одними и теми же данными.

    Reply
  20. Black-fog

    (19) user595534_petrov, знаю вопрос больной) На этих выходных хочу сесть. вроде бы время и силы есть. как выйдет новая версия скину на почту

    Reply
  21. Black-fog

    (19) user595534_petrov, Добавил возможность загружать из файлов. Подходят даже те файлы которые выгружаются из перечня. Так что есть возможность сэкономить время на ввод выгружаемой в перечень информации использовав отчетность за пред квартал. При выгрузке задается вопрос о там итоговая ли это выгрузка. Если да, то происходит обычная выгрузка, если нет, то выгружается в расширенном формате, добавляет UIDы подразделений, должностей и физлиц. Короче то что нужно для полного восстановления сохраненной информации. Этот файл в перечень не загрузится.

    Хотите сказать спасибо — оставьте отзыв, а то народ качает, а отзывов нету(

    Reply
  22. 88Ksuha88

    Спасибо ещё раз, за обновлённую версию! всё работает!

    Reply
  23. Damir

    Приобрел данную обработку. Бухгалтера безмерно рады. Спасибо автору за продукт и отдельное Спасибо за оперативный отклик по доработке под нашу специфику.

    Reply
  24. yandukov

    Здравствуйте. Нужна такая же обработка для ЗУП 3.1.1.81, платформа 8.3.8.1861.

    Reply
  25. Black-fog

    (24) yandukov, Добрый день. Пока в планах нету.

    Reply
  26. Elrod

    добрый день. а может ли обработка выгрузить данные в эту программу?

    http://www.pfrf.ru/branches/krasnoyarsk/info~program/2418 в версию 3.6.5

    Reply
  27. Black-fog

    (26) Elrod, именно для выгрузки в нее она и предназначена

    Reply
  28. Elrod

    спасибо.

    Reply
  29. Yul_kat

    Добрый день! Работает ли обработка на релизах 2017года? Например релиз 2 5 117 1.

    Спасибо!

    Reply
  30. Black-fog

    (29) с 2017г РСВ-1 не применяется, а обработка берет стажи именно с РСВ-1. так что нет, только если вы будете формировать в ней 2016г и ранее.

    Reply
  31. Yul_kat

    Я так и предполагала. Планируется ли новая обработка или, если она уже есть, то сколько стоит?

    Reply
  32. Black-fog

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

    Reply
  33. Yul_kat

    Будем благодарны, если отпишитесь по готовности в этой теме, чтобы нам оповещение пришло.

    Reply
  34. Black-fog

    (33) хорошо, так и сделаю)

    Reply
  35. yandukov

    В зарплате 3.0 эта обработка работает?

    Reply
  36. yandukov

    очень нужна эта обработка для ЗУП 3.1 (3.1.2.212)

    Reply
  37. Black-fog

    (36) увы, сейчас для меня переписывать ее нецелесообразно. Не раньше чем я своих на 3 переведу, а это будет ближе к концу года.

    Reply
  38. Yul_kat

    Добрый день! Владислав, я так поняла, Вы серьёзно проработали тему формирования перечня льготный профессий. Подскажите, пожалуйста, почему именно для версии 3.6.5 файл формируется? Столкнулись с такой проблемой, что наш клиент использует программу «Перечень льготный профессий» версии 1.0.5.97 ссылка на программу: http://www.pfrf.ru/branches/irkutsk/info~strahovateli/902. А формат для загрузки данных совсем другой. Заранее спасибо!

    Reply
  39. Black-fog

    (38) Это другая версия программы. надо смотреть формат. В ближайшее время гляну

    Reply
  40. Yul_kat

    Вопрос, даже, немного в другом, почему Ваши клиенты используют версию 3.6.5? Может, она более удобная, чем версия 1? Вообще, не понятно, как кадровик принимает решение, какой версией пользоваться. Не нашла никакой информации. На инфостарте только одна обработка под версию 1 от 2015 года и куча под 3.6.5.

    Reply
  41. Black-fog

    (40)честно говоря я даже не знал, что такая есть до вашего сообщения. Наши отделения ПФР работают именно с версией 3.6.5. ее и рекомендуют организациям региона. (Рекомендовали до 2017 г.)))

    Reply
  42. Yul_kat

    (41)вот и мы даже не догадались уточнили это перед тем, как обработку ставить клиенту и вот теперь как то перед ним совсем не комильфо :))

    Reply
  43. Yul_kat

    Буду пробиваться в наш ПФР. Даже не знаю, что проще — переписать на новый формат или убедить клиента, что надо другой программой пользоваться…. спасибо за комментарии. В идеале же, круто было бы иметь универсальную обработку под все форматы.

    Reply
  44. Black-fog

    Выложил с открытым кодом, за стартмани. времени нет ни дорабатывать, ни переписывать под годовую отчетность.

    Reply
  45. dr_dom

    Владислав, подскажите. Верно, что в 2017г перечень ЛП сдается за весь год? Получается Вашу обработку надо дорабатывать:

    1) что-бы была возможность выбрать весь год, а не квартал;

    2) Теперь данные о стаже надо подтягивать из документов СЗВ-СТАЖ? Пачки то не формировали в этом году.

    И наверно много чего еще…

    Все так?

    Как Вы оцениваете много всего по коду придется менять?

    Reply
  46. Black-fog

    (45) думаю да, поэтому и выложил с открытым кодом, в тайне надеясь потом купить готовое) Формат поменялся, Заполнение переписать не трудно, там один запрос, но выгрузку подгонять под формат думаю будет много возни.

    Reply
  47. dr_dom

    (46) Наш ПФР готов принять за 2017г в формате 3.6.5.

    Reply
  48. bsens72

    Добрый день! Подскажите данная обработка на ЗУП 3.1.4 работать не будет?

    Reply
  49. Black-fog

    (48)нет конечно

    Reply
  50. yandukov

    Сделала внешнюю обработку для 8.3. Если кому-то нужно, пишите.

    Reply
  51. tjulia

    (50) Поделитесь пожалуйста обработкой

    Reply
  52. kitenok1982

    (50)Наталья, доброй ночи, поделитесь пожалуйста. avgur82@ya.ru

    Reply
  53. semen_2008

    Наталья, доброго времени суток, и со мной поделитесь пожалуйста sedcom1@mail.ru.

    Reply
  54. user595534_petrov

    (53) Если можно то и мне petrov@zsgp.ru

    Reply
  55. yandukov

    Всем отправила

    Reply
  56. smidt

    Не формирует 2017 год

    Reply
  57. MarinaChist

    Здравствуйте. Как я понимаю, при создании отчетности за 2018 год обработка будет совсем не актуальна. Огромная просьба ко всем разработчикам: при создании отчетности за 2018 год поделиться обработкой.

    Reply
  58. Rtyt
  59. user904238

    Не заполняет 2018 год по кнопке заполнить

    Reply
  60. Black-fog

    (59) и не должен. отчет заполняется по стажам из пачек раздела 6 отчета РСВ-1

    можете переписать запрос в модуле объекта привязав его к пачкам сзв-стаж. думаю это не сложно, но сам заниматься этим не буду.

    для сдачи отчета за 2018 год обработка в нынешнем виде неактуальна.

    Reply
  61. Flextor74

    Скачивая обработку, которая называется: «Выгрузка и подготовка данных для программы «Перечень льготных профессий» для 1С: ЗУП 2.5 (ОТКРЫТЫЙ КОД)», я понимаю, что получу версию для ЗУП 2.5. Логично? В комментарии обработки — версия для зуп 3.1.8 бета. На ИНФОСТАРТЕ можно было назвать ее корректно? Скиньте на мою почту версию для ЗУП 2.5 пожалуйста. mikhalin_1991@mail.ru.

    Reply
  62. Black-fog

    для 2.5 на сдачу 2018 года обработки готовой нет. выложенная версия предназначалась для сдачи 2016 года и требует адаптации, на которую у меня нет времени и желания. Можете скачивать на свой страх и риск, с пониманием, что придется пилить, хотя и не сильно.

    Reply

Leave a Comment

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