<?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='\
Работает
хм… оригинально! почти целый расчетный модуль из зупы в бухгалтерию закинуть! прямо как в сельхозке 🙂
возьму себе на заметку, думаю, пригодится
у меня хелпером такое организовано, но тоже скачал, посмотреть как ты реализовал…
Скачала. А как установить? Расскажите подробненько, профессионалы.
Сервис — доп. внешние отчеты и обработки — доп. внешние обработки — добавляем файл обработки (запускать ее из этого же места). Остальное в справке к обработке
Спасибо! Работает! Прикольно так!
Супер!!!
Очень удобно! СПАСИБО ОГРОМНОЕ!!!
Редко что-то толковое можно найти!!!
Народ часто такое спрашивает, а я отвечал «нэту». А щас буду предлагать это решение.
Планирую добавить расчет отпускных, больничных, коммандировочных по стандартным алгоритмам. Также с автоматическим созданием строк в документе начисления зарплаты, но это попозже)
О! да это же целый ЗиК в бухгалтерии! А если еще отпускные и больничные добавятся — супер! Ждем. Еще бы вот формирование справок о зарплате…
Спасибо.
Скачал.Проверил. Восхищен!..)) Работает отлично. Даже если бы был голый табель, и то весьма полезная штука.
Со всеми подробностями еще не разбирался, но зарплату начислил без лишних движений, заполняя табель.
Вещь сделана именно для пользователя, не надо искать при работе что и где. Все указано прямо перед носом.
А справка вообще выше всяких похвал! Даже такому темному буху, как я и то все понятно!
Разработка заслуживает всяческого одобрения, а уж + сам Бог велел!
Весьма рекомендую!
Да… Для информации интересующимся: Опробовал на БП 2.0 Базовая (2.0.28.3)
Спасибо! Удобная вещь!!!!
Доброго времени суток. Скажите а когда появится расчет больничных и отпусков? Стоит ли немного подождать или нужно самой велосипед придумывать? А так очень удачная идея. Спасибо.
Гениально!!!!!!!!!!! Спасибо огромное!!!
(15) Trin, расчет больничных уже сделал, тестирую. Вообще я не зарплатник, поэтому если буду неправ поправьте меня.. Отпускные и коммандировочные считаются за период год, считая от даты отпуска/коммандировки. Расчет общего заработка вытянуть из базы не сложно, а вот количество отработанных дней, не учитывая дни отпуска/больничных невозможно. В бухии не хранятся больничные, отпускные и т.д. Есть идея реализовать так: сумму вытягиваем, а количество отработанных дней указывает пользователь вручную, еще больше автоматизировать это не могу придумать как. Если есть идеи, подскажите
(17) Для расчета отпускных не нужно знать «Количество отработанных дней», может все-таки получится?
Средний дневной заработок для расчета отпускных определяется по формуле:
-В случае если расчетный период отработан полностью: Сумма выплат за расчетный период /( 29,4*12)
-В случае если расчетный период отработан не полностью: Сумма выплат за расчетный период /Кол-во календарных дней в периоде.
Количество календарных дней в периоде рассчитывается как 29,4 за каждый полностью отработанный месяц и кол-во отработанных календарных дней в месяце*29,4/кол-во календарных дней в месяце за каждый не полностью отработанный месяц
Trek, спасибо! Новая версия с отпусками и отгулами будет?
(18) dee35, как раз невозможно в бухии определить был ли расчетный период отработан полностью, там не хранится количество отработанных дней, коммандировочных и больничных, была идея выцеплять из начисленных сумм с видами начисления по коммандировкам и отпускам, но все равно никак невозможно определить сколько дней было отработано, если месяц отработан не полностью
(20) не пойму зачем отработанные дни? мне кажется главное нужно знать дату приема на работу, например: Сотрудник принят на работу 20.01.2011, в январе заработал 10т, в феврале-марте не работал(не важно по каким причинам, допустим болел, получил б/л но его не учитываем), в апреле — октябре получил по 20т. С 10.11.2011 пошел в отпуск.
Среднедневной будет = (10т.+20т.*7)/(12/31*29,4 + 9*29,4)
например в апреле был отпуск 14 дней, а в мае больничный 5 дней, как их учесть в формуле?
СУПЕР! Очень изящно!
А если попробовать так.
При закрытии принудительно сохраняем данные в файл (как по кнопке «СохранитьВФайл», но с «предопределенным» именем файла, например НазваниеОрганизации_Подразделение_Период.txt).
Тогда можно накопить данные об отработанных, больничных, отпускных и командировочных для последующего более точного рассчета.
Как другой вариант, можно эти недостающие данные заполнять в ТабЧасть (добавив доп колонки).
Сейчас пока реализована колонка Средняя зарплата, данные оттуда идут в расчет коммандировочных и отпускных. Твой вариант хорош) я тоже про это думал, но дело в том, что данные берутся за весь последний год, соответственно пользователю придется перед началом работы создавать табеля за весь последний год помесячно, и сохранять в файлы. Пока лучше идеи нету)
Установил.Понравилось. Спасибо большое.
Неплохо было бы доработать сохранение предыдущих табелей (чтобы иметь не только табели за предыдущие периоды, но вообще все расчеты: если понадобится уточнить табель, не потребуется заполнять его с нуля).
С расчетом среднего заработка в «Бухгалтерии» заморачиваться, наверное, не стоит — для небольших предприятий нетрудно сделать небольшую табличку в Excel, а для кого этого мало — есть «Зарплата и Кадры». Все же это самостоятельная большая задача, уже решенная в отдельной программе.
+1
Класс!!! то что надо!!!! давно искала такую программку!!! Спасибо вам огромно!!!!
Замечание/Ошибка: Последний номер табеля не сохраняется.
Рекомендую сделать номер иабеля = номеру месяца. А если табель составляется по подразделениям, то сделать составной номер, например: «номер месяца/номер подразделения»
А можно добавить колонку «Ставка» как в обработке-первоисточнике?
Спасибо, бухгалтера довольны)
Кто-нибудь для УТ пробовал табель учета рабочего времени делать?
Спасибо! Очень пригодилось.
А печатная форма есть?
Хорошо сделано.
подскажите почему выскакивает такая ошибка: Метод объекта не обнаружен (ЗаработокДляВыплатыПособийСоцСтрахованияС2011года) как ее можно исправить? спасибо большое!
Вохможно релиз старый, тестировался на 25 версии. У вас какой?
(37) да вы правы была конфигурация 2.0.14.5 обновился до 2.0.22.1 проблема исчезла, прошу прощения не догадался сразу сделать обновление, есть еще вопрос можно ли его как то привязать через меню дополнительные отчеты и обработки, я не знаю как и просто открываю файл через меню открыть файл. спасибо
Очень хорошо выполненная обработка. Удобная, наглядная. Бухгалтерия довольна
Все работает, пользуемся и отказались от xls-формы. Спасибо.
Спасибо за столь полезную обработку!!! Все замечательно, кроме одного «но»…
Коды неявок такие как: «Р» (декрет), «ОЖ» (отпуск по уходу за ребенком), «ОЗ»(за свой счет),»ПР» (прогул) не считаются и не отражаются в графах 10,11 (12,13). Понятно, что они встречаются редко, но бывает)))..
Возможно ли добавить эти коды?
Спасибо!!!
Скачал.Посмотрел, отличная задумка.
Со всеми подробностями еще не разбирался, но зарплату начислил без проблем, заполняя табель.
Больше обработок такого рода, легче жизнь, и на судьба. большое спасибо ++++++++++++++++++++
Классная весч — такие вещи надо продавать незадорого: всеравно будут качать.
Идея отличная!
Что такое Средняя зарплата и откуда ее брать?
для БП 3 ???