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




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *