<?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='\
(0) Так для 8.1 или 8.2. Если для оботх
(0) Так для 8.1 или только 8.2? Если для обоих, добавь второй файл
Добавил для 8.2
Под 8.2 при отключенном режиме совместимости не работает.
Не надо было её на построителе отчета делать.
обработка очень полезная, но для своих целей пришлось доработать ее и универсализировать.
внедрил возможность обработки РС, подчиненных регистраторам.
покурив немного, решил добавить обработку Регистров накопления, Бухгалтерии, Расчета.
С регистрами накопления и бухгалтерии работа отлажена, с регистрами расчета возможно баги, ибо активно эту тему не использовал.
прилагаю свой вариант на суд общественности:
(5) tiwolf, спасибо, скачал, но пока не пробовал, т.к. обычно для изменения регистров накопления и прочих приходится писать обработки с не прямолинейным алгоритмом
(5) tiwolf, скачала Вашу обработку. Идея хороша, но вот отбор по регистратору слишком жесткий(((
Пример: мне надо найти все записи регистра Плановые начисления сотрудников организаций в ЗУП, сделанные любыми возможными регистраторами, которые сделали неправильные записи по измерению ВидРасчетаИзмерение и заменить эти значения. Попыталась использовать обработку, найти их все сразу я могу, а заменить не получается.
спасибо ludai за ответ.
на самом деле ничего жесткого в отборе по регистратору нет.
а описанный вами момент я проанализировал и устранил некорректность, которая состояла в том, что в одном месте использовал неправильное имя переменной.
почему-то при использовании обработки в своей практике этот момент не обнаружился, видимо моё использование было более узким ))
в любом случае выражаю благодарность за то, что подтолкнули к этому необходимому исправлению.
собственно выкладываю исправленную версию на 8.1 и версию для 8.2, так как с недавних пор перешли на новую платформу, чего и вам желаем.
добавлю, что изменение подчиненных регистратору регистров предполагается производить ИСКЛЮЧИТЕЛЬНО в режиме отбора по регистратору с видом сравнения «РАВНО»… хотя при желании можно достучаться до поля ввода вида сравнения и поменять «РАВНО» на что — нибудь другое, но на это обработка не рассчитывалась и этот момент не настраивался… так что если у кого-то возникнет желание доработать и этот момент, то флаг вам в руки, я не против 🙂
Скачал сhttp://gmixdev.ru последнюю версию в УТ10.3 прекрасно работает.
(8) tiwolf, А почему отдельно не опубликовать? Тоже смотрел , не плохое продолжение данной разработки!
(10) отдельно публиковать не вижу необходимости. скорее это допиливание чужой разработки. хотя и очень объёмное
В самописной конфиге 8.2 сругалось на «ЦветаСтиля.ТекстВторостепеннойНадписи». Таковой отсутствует.
(Если это будет полезно для допиливания универсальности.)
(11) tiwolf, если нетрудно , подскажите, как можно отобрать записи в регистре расчета , в которых сотрудник не соответствует физ лицу (так перенеслось из 77 , что в записи сотрудник Иванов , а физ лицо Петров)и если это возможно вашей обработкой, то еще и исправить : взять физ лицо , указанное в сотруднике.
Спасибо! как раз то что искал. часто пользовался групповой обработкой справочников и документов, а обработки для регистров не было и давно искал.
Плюсанул. Вещь нужная. Почему-то не могу изменить Период в периодическом зависимом регистре сведений. Его вообще можно изменить этой обработкой? Если да, то как? Спасибо!
Отлично все гениальное просто!
Ставлю минус.
Идея использовать для фильтрации построитель не верна!
Построитель не выбирает для фильтрации ресурсы и реквизиты регистра, а только измерения.
А кто сказал что отфильтровывать записи нужно только по измерениям?
Энто точно, присоединюсь к сказанному! а так конечной плюс!
Ваша обработка может изменить Контактную информацию? Надо автоматизировать изменение адреса у большой группы сотрудников, неправильно введен населенный пункт, необходимо у каждого сотрудника изменить 3 адреса. Видела много подобных обработок, но ни одна не редактирует Контактную информацию.
спасибо за обработку!
Спасибо, обработка облегчила жизнь
(19) ГердаКай, не полностью понятно что вы собираетесь менять в адресе, но чисто гипотетически (телепатически) предположу, что не подойдёт. Скорее всего необходимо добавить функцию выполнения произвольного кода для обработки ПРЕДСТАВЛЕНИЯ адреса.
Поле хранения города вы заменить полностью сможете без проблем (один текст на другой), но вот заменить представление не получится, надо будет немного доработать.
Спасибо, скачал для 8.1
Хорошая обработка, у меня заработала — я про ту что на 8.2 🙂
так что автору респект и уважуха..
Пытаюсь изменить записи регистра сведений.
Отбор установлен по периоду.
«Показать результат отбора» — показывает правильно.
По «Выполнить» — ошибка:
{Форма.Форма.Форма(323)}: Поле объекта не обнаружено (Пометка_Период)
Если СтрокаТаблицы[«Пометка_» + Эл_отбора.ПутьКДанным] = Истина Тогда//Эл_отбора.ПутьКДанным=КолонкаРегистра Тогда
Значения в регистре не меняются.
Попробовал удаление с тем-же отбором — удаляет нормально.
Использую последнюю версию обработки.для 8.2
(26) Все кто нашел мою обработку, советую воспользоваться реализацией автораgmix
Когда-то у меня была срочная потребность в большом количестве изменений регистров сведений, на тот момент нашел чуть ли не единственную обработку от Gmix, но она умела изменять только один реквизит, что меня не устраивало. Я её немного модифицировал и выложил с согласия автора, т.к. аналогов тогда практически не встретил. Автор в итоге доработал свою обработку примерно с этим же функционалом, но в более «красивом» исполнении.
Работает только на обычных формах!
Действительно, значения в регистре не меняются…
Для УФ на 8.3 не работает?