Проверка начисленных и уплаченных страховых взносов по сотрудникам с учетом изменений 2013 года на СКД с возможностью отбора по документам (СЗВ-6-4, СЗВ-6(1-2) и признаку принято в ПФР.




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

37 Comments

  1. makas

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

    Reply
  2. gull22

    Плюсанул, пригодилась очень своевременно.

    Reply
  3. higs

    Хорошая идея. Для проверок в 2013 году пришлось подправить код, там новый документ. Далее все отработало. Спасибо!

    Reply
  4. Bruk

    higs, Вы наверное мой отчетик с другим перепутали, у меня отчетик на компановке данных и кода совсем нет ((,

    изменения 2013 года (ПачкаДокументовСЗВ_6_4), уже учтены))

    Reply
  5. higs

    (4) Прошу прощения, было открыто две страницы, написал немного не в ту тему. Писал про расхождения по индивидуальным сведениям, там как раз СЗВ-6-4 учтены не были. В Вашем все хорошо, спасибо!!

    Reply
  6. Bruk

    Очень приятно, что отчетик пригодился))

    Reply
  7. belyy

    +++ Отлично всё сложил за 3 года и 2013 I кв

    Reply
  8. belyy

    ММММ…не совсем всё правильно складыавет, если есть человек в 2013 году двоящийся один раз в пачке с договорниками а другой раз в пачке с ТРУДОВОЙ то не сумирует ту карточку где стоят суммы его как ДОГОВОР. Будет исправление? А так отчёт отличный

    Reply
  9. gala2009

    спасибо! скачала. буду пробовать. хотя в принципе 1С выдает сальдо по сотрудгикам при формировании новых ИС или по кнопке Комментировать. но там проблемы с учетом корр.пачек, да и тольео остатки — переплата, недоплата. еще выводила остатки чрез консоль запросов с запросом по регистру сведения принятые в пфр

    Reply
  10. Bruk

    (8) belyy, Посмотрите пожалуйста, а случайно пользователи не завели два Физ лица(зачастую кадры не понимают что должно быть только одно физ лицо и два сотрудника), тогда можно воспользоваться обработкой Поиск и замена значение.

    Reply
  11. Bruk

    (9) gala2009, Совершенно согласна с вами по первому пункту, именно поэтому показала пользователям, что теперь 1с показывает переплату, но они попросили дописать отчет, т.к. форма проверки выдается модально, если скопировать в файл, то данные становятся не читаемыми и нет возможности проанализировать. Если формировать сведения по Регистру принятых в ПФР, то не попадают данные текущего периода, а ведь зачастую именно в текущем периоде выявляется переплата.

    Reply
  12. gala2009

    да, конечно, удобно быстро проверить в том числе и начисления с уплатой текущего периода, не загоняя его в регистр сведения принятые в ПФР. Отчет сформировала, быстро, наглядно, сальдо с минусом (если недоплата), как и в отчетах ПФР, которые они присылают для сверки. Но получается, в вашем отчете считаются начисления и уплата по всем пачкам(с приоритетом как я поняла КОРР), и которые не прведены, и не стоит галка Приняты в ПФР? просто часто видела у клиентов кучу пачек-дублей в списке документов ПФР, уж не знаю как умудряются. что-то загрузили, что-то сами сформировали и пр.. в данном случае как быть? убрать все лишние пачки? а помеченные на удаление пачки в расчете не участвуют?

    Reply
  13. gala2009

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

    Reply
  14. Bruk

    (13) gala2009, Вы все правильно поняли, отчет формируется с приоритетом кор пачек, собираются данные по всем пачкам, кроме помеченных на удаление. Поэтому достаточно на ошибочные пачки установить пометку удаления. Действительно странно, что так получается когда слишком много лишних документов, ведь при работе с обработкой Подготовка данных в ПФР, при удалении пачек документы помечаются на удаление, а если сформировать новые пачки, то изменения вносятся в старые. Хотя, пользователи зачастую многое могут, может они из журнала вручную формируют сведения )).

    Reply
  15. Loader_1C

    Спасибо за отчет! Очень пригодится.

    Reply
  16. Loader_1C

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

    Reply
  17. Loader_1C

    Какие корректировки внесены в вариант от [06.05.2013 21:49] ?

    Reply
  18. Bruk

    (17) Loader_1C, просто заголовок публикации поменяла))

    Reply
  19. Loader_1C

    (18) понятно, просто, надо было наверно как-то обозначить этот момент, чтобы не перекачивать повторно)))

    Reply
  20. gradus

    Будет ли этот отчет показывать остатки по людям «глазами 1С», т.е. если заполнить сведения в ПФР штатным методом ЗУП, то остатки будут совпадать с тем, что показывает отчет?

    Или конкретнее:

    Как исправить учет, имея распечатку с фамилиями и суммами задолженности на начало 2013 года?

    Reply
  21. Bruk

    (20) gradus, Совершенно верно, остатки по людям будут совпадать с остатками в 1С, копейка в копейку, как вы знаете в одном из последних релизов ЗУП появилась проверка превышения, эту проверку сразу показала пользователям и сказала т.к. 1с реализовала данную возможность, то отчет переписывать не буду, но они настояли на своем, пришлось дописать отчет)). Если в отчете пользователи обнаружили превышение, то просто эту сумму в документе Пачка СЗВ 6-4 вручную снять с сотрудника и перенести на другого. Если посмотреть на мой пример, то у Антоновой Ирины есть превышение по страховой — 350, и по накопительной — 220, можно перенести на Петрова Петра Васильевича. Что касается второго вопроса, здесь все сложнее, т.к. все зависит от вашего отделения ПФР, у нас более 30 организаций в разных регионах и даже если отделения находятся в одном городе, то требования все равно у каждого свои. Вам лучше созвониться со своим отделением и уточнить у них как лучше подготовить отчеты. скорее всего с учетом что 2012 год уже закрыт, вам придется сдавать корректирующие сведения в составе текущего периода, за 2012 год(это будет СЗВ 6(1 или 2)).

    Reply
  22. 4el

    Спасибо большое за отчёт!

    Точно пригодится!!!))

    Reply
  23. Prelude

    Добрый день! Подскажите, можно ли в этой обработке выбирать пачки СЗВ которые нужно проверить? У меня предыдущий бух за один период создавала по 2 по 3 пачки СЗВ и теперь не разберешься какая правильная. А так с помощью обработки можно было бы выявить.

    Reply
  24. Bruk

    (23) Prelude, По вашей просьбе доработала отчет, добавила возможность отбора по документам (Пачка документов СЗВ-6-4 и Сведения о страховых взносах и стаже застрахованных лиц (СЗВ-4, СЗВ-6)) и по признаку принято в ПФР. В отчете можно установить отбор как по одному документу, так и по нескольким. Сегодня выложу обновленный отчет, после одобрения модератором можно будет скачать.

    Reply
  25. Bruk

    (23) Prelude, если вопросы еще актуальны, отчет можно скачать.

    Reply
  26. makas

    Если в отчете есть конечное сальдо, тогда должно быть и начальное сальдо.

    Reply
  27. Bruk

    (26) makas, теперь в отчете есть и начальное сальдо

    Reply
  28. 4el

    Такой вопрос, друзья:

    Можно ли сравнивать данные этого отчёта и итоговые данные карточки счёта 69.02?

    Как можно проверить корректность данных… выплаченных, оставшихся…

    Есть ли какие-то стандартные отчёты???

    Спасибо всем!

    Reply
  29. Bruk

    (28) 4el, Вы правы, данные отчета можно сравнить с итоговыми данными по счету 69.02 и с Описью сведений АДВ 6-2 за соответствующий период. К сожалению стандартными отчетами можно проверить только начисленные взносы: «Анализ начисленных налогов и взносов» вариант отчета ПФР, Карточка по страховым взносам, Отражение зарплаты в регламентированном учете.

    Текущий отчет по проверке начисленных и уплаченных страховых взносов как раз и позволяет собрать данные и проверить нет ли превышения, т.е. при формировании отчетов за каждый отчетный период нарастающим итогом с 2010 года(в этом случае начало периода всегда устанавливаете 2010 год и меняете только на конец следующего периода 30.06.2010, 31.12.2010, 31.03.2011 и т.д.) Конечное сальдо не должно превышать 99 копеек, если больше, то это ошибка. В скриншоте как раз видно, что у Демина Степана по страховой части как раз переплата(если текущий период, то исправляем, если прошлый сдаем корректирующие) на 2676,73, а по накопительной все нормально, мы потом доплатим 1305,81. У сотрудников Легкого Ивана Алексеевича и Николаева Сергея Дмитриевича начисление и уплата расходятся на допустимые 0,99 коп, у остальных все хорошо. Так же в отчете можно проанализировать данные за каждый отчетный период отдельно и сверить с описью.

    Reply
  30. AlexZOne

    Спасибо за отчет. Подобного действительно недостает в ЗиУП.

    Reply
  31. GTT

    Добрый день.

    Ошибка при открытии! 8.2.18.61 (2.5.64.3)

    Ошибка при выполнении файловой операции ‘C:Проверка уплаты страховых взносов 2013 г.erf’

    по причине:

    Неверный формат хранилища данных

    Подскажите что делать?

    Reply
  32. Bruk

    Попробуйте включить отчет в ИБ. Сервис > Дополнительные отчеты и обработки > Дополнительные внешние отчеты. Если не заработает, попробуйте обновить конфигурацию. Наученная горьким опытом, никогда сразу не обновляю, жду пока все критические ошибки исправят. На релиз 2.5.64.3 не обновляла, в тот период было слишком много проблем и подряд вышло много релизов с исправлениями, релизов шесть точно пропустила))

    Reply
  33. GTT

    Спасибо за ответ.

    В доп. отчеты не добавляется с той же ошибкой.

    Сейчас попробую обновить базу.

    Есть предположения что файл отчета «порченый», если вам не сложно попробуйте скачать его с сайта и открыть.

    Обновление не помогло.

    Если у вас откроется напишите пожалуйста на какой платформе и конфигурации.

    Reply
  34. Bruk

    Только что скачала отчет, все работает замечательно, даже без включения в конфигурацию. Платформа 8.2.18.61, Конфигурация 2.5.67.1. На 2.5.69.1 не обновляла, так как ждала ошибок, так и получилось, выявлена критическая ошибка при обновлении Справок о заработке при расчете пособий, произошло зацикливание. Сегодня вышел новый релиз с исправлением, но я пока еще немного подожду… А вы на какой релиз обновили?

    Reply
  35. GTT

    Спасибо что помогали разобраться и отдельно за отчет.

    Проблема с локальным компьютером (пока не определил в чем).

    Скачал на другом компьютере. Все работает.

    Файл даже другого размера.

    Reply
  36. Bruk

    Замечательно, что все заработало 🙂

    Reply
  37. lonec

    Отчет отличный. Но есть недочет. Если бы его исправить, то цены бы не было этому отчету. Недочет заключается в следующем. Например, отчетный период 1 квартал. Иванов с 01.01 по 28.02 является инвалидом. А с 01.03 перестает им быть. При подготовке данных в ПФР за 1 квартал он попадает в две разные пачки: Общественные организации инвалидов (с 01.01 по 28.02) и Наем/Работник (с 01.03 по 31.03). В результате при формировании отчета по проверке начисленных и уплаченных взносов данные по Иванову попадают только из пачки с инвалидами, а из пачки наемных работников данные не попадают. Исправьте, пожалуйста, этот недочет. Спасибо.

    Reply

Leave a Comment

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