Отчет "Проверка НДФЛ по сотрудникам" в Зарплате и управлении персоналом 8 — начислено, удержано, перечислено




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

27 Comments

  1. kaufman

    Отчет «Проверка НДФЛ по сотрудникам» — проверка начисленных, удержанных и перечисленных сумм.

    Перейти к публикации

    Reply
  2. Boroda

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

    Может, конечно, они и есть в отчёте, но на скрине их не видно…

    Reply
  3. kaufman

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

    Reply
  4. RuSHBoo

    интересно интересно скачаю посмотреть — как раз с НДФЛ парюсь — выравниваю .

    Reply
  5. demon852002

    У меня такое впечатление, что такой отчёт уже есть на инфостарте и он вроде универсальный как для «Зарплата и управление персонала», так и для «Зарплата и кадры бюджетного учреждения»! Посмотрите получше!

    А вот ещё было бы хорошо, если были расшифровки…например, по документам, КОСГУ и статьям финансирования… :0)

    Reply
  6. kaufman

    Не встречал такой стандартной обработки, поэтому и пришлось дорабатывать самому, но для «Зарплаты и управлением персонала», а не для «Зарплата и кадры бюджетного учреждения», поэтому расшифровки по КОСГУ и статьям финансирования нет.

    Reply
  7. Boroda

    (2) Спасибо за доработку. Сейчас буду тестить…

    Reply
  8. nu_fguz_buh

    Спасибо за отчет. Пробовала разные отчеты, но разниц между начислениями, удержаниями и перечислениями не было. У меня БГУ 8.2 — отчет работает, КОСГУ мне не нужны.

    Reply
  9. Oli29

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

    Почему-то не заполняется документ «Перечисление НДФЛ в бюджет» — пишет «Не обнаружены данные для записи в документ.» хотя по Вашему отчету начиная с февраля есть отклонения: начислено есть, а перечисленного нет. Никак не могу понять почему. 🙁

    Reply
  10. kaufman

    (8) Oli29, когда не заполняется документ «Перечисление НДФЛ в бюджет» с таким сообщением, а долг есть (долг вы также можете проверить по отчету «Регистр налогового учета по НДФЛ») — это значит, что по Регистру накопления «Расчеты налоговых агентов с бюджетом по НДФЛ» движения «Приход» сформировались документами «Зарплата к выплате» позже «Даты платежа» документа «Перечисление НДФЛ в бюджет». Поэтому чтобы документ заполнился, нужно установить Дату платежа более позднюю, например, концом следующего месяца. В этом случае документ заполнится без ошибок. Такая ситуация возникает, когда НДФЛ удерживается позже, чем уплачивается.

    Reply
  11. Oli29

    (9) Спасибо, проблема решена.

    Reply
  12. Borisych

    мне было бы стыдно не оформленный отчет выкладывать в общество

    лучше тогда запрос разместить

    Reply
  13. Anutka-merk

    Очень полезный отчет, мне как раз не хватало увидеть сравнение начисленного и перечисленного НДФЛ по всем сотрудникам, по отчету «Регистр налогового учета по НДФЛ» можно сравнить суммы только по каждому сотруднику в отдельности, а их у меня больше 200…

    Reply
  14. 1cprogr_nsk

    было бы неплохо выбирать по какой ставке (13%, 9%, 35% ….) НДФЛ смотрим

    Reply
  15. guzelia

    К сожалению нет отбора по организации. А у нас их 10 в одной базе. Как добавить отбор по организации, не подскажите?

    Reply
  16. guzelia

    (14) guzelia,

    Нашла…

    Reply
  17. AB3012

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

    Может, конечно, они и есть в отчёте, но на скрине их не видно…

    Reply
  18. kaufman

    (15) guzelia, наверху в специальной таблице вы можете сделать отбор по разным реквизитам: Месяц налогового периода, Организация, Физ. лицо, ставка НДФЛ

    Reply
  19. kaufman

    (16) AB3012,для этого и есть колонки Разница между Начислено и Перечислено и Разница между Удержано и Перечислено.

    Reply
  20. as7bs

    Может кто знает обработку которая НДФЛ удержанный выравнивает с НДФЛ исчисленным в 8-ке. Много расхождений после переноса из ЗиК 7.7 на начало периода, и много возникает в текущем периоде.

    Расхождения на начало года, правим либо вручную через Корректировку записей регистров накопления, либо, если много сотрудников, вывожу долг в табличный документ и через обработку «Загрузка данных из Табличного Документа + загрузка в Движения Документа» загружаю в Корректировку записей регистров накопления.

    Reply
  21. AB3012

    «Отчёт, в целом, видимо неплохой, но было бы очень нелишним сделать колонки с результирующими суммама (удержано больше/меньше начисленного, уплачено больше/меньше удержанного), чтобы бухгалтерам не заниматься подсчётами вручную насколько они несоответствуют, и не напрягать глаза в выявлении различий (которое может быть в рубль, скажем, и явно не очень заметно).

    Может, конечно, они и есть в отчёте, но на скрине их не видно… » Присоединяюсь, если бы вы еще и выложили бы скрины на предмет настроек , вообще бы было бы супер, хотя я пару раз запускала особую картину не дает нет регистраторов по начислению и перечислению, а так было бы чудно , штатная обработка в настройке не показывает разницы хотя если два просматриваешь отчета то дело идет быстрее, говорю авторитетно потому чтоя бух и сама ищу себе легкую жизнь, жалко тратить время и жизнь на цифры… а так же хочу сказать большое спасибо что вы все это делаете для нас…

    Reply
  22. kiska65_66

    (20) AB3012, поддержу вас. Я сама гл.бухгалтер. Пользуюсь обработками с этого сайта очень давно. Помогают в работе. Жаль, что времени сидеть на форуме особо нет. Стараюсь выкраивать его для зарабатывания $m. Эта обработка очень нужна в работе. Тем более скоро год закрывать. Нужно все сверять.

    Reply
  23. kiska65_66

    (9) у меня нет задолженности по НДФЛ. Но документ /перечисление НДФЛ в бюджет/ все равно не заполняется автоматом. Обратилась в фирму обслуживающую мои базы, говорят, что такая ошибка у многих в ЗУПе. Взяли архив базы, будут разбираться. Но мне хочется самой понять как исправить ошибку. Может есть какой-то способ?

    Reply
  24. kaufman

    (22) kiska65_66, попробуйте увеличить дату на более позднюю, например, на месяц больше. Налог заполнится. Затем верните прежнюю дату.

    Reply
  25. b-dm

    А по справочнику Подразделения организации отбор есть ? 🙂

    Reply
  26. kaufman

    (24) b-dm, отбора по Подразделениям нет

    Reply
  27. qwerty321123

    Если нужно отчитаться перед налоговой по перечислениям, поможет следующий отчет

    https://yadi.sk/d/yKTwH-H2fMdK7

    Reply

Leave a Comment

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