Отчет "Количество застрахованных лиц для РСВ-1 ПФР" для конфигурации ЗУП 2.5 и БП 1.6




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

25 Comments

  1. just16

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

    Reply
  2. e.kogan

    То же самое достигается элементарно с помощью настройки Универсального отчёта. Но пусть будет плюс — во всяком случае, цифра у вас верная.

    Reply
  3. zFruit

    Полезный отчет! Спасибо автору! Если добавить еще детализацию по обособленным подразделениям, то становится более наглядным.

    Reply
  4. Slonik_Smile

    В отчете имеется ошибка. В порядке заполнения формы РСВ-1 указано, что количество застрахованных лиц — это количество сотрудников, на которых начислялись страховые взносы. В моей организации работает иностранный гражданин, на которого взносы в ПФР не начислялись, однако обработка выдает его в списке.

    Reply
  5. director04

    (4) . Проверьте записи регистра «СтраховыеВзносыИсчисленные». Запись там наверняка имеется. И ошибка скорее не в «отчете», а в «учете»… 😀

    Reply
  6. amdmy

    (5) запись в регистре по иностранцу и должна быть, только не по ПФР, а по НС. (4) прав.

    Reply
  7. director04

    (6) Гут, поправлю.

    Reply
  8. director04

    (4) Поправил. Спасибо за сообщение. Узбеков у нас еще не было 😀

    Reply
  9. director04

    (4). Ошибка пропала?

    Reply
  10. Slonik_Smile

    Да, теперь действительно все верно 🙂 Спасибо за работу.

    Reply
  11. LAL001

    Проверила отчет на своей базе. В список не вывела, например, сотрудника принятого в середине февраля, у которого страховые взносы на ЕНВД. При этом начислены ПФР страховая часть и ФСС НС. Что из них повлияло?

    Reply
  12. director04

    (11) Попробуйте скачать новую версию. Надеюсь ошибка исправлена. Сообщите. Спасибо за сообщение.

    Reply
  13. ablinka

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

    Reply
  14. vikv

    Спасибо!

    Reply
  15. LAL001

    Указанную ошибку (11) устранили. Но… У меня, например, есть сотрудники, которые находятся в отпуске по уходу за ребенком. С них не берут страховых взносов, но начисления им оформляются, как государственное пособие, выплачиваемое за счет средств ФСС. Эти люди попадают в среднесписочную численность для РСВ-1, а в Вашем отчете не выводятся.

    Reply
  16. director04

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

    Если в список должны попадать все работники, то может тогда просто брать полный список организации?

    Reply
  17. LAL001

    Цитирую РЕКОМЕНДУЕМЫЙ ПОРЯДОК

    заполнения Расчета по начисленным и уплаченным страховым взносам на обязательное пенсионное страхование в Пенсионный фонд Российской Федерации, страховым взносам на обязательное медицинское страхование в Федеральный фонд обязательного медицинского страхования и территориальные фонды обязательного медицинского страхования плательщиками страховых взносов, производящими выплаты и иные вознаграждения физическим лицам

    Настоящий Порядок разработан в соответствии с Федеральным законом

    от 24.07.2009 № 212-ФЗ «О страховых взносах в Пенсионный фонд Российской Федерации, Фонд социального страхования Российской Федерации, Федеральный фонд обязательного медицинского страхования и территориальные фонды обязательного медицинского страхования» (Собрание законодательства Российской Федерации, 2009, № 30 ст. 3738, № 48, ст. 5726) (далее – Федеральный закон № 212-ФЗ).

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

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

    Reply
  18. LAL001

    Уважаемый director04, как Вы видели, я поставила Вам плюс сразу после первого скачивания за желание помочь бухгалтерам. Но название Вашего отчета подразумевает правильное его заполнение. Поэтому и написано мое сообщение об ошибке. А исправлять его или нет, это Ваше решение.

    Reply
  19. director04

    (18). Уважаемая(ый) LALOO1, ставить плюсы или не ставить — дело каждого. Ставя «+» вы тем самым по сути выражаете бессловестное «спасибо» разработчику за неоплаченный труд.

    Пользоваться отчетом или нет — тоже на ваше усмотрение.

    Теперь по существу.

    1. Упомянутый вами «РЕКОМЕНДУЕМЫЙ ПОРЯДОК» не есть закон (это не мои слова, а слова профессора Финансовой Академии при Правительстве РФ С.А Харитонова. Читайте журнал БУХ 1С №4, стр. №6) , а всего лишь только рекомендация. Я ждал строки из закона.

    2. В приведенной вами выдержке, позволю ее себе зацетировать

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

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

    Я как говорится предоставил видение закона № 212-ФЗ, как оно мне представилось из статьи Харитонова.

    Все одно , спасибо за высказанную точку зрения.

    Reply
  20. LAL001

    Уважаемый director04. Ваша реакция, к сожалению, свойственна многим программистам. Сначала, как бы, попросили протестировать свой отчет, а затем обижаетесь на замечания.

    Я очень хорошо отношусь к профессору С.А Харитонову, но в силу опыта работы в Минфине, читаю подобные статьи очень спокойно. Отчет же РСВ-1 надо сдавать в фонды, а не в журнал.

    В любом случае, спасибо Вам за отчет. Но его можно сделать более информативным и полезным. Готова обсудить это с Вами по e-mail.

    Reply
  21. director04

    (20) Дальнейшее развитие данного отчета пока не планирую — отчетность. В скором будущем, по заявлению группы разработки, планируется выход нового внешнего регламентированного отчета РСВ-1, в котором вышеуказанные поля будут заполнятся в автоматическом режиме.

    Reply
  22. света1969

    специально проверила по месяцам. не катит: в январе берет принятых в марте. в октябре берет уволенных в июле!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    Reply
  23. director04

    (22) Уважаема Светлана, дело в том, что видимо, при формировании документов «Начисление страховых взносов», вы не верно указываете период. 101% что это именно так.

    Вы сами можете это проверить очень легко: откройте через меню «Операции» регистр накопления «СтраховыеВзносыИсчисленные» и убедитесь в этом сами. Метод исправления — исправить период в вышеупомянутых документах.

    2. В существующей на сегодняшний день конфигурации ЗУП, в штатном регламентированном отчете, данные по количеству застрахованных лиц заполняются автоматически. И отчет несколько утерял свой смысл.

    Все одно — благодарен за внимание к моей разработке.

    Reply
  24. didol3

    Как проверочное доп. средство очень даже!!!

    Reply
  25. scouti8

    Хороший и полезный отчет.

    Можно уже переводить на новые редакции

    Reply

Leave a Comment

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