<?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) MiniMuk, первый скришот про это
не предусмотрено изменение данных т.е. если я скопирую с предыдущего документа, а в новом изменю что то, то при записи опять подтянет данные с копируемого документа
(3) Вы наверное не понял смысл: если мы копируем документ, то в момент именно копирования для нового (скопированного) документа создаются точно такие же, как для исходного, дополнительные сведения. Дальнейшие изменения, записи и пр., на записи дополнительных сведений не повлияют (если конечно не их изменяем). Дополнительные сведения — это записи отдельного регистра, и запись документа не приведет ни к какому «подтягиванию»…
Я поняла смысл, просто получается что эти поля, в частности Адрес во всех докмуентах будет одинаковый, т.е. если в каком то докмуенте нужно будет перебить адрес, то при записи документа он опять вернется на тот который был в копируемом докмуенте
(5) НЕТ, Вы не поняли. Если вы поменяете адрес и будете ПЕРЕЗАПИСЫВАТЬ документ, дополнительные сведения документам не изменятся. Дополнительные сведения к новому документу записываются при КОПИРОВАНИИ, и ТОЛЬКО ПРИ КОПИРОВАНИИ, потом они ведут себя точно так же, как если были бы занесены вручную — нет никакой зависимости от исходного документа, точно так же как не зависят изменённые реквизиты самого документа, созданного копированием.
Подытожим — дополнительные сведения автоматически записываются для создаваемого документа путём копирования дополнительных сведений исходного документа. Никакой связи между ними нет, при перезаписи скопированного документа дополнительные сведения не перезаписываются.
Может быть так будет понятнее: для каждого документа создаются свои записи в регистре сведений. При копировании адреса из дополнительных сведений источника к новому документу будет создана новая запись с точно таким же адресом. Потом его можно поменять. Запись (перезапись) документа никак не повлияет на запись дополнительных сведений в регистре.
(7) странно… так как я скачала Ваше расширение, копирую документ он подтягивает данные с копируеммой ссылки, после чего захожу в доп. сведения и меняю там значение, сохраняю документ, возвращаюсь в доп. сведения и там опять значения те которые были при копировании…
Напишите в личку, давайте посмотрим вместе через АА
(8) Вообще для изменения дополнительных сведений сохранять документ нет необходимости, а вот доп. сведения для сохранения изменений, записать необходимо. Вообще ситуация с перезапись доп.сведений при записи документа невозможна по причине отсутствия данных в этом документе, документ копирования не хранится в новом документе, откуда же возьмутся доп.сведения? Мне кажется Вы их просто не сохраняете…ещё раз — давайте вместе посмотрим
(10) Смотрите,
1. копирую документ, открывается форма создаваемого нового дока, на ней выбираю записать, после чего перехожу в доп. сведения — там значения ровны с копируемого документа.
2. Меняю в доп. сведениях значения на новые, нажимаю кнопку Записать на форме доп. сведений и документ провожу и закрываю.
3. Открываю заново документ, и доп. сведения в нем опять те которые были в документе который копировали.
4. Но если я скопирую документ запишу и закрою его, а дополнительные сведения открою не из формы а данного документа, а в списке документов выделю нужный и изменю их, то они в таком случаи сохраняться.
(11) Если Вы не закрываете документ после изменения доп. сведений, возможно вы не видите изменений, потому что на форме они не обновились, ещё раз предлагаю посмотреть вместе, если что-то работает не так, как задумывалось — я должен это увидеть… Клиент, заказавший эту настройку, работает с ней уже давно — нареканий не было. Возможно, что-то можно поменять.
(12) Документ закрываю, после чего вхожу в него и вижу что данные возвращаются те которые были до изменний
(12) Спасибо все работает