<?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) Brawler, В типовой зуп расчет оценочных обязательств происходит так, отраженный в учетной политике процент умножается на сумму расходов по оплате труда и страховых взносов за каждый месяц, то есть сумма планирования может быт не точной.
Моя же обработка конкретно рассчитывает сумму отпускных за следующий месяц для каждого сотрудника, разбивая на выплаты взносов в ФСС, ПРФ, ФСС НС и т.д.
Следует уточнить, что более корректного учета резервов отпускных можно добиться, если знать суммы и дни отпуска начисленные в прошлом месяце, тогда сумму можно полностью пересчитать с учетом текущего среднего заработка и новых дней.
Так, 5 человек скачало. И никто даже строчки не чиркнет: устраивает или нет.
Добрый день
планируется ли сделать подобное для ЗУП 3.0? (тк там беда с резервами отпусков — те их нет..((( )
(4) gortol, К сожалению я совсем не знаком с ЗУП 3.0, поэтому пока не планируется.
1. Почему для расчета суммы резерва используете 3 дня отпуска, а не 2,33?
2. Учитываются ли при расчете страховых взносов пределы облагаемых баз по взносам в разные фонды?
3. Учитываются ли нюансы начисления страховых взносов с выплат временно пребывающим иностранцам и иностранцам-ВКС?
4. На мой взгляд, для определения сотрудника, по которому следует начислять резерв, правильнее использовать Остаток отпуска на конец периода, точнее, месяца.
5. Вы пишете: «2. Проставить расчетную базу для резерва (оценочного обязательства) в справочники «Оценочные обязательства». В расчетную базу необходимо включить отпускные, компенсации отпуска.».
Зачем нужно включать в расчетную базу отпускные и компенсацию отпуска?
Вообще-то, по моему мнению, это неправильно.
(6) jilzzoni,
1) На самом деле для начисления берется среднемесячное значение начисления дней отпуска по месяцам, например, положено сотруднику 36 дней в год, то значит начисляется резерв на 36/12 = 3 дня, если 28, то 2,33. Все зависит от того сколько дней отпуска назначено сотруднику.
2) Да, при расчете страховых проверяется доход физ лица и сравнивается с предельной базой по ФСС и ПФР, по ФОМС предельной базы в этом году нет.
3) Скорее всего нет, так как писалась давно, а беженцев ввели в ЗУП недавно.
4) В обработке сотруднику берутся из работающих на момент начала расчета резерва. А уже по оставшимся проверяются не имеют ли они остаток отпуска с минусом, если имеют и остаток включая текущее начисление по резерву все равно <= 0, то резерв не начисляется.
5) Тут необходимо будет освежить память, как происходит выборка начислений, скорее всего здесь это указано для варианта, если резерв заполняется по типовому, но точнее смогу сказать, когда поразбираюсь со своим старым кодом.
при скачивании было предложено отправить файл на почту. я согласилась. смс списалась а файла нет!!!!!!!!!
(8) Эсти, Видимо это какое-то изменение в инфостарте, как обычно с багами, до этого не отправлялось на e-mail. Сейчас попробовал: при выборе «Отправить» файл не отправляется на e-mail, а просто загружается. Посмотрите, может он есть в загруженных. Также при оплате можно качать этот же файл в следующий раз бесплатно. Если все-таки файла нет, напишите мне в личку вашу почту, и я вам отправлю обработку.
А почему у меня в базе она считает дней отпуска 4,33 ??? а не 2.33 ??? от чего это может зависеть?
(10) zexpress, по идее количество дней начисления резерва зависит от «Справочника виды ежегодных отпусков», там должна стоять галка «Предоставлять отпуск всем сотрудникам», далее надо смотреть отпуск, который проставлен в должностях, на которых прибывал сотрудник, эти дни нужно добавить к общему отпуску, а затем нужно смотреть на индивидуальный отпуск каждого сотрудника, находится он справочники «Сотрудники» — Ежегодные отпуска. Если там ошибок не найдете, то скорее всего дело в алгоритме, давно его не обновлял, но если нужно переделаю.
добрый день, скажи возможно ли как указать временной период для обработки? что бы начислять оценочные обязательства по кварталам?
(12) lockrQ, здравствуйте, на текущий момент такой возможности нет, резервы начисляются по месячно
Добрый день. При заполнении выходит ошибка
Ошибка при вызове метода контекста (Выполнить): {(94, 147)}: Поле не найдено «ПредельнаяВеличинаБазы.РазмерПФР»
КОГДА СтраховыеВзносыСведенияОДоходахОбороты.РезультатОборот — СтраховыеВзносыСведенияОДоходахОбороты.СкидкаОборот >= ПредельнаяВеличинаБазы.<<?>>РазмерПФР
тестирую на зуп 2.5
Добрый день! Нет подобной обработки для УПП?
(15) Разобралась. Оказалось, этот блок не отрабатывает — в УПП ОбщегоНазначенияЗК.ГоловнаяОрганизация(Организация) возвращает Органиазцию без ошибок, флаг ЭтоУПП ставится в ложь, и дальше лезут ошибки.
Попытка
лГоловнаяОрганизация = ОбщегоНазначенияЗК.ГоловнаяОрганизация(Организация);
ЭтоУПП = Ложь;
Исключение
лГоловнаяОрганизация = ОбщегоНазначения.ГоловнаяОрганизация(Организация);
ЭтоУПП = Истина;
КонецПопытки;
(16) Наверное, стоит переделать проверку на тип конфигурации.
Конечно, можно тем, у кого УПП, насильно ставить этот флаг, как я и сделала, но это неуверсально.