<?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='\
Здравствуйте. Что именно выполняет Ваша обработка (алгоритм)? Перепроводит документы? Ведь, как Вы написали, проблема решается отменойпроведением (хотя можно просто провести, а не отменить проведение — провести) крайнего кадрового документа (в некоторых случаях + отпуск по уходу за ребенком).
Есть проблема с правильным заполнением сотрудников, которые были в отпусках по уходу за ребенком, которая не всегда решается просто перепроведением. Точно не помню, но что-то связано с параметрами типа «ДЕТИ» или подобное, и уже тут требовалось корректировать записи в регистрах. Это как-то исправляется обработкой?
(1) код не смотрел, но кнопка на форме «делает всем хорошо».
После перевода с 3.1.2.ххх на 3.1.4.169 и запуска обработки на тестовой базе кадровики остались довольны. Дети, ДЛДЕТИ и «летучие голландцы» отображаются как надо.
3 стармани?! Побойтесь бога!
Проблему с правильным заполнением сотрудников, которые находились в отпуске по уходу за ребенком на дату перехода на 3.1, не решает. Они у нас по-прежнему «работают», а не находятся по уходу за ребенком. Зря потраченные стартмани…
(4)
нужно делать корректировку регистров. Это если штаное расписание используется и ведется история.
документ «Перенос данных» регистр сведений «Параметры стажа ПФР», дату начала ставить начало года 2017
(0) новую версию нужно выкладывать поверх старой. В этом случае скачавшие старую версию при обновлении могут получить обновлённую, не потратив SM
А так получается, каждое обновление за отдельные мани. Совсем уже нагло.
(6) честно говоря, не знал. В следующий раз так и сделаю. Приношу свои извинения….
И по вновь принятым в течение года тоже проблема сохраняется. В регистре Параметры периодов стажа все хорошо, а в Периодах стажа записей как не было, так и нет.
(8) а какая проблема сохраняется?
В СЗВ-СТАЖ записи правильные, обработка свою роль сыграла…
(9)Нет. Не правильные. В СЗВ-стаж данные заполняются из регистра Периоды стажа, а не из Параметров. Сотрудники в 2017 году уволились, через несколько дней (а некоторые даже в тот же день!) принялись заново. Так вот, в Параметрах стажа записи есть, а в Периодах есть только до первого увольнения.
Добрый день, подскажите эта обработка работает, если не ведется документ «Штатное расписание»
Да, работает….
какая более новая обработка? скачала версию 1.1, попробовала, исправилось 199 документов. НО, многое не исправилось. Например: людей который увольняли и принимали заново, они не вошли в отчет, но в регистре Параметры стажа строка появилась, а в регистре Параметры стажа нет… А отчет кажется из другого регистра берет. и еще отпуска по уходу за ребенком не проставляет ДЕТИ, это как исправить, заходить в регистр и руками править чтобы отчет формировался?
скажите какая более новая обработка?
(14) более новая — 1.1
(13) понимаем следующее:
обработка возникла в следствии решения частных проблем конкретного клиента. Нашей фантазии все равно не хватит охватить все возможные косяки специалистов фирмы 1С.
Будет ли работать данная обработка, если обновлена программа до Зарплата и управление персоналом, редакция 3.1 (3.1.5.126)?
на 171 релизе отлично сработало, СПАСИБО! все что не сработало — это уже косяки нашего учета)))) взяли на копии обновились грубо с 169, не вдаваясь в тонкости, и все хорошо!
(8) Попробуйте в модуле ЗарплатаКадры вставить следующий код (процедура ОбновитьРегистрРассчитанныхПериодовСостояний, новый код выделен жирным и курсивом):
Показать
не должны удаляться периоды, если сотрудник был уволен и принят заново
(19) Спасибо, но у клиента конфигурация на поддержке. Пришлось написать «топорную» обработку, которая просто шла по записям первого регистра и создавала записи во втором. И, кстати, у нас не удалялись старые записи, а наоборот, не создавались новые. То есть, в регистре «ПериодыСтажаПФР» были только записи самого раннего места работы.
Добрый день! А для зкгу 8.3.1.8.216 будет работать?
1С всё усложняет код своих конфигураций, а где сложно — там и ошибок полно.
В конечном счёте страдает потребитель.
Монополизм 1С до добра не довёл.
Нету стартмани, а вышла такая же проблема после переноса из ERP, может кто поделится или автор даже, я готов оплатить в пределах разумного. Сам бы написал, но времени катастрофически не хватает.