<?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с это делает? непонятно)
(1) rinik88, как заполняет 1с можно посмотреть в команде заполнения, я использую свои запросы. Если Вам нужно прост заполнение по контрагенту, то напишите поподробнее, как именно это нужно сделать, добавить в эту обработку отбор в принципе несложно, уточните как именно это нужно сделать — заполнение по конкретному контрагенту, выбираемому в форме, или это может группа или список, или ещё какие-то другие критерии отбора интересуют?
(2) табличную часть по полученным авансам нужно заполнять по контрагентам, то есть отбору по контрагенту. а 1с я имел ввиду, что когда я отлаживал код, то видел то что судя по коду формирование таблицы значений полученных авансов формируется из временного хранилища, как оно туда попало, каким образом оно заполняется не ясно.
(3) rinik88, ТО, что заполнение идёт из временного хранилища — это нормально — поскольку длительная операция, включайте отладчик и в начале процедуры заполнения точку останова, идите по шагам — увидите как что заполняется…
Эта обработка не для НДС с авансов, хотя по этому принципу можно сделать заполнение ТЧ НДС с авансов, если Вам это нужно…
(4) нужно, и не только думаю мне, много организаций уплачивающих ндс, думаю для буха будет удобна такая вещь
(5) rinik88, Сформулируем ТЗ. Вас не устаривает, как формируется заполнение ТЧ НДС с авансов полученным типовым механизмом от 1С.
Нужно:
сделать заполнение ТЧ НДС с авансов полученных, с возможностью отбора по контрагентам. Заполнение должно производиться по всем остаткам счета 62.02 выбранного контрагента, на которые не были выписаны счета-фактуры на аванс, вне зависимости от периода, в котором тот аванс был получен, или интересуют только авансы, полученные в текущем месяце?
Следует ли учитывать способ выписки счетов-фактур на аванс, установленный для организации (на все авансы, только на не зачтенные…ну там 5 вариантов)?
Учитывать ли ставку НДС, установленную в документах поступления денежных средств (типовое заполнение не выписывает счета-фактуры на аванс, если указана ставка Без НДС)?
Просто так нарисовать, без уточнения этих детаей…проблематично 🙂
(6) задача такая, для документов формирования записей книги покупок и продаж реализовать отбор по контрагентам.
(7) rinik88, Отбор по контрагентам, и всё тут? То, что я спросил выше остается непонятным….
Отбор по контрагентам — речь вообще идёт о заполнении?
(8) да, о заполнении.