<?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.5» — не сильно замечено.
http://infostart.ru/projects/82/ пост (15) — (16)
А пожелания есть:
— сделать возможность формирования по листков сотрудников по алфавиту (в том числе за произвольный период).
— остальные пожелания см.
Исправлена ошибка которая выражалась если человек был дважды совместителем, то строки начислений задваивало╤
Исправлена ошибка должность и подразделение бралось из справочника сотрудники сейчас берется из регистра сведений работники организаций
Удобно, так как листок занимает гораздо меньше места на странице, чем в типовом варианте.
Так, с релизом ЗУП 2.5.13.5 отчет не работает, ошибка в НДФЛ
У меня пока данный релиз не установлен, а как в чём выражена ошибка?
обработка очень нужна но не как не скачать(
Почему не скачать. Проверил всё качается. Укажите мыло пришлю
Может вы плюс забыли добавить 🙂
Новый вариант работает. 🙂 Спасибо.
Ну и славненько
Отчет нормальный (лучше чем типовой версии 2.5.13.5), только есть глюк — не для всех сотрудников выводятся Таб.номер и должность!
Код запроса очень большой, отлаживать тяжело…
Автор, может уж глянешь?
Я бы с удовольствием глянул, но тут как в случае с сообщением RonKa пока не посмотришь базу с проблемой не разберёшься. Она базу не присылала, но до тех пор пока я у себя не обновился я не мог понять что не работает. Если бы у меня в базе было «не для всех сотрудников выводятся Таб.номер и должность!» я бы разобрался наверное, но у меня такой проблемы нет. Если вы выложите куда-нибудь базу и пришлёте адрес выложенной базы мне на мыло lamer19@ya.ru и пример сотрудника которого смотреть, то я обещаю вам посмотреть.
Запустила обработка под УПП 1.2.22.3
Работает, НО если период задать 2 месяца в расчетном листке все строки начислений, удержаний, выплат удваиваются, за интервал 3 месяца — утраиваются и т.д.
По одному месяцу всё ок
(13) В УПП должности и табельные номера теряются, если работник уволился, месяц не работал и снова устраивается с середины месяца.
А если работник устроился на работу впервые и не с 1 числа месяца, то по нему расчетный лист в первый месяц работы не формируется.
(Проверяла на УПП 1.2.22.3, может в ЗУП все работает :))
Тестирование проводил на типовой демо базе ЗУП 2.5.13.5
(14) Да я уже в курсе как доберусь до машины с 1С с отладчиком исправлю
Огромное спа, буду с нетерпением ждать обновления…
Запрос очень мощный написан, отлаживать его тяжело, уже возникало желание перед выводом делать запрос для каждого конкретного человека.
(12,18) Табельные пока не смотрел, (14) Исправил обновил
(18) Поправил табельные. Поясню немножко по проблеме с табельными и структуре запроса. Табельный берется из того же запроса который выбирает оклад. В коде оно выглядит так
МасивОкладов=Новый Массив;
МасивОкладов.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоЧасам);
МасивОкладов.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням);
//вот эти две строки надо было добавить
МасивОкладов.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ТарифДневной);
МасивОкладов.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ТарифЧасовой);
ЗапросРЛ.УстановитьПараметр(«ВидРасчета»,МасивОкладов);
Если у вас какой либо другой вид расчета используется в качестве основного, то его просто надо добавить в массив и тогда появяться табельные и оклады.
Так же исправлена ситуация со следующим удвоением записей
Если у человека был сначала один вид расчета в качестве основного начисления, а потом его не прекращая установили другой вид расчета в качестве основного начисления, например
стоял оклад по дням, поставили оклад по часам, то записи удваивались. Это исправлено. В идеале конечно же запрос надо дорабатывать, то есть делать ешё более мощным. На сегодняшний день есть ошибка с удвоением записей в случае когда есть ошибка в кадровых документах, а именно не уволив одного сотрудника, приняли его же на работу. Когда руки доберутся исправлю.
В новой версии некорректно выводится период в разделе 4 «Выплачено» расчетного листка. И будет вообще здорово, если появится расшифровка строк по документу-основанию. А так, вроде все работает, спасибо.
(21) А что вы вкладываете в «расшифровка строк по документу-основанию»?
подобно системе «Зарплата и Кадры 7.7», можно открыть документ, челкнув по тому или иному начислению в расчетном листке, который является основанием для этого начисления
В обоих вариантах некорректно отрабатывает отбор по подразделению в том случае, если в течение месяца по сотруднику проходило кадровое перемещение. А такое случается сплошь и рядом.
Если нужно, опишу ошибку подробнее.
(24) Опишите
Вопрос от чайника:
Работаю в ЗУП 2.5. Не устраивает форма расчетного листка. А именно то, что там в разделе «Выплачено» проставляются данные документа «ЗарплатаКВыплате», да и то без даты. Хотелось бы, чтобы пропечатывались данные пп или рко или на худой конец дата документа. Ведь РЛ делается не для бухгалтера, а для сотра, которому пофиг док «ЗарплатаКВыплате», ему надо посмотреть, когда это он такую сумму получил. Можно ли это реализовать? Просмотрела много обработок. Нигде нет такого расчетного листка. Помогите, плз.
(26) Помог
(27) Еще раз огромное спасибо 🙂
А вычеты не проставляются в отчете?
{ВнешнийОтчет.РасчетныеЛисткиОрганизаций(12)}: Поле объекта не обнаружено (ОсновнаяДатаНачалаОтчетов)
Запрос.УстановитьПараметр(«Настройка» , ПланыВидовХарактеристик.НастройкиПользователей[Настройка]);
спасибо огромное автору
Спасибо!
Спасибо!
1.Сначала вышла ошибка:
{ВнешнийОтчет.РасчетныеЛисткиОрганизаций(12)}: Поле объекта не обнаружено (ОсновнаяДатаНачалаОтчетов)
Запрос.УстановитьПараметр(«Настройка» , ПланыВидовХарактеристик.НастройкиПользователей[Настройка])
Это закомментировала, выходит следующая:
{ВнешнийОтчет.РасчетныеЛисткиОрганизаций.МодульОбъекта(1104)}: Метод объекта не обнаружен (ОписаниеПериода)
ВременныйТабличныйДокумент.Область(НомерСтроки, 2, НомерСтроки, 2).Текст = УправлениеОтчетами.ОписаниеПериода(ВыборкаСтрокРасчетногоЛистка.ПериодДействияНачало, ДатаОкончанияПериода);
2. Отбор по подразделению не работает
Если у сотрудника было перемещение или сотрудник увольнялся и вновь принят в эту организацию, строки начислений, удержаний и выплат удваиваются
у меня Зарплата и Управление Персоналом, редакция 2.5 (2.5.47.1)
пишет что данный отчет не может быть прочитан текущей версией программы
(36) Helga11111, Сконвертируйте открыв в конфигураторе. В вашем случае дело не в релизе конфигурации, а в релизе платформы
Данное сообщение для тех кто до сих пор качает данную обработку:
Дело в том что во-первых данная обработка писалась когда только-только вышла редакция 2.5. Потом не смотря на обновление редакции 2.5 обработка очень быстро перестала поддерживаться в актуальном состоянии (это же каждый релиз надо проверять, а нет ни времени ни мотивация). Предлагаю Вам бонус. Если Вы скачали данную обработку, то вероятнее всего Вам нужно большее количество расчетных листков на один лист. Во всяком случае такую задачу решал я делая обработку. Но как водится решение которое я использую сейчас оказалось гораздо проще. Глаза бояться, а руки пакостят 🙂
При разборе полетов отчета построенного на СКД, именуемого в редакции ЗУП 2.5 как «расчетные листки организации» выявлено что в модуле отчета есть процедура «РазбитьТабличныйДокументПоСтраницам».
Именно эта процедура отвечает за количество листков на одном листе.
В этой процедуре есть конструкция языка
ТабличныйДокументДляПроверки.АвтоМасштаб = Истина;
Её необходимо закомментировать и добавив всего две строки мы получаем необходимый эффект.
В моем случае требуемым масштабом печати было 67 процентов.
//ТабличныйДокументДляПроверки.АвтоМасштаб = Истина;
ТабличныйДокументДляПроверки.АвтоМасштаб = Ложь;
ТабличныйДокументДляПроверки.МасштабПечати = 67;