<?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='\
Утро доброе!
Можете то же самое сбросить, но для РегистраХозрасчетныйОстатки.
Проблема в том, что можно можно сделать в одну строчку склад | ном-ра | кол-во | сумма, а вот сделать с иерархией по складу не выходит, сумма исчезает, перепробовал все возможные последовательности.
Может туплю — нужно сделать чтобы сперва были только количества для каждого товара затем только обороты, как добится такой группировки?
Думаю, «левое» поле в запрос можно не добавлять, а просто добавить группировку «детальные записи». По иронии судьбы, решал подобную задачу несколько дней назад, много времени не заняло.
(3) quebracho, нет, здесь именно такое решение нужно
(2) SGordon1, В Кросс-таблице создаешь не одну, а две группировки по номенклатуре. При чем обе группировки на одном уровне, а не одна вложенная в другую.
В одной группировке выводишь только Количество, а в другой только Обороты
(5) echo77, спасибо все получилось!
(4) echo77,
Возможно ты недопонял мою мысль. Вместо поле1 в колонки добавляешь группировку «детальные записи», и для нее в выбранных полях также указываешь ресурс «Количество оборот». Эффект получишь идентичный.
Судя по скриншотам — результат не изменился
(8) Ресурс количество не у каждой группировки по товару выводится. Просто блок скриншотов внизу сбивает с толку и кажется, что именно им заканчивается статья ))
Решение работающее, кстати его аналог уже был опубликован здесьhttp://infostart.ru/public/20848/ . В свое время эта публикация помогла сделать красивый вывод в СКД, вместо километрового отчета. На комментарии тоже обратите внимание.
То же самое, но ИМХО более правильным способом: без изменения запроса, без создания вычисляемого поля, только с помощью настроек СКД
Выходит, публикация жуткий БАЯН 🙂
(11) quebracho, подобные примитивные вещи уже давно разобраны по профильном сайте об скд.
Автору бы по идее минус влепить за подобные «статьи», ну уж никак не плюсы ставить..
(13) Ну за что же тут минус ставить? Тут приведена ссылка на публикацию 2009 года, которая имеет заголовок, не отражающий суть. Вторая ссылка ведет на вчерашнюю публикацию. А профильный сайт об СКД скорее мертв, чем жив, если Вы имеете ввиду 1cskd.ru.
Публикация хоть и баян, но позволит новичкам быстрее найти информацию при целенаправленном поиске, чем ее аналоги, это тоже важно.
Друзья не надо меня осуждать, так посчитал что лучше и быстрее её найти здесь. Чем лазить по всему инету в поисках!!!!!
Поставлю + и по чему:
1.Оформлено на 5.
2.Суть статьи для начинающих изложена исчерпывающе
3.Эта статья будет поисковиками проиндексирована, а попробуйте в курсе по СКД найти сразу что нужно. Сам
помню, как с СКД разбирался по книжке 4 года назад. Вот жуть то была…
А осуждать Вас, автор и обсуждать нужно! Критика всегда полезна!
Считаю, довольно понятно изложенно
+ только из за оформления
а как называется программа которой скрины делал такие?
Решение простого вопроса, но низложено понятным языком.
Ставлю + статье.
+ статье. Много времени уходит у начинающих на отладку и настройку. Подскажите — с какой книги лучше начинать работу с СКД. Каждый раз будто заново начинаю. Где все-таки более систематизировано изложено?
Сползаю часто на простые отчеты без СКД, т
(19) tehas, такие скриншоты(точнее эффект рваных краев) можно получить с помощью программы Techsmith snagit и ее программы Snagit editor, которая идет в комплекте
Спасибо, то что надо!
Спасибо!
Спасибо! сам не дошел до такого трюка. Плюс превосходное оформление статьи