Контроль данных Раздела 2 регламентированного отчета 6-НДФЛ и фактически перечисленного НДФЛ. ЗУП.2.5.




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

44 Comments

  1. b-dm

    а доработать для ЗУП Корп. реально ? с учетом обособленных подразделений ?

    Reply
  2. user_2010

    (1) b-dm,

    Конфигурацию КОРП не видела, что в ней существенно другого?

    Пробовали отчет сформировать на вашей базе? неверно формирует?

    Нужна конфа с данными — чтобы разработать для КОРП.

    Reply
  3. user_2010

    Проверила отчет при наличии обособленных подразделений — пока в отчете нет отбора по обособленным подразделениям!

    Постараюсь разобраться и сделать!

    Нужно уточнение от тех, у кого есть обособленные подразделения:

    при наличии обособленных подразделений, отчетность подается в разрезе Организация/КПП? или Организация/ОКТМО?, или Организация/КПП/ОКТМО?

    Reply
  4. user_2010

    Пока понимание такое, что у обособленного подразделения другой КПП. Не может быть обособленных подразделений с одинаковым КПП, но разными ОКТМО. Верно?

    Reply
  5. user_2010

    Добавила отчет с учетом обособленных подразделений. Обособленное подразделение идентифицируется по ОКТМО и КПП. Надеюсь верно?

    Кто сдает отчетность по обособленным подразделениям — скажите — верно я мыслю?

    Reply
  6. buKIN

    (5)

    идентифицируется по ОКТМО и КПП

    здесь пришли к такому же мнению.

    Reply
  7. user_2010

    (6) Спасибо!

    Reply
  8. buKIN

    (7) спасибо за отчет. Есть некоторые «хотелки» по доработке. Позже отпишусь.

    Reply
  9. user_2010

    спасибо! буду ждать ваших замечаний!

    Reply
  10. buKIN

    (9) да у меня не замечания, а скорее хотелки.

    И так:

    например 17 числа начисляем разовую премию сотруднику, по которой НДФЛ должен быть перечислен не позднее след. дня и концом месяца начисляем ЗП.

    В 6-НДФЛ оба этих начисления увидим в одном блоке: дата получения дохода — конец месяца, срок уплаты — след. день, хотя они должны быть в разных блоках, т.е. необходимо всегда помнить про премии.

    Хотелось бы, чтобы из отчета данная ситуация была видна.

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

    Reply
  11. user_2010

    (10) Спасибо за замечания.

    Про премии — вы хотите чтобы этот отчет выделял премии где? В таблице с «расшифровкой данных 6-НДФЛ Раздел 2»? Так ведь это данные вашего отчета — 6-НДФЛ — который вы сдаете/сдали в налоговую. Как у он у вас сформировался или как вы его откорректировали — такие данные и будут браться для анализа.

    Смысл данного отчета в том, чтобы до сдачи отчета 6-НДФЛ проверить отчет так, как это сделает налоговая, это проверка показывает есть ли у вас недоплаты — по которым вам потом налоговая выставит штраф 20%. Данный отчет преследует именно эту цель! И при выявлении недоплат — можно ведь подправить даты удержания налога — подогнать под даты перечисления налога. А может быть это просто неверно заполнен отчет — и ошибка визуализирована.

    Расшифровку перечислений НДФЛ — думаю возможно сделать. Вопрос — это реально нужно? Для чего? У нас документы по перечислениям НДФЛ в ЗУПе формируются автоматически при проведении платежа в 1С.Бухгалтерии. Для данного отчета важны только дата платежа и сумма. Т.е. маловероятно, что что-то нужно править в документах «Перечисление НДФЛ».

    Поделитесь — как вы используете этот отчет…

    Reply
  12. user_2010

    Выложила версию отчета 1.2 — добавлена расшифровка документов «Перечисление НДФЛ в бюджет».

    Если вы скачали предыдущие версии отчета, тогда можете сами внести одно исправление:

    Открыть модуль объекта.

    В процедуре «Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)» найти строку кода:

    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных);

    заменить на:

    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки);

    Все!

    Reply
  13. buKIN

    (11) Да, вы правы, пытались использовать этот отчет не по назначению.

    (12) Спасибо, что добавили расшифровку. У нас документы по перечислениям НДФЛ в ЗУПе автоматически не формируются и возникает человеческий фактор, иногда требующий корректировок.

    Reply
  14. user_2010

    (13) buKIN, понятно!

    меня в этом отчете смущает тот факт, что в данный момент в нем никак не учитывается сальдо (недоплата/переплата) на начало периода…. думаю: откуда правильнее брать эту цифру… так как, из опыта, сальдо по 68 счету в Бухгалтерии, сальдо по налогу к перечислению в ЗУПе, и сальдо по организации в самой налоговой — обычно не идут — причем могут быть разными все три цифры…. вот. А чтобы сделать проверку — как это сделает налоговая (для чего и предназначен отчет) — надо знать сальдо налоговой…. а знают ли его наши бухгалтера???? сомневаюсь…. либо сделать поле — для ввода сальдо вручную? — введут какое нужно?

    какие мысли/предложения?

    Reply
  15. buKIN

    И все-таки нюанс есть: при наличии корректирующего отчета для анализа выбирается первичный.

    Reply
  16. user_2010

    (15) я правильно понимаю: есть первичный отчет 6-НДФЛ, например, за 1 квартал. Затем сформировали корректировочный отчет 6-НДФЛ также за 1 квартал. В моем отчете выбираете корректировочный отчет — но проверяется все равно первичный?

    Reply
  17. buKIN

    (16) да, именно так.

    Reply
  18. user_2010

    (17) buKIN, проверила — у меня все корректно — при выборе корректировочного отчета — в отчете анализируются данные именно корректировочного отчета. в частности «Расшифровка данных 6-НДФЛ Раздел 2».

    При выборе отчета не видно никакой информации — первичный это отчет или корректировочный… может вы ошибочно выбрали первичный?

    Reply
  19. buKIN

    (18)Что-то я все перепутал, извиняюсь.

    Но фишка оказалась намного глубже:

    1. Похоже ситуация обратная: при наличии корректировочного отчета первичный проанализировать невозможно.

    2. Даже после удаления корр. отчета (не пометки на удаление, а именно удаления) в анализ подтягиваются его данные (как такое возможно?). Ситуацию исправляет только кнопка «записать» в первичном отчете.

    3. После повторного создания корр. отчета его данные не подтягивались до нескольких нажатий кнопки «записать».

    Теперь все нормально.

    Короче я не знаю, что у меня происходит в базе. Не обращайте внимания. Буду наблюдать. ))))

    Reply
  20. user_2010

    (19) buKIN, Хорошо! О проблемах — пишите!

    Reply
  21. user_2010

    (19) buKIN, ваша проблема про первичный и корректировочный отчет не дает покоя.. может быть есть какой-то нюанс, который у меня в отчете не отслеживается… сегодня потестила отчет еще раз… тоже обнаружила какие-то странные цифры (сверяла итоги по удержанному НДФЛ в моем отчете и с 1 разделом 6-НДФЛ)… но потом разобралась в чем в моем случае проблема: в 1 квартале мы перечисляли НДФЛ за декабрь 2015 — эта сумма отражается во 2 разделе, но не попадает в строку 070 «Сумма удержанного налога» в Раздел 1 6-НДФЛ, т.е. я некорректно сверяла итоги… может быть и вы также проверяли?

    Reply
  22. buKIN

    (21) не мой вариант, к сожалению.

    Reply
  23. user_2010

    (22) buKIN, у вас проблема осталась?

    Reply
  24. buKIN

    (23) больше пока не экспериментировал.

    Reply
  25. user_2010

    подождем — может быть кто-то тоже проблемы обнаружит…

    Reply
  26. KoldunOne

    с помощью этого отчета можно проверить строку 060? есть подозрение, что отчет показывает неверное количество сотрудников

    Reply
  27. user_2010

    (26) KoldunOne, Данный отчет проверяет данные Раздела 2 отчета 6-НДФЛ — так как это делает налоговая. В чем весь смысл 6-НДФЛ — контроль своевременности перечисления НДФЛ в бюджет. Налоговая проверяет данные раздела 2 и ваши фактические перечисления НДФЛ в бюджет. Если вы не вовремя перечислили налог — вам начисляется штраф. Данный отчет позволяет увидеть — есть у вас несвоевременное перечисление НДФЛ, и если есть — можете подкорректировать Раздел 2.

    Данные строки 060 — Количество физлиц получивших доход — здесь ключевое слово «получивших доход». В данном отчете нет информации о доходе вообще, соответственно и нет возможности рассчитать Количество физлиц получивших доход = 060.

    Поясните, в каком учете у вас рассчитывается неверное количество сотрудников? Попробуем разобраться с вашей проблемой.

    Reply
  28. user_2010

    Появилось такое письмо:

    Как заполнить 6-НДФЛ, если в отчетном периоде организация возвращала работнику излишне удержанный налог?

    В письме от 13.10.2016 № БС-4-11/19483@ ФНС России разъяснила порядок заполнения расчета 6-НДФЛ в следующей ситуации. В отчетном периоде работнику выплачен доход в сумме 200 000 рублей, с которого удержан налог в сумме 26 000 рублей. В этом же отчетном периоде организация возвратила работнику НДФЛ в сумме 1000 рублей (который был излишне удержан с дохода в предыдущем отчетном периоде). Поэтому в бюджет перечислен налог за минусом возврата, то есть 25 000 рублей.

    Налоговое ведомство отметило, что раздел 2 расчета 6-НДФЛ в рассматриваемом случае заполняется без учета возврата налога, то есть следующим образом;

    • по строкам 100 – 120 указываются соответствующие даты;

    • по строке 130 – 200 000;

    • по строке 140 – 26 000.

    Что касается суммы НДФЛ в сумме 1000 рублей, которая возвращена работнику организацией, то она отражается по строке 090 раздела 1 расчета 6-НДФЛ за этот же отчетный период.

    Не согласна с этим письмом. Как тогда налоговая будет проверять своевременность перечисления НДФЛ? Сумма удержанного налога будет 26000, и срок перечисления у нее будет конкретный. а перечислим мы фактически 25000. А 1000 — как налоговая отследит?

    Может быть налоговая будет анализировать сколько итого не уплачено и сверять с 090? Странно…

    Reply
  29. Jokstr

    Добрый день!

    В ЗУП 2.5 нет привязки документов перечисления в бюджет РФ к платежным поручениям, поэтому, по мотивам этого отчета (и истерики нашего бухгалтера по расчету ЗП после вызова в ИФНС), а также с использованием некоторых полей формы отчета (надеюсь автор простит меня за это) разработал отчет Анализ отчета 6-НДФЛ в разрезе платежей в бюджет РФ, в котором сопоставляются 6-НДФЛ и платежные поручения из Бухгалтерии 2.0(3.0), выводятся возможная пеня и штрафы на каждый отчетный день.

    Reply
  30. German_Tagil

    скачал — все версии пишут одинаково

    Выбран неверный регламентированный отчет! Выберите отчет 6-НДФЛ!

    указываю имено его — как-то можно по быстрому исправить

    Reply
  31. user_2010

    Попробую исправить. С 2.5 давно не работала… У вас какая версия 2.5?

    Reply
  32. user_2010

    (30) какая у вас версия 2.5?

    Reply
  33. German_Tagil

    Вопрос как специалисту по зарплате

    6-НДФЛ Регламентный отчет

    до конца 2017 расшифровка работает в отчете

    затем нет

    посмотрел по обновлениям — обновления данного отчет с апреля 2018 года

    не было

    Reply
  34. user_2010

    (33) ваша версия программы еще обновляется? или снята с тех поддержки?

    Есть версия, что если конфа снята с тех поддержки, то 1С могла специально убрать расшифровку — чтоы народ все-таки переходил на следующую версию. Для ЗУПа же бы официально заявлено, что сдать можно только отчетность за 2017 год. И все. Это как версия.

    Reply
  35. user_2010

    (33) а вообще — надо смотреть код…. Если отчет 6-НДФЛ заполняется, то, по идее, расшифровка тоже должна работать…

    Reply
  36. German_Tagil

    (35) я же обьясняю —

    1. программа с техподдержки не снята

    2..За 2016,2017 нормально все формируется

    как-только пытаюсь в 2018 выполнить те же операции

    выдает что нет расшифровки

    Reply
  37. German_Tagil

    О как «Для ЗУПа же бы официально заявлено, что сдать можно только отчетность за 2017 год.»

    Reply
  38. user_2010

    (36) у вас отчет за 2018 год формируется? Попробуйте обновить копию базы и посмотрите будет ли формироваться отчет и расшифровка

    Reply
  39. German_Tagil

    Чем я сейчас и занимаюсь — у нас не типовая — концы потеряны

    Reply
  40. user_2010

    (39) когда сильно переписанная конфа и обновить сложно — я делаю так: обновляю копию базы и в ней формируем отчетность. (я вам уже ранее о таком варианте писала). В этом случае обновления, не так важно перенести все свои изменения.

    Reply
  41. German_Tagil

    я примерно так и сделал — расшифровка заработала

    Reply
  42. user_2010

    (41) замечательно!

    Reply
  43. German_Tagil

    спасибо за понимание

    Reply
  44. user_2010

    (43) 🙂 всегда пожалуйста!

    Reply

Leave a Comment

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