6-НДФЛ Заполнение из документов "Перечисление НДФЛ в бюджет" (2 раздел)




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

39 Comments

  1. 1kashak

    Очень полезная доработка. Спасибо. Ставлю +

    Странно, что так мало людей скачали. Неужели, 6-НДФЛ у всех заполняется корректно?

    Reply
  2. BlizD

    (1) 1kashak, Спасибо.

    Скорее всего не у всех есть возможность вносить изменения в конфигурацию или же стремятся заставить типовой механизм отрабатывать.

    Reply
  3. 1kashak

    Скажите, а вы суммируете апрельское перечисление (ДатаПлатежа = Апрель, МесяцНалоговогоПериода = Март) в строке 70?

    У меня зарплата выплачивается следующим месяцем.

    После нажатия кнопки «Заполнить из перечислений НДФЛ», формируется доп. отчет по ТЧ «ПеречислениеНДФЛвБюджет» и регистрам по вычетам.

    Суммы из этого отчета я вытаскиваю и вношу в Раздел 1.

    020 — общая сумма дохода;

    030 — вычеты;

    040 — исчисленный НДФЛ;

    070 — Общая сумма исчисленного НДФЛ;

    Но, по последним сведениям, исходя из этого источника http://www.buhonline.ru/pub/comments/2016/4/10985

    Получается, что в Раздел 1, в строку 070, нужно еще суммировать и апрельское перечисление НДФЛ за месяц март.

    Reply
  4. BlizD

    (3) 1kashak,

    1 раздел расчетчик заполняет у нас самостоятельно, поэтому по строке 70 не могу, Вас, сориентировать.

    Попробую уточнить у бухгалтера.

    Добавлю, что если заполняем отчет за 1 квартал 2016, то в раздел 2 попадают документы «Перечисление НДФЛ в бюджет», в которых ДатаПлатежа находится в 1 Квартале 2016.

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

    Reply
  5. BlizD

    (3) 1kashak,

    расчетчик ответил:

    «В разделе 1 нужно ориентироваться по месяцу начисления. а в разделе 2 по дате перечисления. Так же по году будут сравнивать раздел 1 с предоставленными справками 2 НДФЛ, Общая сумма дохода и НДФЛ должны сходиться.»

    Reply
  6. 1kashak

    (5) Спасибо большое. Это полезная информация.

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

    Reply
  7. Lukich66

    (1) 1kashak, 1)править «недоделки» 1с-плохой тон

    2) вот почему-то не прижился док по перечислениям ндфл

    Reply
  8. BlizD

    (7) согласен, но ситуации бывают разные.

    Reply
  9. serg999

    Классная доработка- всё просто и красиво

    Ещё бы суммы начисления брались как есть, а не расчетные. А то из-за округления (отбрасывания копеек) погрешность слишком большая получается

    Вот и думаю, то ли допиливать новую графу в «Перечислении в бюджет» для хранения исходных сумм, то ли типовой механизм всё-таки задействовать

    Reply
  10. BlizD

    (9) serg999,

    спасибо за отзыв.

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

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

    Reply
  11. BlizD

    Скорректировано заполнение строки:

    Срок перечисления налога (код 120)

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

    Reply
  12. doronin70

    А что за реквизиты у вас в скрине формы документа — «»Фактическое перечисление», «Не перезаполнять», «Характер выплаты» ? В типовом документе таких реквизитов нет. Тоже добавлены самостоятельно? На работу внешнего отчета не повлияют?

    Reply
  13. BlizD

    (12) doronin70,

    Добрый день.

    Нет не повлияют.

    Для работы отчета, достаточно добавить только следующие реквизиты в документе «Перечисление НДФЛ в бюджет»:

    1. ивПодразделениеОрганизации (тип СправочникСсылка.ПодразделенияОрганизаций)

    2. ивПеречислениеЗП (Тип Булево)

    3. ивСрокПеречислениеНалога (Тип Дата)

    Как добавить реквизиты:

    https://youtu.be/eTmzQQcGTF8

    Reply
  14. BlizD

    (12) doronin70,

    поправил скриншоты в описании, чтобы не путали.

    Reply
  15. doronin70

    (14)

    Спасибо, отчет скачал, установил, на релизе ЗУП 2.5.105.1 пошло влет.

    Reply
  16. BlizD

    (15) и это замечательно.

    Спасибо за отзыв.

    Reply
  17. zul333

    Здравствуйте.

    Это все работает с установленными флагами «Упрощенный учет взаиморасчетов» и «При начислении НДФЛ принимать исчисленный налог к учету как удержанный»?

    Reply
  18. BlizD

    (17) zul333,

    Добрый день.

    Да, работает.

    У нас признаки «При начислении НДФЛ принимать исчисленный налог к учету как удержанный» и «Упрощенный учет взаиморасчетов» включены.

    Reply
  19. pink2

    Здравствуйте.

    Скачала отчет. Спасибо.

    Reply
  20. BlizD

    (19)

    Добрый вечер, Людмила.

    Спасибо за комментарий, рад что отчет, Вам, помог.

    Reply
  21. BlizD

    Всем привет.

    Обновление 11.10.16:

    Обновлена версия отчета «ивРегламентированныйОтчет6НДФЛ_111016.erf» для ЗУП 2.5.110.1

    Reply
  22. pjv

    А для Управления Предприятием отчет будет работать?

    Reply
  23. BlizD

    (22)

    «А для Управления Предприятием отчет будет работать?»

    Речь про «Управление производственным предприятием 1.3» ?

    Если да, тогда отчет скорее всего будет работать, но надо проверять.

    Reply
  24. anna1012

    Здравствуйте!

    Заполняем отчеты с Вашей замечательной доработкой, возник вопрос — отпускные и больничные выплаченные в декабре имеют срок перечисления 31.12.16, который отодвигается на 09.01.17. Но в прошлом квартале были очередные разъяснения — если налоговый агент производит операцию в одном отчетном периоде, а завершает ее в другом отчетном периоде, то такая операция отражается в том периоде, в котором она завершена (см. письма от 02.11.2016 № БС-4-11/20829@, от 24.10.2016 № БС-4-11/20126@).

    Подскажите, как Вы вышли из этой ситуации?

    Большое спасибо!

    Reply
  25. BlizD

    (24)

    Здравствуйте!

    Заполняем отчеты с Вашей замечательной доработкой, возник вопрос — отпускные и больничные выплаченные в декабре имеют срок перечисления 31.12.16, который отодвигается на 09.01.17. Но в прошлом квартале были очередные разъяснения — если налоговый агент производит операцию в одном отчетном периоде, а завершает ее в другом отчетном периоде, то такая операция отражается в том периоде, в котором она завершена (см. письма от 02.11.2016 № БС-4-11/20829@, от 24.10.2016 № БС-4-11/20126@).

    Подскажите, как Вы вышли из этой ситуации?

    Большое спасибо!

    Добрый день, Анна.

    Вопрос записал, как будет время постараюсь ответить.

    Reply
  26. BlizD

    (24)

    Здравствуйте!

    Заполняем отчеты с Вашей замечательной доработкой, возник вопрос — отпускные и больничные выплаченные в декабре имеют срок перечисления 31.12.16, который отодвигается на 09.01.17. Но в прошлом квартале были очередные разъяснения — если налоговый агент производит операцию в одном отчетном периоде, а завершает ее в другом отчетном периоде, то такая операция отражается в том периоде, в котором она завершена (см. письма от 02.11.2016 № БС-4-11/20829@, от 24.10.2016 № БС-4-11/20126@).

    Подскажите, как Вы вышли из этой ситуации?

    Большое спасибо!

    Добрый день, Анна.

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

    Reply
  27. serg999

    На УПП 1.3 всё работает как надо. Не понимаю, почему разработка почила в бозе. Неужели прям все на зуп-3 перешли?

    В типовой (2.5, 1.3) как было криво сделано, так и осталось.

    Reply
  28. user724575

    Здравствуйте, отличная доработка! Обновление будет? (изменения с 2018г)

    Reply
  29. BlizD

    (28)

    Добрый вечер, Дмитрий.

    Какое обновление интересует?

    Reply
  30. user724575

    изменения с 2018г, в частности новый формат выгрузки

    Reply
  31. BlizD

    (30)

    Эти изменения уже прошли в релизе зуп? Если да то в каком?

    Reply
  32. user724575

    только планируются, но сдавать за 2017 надо будет по новой форме

    Reply
  33. BlizD

    (32)

    Да, буду делать чтобы за 2017 сдать.

    Reply
  34. anna1012

    Добрый день! Подскажите, когда будет обновление Вашего отчета?

    Reply
  35. BlizD

    (34)

    Добрый день, Анна.

    Пока не могу сказать когда буду делать,

    но скорее всего когда начнем делать этот отчет за 2017г.

    Reply
  36. aliv

    Добрый день, будет обновление касаемое (Приказ ФНС от 17.01.2018 № ММВ-7-11/18) ?

    Reply
  37. BlizD

    (36) (34) (32)

    Обновление 18.04.18:

    Обновлена версия отчета «ивРегламентированныйОтчет6НДФЛ_190418.erf» для ЗУП 2.5.130.2 от 29.03.2018

    Инфа о релизе ЗУП 2.5.130.2: В конфигурацию включена форма Расчета 6-НДФЛ, утв. приказом ФНС России от 14 октября 2015 г. № ММВ-7-11/450@ в редакции приказа ФНС России от 17 января 2018 г. № ММВ-7-11/18@.

    Добавлена почта проекта: sdesk1c@bk.ru

    Reply
  38. 410225

    Может работать в 1с 8.3 Бухгалтерия?

    Reply
  39. BlizD

    (38)

    Добрый день, Дмитрий.

    Может работать в 1с 8.3 Бухгалтерия?

    Нет, в Бухгалтерии 3.х работать не будет.

    Reply

Leave a Comment

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