Расшифровка 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='\

30 Comments

  1. Lusik

    Добрый день!

    Спасибо огромное за отчет! Он супер-полезный!

    Однако, мы заметили, что туда не подпадают отпуска, у которых дата удержания раньше даты начисления…

    Reply
  2. lotan

    (2) Lusik, а в Отчет 6-НДФЛ эти суммы попадают? Этот отчет заполняется по алгоритмам заполнения 6-НДФЛ, то есть строки должны быть 1 в 1.

    Reply
  3. lotan

    (2) Lusik, не смог воспроизвести Вашу ошибку. У меня такого рода отпуска попадают и в отчет 6-НДФЛ и в мой отчет.

    Reply
  4. FKLDOZ

    Спасибо за отчет! Бухгалтеру отличная помощь!

    Reply
  5. aaromanov

    Доброе утро!

    Reply
  6. kovgard

    Да, и нужно добавить общий итог по строке 130. У 1С алгоритм не совершенен, возможно расхождение со строкой 020.

    Reply
  7. lotan

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

    Что касаемо Итога по 130, хочу сделать, но сейчас это поле не играет никакого значения. Оно считается информационным и у многих никогда не сойдется с 020, но как бы там не было, принял!

    P.S

    И честно признаться, не думал, что этот отчет будет пользоваться большой популярность, а получилось вон как… 🙂

    Reply
  8. Alteza

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

    Reply
  9. asher72

    Че то отчет не отправляется на почту…

    Reply
  10. lotan

    (11) asher72, напишите почту в личку.

    Reply
  11. lotan

    (10) Alteza, (8) kovgard, Все пожелания собираю, перед 2 кварталом постараюсь, что-нибудь сотворить.

    Reply
  12. smooth

    Было бы супер если бы еще и 1 раздел расшифровывался 🙂

    Reply
  13. Scene1

    Добрый день. Спасибо за отчет, но у меня почему то не выводит регистратор. Не подскажете, почему такое может быть?

    Reply
  14. lotan

    (15) Scene1, где-то «Дата получения дохода» > «Даты выплаты дохода». Исправил. Скажите куда кинуть отчет?

    Reply
  15. as7bs

    В версии v6_105.1 расшифровка по документу пропала, я так понял, в связи с заполнением отчета через общие модули.

    Обрадовался, прочитав что в v7_107.1 «Вернулиь к старой схеме».

    Снова скачал обновление. Но расшифоровки по регистратору, так и не увидел.

    Спасибо, что очень помогла в 1 квартале при формировании отчетности.

    Но сейчас, без расшифровки по регистратору, данная обработка стала БЕСПОЛЕЗНОЙ.


    (16) Похоже я опоздал с комментарием. Написал, тоже адрес в личку.

    Reply
  16. lotan

    (17) as7bs, не понял. Я скинул Вам на почту последнюю версию. Она заработала?

    Сейчас уже не старая схема разработки, сейчас уже переписывание запросов 1С, они убрали из запроса Регистратор.

    Reply
  17. as7bs

    (18) Последняя версия, которую вы скинули, показывает регистратор не во всех базах, в некоторых есть, а в некоторых нету.

    Причем в некоторых базах, расшифровка, как v7_107, так и v6_105(работающая на общих модулях) показывают данные отличные от тех которые заполняются в самой форме 6-НДФЛ.

    Reply
  18. lotan

    (19) as7bs, странно, перепроверил 107 на нескольких базах, все ок. Мне хотя бы понять какие у Вас строки выпадают (Например: отпуск, больничный)? Базу дать на опыты есть возможности?

    Reply
  19. as7bs

    И еще себе я обработку меняю следующим образом:

    В процедуре ПриОткрытии

     ДатаНачала = НачалоКвартала(ТекущаяДата());
    ДатаОкончания = КонецКвартала(ТекущаяДата());

    заменяю на

     ДатаНачала = НачалоКвартала(ДобавитьМесяц(ТекущаяДата(),-3)); //АС_
    ДатаОкончания = КонецКвартала(ДобавитьМесяц(ТекущаяДата(),-3)); //АС_
    

    Чтобы постоянно не менять период на прошлый квартал при открытии обработки. Т.к. отчет мы обычно формируем в следующем квартале.

    Reply
  20. lotan

    (21) as7bs, я понял. Да, у меня не заходит сюда, поэтому было все Ок.

    Reply
  21. Scene1

    (16) 1c@finval.ru. Спасибо)

    Reply
  22. rybasov

    Можно и мне скинуть на почту ashvets@it-cr.ru последнюю версию

    Reply
  23. lotan

    Товарищи, пишите в личку насчет свежей версии отчета 🙂

    Reply
  24. mentozavr

    Доброго времени суток. Скачал ваш отчет «Расшифровка_6_НДФЛ_Отчет_v8_107.1». Запустил на 108 релизе. Формировать не хочет. В чем причина может быть. Спасибо заранее

    Reply
  25. lotan

    (27) mentozavr, Добрый. У нас каждый релиз с боем обновляется. Поэтому, я стараюсь делать обновление отчета исключительно под релизы перед сдачей отчета. Примерно во второй половине Сентября я начну разбираться с теми изменениям, которые навояли 1С и дорабатывать отчет. Напишите в личку, как появится новая версия отчета я Вам свежий скину.

    Reply
  26. mentozavr

    (28) Спасибо уже написал

    Reply
  27. mentozavr

    (28) Зачем им нужны эти изменения, зачем регистр каверкать

    Reply
  28. lotan

    (30) mentozavr, я думаю этот вопрос лучше сразу задавать руководству нашей страны. 🙂

    1С тупо пытается подогнать работу программы под чрезвычайно запутанные законы, вот и все.

    Reply
  29. mentozavr

    (31) Новой версии обработки еще нет?? Спасибо

    Reply
  30. Love29

    Четкий отчет! Спасибо автору! Учитывает и командировки и ДГПХ.

    Reply

Leave a Comment

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