<?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='\
из текста статьи:
Одна из постоянных задач, стоящих перед бухгалтерами-расчётчиками зарплаты — это контроль за своевременностью и полнотой уплаты в бюджет удержанного с сотрудников НДФЛ в бюджет
…
Сомневаюсь я ,однако. Расчетчику глубоко до лампочки сколько НДФЛ заплатила «контора» в бюджет — не он это решает. Его задача правильно начислить и удержать. Бредятину по разноске перечисленного НДФЛ придумал человек далекий от жизни( как и распределение уплаченных взносов в ПФР). Когда вы рассчитали месяц ,а это с 05-15 число следующего за рассчитываемым, то начинаете выплачивать з/п. И вот тут по закону при выплате з/п вы должны перечислить НДФЛ( если я ошибаюсь пусть меня поправят). Т.О. если вы выдали Иванову,Петрову,Сидорову-5-го, платежку делаете (грубо 13% от суммы) без персоналий. И что теперь расчетчику колбасить ручками НДФЛ по каждой фамилии с помощью «а-ля» документа уплата взносов ? Учет начисленного и перечисленного НДФЛ ведут в бухгалтерии- там и сальдо на 1-е и обороты по дебету и кредиту 68.01- вот вам и ответ жизни. А наша задача при сдаче НДФЛ( чем мы сейчас и занимаемся)найти способ,как распределить суммы из БУХ в ЗиУП- ибо для страны
неважно перечислен НДФЛ за Иванова,Петрова или Сидорова- важно в орг1-начислили(удержали) НДФЛ=100руб, з/п выплатили, а в бюджет отдали 75руб.
(1) Lukich66,
1. следить за полнотой и своевременностью перечисления НДФЛ в бюджет — это прямая обязанность бухгалтеров-расчётчиков практически во всех конторах, с которыми я знаком. не знаю, может, в Ваших местах к этому относятся проще.
2. помимо перечисления НДФЛ за прошедший месяц, существует, как известно, и другие случаи: например, перечисление НДФЛ с выплаченных за три дня до отпуска отпускных (уж извините за тавтологию), или при увольнении, и перечисление идёт по конкретным персоналиям, и это всё потом надо учесть при перечислении «общего» НДФЛ за месяц
по уволенным и отпускникам — да, а потом — сводный документ по пордразделению
3. «неважно перечислен НДФЛ за Иванова,Петрова или Сидорова» к сожалению, текущая нормативка построена так, что важно — и нужно распределять, ибо идёт и в справки, и в отчётность в ИФНС
Согласен с Andrew, у меня обработка автоматически создаёт документы по перечислению при создании платёжек на выплату..
А проблему с отчетом решил просто.. сказал бухам дату перечисления ставить концом месяца за который перечисляешь.. всё равно это дата ни на что не влияет при сдаче отчетности.. и всё ок.. отчёт показывает норм..
Меня больше бесит другое.. то, что при заполнении документа перечисление НДФЛ, он автоматом распределяет суммы, а не просто заполняет их исходя из задолженности за выбранный месяц.. думаю написать заполнение табличной части.. А то порой бред получается, когда в одном периоде начисляется за другой.. и он не берёт эти суммы в расчет при распределении..
У нас несколько таких вариантов отчета: «2-НДФЛ», «НДФЛ по месяцам НП» и т.д.
Вместо адовых списков месяцев у нас используется пользовательское поле выражение.
(3) CepeLLlka, ну слава богу хоть еще один «нормальный» взгляд на проблему. Пока не столкнулся с формированием отчета по НДФЛ из ЗиУПы не подозревал о подобном способе издевательства. Так же сразу кинулся на обработку ТЧ,чтобы не портить конфу- но другие ??? пока мешают. В мелких организациях (до 100ч)наши любимые ж_бухи ручками за 2-3 часа наводят «порядок»- а вот там где >1.5-2тыс.чел- уперлись- говорят ,где ваша хваленая 1с?
(4) Gesperid, я рассматривал этот вариант, и это было бы очень хорошим решением, если бы не один момент: в наших базах обычно к моменту выплаты и перечисления НДФЛ за январь (14-15 февраля) уже, как правило, проходит куча начислений за февраль (отпускные, увольнения, и т.п.), выплата и перечисление по которым происходят отдельно (индивидуально). вот и пришлось извращаться. по крайней мере, другого способа без доработки отчёта не нашёл. если подскажете — буду благодарен
Такое дело.. а почему отчёт то такой кривой?
Вот перечисляем за февраль.. он ставит к перечислению все суммы что начислены за февраль.. а к примеру ндфл удержанный с суммы отпуска за следующий месяц(переходящий отпуск 19.02-05.03), он считает что нужно перечислять в марте.. Деньги то я выплачиваю сейчас.. а не в марте.. что за бред..
Или это я мудак, и что-то не то делаю?
(7) CepeLLlka, данная методика не предназначена ответить на вопрос «сколько нужно перечислить НДФЛ в марте», она отвечает на вопрос «сколько ещё нужно перечислить НДФЛ за налоговый период январь-февраль, с учётом всех перечисленных промежуточных сумм (по уволенным, отпускникам и т.п.)».
у нас (и во многих других организациях) методология такая: промежуточные суммы перечисляются и вносятся в ЗУП пофамильно (с ручным указанием, сколько и за кого перечислили). затем, когда наступает время полной выплаты за истекший месяц, бухгалтер смотрит, сколько ещё нужно доперечислить в бюджет
Нужную информацию можно получить и без настройки отбора,
а добавлением группировки по месяцу налогового периода
и установкой избыточно большого периода, за который
строится отчет.
Тогда в самом отчете без отбора видна вся картина
по месяцам налогового периода, и видно за какой
сколько начислено, удержано, перечислено и осталось
перечислить.
Промежуточные суммы НДФЛ с какого-то из 50-х релизов
тоже регистрируются в учете, поэтому проблем с построением
отчета не возникает. Не приходится вносить перечисленный НДФЛ
с них пофамильно (вручную).
(0) А не проще в отборе период задать через МесяцНалогоПериода<=Дата1 МесяцНалогоПериода>=Дата2, чем список городить?
Скажите, пожалуйста, а как этот отчет сформировать за год (без разбивки по месяцам) с разбивкой по людям? Спасибо!