Проверка сумм уплаты страховых взносов для отчета в ПФР (ЗУП, БП, КА, УПП)




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

40 Comments

  1. 105raz

    Спасибо, именно то, что я искала. Самой отчет сделать не получилось. Будем тестировать.

    Reply
  2. kravella

    Идея отличная, спасибо. Потестим.

    Reply
  3. e.kogan

    Плюс — наши расчётчики сказали, что им надо. Посмотрим, как работать будет.

    Reply
  4. artbear

    (3) Моим расчетчикам уже пригодилась, суммы по пачкам и уволенным в 1 полугодии после исправления уплаты сели правильно.

    Reply
  5. Арчибальд

    Просто и внятно 🙂

    Reply
  6. Nicholas
    уплаченную уже во 2-м полугодии 2010 года (например, в Июле 2010 г.), указывают больше или меньше, чем остаток (начислено минус уплачено) за первого полугодие 2010

    А что если разница между сальдо и документом — 4 копейки, а начисленно за год меньше чем уплаченно на 10 т.р.?

    Вопрос снят. Туплю после ОРВИ.

    Reply
  7. elenka69

    💡 Обработка не открылась!!! файл скачивается без расширения!!!

    Reply
  8. artbear

    (7) Значит, твой браузер по какой-то причине обрезал имя файла.

    Добавь расширение .erf и открывай файл в 1С.

    Reply
  9. artbear

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

    Обычно их порядок обратный — страховая, а затем накопительная.

    Нужно ли исправлять? 🙂

    Это несложно.

    Reply
  10. AlexSkyMan

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

    Reply
  11. Zuzello
    artbear пишет:

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

    Немного напрягает 😀

    За отчет Великое СПАСИБО!

    Reply
  12. ФОТИМА

    СПАСИБО!! Отчет нужный, но в 1 квартале 2011 работает искаженно…Не показывает уплату за дек в январе. Если уже есть док по уплате за 2011год, то они попадают в 2010 в 1-е полугодие…. если есть возможность — исправьте.. 😀 .

    Reply
  13. Boroda

    Присоединяюсь к (12). Как только выправляется задолженность декабря 2010 проплатой в январе 2011, так этот документ бухается в 1 полугодие 2010 года, искажая сальдо за 1 полугодие 2010 года… и вообще тогда ничего не понять по остаточной задолженности. А уж если пытаться проверить 1 квартал 2011 года… лучше уж не делать, по той же причине: уплата за 1квартал 2011 года ложится в 1 полугодие 2010 года (!), вместо того, чтобы идти в хронологичном порядке вниз… и тогда сам чёрт ногу сломит в попытке разобраться в задолженности или переплате взносов.

    В отчёте для 7-ки, который вдохновил, как я понял, на написание этого отчёта подобной несуразницы нет. Там всё работает корректно. Было бы очень желательно поправить описанную выше ошибку и привести отчёт в приличный вид. Действительно, отчёт очень актуален и нужен будет и в дальнейшем, конечно, если будет поправлена ошибка.

    Рад бы был поставить плюс, но пока преждевременно…

    Reply
  14. Stepan_1c

    Спасибо, очень помог отчет.=)

    Reply
  15. SJR

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

    Reply
  16. eagle89

    Действительно, полезный отчет, спасибо автору!

    Reply
  17. siban

    Автору зачет, поставил бухам, они счастливы)

    Reply
  18. Stepan_1c

    Спасибо, что помогли убедить злых бухов! = )

    Reply
  19. loivsky

    Отчёт не учитывает разбивку 2011 года по кварталам.

    Также непонятно изменение конечного сальдо при изменении даты начала периода.

    Reply
  20. artbear

    Для получения информации начислено/уплачено/проверить ошибки начисления и т.п. детально по сотрудникам

    рекомендую свой отчет

    http://infostart.ru/public/93830/

    Зы правда, уже платный

    Reply
  21. a31
    Boroda пишет:

    Присоединяюсь к (12). Как только выправляется задолженность декабря 2010 проплатой в январе 2011, так этот документ бухается в 1 полугодие 2010 года, искажая сальдо за 1 полугодие 2010 года… и вообще тогда ничего не понять по остаточной задолженности. А уж если пытаться проверить 1 квартал 2011 года… лучше уж не делать, по той же причине: уплата за 1квартал 2011 года ложится в 1 полугодие 2010 года (!), вместо того, чтобы идти в хронологичном порядке вниз… и тогда сам чёрт ногу сломит в попытке разобраться в задолженности или переплате взносов. В отчёте для 7-ки, который вдохновил, как я понял, на написание этого отчёта подобной несуразницы нет. Там всё работает корректно. Было бы очень желательно поправить описанную выше ошибку и привести отчёт в приличный вид. Действительно, отчёт очень актуален и нужен будет и в дальнейшем, конечно, если будет поправлена ошибка. Рад бы был поставить плюс, но пока преждевременно…

    Так верно или неверно он работает в 2011г.?

    Reply
  22. sunrise40

    Спасибо автору. Отчет оказался очень полезным.

    Reply
  23. MatAll

    отличная программа!!!

    Reply
  24. baza1978

    отличный отчетик, помог расчетчикам, автору респект!

    Reply
  25. rebuzx

    (21) a31, Не верно!

    Reply
  26. artbear

    В текущем состоянии отчет работает в целом верно, но есть небольшие недостатки:

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

    2. некоторые периоды/суммы пляшут по разным полугодиям

    3. также есть непонятки с задолженностью.

    Мои бухи жалуются на эти недостатки, но активно пользуются.

    Отчет будет исправлен в скором времени.

    Reply
  27. LevSon

    ЗУП 41.3 отчет не может быть прочитан текущей весией программы!!!

    Reply
  28. ФОТИМА

    (27) LevSon, Скорее всего нужно открыть в конфигураторе, конвертировать

    Reply
  29. k

    Спасибо, обработка очень помогла при распределении уплаченных страховых взносов по инвалидам!!!

    Reply
  30. Veduin

    Интересный отчет!

    Reply
  31. AB3012

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

    Reply
  32. asa_2008
    loivsky пишет:

    Отчёт не учитывает разбивку 2011 года по кварталам.

    Также непонятно изменение конечного сальдо при изменении даты начала периода.

    И меня странно- в 2011 году разбивка на 1 и 2 полугодия. Во втором висит январь, на январе оплата сентябрь.

    Хотя все сведения в ЗУП забиты правильно и все отлично сдано в ПФР.

    С 2011 годом отчет работает?

    Учтены ли новые формы проводок по разноске оплаты ?

    Reply
  33. yalo

    Спасибо, очень выручила обработка

    Reply
  34. Veduin

    Спасибо, пользуемся, очень нужная вещь.

    У нас также Самим отчет сделать не получилось,

    Хорошо есть добрые программеры!

    Reply
  35. kalashuxa

    оо спасибо за отчетик!!!

    Reply
  36. kosenkovsv

    Смысл обработки понятен. Не могу понять только одного — где в документе «расчеты по страховым взносам» месяц начисления? В БП этот реквизит есть, но в ЗУП отсутствует напрочь.

    Конфигурация: Зарплата и Управление Персоналом, редакция 2.5 (2.5.50.1)

    Reply
  37. sparklemal

    (38) это еще что… в УПП 1.3.24.4 например, в документе «начисление страховых взносов» есть реквизит «месяц начислений», при проведении его, в регистр «Расчеты по страховым взносам» при записи ставиться начало года от этого «месяца начислений», а вот в документе «Расчеты по страховым взносам» — реквизит «месяц начислений» заполняется автоматом строкой «20100101» (датой отмены ЕСН) и ВСЕ!!!! далее при записи в регистр «Расчеты по страховым взносам» при записи ставиться начало года от этого «месяца начислений» (т.е. 01.01.2010!!!!!!) получается жестяная жесть!

    Посмотрел в ЗУП, тоже самое…

    ps может я не уловил мысли 1с по учету страховых взносов?

    Reply
  38. profibalans

    (39) sparklemal, это косяк настроек, проверь настройки программы насчет даты.

    У меня в этом регистре (после проведения «Начисление страховых взносов» есть поле Дата операции, соответственно имеется ввиду месяц)

    Обработочку счас потестим, спасибо. В описании очень многообещающе 🙂 Да и принцип стал понятен, а то бухи ввели все доки расчетов с видом Текущие платежи и спрашивают в чем дело.

    Reply
  39. medv

    О, для 77 как раз вариант удачный — там, как в черном ящике — где, что и откуда? «Простому» пользователю сложно было бы найти.

    Reply
  40. nadjav

    информацию надо в разрезе сотрудников в разрезе периодов, на мне помог

    Reply

Leave a Comment

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