<?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='\
Полезная вещь!
Очень хорошо, что она появилась — юзеры давно хотят, а некогда.
Вопрос: на картинке-образце поля группируются, а в реальности — нет. Это баг или фича?
(2) Группировка по периоду и документу.
(3) Не поняла. Группировка строк меня не интересует. Я не вижу группировки полей в шапке, которая в образце наличествует.
(4) Ясно. Если в обработку передать не пустой параметр «НужныеПоля», то колонки группироваться не будут.
(5) Про группировки не очень понятно.
Даже без группировок — классно!
У нас УПП 1.2.22.3. Работает.
Пока увидела один косяк:
Работница была в отпуске по уходу за ребенком до 3 лет.
Документом зарегистрировано, что она должна будет вернуться на работу в ноябре 2008 года на оклад 7000р. На самом деле она вышла на 2 года раньше (док. Изменение условий оплаты отпуска по уходу…)- это отразилось в Истории, на больший оклад, потом шли повышения оклада, отпуск, болезни — все в Истории правильно, и вдруг понижение оклада до 7000 в ноябре 2008г.
Удобно. Думаю, буху тоже понравтся.
ВАХ!
(5) Про группировки поняла, все получилось.
Убрала склонение ФИО, т.к. у нас в наименовании сотрудника пишется: Иванов Иван Иванович (осн.) или (вн.совм.).
(6) Это не баг. Именно так информация прошла по регистрам.
(9) Есть такой косяк со склонением. Вчера заметил. Исправил.
Поясняю про группировки колонок. На самом деле это не группировки, а логическое объединение колонок. Если задать параметр «НужныеПоля», то колонки будут выводиться в заданном порядке. В этом случае, ни о каком логическом объединении речи быть не может.
Большущий +!!!
(10) Согласна, информация так прошла по регистрам. Но следующие записи вытесняют(отменяют её). Согласна, что сложновато это обработать, но хотя бы задокументировать надо.
Кадровики и экономисты по труду счастливы. Спасибо большое.
Почему-то скачивается 15-килобайтная пустышка Имя: История, расширения нет. Что-то не так?
(14) Добавьте расширение .epf и подключайте как внешнюю печатную форму
Расчетчик попросила обязательно подключить. Большое спасибо. Плюс!
Версия 1.02
Испралена ошибка из (6) комментария:
«Работница была в отпуске по уходу за ребенком до 3 лет.
Документом зарегистрировано, что она должна будет вернуться на работу в ноябре 2008 года на оклад 7000р. На самом деле она вышла на 2 года раньше (док. Изменение условий оплаты отпуска по уходу…)- это отразилось в Истории, на больший оклад, потом шли повышения оклада, отпуск, болезни — все в Истории правильно, и вдруг понижение оклада до 7000 в ноябре 2008г.»
Добавлена кнопка «Обновить»
Версия 1.03
В некоторых случаях неверно отражалось состояние работника. Например, когда досрочный возврат на работу из коммандировки отражался документом «Возврат на работу».
Добрый день!
У меня не запускается в ЗУП 2.5 2.5.9.2.
Тишина.
УПП 1.2.17.3 не работает — там у спр. «Сотрудники организаций» вообще печ.формы не подключаются 🙂
(19) Не могу проверить на 2.5.9.2 за неимением оного :(. Предлагаю обновиться.
(20) В УПП сам не проверял, но у (6) все работет 🙂
+(21) Только что проверил в УПП 1.2.21.1 — работает
(20) В УПП 1.2.17.3 была зарегистрирована ошибка: у справочников не работала авторегистрация внешних печатных форм. Строчку со ссылкой на справочник Сотрудники нужно добавлять ручками и всё будет хорошо. В 1.2.21.3 авторегистрация работает.
На версиях ниже 1.2.15 работать не будет, там совсем по-другому организован учет сотрудников и справочника сотрудники нет совсем.
(23) В форме объект Спр.Сотрудники вообще не вижу ни одной кнопки «Печать» и т.д.
Форму для этого спр. зарегистрировал. При этом в форме регистрации видно, что спр.Сотрудники есть 3 встроенные формы — Труд.договор и т.д.
Как их получить, непонятно 🙂
ЗЫ УПП 1.2.17.3 — скоро буду обновляться на последнюю УПП.
(24) Упс, напечатал и увидел, что, оказывается, не для всех сотрудников печ.формы доступны 🙂
Например, для штатных доступны, а я «тренировался» на уже уволенных.
Строка «История сотрудника» в списке печ.форм при нажатии на «Печать» стала видно, но при ее нажатии все-таки ничего не происходит 🙁
(25+) Выдается ошибка
НаборЗаписейФИО = СсылкаНаОбъект.Физлицо.ПолучитьОбъект().мНаборЗаписейФИО;
Строка 548
Поле объекта не обнаружено (мНаборЗаписейФИО)
Положил этот незначительный блок в Попытка-Исключение, обработка заработала.
Ставлю +
{ВнешняяОбработка.ИсторияСотрудника(601,24)}: Переменная не определена (УправлениеДопПравамиПользователей)
ФормаИстории.Защита = <<?>>УправлениеДопПравамиПользователей.ЗащитаТаблиц();
УПП для Украины 1.2.11.3
Управление производственным предприятием, редакция 1.2 (1.2.21.1)
Подключал к справочнику сотрудники, все работает.
вешь хорошая за это +, но если мозги имеются то допиливайте напильничком))
На 2.5.18.2 не работает: 🙁
Не удалось сформировать внешнюю печатную форму!
Поле объекта не обнаружено (мНаборЗаписейФИО)
(All) Для исправления (26) и (30) в строке 546 нужно вставить код
в комментариях тот код, который нужно заменить на вышеприведенный код.
Наслаждайтесь 🙂
Проверено на ЗУП 2.15.19.3
Релиз 2.5.23.4. Не работает. А жаль… 🙁
Метод объекта не обнаружен (ПросклонятьФИО)
Впрочем, оригинальный аппендикс легко заменить на искусственный, и заработало. 😀 КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы.Найти(«Title»).Значение = «История: » + ФИОСотрудника;
//Если УниверсальныеМеханизмы.ПросклонятьФИО(КомпонентаСклоненияФИО, ФИОСотрудника, 2, ,РезультатСклонения, СообщениеОбОшибке) Тогда
// КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы.Найти(«Title»).Значение = «История » + РезультатСклонения;
//Иначе
// Сообщить(СообщениеОбОшибке);
//КонецЕсли;
А для одного физлица эта обработка работает?
То есть в у меня в базе 4 организации. И в разные времена сотрудник работал по очереди во всех этих 4х организациях.
Обработка покажет всю историю этого физлица?
Или только для каждого сотрудника одной организации?
Ой, ну неконец-то! Так было удобно, когда появилась эта обработка, но потом, на новых релизах, стала давать сбои. Надеюсь, эта подстроена под новые конфигурации и свё будет ОК. Спасибо!
Да да, дошли руки))
Исправил ошибки. Сконвертил для 8.2. Тестировал на ЗУП ПРОФ 2.5.46.1.
К сожалению у меня практически нет времени на публикации(((
Поэтому крайне редко обновляю их.
Протестируйте на УПП, пожалуйста, у кого есть возможность.
Спасибо! На КА работает.
Полезная обработка, особенно на начальном этапе перехода с ЗиК на ЗУП.
Думаю полезная штука. Страданий на эту тему от моих кадровиков/расчетчиков не слышала, но, предполагаю, что им будет приятно это увидеть.
Но хочу сделать замечание-пожелание. Заранее извиняюсь, если кто-то уже упоминал об этом, т.к. всю ветку благодарственностей не читала, каюсь)).
Мы перешли на 8-ку буквально в сентябре прошлого года, а история тянется аж с 2002. Поэтому, как Вы понимаете, вся история зарегистрирована документами «Перенос данных», что делает колонку «Документ» в отчете ну оочень ненаглядной, мало того, Плановые начисления и перемещения регистрируются при переносе разными документами «Перенос данных», тем самым в отчете получается по 2-3 строки на одно движение.
Я поменяла все поля «Регистратор» в запросах на поле «Первичный документ» — стало намного красивее и понятнее.
И еще: если сотруднику, например при приеме, назначено 2 начисления (оклад + перс.надбавка в одной организации, а другая с РК) — ловит только одно начисление. Пока не исправила
Спасибо, замечательный отчет! Мне нужно было отследить историю изменения окладов.В ЗУП штатными средствами трудно увидеть такую информацию
Спасибо! Очень нужная обработка.
Действительно это первое, чего не хватало при освоении ЗУПа. Спасибо.
Все понравилось. Единственное когда входим в «Сгрупировать» выбрасывает из программы….
Доброго дня. Поправьте, пожалуйста, ОбщегоНазначения… на ОбщегоНазначенияЗК 🙂
У меня ЗИК БУ 8.2. выдаёт ошибку Не удалось сформировать внешнюю печатную форму!
Метод объекта не обнаружен (ПолучитьЗначениеПеременной)
У кого выдаёт ошибку
«Не удалось сформировать внешнюю печатную форму!
Метод объекта не обнаружен (ПолучитьЗначениеПеременной)»
Нужно в Модуле объекта заменить все строки содержащие фразу «ОбщегоНазначения»
на «ОбщегоНазначенияЗК», сохранить и переподключить печатную форму.
(проверил на 8.2.17.169 / ЗУП 2.5.68.1)