<?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='\
А на УПП будет работать?
(1). Проверял на типовой УПП 1.2.27.1 — Работает.
При оплате по договорам подряда выдает деление на 0 🙁 БазаСтраховыхВзносов не всегда равна «БазаФСС», для ДГПХ БазаФСС = 0
Немножко скорректировал, чтобы не было деления на ноль. У нас в ЗУПе выдает такую ошибку
Ошибку выдает у тех, у кого начисления только по ДГПХ. В справочнике ДоходыПоСтраховымВзносам есть реквизиты ВходитВБазуФОМС, ВходитВБазуФСС, ВходитВБазуПФР. Надо их попробовать прикрутить к отчету и показать отдельно базы по ПФР и ФСС.
Большое спасибо за отчет.
Подскажите на 2.5.19.3 не будет работать?
Отчет формируется, но как то некоторые базы задваиваются, подозреваю из за переходящих начислений дек-январь.
(6) На 2.5.19.3 не проверял, но думаю, что должна. По крайней мере структура регистров в 2.5.20.3 осталась та же.
База налога берется из регистра накопления «СтраховыеВзносыСведенияОДоходах» (в исполнимой части «Учет доходов для исчисления страховых взносов»). Проверьте этот регистр. Возможно там есть задвоенные записи.
У нас две базы 2.5.20.3, все SQL, так в одной все ОК, а другая ругается «деление на 0»
(8) Сегодня вечером выложу исправленный отчет с новыми возможностями.
Ошибка деления на ноль там уже исправлена
ЗиУП 2.5.19.3.
Отчет не сформирован!
Деление на 0…
🙁
(10) Ошибка деления на ноль исправлена. Новый вариант отчета v1.06 уже выложил
Отчет сильный. Однако как можно объяснить то, что у меня в документе «Начисление страховых взносов»:
Иванов оклад 42000, премия 3000. База для расчета взносов: 45000.
Суммы взносов: ФСС=1 305,00 ; ФСС несчастные = 90,00 ; ФФОМС=495,00 ; ТФОМС = 900,00 ; ПФР нак =0; ПФР страх =9 000,00
А в твоем отчете сумм взносов нету совсем???
может суммы взносов брать просто из документа?
(13) Я больше привык работать с данными регистров накопления. Брать данные из документа имеет смысл, только если они больше никуда не записываются (как, например, в случае с проводками). Здесь же все данные хранятся в регистрах расчета «Осн.начисления», «Доп.начисления», регистрах накопления «СтраховыеВзносыСведенияОДоходах», «СтраховыеВзносыИсчисленные».
(12) Если в отчет суммы взносов не попали, нужно посмотреть есть ли там суммы баз для взносов. Если есть, то это возможно ошибка отчета, если нет, то это возможно Ваша ошибка, т.к. нет движений в регистрах накопления «СтраховыеВзносыСведенияОДоходах», «СтраховыеВзносыИсчисленные».
В том то и дело, что в документе «Начисление страховых взносов» по Иванову заполнены закладки «Основные начисления», «Дополнительные начисления» и, конечно, «Взносы» теми суммами, которые я описал в (12).
Более того, такие суммы есть в регистрах расчета.
Данные конечно лучше брать не из документа, а из регистров накопления «Страховые взносы исчисленные» и «Учет доходов для исчисления страховых взносов» (в конфигураторе называется «СтраховыеВзносыСведенияОДоходах»), по которому документ ДЕЛАЕТ движения. Короче отчет у меня формируется не корректно , хотя все записи регистров совпадают с данными таб частей документа. Впрочем может это только у меня ))) ЗиУП 2.5.19
(16) На моих данных (в базе более 3000 сотрудников) ошибка, как я не старался, не воспроизводится. В данном случае, не имея на руках для тестирования Вашу базу данных, могу только порекомендовать проверить отдельно как формируется каждый вложенный запрос этого отчета в консоли запросов. Если обнаружится, что это ошибка отчета, то я ее обязательно поправлю.
а релиз ЗиУП какой у тебя?
у меня 1,5тыс чел. половина не формируется
(18) 2.5.20.3.
(19) А есть ли у этой половины какие-либо особенности, может инвалиды или договора подряда, ЕНВД ?
нет никаких особенностей. ЕНВД разумеется нет, инвалидов всего 34 человека.
(22) Честно говоря, пока в голову ничего не приходит. Тут данные нужны. Попробуйте все таки посмотреть как отрабатывают вложенные запросы.
Оки 😀
Работал в воскресенье 14 февраля((( НО ТАКИ обновился до 2.5.20!!!
Хотите верьте, хотите нет — но отчет теперь формируется !!!!!!!!!!!!!
Хороший отчет, но по требованию расчетчиков пришлось немного доработать. Базы для расчета взносов ФСС и прочего различаются, например, на выплаты по договорам (в базу по ФСС эти начисления не входят, но входят в базу по прочим страховым взносам)
(25) Охотно верю.
(26) Спасибо за участие. Обязательно посмотрю в чем может быть ошибка.
Если бы отчет отлавливал не резидентов и была база ФСС — цены б ему не было!
(29) Базу ФСС обязательно сделаю, а вот насчет нерезидентов — вопрос: в каком виде их нужно отлавливать ? Просто добавить группировку «Резидент»/»Нерезидент» ?
(30) Нет не просто. Доход не резидентов должен искл. из базы.
И еще: я так понял регрессия в отчете не учитывается. Так?
Релиз 2.5.31.4. Идет задвоение при оплате больничных листов, если по новому алгоритму начисляется 1000 с 2011 года, ведомость показывает 2000.
Версия 2.5.33.6 задваивает колонку «Начислено по своду», например,
оклад 5000, ставит 10000,
оклад 6500, ставит 13000
И желательно добавить сохранение настройки, а так отчет просто супер!