Реестр регламентированных отчетов 6-НДФЛ по всем организациям и обособленным подразделениям. Контроль удержанного НДФЛ. ЗУП 3.1




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

    Здравствуйте ! Обнаружил досадную недоработку — Отчет не заполняет данные по 6-НДФЛ если в учреждении у обособленных подразделений один КПП, но разные ОКТМО. Проверял на ЗКГУ 3.1.2.316 и 3.1.3.136. Желательно исправить.

    Reply ↓
  2. user_2010

    Спасибо! Постараюсь исправить.

    Поясните ситуацию: есть два обособленных подразделения —

    Подразделение1: КПП =1 ОКТМО =1 — 1/1

    Подразделение1: КПП =1 ОКТМО =2 — 1/2

    Для каждого из них создан свой элемент в справочнике «Регистрация в налоговом органе» — верно?

    Сформировано 2 отчета 6-НДФЛ. Но в мой отчет эти отчеты 6-НДФЛ совсем не попадают?

    Reply ↓
  3. user_2010

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

    Отчет выдает разницу по 4-ому анализу — как раз на сумму возвращенного НДФЛ.

    Проблема возникает из-за того, что у этих записей нет крайнего срока перечисления. И Это логично! Добавлю в отчет доп колоки, которые буду учитывать в анализе.

    Reply ↓
  4. user_2010

    Коллеги!

    Верно ли утверждение:

    Итого НДФЛ Удержанный за квартал из Регистра накопления «РасчетыНалогоплательщиковСБюджетомПоНДФЛ» = Итог НДФЛ К Уплате за квартал из Регистра накопления «РасчетыНалоговыхАгентовСБюджетомПоНДФЛ»

    т.е. Расход за квартал из Регистра накопления «РасчетыНалогоплательщиковСБюджетомПоНДФЛ» = Приходу за квартал из Регистра накопления «РасчетыНалоговыхАгентовСБюджетомПоНДФЛ».

    Верно ли это?

    Reply ↓
  5. alnazarov

    (2)Все верно. Из десяти один обязательно попадает. Правда, непонятно, почему именно этот. Если один (любой) пометить на удаление, то в отчет попадает уже другой.

    Reply ↓
  6. alnazarov

    (4)Думаю, да.

    Reply ↓
  7. user_2010

    (5) Ясно!

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

    Вот при этом отборе и проблема — там у меня анализируется только КПП. Постараюсь исправить!

    Reply ↓
  8. user_2010

    (6) Спасибо! А то после перехода в середине года с 2.5 на 3.1 — так много проблем в регистрах в 3.1… Пытаемся навести порядок… И порой возникает мысль, что я не права в понимании корректных данных.

    Reply ↓
  9. user_2010

    Коллеги!

    Не понятно как отражается возврат налога в регистрах и в 6-НДФЛ, как он влияет на сумму удержанного налога в разделе 2?

    Есть у кого-нибудь понимание этого? Поделитесь своими мыслями.

    Пока поняла только то, что когда возвращается налог — в разделе 2 удержанный налог не уменьшается… -и это очень странно….

    Бухгалтера уменьшали сумму перечисления НДФЛ на сумму возвращенного налога. Получается, что это неверно?

    Reply ↓
  10. alnazarov

    (9)Документ Возврат НДФЛ :

    Регистр накопления «Расчеты налогоплательщиков с бюджетом по НДФЛ» Вид движения «Расход» сумма с минусом.

    Регистр накопления «Расчеты налоговых агентов с бюджетом по НДФЛ»

    Вид движения «Приход» сумма с минусом.

    Документ Ведомость в банк на основании документа » Возврат НДФЛ»

    по вышеперечисленным регистрам никаких записей не производит.

    В 6-НДФЛ эта сумма отражается ТОЛЬКО в разделе 1 строка 090. В разделе 2 строке 140 этой суммы нет.

    Reply ↓
  11. user_2010

    (10) вот и получается, раз во 2 разделе суммы возвращенного налога с минусом нет — значит мы должны перечислить НДФЛ больше, т.е. без учета этого возврата.

    Как так? Разве это верно?

    Ведь налоговая проверяет суммы поступившего налога с суммами удержанного налога по разделу 2.

    Reply ↓
  12. alnazarov

    (11)С учетом строки 090 раздела 1, наверное

    Reply ↓
  13. alnazarov

    (11)Контрольные соотношения 6-НДФЛ http://www.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=195337#0

    Reply ↓
  14. alnazarov
  15. user_2010

    (14) Ага, спасибо за ссылки! Т.е. все-таки: в разделе 2 возвращенный налог никогда не будет отражен. Мы перечисляем сумму меньшую, чем указана в разделе 2, на сумму возвращенного налога и Это не будет являться нарушением?

    Главное, чтобы в целом за год мы перечислили не меньше, чем (070) Удержано с начала года — (минус) (090) — Возвращено?

    Так?

    Reply ↓
  16. user_2010

    Получается, что когда у нас есть возврат НДФЛ — у нас сумма перечисленного налога может быть не равна сумме в разделе 2 на сумму удержанного налога? Остается только вопрос — к какому сроку уплаты относить возврат НДФЛ. Данная строка регистрируется без даты крайнего срока уплаты?

    Reply ↓
  17. user_2010

    Все эти измышления — чтобы родить уже полноценную проверку 6-НДФЛ…

    Reply ↓
  18. user_2010

    Еще вопросы…

    Налоговая проверяет ведь не только даты перечисления. Но и суммы перечисленного налога. Верно? только вот не нашла такого контрольного соотношения!

    И суммы она берет из раздела 2! А в них нет удержанного налога? В них сумма больше — чем мы перечислили — на сумму возврата НДФЛ. И что дальше? налоговая требует пояснения?

    Кто-то в практике сталкивался с такой ситуацией — возврата НДФЛ?

    Или чего-то не понимаю?????

    Reply ↓
  19. user_2010

    Изучила кучу материалов, родился новый отчет!

    Загружен.

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

    Reply ↓
  20. suhoi

    (19)

    Изучила кучу материалов, родился новый отчет!

    Загружен.

    1. Дата поста — 22.08.17, а дата последнего изменения — 17.08.17. В текущем отчете эти изменения есть?

    2. Будет ли отчет работать в ЗКГУ?

    3. Как получать обновления после скачки — опять скачивать за 2 см?

    Reply ↓
  21. user_2010

    (20)

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

    2. если ЗКГУ — это аналог ЗУП.3.1 — тогда отчет должен работать — регистры одинаковые. Но в бюджетном учете есть доп аналитика статья финансирования — кажется так называется — если у вас учет НДФЛ идет в разрезе статей финансирования — то в данный момент в отчете статьи финансирования не анализируются и вообще не выводятся в отчет. Нет базы — чтобы доработать и протестировать.

    3. Считаю, что отчет стоит гораздо больше 2см. Всем кто скачал предыдущую версию отчета — предложила отправить последнюю версию. Кто -хотел — тот прислал свой e-mail и получил последний вариант отчета. Пока что не планируются никакие обновления отчета.

    Reply ↓
  22. user790109

    Нажимая на кнопку Настройки вылетает ошибка » Не передан служебный параметр «НастройкиОтчета»». Поправьте пожалуйста. Конфа зуп (3.1.3.273)

    Reply ↓
  23. user790109

    Вопрос решил

    1. В свойствах отчета Форма настроек указать ВспомогательнаяФормаНастроекОтчета.

    2. В СКД в составе пользовательских настроек отчета поставить все галочки и выбрать режим редактирования Обычный

    Reply ↓
  24. user_2010

    (23) спасибо!

    Reply ↓
  25. OOOTK

    скачал поставил. из поста 23 все сделал. на новом релизе от 31 января не работает. просьба поправить.

    Reply ↓
  26. user_2010

    (25) какой у вас релиз? И что не работает? Какую ошибку выдает?

    Reply ↓
  27. OOOTK

    Зарплата и Управление Персоналом, редакция 3 релиз 3.1.4.169 от 30.01.2018 . не дает поставить дату с 01.01.2017 . упорно сам ставит 01.01.2018. , а 31.12.2016 дает…. еще выходит сообщение при нажатии » не передан служебный параметр Настройка отчета, хотя пункт 23 пробовал сделать. В общем на новом релизе вообще не работает, а очень нужно…..

    Reply ↓
  28. OOOTK

    сейчас проверил после тестирования и исправления базы ЗУП 3.1.4.169 на платформе 8.3.11.2899 вообще не стал открываться. сразу ошибка как в посте 22. ….

    Reply ↓
  29. user_2010

    (28) на сайт загружен исправленный отчет. Работает и в 3.1.4. и в 3.1.3 и в 3.1.2. Если кому-то из скачивавших нужен исправленный отчет — пишите в личку вашу почту — отправлю отчет!

    Reply ↓
  30. OOOTK

    Проверил, все отлично работает. Спасибо.

    Reply ↓
  31. user_2010

    (30) Спасибо, за обратную связь!

    Reply ↓
  32. gull22

    ЗУП 3.1.4.169 платформа 8.3.10.2699

    Работает, но нет выделения цветом по колонкам как на рисунке.

    Reply ↓
  33. user_2010

    (32) Цветом выделяются только строки с ошибками. если у вас все верно в данных — то цветом не выделяется.

    Reply ↓
  34. TrinitronOTV

    на 3.1.5.170 будет работать?

    Reply ↓
  35. user_2010

    пока не проверяла. Постараюсь проверить в ближайшее время

    Reply ↓
  36. user_2010

    (34) проверила на демо базе 3.1.5.170 — отчет формируется.

    Reply ↓
  37. TrinitronOTV

    ОК, подожду результата

    Reply ↓
  38. user_2010

    (37) вчера проверила на демо базе 3.1.5.170 — отчет формируется.

    Reply ↓
  39. VitHammer

    Хороший всё-таки отчет разработали налоговики. И бюджет наполнить, и ВВП поднять.

    Reply ↓
  40. user_2010

    (39) да политика такая, что все налоги сдаются пооперационно — есть где косячить и есть что проверять….

    Reply ↓

Leave a Comment

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