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




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

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 не будет опубликован. Обязательные поля помечены *