<?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='\
А где комменты или замечания??
Товарищи, ну че вы молча то скачиваете то??
давайте хоть критику чтоль 🙂
Хочешь критики? Пожалуйста…
Чем тебе не устроили обработки с диска ИТС (objdel.ert и uchoice.ert)? ИМХО функционал тот-же.
так и знал, что подобный вопрос прозвучит 🙂
uchoice.ert особо не юзал…. разве им можно переносить элементы из папки в папку???
ну а в принципе просто хотелось самому написать.
упс….
перезалил файлик, а счетчик сбросился…
(5) НЕ перезаписал, а сначала старый удалил, а новый положил.
А там честно написано, что сбрасывается… Надо было жать «Обновить»
ок. буду знать. спб
Еще один камень в выбор профессионалов
(3) — uchoice.ert с диска ИТС!
Больше обработок похожых и разных!
(2) Но есть и критика, тезка:
Как здорово сработает НайтиСсылки(СЗ, ССЫЛ);
для справочника с 300 000 и более элементов?
Может лучше использовать F8QDR и F6QMR?
И еще — желательно бы архивить обработки,
не у всех ведь анлим…
(8) на счет архивить — учту на будущее.
300 000
хмм…
на таких объемах не тестил, но намек понял:)
извиняюсь за быть может глупый вопрос, но что такое: F8QDR и F6QMR ??
(4)
Можно…
нормально
заюзал обработку под перенос из группы в группу, нашел один косяк… дописал одну строчку перед заполнением таблички…
Спр.ИспользоватьРодителя(ИсхГруппа); так это получается несколько быстрее!
дописал, чтобы формировало таблицу, куда выводит всё что будет перенесено. без этого вообще работать не мог.
иногда глючит при создании папки. не может новый код присвоить. пытается присвоить код имеющегося элемента и вылетает на Записать()
ну а так вполне даже ничего.
а главный глюк. не работает со справочников договоров, которые подчинены контрагентам. вот это бы дописать…но мне чёто лень разбираться..
при перемещении списком, замечательно было бы добавить опции:
1. отметить все элементы списка
2. снять отметку со всех элементов
3. возможность использование выделения элементов из таблички с проставлением отметки у выделенных элементов.
Спасибо.
нашел еще один косяк
пытаюсь подправить нумерацию в справочнике где для кода отведено 5 знаков
причем номера в существующем виде разбросаны от 1… до 99999, т.е. между номерами есть пропуски, в этом случае выдает ошибку
«Код: 100001 не записан поверх старого кода: 99937
…..
Код: 00002 не записан поверх старого кода: 99995
Перенумерация справочника «Номенклатура» завершена
ЗафиксироватьТранзакцию();
{D:DOC1COBRABOTKIBESTSDRENUM.ERT(549)}: Ошибка при выполнении процедуры ЗафиксироватьТранзакцию»
и номера не меняются
некорректное поведение при изменения размера диалогового окна, в частности когда увеличиваешь размер (по ширине и высоте) на вкладке «Перемещение списком», окошко со списком не меняется в размере, было бы удобнее если бы оно также увеличивалось.
Хорошая работа..
а как сделать чтобы группу можна было выбирать на форме элемента справочника? У меня ошибка пишеться- «Объект не может быть перепозицирован»..