<?php // Полная загрузка сервисных книжек, создан 2025-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='\
Вдруг уследил ! Работаю правда на 8.1.
(1) Намек понял и выложил текст запроса. Если работать не будет на твоей платформе, то убери все что в фигурных скобках компановки данных {…}. Или вставляй по блокам в консоль отчетов/запросов, пока все не собирешь))) Ну это если надо, конечно.
А чтобы в 8.2.10 заработало что надо?
В прикрепленных файлах есть текст запроса, настройки и т.д.
У меня виснет запрос на вот тут
РС_ГрафикиРаботПоВидамВремени.Дата <= ВТ_ДатыИСотрудники_СостоянияИКадры.ДатаКалендаря
(7) во всем запросе ТЕТА соединение самая медленная часть.
Причин может быть в принципе несколько:
— выбран слишком большой период, за который нужно получить среднесписочную численность;
— используется файловая БД;
— большой штат или много отклонений или кадровых приказов, т.е. большой объем данных.
На сегодняшний день ошибок формирования отчета не выявленно. Если отчет показывает какие-то сомнительные цифры, то причину надо искать в неверно заполненом регламентированном календаре или графиках работы или первичке.
Здравствуйте! Спасибо за ваш отчет. Но возник один вопрос: Почему среднесписочная за год суммируется? Она же должна делиться на 12 месяцев?
Поделить можно и руками, таких обработок вообще очень мало, так что ставлю +
Спасибо,
плюсик поставил.
Но уж больно замудреный выход получился.
Отдал экономисту, она юзает потихоньку и ко мне больше не пристает.
Спасибо! Хороший отчет!
Спасибо!
Спасибо за отчет, а почему округление не включили?)
Спасибо) Плюсую!
Удивительное дело! Отчет я выложил около года назад. А «популярность» к нему пришла только теперь!
Ничего удивительного штатный отчет по среднесписочной за 9 месяцев на 4000 чел формируется в течении 1 часа.. Сидю жду… Курю газету….
Счас посмотрим как ваш отчет сработает..
Будет ли этот отчет работать на УПП?
есть ли какие то ограничения по версиям платформы и если работает на УПП, то версии конфигурации?
Отчёт, безусловно, интересный. Но возник такой вопрос: если он писался год назад и под платформу 2.5.12, то под 2.5.14 работает нормально? И ещё: код открыт? Если, скажем, подкорректировать что-то захочется (например, на 12 поделить, как желает (9)), удастся сделать?
Еще раз подчеркну: это самый методически правильный отчет для получения среднесписочной численности, который мне известен. Он разрабатывался около года лично мной, несколько раз делался рефакторинг. Он не может быть меньше в силу архитектуры типового ЗУПа и поставленной задачи.
(14) Это можно сделать и в режиме предприятия. Моя цель — донести методику получения отчета.
(17) Типовой отчет не рекомендую, т.к. в нем не решена главная проблема: получение последнего рабочего дня перед праздничным/ыми днями. В основе методики ТЕТА соединение, поэтому на больших объемах данных он отрабатывает не быстро.
(18) В УПП отчет не тестировался. Тем не менее мой прогноз благоприятный, должен открыться (нет УПП для тестов).
(19) Сейчас тестирую отчет в ЗУП 2.5.37.1 / 8.2.14.533. Все отлично работает. Код открыт. Но сразу предупрежу: запрос там не тривиальный.
Отчет интересный, кадровики будут рады. Спасибо.
Отчёт очень полезен. Прекрасный аналитический отчёт, всё по делу, на 5.2.14 всё работает
отчет нужный в плане разбивки на группы
спаибо за отчет, стандартный упп’шный очень уныл.
файловый вариант 700 человек — >6 мин(стандартный-1) серверный ~2 мин
Отличная обработка! Отлично отработала на ЗиК БУ, единственное что не сразу понял почему в январе время неверно определяло (оказалось что просто производственный календарь на 2011 год не был заполнен, т.к. учет начали вести в 8-ке только в 2012 и нерабочий день распространился по 9-е января).
MagIvan, на основании каких нормативных актов разработан отчет?
Потестила, вроде все правильно считает. Только вопрос: какая цифра выводится в колонку «Средняя численность»? Почему-то она отличается от колонки «Дней учтено» (по людям с нестандартным графиком работы, например пятидневка выходные воскресенье-понедельник)? И не очень удобно, когда формируешь отчет за 3 месяца, расшифровка в любой колонке выходит суммарная по 3-м месяцам…
Добрый день, отчет скачал. А на 1С ЗУП:Предприятие 8.2 (8.2.14.540) почесмуто не формирует данные, шапка только появляется и все. Подскажите в чем может бвть загвоздка?
(29) товарищ «713-87», Вы настройку структуры отчета произвели?
1)Какие данные(расчетные показатели из возможного списка вам нужны)? Например, мне Списочную численность и ССЧ.
2)С какими группировками их вывести? Например, строки сгруппировать по организациям(Владелец подразделения), подразделениям.
Столбцы сгруппировать по месяцам, чтоб видеть динамику в горизонтальном развороте).
3)отобрать данные по периоду(указать дату «С» и дату «По»), по организации, по основнымвнутренним сотрудникам, исключить отсутствующих по причине Увольнение, декрета и т.п.
Сам скачал час назад, покрутил настройки, добился чего от меня срочно хотели кадровики. Но придётся развивать отчет, т.к. в нем нет количества сотрудников на начало и конец месяца и пр., по сути совместить два отчета в один мегаотчет!
Извините может вопрос глупый.
Не понимаю, что это за показатели «Дней учтено» и «Число дней»? И почему эти показатели для месяцев больше количества дней в месяце? Допустим для января у меня показывает 92.
Видимо этот отчет не предназначен для организаций имеющих сотрудников со сменным графиком работы
Добавил свойство в должность организации — в настройке отчёта его нет? где я накосячил?
у меня на платформе 8.2.13.205 релиз 2.5.54.1 выдает ошибки
Не найден параметр ПарамНачПериода
Не найден параметр ПарамКонПериода
Не найден параметр ПарамОрганизация
Не найден параметр СписокВидовЗанятости
или я что то не так делаю? настройки вроде все заполнены.
Можно ли использовать данный отчет для организаций имеющих сотрудников со сменным графиком работы????
Не могу настроить:
— Как поставить возрастной интервал (такой вариант представлен на скриншоте)?
Интересно, а кто-нибудь тестировал его на программе зарплата для бюджетного учреждения
Еще раз дублирую вопрос. Автор аууу!!!! Можно ли использовать данный отчет для организаций имеющих сотрудников со сменным графиком работы????
(37) finch, бюджетная ведь аналогичная совсем в плане таких отчетов
Это, мужик, спасибо! Как и просил все ссылки на тебя при модификации отчета!
Разобрался с запросом в отчете. Самая запутанная часть была где срез последних делается от виртуальной таблицы на каждую дату. Не понятно только зачем там срез первых делается?
Подскажите, а если группировку по месяцам убрать ( мне нужно за год статистику получить) суммы не поползут?
(37) finch, проверил — опять сложение ставок идет вместо «целых единиц» ?
типовой отчет выдает 126 вместо реальных 84, данный отчет выдал 303…
(30) Были попытки создать «мега отчет»: скрестить среднесписочную с соцкарточкой и пр., добавить разрезы по стажу и т.д. Могу сказать одно: «мега отчет», если в штате несколько тысяч человек, вешает сервант, с другой стороны крайне тяжело проверять его правильность.
(32) Эта версия отчета не предназначена для организаций, имеющих сотрудников со сменным графиком работы.
Есть версия, которая учитывает и такой случай. Но ее пока выкладывать не планирую.
(42) Группировку по месяцам убирать не нужно.
(43) Какая конфигурация, платформа, списочная численность, используете ли вы сменный график работы?
Есть версия, которая учитывает и такой случай. Но ее пока выкладывать не планирую.
Думаю это нужно было указать в описании к публикации, чтобы не вводить людей в заблуждение.
Отчет и до сих пор не потерял актуальности. Очень хорош как база для всяческих группировок по требованиям «эффективных HR-директоров». Спасибо.
Скачал отчет, моё мнение.
Извиняюсь конечно но лично мне отчет вообще не понравился.
1) интерфейс ужасно реализован, панели «летают», после запуска приходится панель настроек курсором мышки расширять что бы хоть что то увидеть
2) оптимизация на нуле, даже за месяц отчет виснет намертво и надолго, видимо рассчитан на фирму до 2-5 сотрудников.
Сделал вывод: отчет был сделан только ради старт мани, не более, таких программистов надо увольнять.
Кроме как формирования по часу, нечего не получил. Сам возьму типовой и переделаю.
(47) Sashka_2013, давайте разбираться по порядку.
Во-первых, в заголовке статьи указаны версии конфигураций на которых отчет тестировался. Работал в базе, где свыше 1 тыс. чел. Формировался по месячно, по квартально и за год. Вы в этой версии запускали отчет? В той конфигурации?
Во-вторых, я уже не однократно говорил и писал, что нельзя огульно скачивать все из интернета. Ценость данной работы — в тексте и логике запроса. Это ядро. Остальное — мишура. Вы кроме мишуры как программист обязаны видеть суть. Или вы полагали скачать из интернета отчет с запросом на 800 строк, заточенный под ваши кокретные нужды?
В-третьих, что конкретно вы любезный, хотите сказать по поводу оптимизации. Вы трасировали текст запроса? Что вас не устроило?
Или вы так, поболтать зашли…
Спасибо надо порадовать кадровичку, показать новые возможности!
Думаю нужная вещь, спасибо!
Не формируется отчёт. Ни одной строчки не выводит. И форма всё время разъезжается.
(51) NatalyaVP, читайте внимательно описание: тестировалось в ЗУП 2.5.25/8.2.12.92, 2.5.37.1/8.2.14.533, на платформах версии ниже 8.2.10 не пойдет. Если Вы заинтересованны в этом отчете, то напишите письмо на PanteleevI@inbox.ru c указанием номера версии своей платформы и релиза своей конфигурации. В ответ я вышлю оценочную стоимость работ по доработке отчета под Вас.
Если нужно посчитать среднесписочную численность с нарастающим итогом по подразделению, в котором в течении периода всех уволили. Например, считаем с января по сентябрь, а с июня в нем уже никто не числится. Можно ли как-то настроить ваш отчет чтобы месяца, когда никто не работал тоже учитывались? Сейчас выводит только по май.
Отчёт неверно считает данные по среднесписочной численности.
(54) NatalyaVP, пожалуйста, привидите пример.
(55) Неправильно считает у тех людей, у которых в один период (месяц) есть рабочие дни, отпуск и больничный, отчёт все эти часы суммирует и делит на часы по графику, значение среднесписочной получается выше, чем должно быть.
(53) Liily, настроить отчет можно!
(56) NatalyaVP, спасибо за замечание. Описанный Вами случай довольно редкий, даже в нашей практике (1500 чел). Мы обязательно найдем такие же отклонения по сотруднику в одном месяце и внимательно их проверим.
Отчет работает на УПП 1.3.86.3 платформа 8.2.19.83 . Данные по графикам работы «Сокращенная неделя» считает правильно. А вот уволенные в середине периода показывает 1 как будто сотрудник отработал весь месяц. Некоторых сотрудников троит или двоит… В любом случае Спасибо за Ваш труд. База есть, остальное можно и доработать.
(44)
Может подскажите как учитывать сменные графики работы для среднесписочной?
А возможно сформировать отчет по отношению к счетам бухгалтерского учета. Типа:
счет 20 56 чел
счет 44 12 чел
счет 26 22 чел?
Возможно
А есть такой отчет под 8.3
(63) этот отчёт прекрасно работает с платформой 8.3, если запускать его в ЗУП 2.5. Если вы имели ввиду конфигурацию ЗУП 3.0 или 3.1 , то он для них не предназначен. Возможно, создам версию для ЗУП 3.х, но точных дат назвать не могу.
Очень нужен для ЗУП 8.3
Скажите, может я не совсем разобрался в вопросе, возможно ли посчитать среднесписочную численность по структурным подразделениям? В скриншотах публикации нашел только расчет связаный с физ лицом. Задачу решаю под бухгалтерскую конфигурацию с модулем расчета заработной платы.
ОТкроется ли он в ЗУП 3.1?
(67) выше уже ответил см. (64)