<?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='\
А под какой релиз ЗУП на платформе 82 сделано? У меня при открытии на ЗУП 2.5.33.4 вываливает ошибку:
Ошибка в схеме компоновки данных
по причине:
Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
{(158, 20)}: Поле не найдено «ГражданствоФизЛиц.НеЯвляетсяНалоговымРезидентомРФ»
ГражданствоФизЛиц.<<?>>НеЯвляетсяНалоговымРезидентомРФ КАК ФизЛицоНеЯвляетсяНалоговымРезидентомРФ,
2.5.34.2 — аналогично
Тоже самое под 8.1 в ЗУП 2.5.33.4
Устранил ошибки. Сейчас должен работать на всех релизах в том числе на УПП и КА. Тестировалось в Комплексная автоматизация, редакция 1.1.6 — 8.2 и в ЗУП 2.5.33 — 8.1.
8.1 в ЗУП 2.5.33.4
1. Пришлось добавить функцию, иначе не пашет.
Функция ПолучитьПараметрыИсполненияОтчета() Экспорт
СтруктураНатроек = Новый Структура();
Возврат СтруктураНатроек;
КонецФункции
2. Показывает уволеных, ну это можно как фичу расматривать.
3. Есть у меня пара человек с декретными отпусками, по ним типовой отчет криво остаток считает, еще не нашел почему. Этот отчет тоже один в один по ним кажет не правильный ответ.
не понятно, просто пустая обработка, что для 8.1 что для 8.2
Попробовала на филиалах все считает, на головном предприятии у всех введены остатки на период, считает как будто их не видит, в чем может быть причина?
(5) alexsy 12.05.11 6:44 писал
У меня с уволенными все хорошо. Когда стоит отбор «не показывать» — не показывает. Может уже поправили?
кхмм…
уж не знаю почему, но в поле «оклад тарифная ставка»
у меня надпись- «Оклад по часам» или «Оплата по часовому тарифу»
…
и ссылки на вид расчета =))
потом гляну что не так)
и надо б добавить поле «средний заработок» и «сумма резерва»
а так — спс =)
не могу понять почему какая-то абра-кадабра открывается?
Обработка настроена на объект — справочник «Остатки отпусков». У нас он пустой. В результате получается ерунда. Можно ли настроить этот отчет на справочник «Остатки отпусков организаций» или сделать еще одну обработку с этим объектом?
У нас обработка работает как надо. Кадровики счастливы, теперь им не надо по каждому работнику отдельно выводить справку по отпуску.
ЗУП 2.5.37.1 на платформе 8.2.14.533 — все работает. А этот отчет — переделанный типовой?
Очень полезный отчет. У нас отдел кадров до этого практически вручную эти остатки отслеживал, по каждому сотруднику отдельно. А когда стали резервы на оплату отпусков создавать, пришлось порядок наводить- отчет очень пригодился. А бухгалтерия им теперь пользуется, чтобы резервы считать.
Мои кадровики стандартными отчетами пользуются и их все устраивает. Но все же закачал, посмотрю, вдруг пригодится. Спасибо.
Спасибо, очень полезный отчет, нам тоже пригодился при подсчете резервов!!!!
Хороший отчет. Бухи очень довольны. Упростили работу по подсчету резервов.
не понятно, просто пустая обработка, что для 8.1 что для 8.2
(12) Holly-khv, а наши кадровики от этого отчета пришли в ужас. истерики и вой «я не понимаю что он мне тут пишет», я не вижу за какой рабочий год, ничего не вижу, ничего не понимаю. возможно есть смысл немного побольше информации выводить? тот же «рабочий год»? а нет, так и суда нет, у всех свои заморочки на работах. автору за труд все равно спасибо
Используем стандартные отчеты, но вашу обработку тоже попробуем
Спасибо за полезный отчет
кхмм…
уж не знаю почему, но в поле «оклад тарифная ставка»
у меня надпись- «Оклад по часам» или «Оплата по часовому тарифу»
…
и ссылки на вид расчета =))
потом гляну что не так)
и надо б добавить поле «средний заработок» и «сумма резерва»
а так — спс =)
Показать
Среднего, действительно не хватает.
Классный отчет. Чуть доработал и на ура пришлось
очень полезная обработка!в типовой ЗУПе выводит все что необходимо
А под какой релиз ЗУП на платформе 82 сделано?
а наши кадровики от этого отчета пришли в ужас. истерики и вой «я не понимаю что он мне тут пишет», я не вижу за какой рабочий год, ничего не вижу, ничего не понимаю. возможно есть смысл немного побольше информации выводить?
Да, не учитывает справочник «Остатки отпусков организаций»
(27) yegorZ,
замените строку
ВыборкаПоОстаткам = ПроцедурыУправленияПерсоналом.ПодготовитьДанныеПоРегламентированнымОтпускам(ТаблицаСотрудников,,Ложь,);
на строку
ВыборкаПоОстаткам = ПроцедурыУправленияПерсоналом.ПодготовитьДанныеПоРегламентированнымОтпускам(ТаблицаСотрудников);
потому что:
Функция ПодготовитьДанныеПоРегламентированнымОтпускам(
ТаблицаПериодов, // Таблица периодов, для которой рассчитываем данные по отпускам
Регистратор = Неопределено, // Регистратор, которым списывается отпуск
ИспользоватьОстатки = Истина, // Ложь только в случае, если необходимо пересчитать остатки из формы элемента справочника остатков
ВключатьТекущийРабочийГод = Истина // Значение Истина должно быть установлено всегда, когда передается регистратор
) Экспорт
Я тоже считаю, что это полезный отчет, т. к. упрощает и ускоряет работу для работников бухгалтерии и отдела кадров
Пустой отчет. Неучитывает введенные остатки отпусков, показывает уволенных, неясно под какой релиз сделан.
чет уволенных показывает
с пустой датой отчет показывает сотруднику 3 дня, при этом в шапке выводит «отчет на дату 30.05.12» Ставлю конкретно дату 30.05.12, сотруднику показывает уже 8 дней
Для новых релизов (2.5.5х.х) не работает, т.к. изменен типовой алгоритм расчета остатка отпусков сотрудников.
(33) Как исправить эту ошибку? Переименована процедура? Или изменен сам принцип расчета остатков?
Ошибка:
{ВнешнийОтчет.ОстаткиОтпусковСотрудниковОрганизации.МодульОбъекта(180)}: Метод объекта не обнаружен (ПодготовитьДанныеПоРегламентированнымОтпускам)
ВыборкаПоОстаткам = ПроцедурыУправленияПерсоналом.ПодготовитьДанныеПоРегламентированнымОтпускам(ТаблицаСотрудников,,Ложь,);
(34) vechiy, Да насколько я понял, принцип изменен, процедуры такой больше нет, добавлен новый модуль ОстаткиОтпусков, теперь все там.
Спасибо,надо попробовать
.Сотрудник.Организация не верно
Нужно .Сотрудник.ОбособленноеПодразделение
иначе выбирается не только головная организация, но и обособленные подразделения.
Можно такой вопрос задать: Может ли отчет, например, показать мне остаток отпуска при следующих условиях: Сотрудник работает с 22.02.2014 по сегодняшний день накопилось 26 дней отпуска, в августе брал неделю отпуска, как сделать, чтобы отнимал от 26 14 дней, уже использованных. Отчет отнимет от 26 14 дней и покажет результат?