Начисленные налоги с ФОТ




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2018-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='\

28 Comments

  1. CheBurator

    картинки давай!!!

    налоги и взносы или только налоги?

    Reply
  2. ОбнажЁнная_Маха

    НДФЛ, ЕСН, взносы в ПФР и страховые взносы в ФСС, а также размер собственно з/п

    Reply
  3. O-Planet

    (1) можно и фотки 🙂

    Reply
  4. basil

    А можно сделать, чтобы уволенные в предыдущие периоды сотрудники не отображались пустыми строками?

    Reply
  5. basil

    Поправка: лучше всего, чтобы сотрудники, которым з/п не начислялась и по которым не было корректировок по налогам, не отображались в таблице совсем. Заранее спасибо, таблица главбуху нашему нужна. 😉

    Reply
  6. ОбнажЁнная_Маха

    Внесена поправка — теперь можно выводить отчет только по сотрудникам, которым начислялась зарплата

    Reply
  7. bedrikd

    Неплохо бы сделать сортировку сотрудников по алфавиту

    Reply
  8. basil

    Кроме сортировки по алфавиту, есть ещё один существенный промах:

    в столбце ЕСН-Федеральный бюджет следует ставить не 20%, а 20% минус взносы в ПФР (на страховую и накопительную часть), а то можно получить по шее, переперечислив в бюджет лишних налогов)))

    Reply
  9. basil

    В типовой бухгалтерии есть субсчет 69.04 ЕСН в части, перечисляемой в Федеральный бюджет, по нему нужные цифры и отражаются. в 1С 7.7 в отчете «Начисленные налоги с ФОТ» считалось всё правильно. Может где-то ссылки не на те счета?

    Reply
  10. basil

    Отлично, осталось только сортировку в алфавитном порядке настроить, а то проверять неудобно, но это в общем то мелочь. 🙂

    Reply
  11. Sei Souma

    Есть мнение, что даже при не поставленной галочке «Только по сотрудникам, которым за период начислялась з/п» в отчете не должны появляться уволенные сотрудники.

    А ещё что при этой самой непоставленной галочке в отчете должны выводится также и сотрудники, с которыми заключены договора ПВХ, и с которых платится НДФЛ.

    Отчет хорошоий и полезный, на самом деле. Спасибо!

    Reply
  12. Sei Souma

    Кстати, совсем запамятовала.

    Есть еще ФФ_НС, почему бы не вынести это в отдельную графу?

    Reply
  13. poppy

    Имхо вместо кода:

    Месяцы.Получить(Месяц(Месяц)) + » » + Строка(Год(Месяц))

    Лучше написать так:

    ПредставлениеПериода(НачалоМесяца(Месяц), КонецМесяца(Месяц), «»)

    А то он, на фоне остального кода, выглядит как-то некузяво.

    Reply
  14. AlB

    Начисления берутся по всем фирмам в базе.

    Reply
  15. 07_zybkov

    Не скачивается.

    Reply
  16. NtS

    а можно сделать, чтобы ведомость формировалась за любой период, а не только за месяц?

    Reply
  17. serezhenko

    Хорошо-бы устанавливать организацию по умолчанию при открытии отчета, в табличный документ наименование организации.

    А так спасибо «+», взял за основу и все что нужно подрпавил за 5 минут.

    Reply
  18. tango

    запустился в УПП, +

    Reply
  19. tango

    модуль запаролен, + снимаю

    Reply
  20. Nickon

    Неплохо. Прям как в 7-ке.

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

    Reply
  21. Lenux

    Форма очень нужная, большое спасибо, просто молодец!

    На мой взгляд:

    1. Не хватает названия фирмы при выводе на печать, по которой сформирован отчет;

    2. Когда необходимо сформировать отчет по фирме, находящейся на УСН, в отчете в графе ЕСН по фед.бюджету выводятся суммы с минусом, тогда как там вообще не должно быть никаких сумм, так как этот налог при данном режиме не исчисляется!

    Если получиться это реализовать, по-моему вообще идеальный будет отчет!!!

    Удачи!

    Reply
  22. andklp

    {ВнешнийОтчет.НачисленныеНалогиСФОТ(56)}: Ошибка при вызове метода контекста (Выполнить): {(20, 20)}: Таблица не найдена «РегистрБухгалтерии.Хозрасчетный.Обороты»

    ЛЕВОЕ СОЕДИНЕНИЕ <<?>>РегистрБухгалтерии.Хозрасчетный.Обороты(&МесяцНач, &МесяцКон, , Счет = &Счет6911, , , , ) КАК ХозрасчетныйОбороты

    по причине:

    {(20, 20)}: Таблица не найдена «РегистрБухгалтерии.Хозрасчетный.Обороты»

    ЛЕВОЕ СОЕДИНЕНИЕ <<?>>РегистрБухгалтерии.Хозрасчетный.Обороты(&МесяцНач, &МесяцКон, , Счет = &Счет6911, , , , ) КАК ХозрасчетныйОбороты

    Reply
  23. andklp

    хм, это я вижу для бухи …. извиняюсь

    Reply
  24. Roman99

    Ништяг, работает!

    Reply
  25. блондинка-программистка

    Супер!! Не хватает только колонки «Выплачено». «+» твой!

    Reply
  26. ab88

    А можно добавить возможность выбора периода за который формируется отчет? А лучше снимите пароль =)) Заранее спасибо!

    Reply
  27. АллаБух

    а для новых страховых взносов такой же нет?? очень нужно!!!!!!!

    Reply
  28. Bomba1911

    Поправка: лучше всего, чтобы сотрудники, которым з/п не начислялась и по которым не было корректировок по налогам, не отображались в таблице совсем. Заранее спасибо, таблица главбуху нашему нужна.

    Reply

Leave a Comment

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