Изменение кода дохода для справки 2-НДФЛ без перепроведения документов в ЗУП 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='\

26 Comments

  1. mmmstr

    СПАСИБО!!!!!

    Reply
  2. forseil

    (1) не за что)

    Reply
  3. NatalkaBal

    Что то не понятно…а как определяет это это премия? В регистре же нет вида расчета?

    Reply
  4. корум

    (3)

    а как определяет это это премия? В регистре же нет вида расчета?

    М — Магия.

    анализируя Регистратор, например, можно докопаться до вида расчета.

    Reply
  5. forseil

    (3) есть

    Reply
  6. NatalkaBal

    ОК)))

    Reply
  7. Yaga_2011

    Спасибо! Все работает!

    Reply
  8. lisabet

    Код дохода — да. Но там если рассчитать зарплату с кодом 2000 и премию с кодом 2002 идет разделение НДФЛ на 2 части — 2000 код отдельно считается, а 2002 отдельно. Т.е. идет 2 строки НДФЛ с разными датами — 31.12.2006 и 13.01.2007. Как вы это в регистре разделите?

    Reply
  9. forseil

    (8) Вы 2006-2007 пересчитываете? или это так для примера?

    Reply
  10. forseil

    (8) я перенес тему в форум http://forum.infostart.ru/forum68/topic166526/

    Reply
  11. VovkaPutin

    (10), в обработке лучше сделать список выбора видов расчета,

    зачем по всем отличающимся делать то?:)

    Reply
  12. forseil

    (11) я честно говоря думал, что это тема одноразовая, и не рассчитывал что в феврале это будет еще актуально… поправлю раз такое дело

    Reply
  13. VovkaPutin

    (12), налоговая еще не всем ответ дала) кому-то, может, и не надо менять коды

    Reply
  14. e-kash

    доброго дня при формировании справок в ифнс нет перекодировки кодов, а для выдачи сотрудникам есть? не пойму как исправить???

    Reply
  15. ENSCH

    (2)Подскажите, что делать тем, у кого ЗиК 7.7?

    Reply
  16. forseil

    (15)я посмотрю конечно, отпишусь.

    А если честно ЗиК 7.7 это как «песня про зайцев» — неактуально) Тем более в свете «6-НДФЛ»)

    Reply
  17. ENSCH

    Мы переходим на восьмерку по зарплате, но отчет за 2016 все равно нужно сдать. Сроки поджимают.

    Reply
  18. ENSCH

    да и песня про зайцев… не стареет.

    Reply
  19. forseil

    (18)хорошо я не гарантирую, но постараюсь глянуть

    Reply
  20. capitan

    УПП 1.3 все работает.

    Мерси

    Reply
  21. ENSCH

    (19) Надежда есть?

    Reply
  22. forseil

    (21)я думаю до конца недели точно отпишусь, горячая пора завал)

    Reply
  23. Маргарита12345

    Добрый день. исправила во вкладке налоги код дохода у ежемесячной премии. запускаю обработку, но ежемесячную премию не видит -в поле с галочками нет ее. В чем может быть причина?

    Reply
  24. forseil

    (24)Может в этом периоде не было начисления по этой премии?

    Reply
  25. Маргарита12345

    я подозреваю, что обработке нужно, чтоб премия начислялась отдельным документом. У меня же премия ежемесячная введена как обязательное начисление процентом от оклада. И ежемесячная премия начисляется в «Начисление заработной платы».

    Reply
  26. sergeevcorp

    Благодарю! В УПП все прошло отлично.

    Reply

Leave a Comment

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