Сверка НДФЛ по сотрудникам (удержанный-уплаченный)




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

    Спасибо. Полезный отчетик.

    Reply
  2. Andrei12

    Спасибо.

    Reply
  3. MYRZILKA123

    спасибо пригодилось ставлю плюс

    Reply
  4. 105raz

    А что делать, если исчисленный не равен удержанному? А в начале года из-за различных причин это было сплошь и рядом?

    Reply
  5. Alexey55

    Спасибо! попробую запустить в КА

    Reply
  6. asa_2008

    (4) 105raz, надо проанализировать по какой причине и в случае необходимости произвести корректировку.

    Reply
  7. asa_2008

    (4) 105raz, у нас не так много ( 2 чела). Им была начислена ЗП, в следующем месяце она же пересчитана с «-«.

    Но и не выплачена. 1С посчитала сумму НДФЛ для перечисления в бюджет больше. Хотя исчисленная сумма налога правильная. Это видно из справки НДФЛ по сотруднику и в отчете анализ налогов (НДФЛ).

    Я сделал корректировку НДФЛ (по вкладке НДФЛ удержанный) — поставил сумму с «-» на тот период где был перерасчет ЗП.

    Т.о. сумма для перечисления в бюджет уменьшилась и стала раной начисленному НДФЛ. В справке 2НДФЛ тоже все ОК.

    Видимо сума для перечисления в НДФЛ меняется (пересчитывается)только при выплате сотруднику.

    Reply
  8. 105raz

    (6)

    анализировали. Все правильно — в январе принесли больничный за декабрь. Зарплату строрнировали, пересчитали, часть НДФЛ «ушла» в прошлый год. Что вы предлагаете корректировать у сотни сотрудников?

    Reply
  9. asa_2008

    (8) 105raz, я высказал только свое предложение. Решение за вами как вы будете отчитываться перед УФНС.

    Распределение взносов уплаченных началось с 01.01.2011 года. Отчетность за 2010 год нужно было скорректировать в том же январе. Излишне уплаченный НДФЛ по вашему заявлению УФНС мог бы и может вернуть.

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

    Что я попробовал и сделать: Поставил невыход сотруднику по болезни с 10 ноября. В декабре он приносит больничный с 10 по 30 ноября. Но зарплата за ноябрь уже закрыта — плата ему была по табелю с 01 по 09 ноября. Начиляю больничный за ноябрь в декабре — сумма НДФЛ садиться на декабрь при расчета декабрьского начисления всей ЗП по нему.

    Reply
  10. lexi

    Спасибо. Как раз собиралась писать такой отчет! )))

    Reply
  11. asa_2008

    Пожалуйста. Приятно, если кому-то помогло.

    Не забывайте ставить плюсы на звездочке — так в двойне приятнее 😉

    Reply
  12. 105raz

    (9)

    В конкретно этом случае речь идет о бюджетной организации. Зарплату за декабрь они обязаны выплатить до нового года. С учетом их специфики, дней за десять они должны подать заявку на требуемые деньги. Соответственно, саму зарплату приходиться начинать считать числа 15 декабря. Те отклонения от рабочего графика, что случились после, понятно, уже не учитываются. Сведения о них поступают расчетчикам уже в середине января. Это я к тому, что поставить «невыходы» заболевшим — не получается. Та же ситуация и с командировками — их оплачивают только по факту прибытия, это жесткая позиция руководства. Собсбвенно, и программу эту взяли для автоматизации только потому, что она позволяет сторнировать начисления прошлых периодов.

    Reply
  13. asa_2008

    (12) 105raz, предварительно заказали, а дальше то месяц довести правильно нужно. Проконсультировался у главбухов работающих в бюджете. Так и делают — предварительно считают, а за 3 дня пересчитывают. У них ни каких проблем — ни со сдачей отчетности в бюджет, ни с бухгалтерской в вышестоящую — ни каких корректировок.

    И вам сочувствую- у всех своя специфика в организации работы.

    Reply
  14. still_

    удобная штука, спасибо

    Reply
  15. Ledybird

    Очень хороший отчетик.. Только теперь надо придумать как скорректировать все плюсы и минусы

    Reply
  16. Valdis_KH

    интересный отчет, а для ЗБУ подойдет?

    Reply
  17. asa_2008

    (16) Valdis_KH, Не знаю, попробуйте — может пойдет.

    Reply
  18. asa_2008

    (15) Ledybird, мы вручную делали -перекидывали уплату с одного на другого сотрудника. И выравнивали суммы по уволенным.

    Reply
  19. Valdis_KH

    может на ящик скинешь,а то $m не хватает, проверить надо. + поставил krot2906@rambler.ru

    Reply
  20. asa_2008

    (19) Valdis_KH, отправил

    Reply
  21. Den_Zenit

    Отчетик хороший, но я делаю в произвольном отчете, результат такой же.

    Reply
  22. nadyalex

    спасибо

    Reply
  23. asa_2008

    (21) Den_Zenit, такой то же есть — попросили сделать как внешний

    Reply
  24. AB3012

    Как не корректно раскладывает по подразделению и окато

    Reply
  25. asa_2008

    (24) AB3012,

    Что значит, некорректно раскладывает?

    Reply
  26. as7bs

    (13) Никак не получится без корректировок. Во-первых, начислить зарплату в декабре нужно, как минимум за 2 рабочих дня до конца месяца, чтобы на следующий день отправить платежку и список на зачисление в банк и там этот список обработали, а для тех у кого есть работники которые получают зарплату через кассу и того ранее чтобы у сотрудников было 3 дня на получение зарплаты. Т.е. сотрудник может заболеть числа 28, а зарплата к этому времени уже начислена. Во-вторых, если организация большая, сведения об отсутствии работника не всегда доводятся до бухгалтерии в тот-же день.

    Reply
  27. Zoba

    Спасибо. Актуально.

    Reply
  28. profibalans

    Неплохо, спасибо! 🙂

    Reply
  29. sinQio

    ммм то что искала, спасибо

    Reply
  30. Ленкина

    удобно для проверки, в УПП тож работает, спасибо

    Reply
  31. Mala2011

    сформировала отчет, по каждому сотруднику вылезла разница, хотя в спрвке 2-ндфл разницы между удержанным и перечисленным налогом нет

    Reply
  32. asa_2008

    (34) Mala2011, скорее всего даты периодов не неверно выставлены. В отчете их два. Дата дата документа- Начало периода(в каком месяце сформирован) и месяц за какой перечислен налог — Месяц налогового периода.

    Может у вас дата стоит начала периода 01.01.11 и Конец периода 31.12.11, тогда налоги перечисленные я январе 2012 в отчет не войдут.

    см. вложение

    В отчете видно все по ФИО и месяцу налогового периода (за какой месяц перечислен НДФЛ).

    Думаю, что причину можно найти, почему расхождение.- посмотрите декабрьская уплата стоит ?

    Reply
  33. olegpochekutov

    Спасибо очень интереснно

    Reply
  34. ersh1c

    В конкретно этом случае речь идет о бюджетной организации. Зарплату за декабрь они обязаны выплатить до нового года. С учетом их специфики, дней за десять они должны подать заявку на требуемые деньги. Соответственно, саму зарплату приходиться начинать считать числа 15 декабря. Те отклонения от рабочего графика, что случились после, понятно, уже не учитываются. Сведения о них поступают расчетчикам уже в середине января. Это я к тому, что поставить «невыходы» заболевшим — не получается. Та же ситуация и с командировками — их оплачивают только по факту прибытия, это жесткая позиция руководства. Собсбвенно, и программу эту взяли для автоматизации только потому, что она позволяет сторнировать начисления прошлых периодов.

    Reply
  35. kvp

    Спасибо, очень нужный и полезный отчет.

    Reply
  36. solodovnikov.84
    Reply
  37. lesichkia

    Так вот ваш переделанный отчет как внешний. Спасибо! Так гораздо лучше. Тем я сразу и не разобрала как пользоваться!

    Reply
  38. Kanareika13

    Вроде в консоли проще сваять, чем хранить внешний

    Reply
  39. serg85

    спасибо — Бухгалтер в экстазе

    Reply
  40. higs

    Заберу и этот, в периоды проверки всякие разрезы хороши. Спасибо!

    Reply

Leave a Comment

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