Анализ НДФЛ (начислено, удержано, перечислено) для ЗиК




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

50 Comments

  1. TrinitronOTV

    спасибо, нужный отчет для проверок НДФЛ

    Reply ↓
  2. Boroda

    Да не то, что нужный, просто необходимый. Сегодня как раз колупался с этим НДФЛ, который распределяется стандартно настолько коряво… Вот эту обработочку вчера бы увидеть! Помогла бы здорово.

    А концу года НДФЛ вообще будет больным местом, т.к. необкатанный временем. Обработка пригодится очень. Спасибо автору.

    Reply ↓
  3. Boroda

    Потестировал отчёт — впечатление очень и очень положительное. Показывает реальную картину очень наглядно, и, главное — ясно кому и как надо корректировать уплату НДФЛ. Молодец!

    Reply ↓
  4. Seregalink

    Спасибо! Хороший отчет, необходим к концу года и не только, сейчас многие расчетчики не парятся по этому поводу и не распределяют НДФЛ перечисленный, а зря, уже пора бы ознакомиться!

    Reply ↓
  5. АлексейН
    Seregalink пишет:

    сейчас многие расчетчики не парятся по этому поводу и не распределяют НДФЛ перечисленный, а зря, уже пора бы ознакомиться!

    Это верно а к концу года будет как всегда АВРААААЛ.

    Спасибо попробую.

    Reply ↓
  6. Katusha_iv

    Хороший отчет -актуально сейчас)))Спасибо автору.

    Reply ↓
  7. slav_mcu

    Спасибо

    Reply ↓
  8. rimma_n

    Спасибо, очень полезный отчет. Только хорошо бы еще добавить строку ИТОГО.

    Reply ↓
  9. Katusha_iv

    Почему то в «Перечислено» сумму ндфл ставит только с одного документа,не собирает со всех…И естественно в остаток для перечисления кидает оставшуюся сумму,хотя полностью все перечислено(несколькими документами).Это только у меня так,никто не проверял?

    Reply ↓
  10. AleksSl

    (9) Katusha_iv, Для перечисленных сумм собираются данные со всех документов «Перечисление НДФЛ» введенных с начала года по выбранный период. т.е. если дата документа в интервал не попадает, то суммы удержанного НДФЛ учитываться не будут. Даже если суммы оплачиваются за период входящий в интервал.

    Reply ↓
  11. AleksSl

    Файл перезалит. Добавлены общие итоги.

    Reply ↓
  12. TrinitronOTV
    AleksSl пишет:

    Файл перезалит. Добавлены общие итоги.

    спасибо ещё раз за данную обработку

    Reply ↓
  13. leosoft

    Отчет полезный. Жаль, что иностранцев с 30% НДФЛ не обрабатывает…

    Reply ↓
  14. Katusha_iv

    (10).Например ,беру период с 01.01.2011 по 14.02.2011. Документы «Перечисление НДФЛ в бюджет» введены 10.01.2011 , 28.01.2011 и 14.02.2011. Суммы выходят только те ,которые введены 14.02.2011.

    Reply ↓
  15. rimma_n

    (11) спасибо!

    Reply ↓
  16. AleksSl

    Файл перезалит. Добавлена обработка иностранцев со ставкой 30%.

    Reply ↓
  17. irina_ph

    Спасибо за отчет. Актуален как всегда… конец года грядет

    Reply ↓
  18. Полковник

    Огромное спасибо за отчет. Уже начинает болеть голова, как подумаешь об отчетности по НДФЛ.

    Reply ↓
  19. Rodriguezz

    Очень нужный отчет

    Reply ↓
  20. jack19

    Дает расхождение между исчисленным и удержанным НДФЛ по сотрудникам, у которых прошли начисления отпуска будущего месяца. При этом справка 2-НДФЛ по ним расхождения не дает.

    Reply ↓
  21. Leannet

    Спасибо! пригодился

    Reply ↓
  22. ul
    jack19 пишет:

    Дает расхождение между исчисленным и удержанным НДФЛ по сотрудникам, у которых прошли начисления отпуска будущего месяца. При этом справка 2-НДФЛ по ним расхождения не дает.

    Справка 2-НДФЛ включает исчисленный НДФЛ до конца года, а в отчет берется исчисленный НДФЛ за указанный период. Смотрите регистр налогового учета по НДФЛ.

    Reply ↓
  23. ul

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

    Reply ↓
  24. zybkova

    Спасибо! Очень актуально, не только до конца года не ждать а уже сейчас можно проверять к тому же разносит программа безобразно

    Reply ↓
  25. marlen

    хотелось бы галочки для анализа отчета по итогам года:

    «выводить только с отклонениями», где НДФЛ исчисл <> НДФЛ удерж <> НДФЛ уплач

    «выводить только с переплаченным НДФЛ», где НДФЛ исчисл < НДФЛ уплач (кто знает — может переплату запретят показывать как в пфр)

    «выводить только с недоплаченным НДФЛ» , где НДФЛ исчисл > НДФЛ уплач (тут штраф)

    Reply ↓
  26. Rodriguezz
    marlen пишет:

    хотелось бы галочки для анализа отчета по итогам года:

    «выводить только с отклонениями», где НДФЛ исчисл <> НДФЛ удерж <> НДФЛ уплач

    «выводить только с переплаченным НДФЛ», где НДФЛ исчисл < НДФЛ уплач (кто знает — может переплату запретят показывать как в пфр)

    «выводить только с недоплаченным НДФЛ» , где НДФЛ исчисл > НДФЛ уплач (тут штраф)

    Мне бы тоже это не помешало бы, автор если можно добавь.

    Reply ↓
  27. GVALA

    Спасибо. Отчет хороший. Если бы автор по аналогии сделал такой же отчет по страховым взносам на страховую и накопительную части. Было бы просто СУПЕР.

    Reply ↓
  28. 2011b11

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

    Reply ↓
  29. marlen

    (29) 2011b11, не имеет смысла писать такой отчет.

    для этих целей прекрасно справляется программа Документы ПУ 5. и уплату раскидывает на ура. и сальдо на начало любого периода можно посмотреть, переплата прекрасно отслеживается.

    + скоро все будет снова по-другому

    Reply ↓
  30. evgaid

    Хм, а почему у меня выдает такю ошибку

    Дебет = ТаблицаНалогов.ПолучитьЗначение(ТаблицаНалогов.НомерСтроки,Группировка);

    {*****ЗАРПЛАТААНАЛИЗ НДФЛ.ERT(526)}: Номер за пределами значения!

    Reply ↓
  31. irisha

    а можно прислать тчет на почту? klimova1967@yandex.ru. Спасибо.

    Reply ↓
  32. Twirus

    Спасибо! пригодился

    Reply ↓
  33. Flex72

    Спасибо! Отчет помог выявить и исправить ошибки в НДФЛ (уплата).

    Reply ↓
  34. b-dm

    Автору: а как заполняли Перечисление НДФЛ в бюджет ? Не было ли проблем с этим, как решали эту проблему ?

    Особенно по ОКАТО-КПП по разл.подразделениям.

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

    Reply ↓
  35. AleksSl

    (35) b-dm, Проблем небыло. Так как отчет изначально задумывался для проверки сумм по сотрудникам из налогового регистра по НДФЛ, то все расчеты там уже реализованы. От себя добавлена только группировка/отбор/сортировка полученных результатов. Сами суммы начисленного/удержанного/перечисленного НДФЛ на 100% совпадают с данными регистра налогового учета по НДФЛ.

    С перечислением НДФЛ все просто: Собираются суммы с документов «Перечисление НДФЛ в бюджет», там все данные есть: «Сотрудник, период перечисления НДФЛ, ОКАТО/КПП». Далее суммы обрабатываются и выводятся в отчет.

    Reply ↓
  36. b-dm

    (36) я имел в виду несколько иное. Как вы формировали сами документы Перечисление НДФЛ в бюджет по ОКАТО/КПП ? То есть корректно ли у вас распределялись суммы, как поступали с договорниками ? А то у меня с этим сейчас куча проблем возникло.

    Reply ↓
  37. b-dm

    (36) — и ещё такая вещь. Нельзя ли в отчет добавить отбора по подразделением например ? Или вывода с группировкой по подразделениям ?

    Reply ↓
  38. marlen

    черт не работает(

    Ситуация — в январе 2011 по расчетке начислены больничные за дек 2010, ндфл исчисл за январь есть. В 1-НДФЛ за 2010 бл не попали, зато попали в февр 2011 в налоговый регистр, соотвественно по отчету в январе разница по НДФЛ исчисленному по своду и по вашему отчету (ндфл из налогового регистра). Из 100000р пропало примерно 30000р. в общем надо разбираться… Есть ощущение что не учитываются ручные корректировки 1-ндфл

    Reply ↓
  39. keysnofelet

    в типовом релизе что нибудь подобное не планируется?

    Reply ↓
  40. b-dm

    (40) — думаю что врядли…ждать ВООБЩЕ что-либо на 7-ке думаю уже не стоит. я имею в виду что то толковое и аналитическое. потому что 7-ку теперь делают по остаточному принципу.

    Reply ↓
  41. b-dm

    (39) — а как вы эти корректировки вводите ? я, если честно, совершено не понял как этот механизм работает и для чего он нужен….это вместо документа Возврат НДФЛ сделано или для того чтобы как раньше можно было править карточку 1-НДФЛ ?

    Reply ↓
  42. marlen

    (42) b-dm, вместо карточки 1-НДФЛ теперь КОРРЕКТИРОВКА НДФЛ. Для исправления или добавления инфы по налогам и доходам. Например перенести отр.суммы с одного месяца на другой где есть доход, или ввести займы, подарки, призы по ставке 35%.

    Когда сдавали 2010 год переносили суммы дохода из января обратно в декабрь, так как принесенные бл портили всю картинку сторнируя декабрьские начисления. Сейчас это все вылезет боком.

    Reply ↓
  43. rabanik

    УХ! Спасибо, то что надо. А для 1С 8.2. Зарплата и Управление персоналом, возможно такуюже сделать?

    Reply ↓
  44. dtitov

    Прикольный отчетик. За вополощение «розовой мечты буха» — плюс

    Reply ↓
  45. flash82

    интересная обработка… а можно скинуть на flash82@list.ru заранее спасибо

    Reply ↓
  46. serpent

    хорошая помощь для буха… спасибо

    Reply ↓
  47. serpent

    Небольшое дополнение

    в модуле стр.327

    ТаблицаНалогов.НоваяКолонка(«Период»,»Число»);

    Присвоить реквизиту тип число вместо строка, иначе сортировка не красиво: Январь, Октябрь, Февраль,….

    т.е.

    1

    10

    2

    3

    4

    5

    6

    7

    8

    9

    Reply ↓
  48. JER_MARK

    Отчет выведет помесячно сколько было удержано, перечислено?

    Reply ↓
  49. suvorovalena

    Очень жаль, что не увидела раньше, пришлось (так как переходим на 8.2) отчет делать в восьмерке, а очень хотелось сделать в той программе, в которой были выполнены расчеты, а не перенесены выгрузкой данные.

    Reply ↓
  50. kainiss

    А для октмо этот отчет работает?

    Reply ↓

Leave a Comment

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