<?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='\
Всегда не хватало нечто подобного ) Ток руки не доходили ))
Была бы платформа проставлена в анонсе — поставил бы плюс…
(2) Действительно…. Поправила.
(3) Я надеялся еще и на «7.7» в скобочках в названии…
(4) это уж наверное лишним будет, если в каждом названии цыфирки )))
на 7-ке юзал подобную вещь, не знаю что функциональнее, т. к. 7-кой уже не занимаюсь и вашу тоже не смотрел
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=5&lid=3307
http://pcwin.ru/show-ili_download/
или
(5)Поверьте мне, не лишнее…
Кстати, аналогичная печать списка — для облегчения работы с вложенными списками значений — напрочь валит 1С при попытке вывода таблицы с «сильно ветвистым списком» в расшифровке. Поэтому сложные списки не использую — их отлаживать неудобно ))
вот еще что может пригодится:http://infostart.ru/projects/942/ — весьма выручает!!! а то на отчет уходит 20 минут и 2 часа на вывод…
(9) Бегло глянула, пока с передачей параметров некогда разбираться
Насколько поняла — обработка предоставляет интерактивный инструмент просто чтобы сформировать сводные данные и не морочиться с их выводом в таблицу. У меня чуть не то. У меня просто хорошо отлаженная глобальная функция. Так чтобы и по тексту можно было просто расставить ПечатьТЗ() — для отладки — и просто поанализировать таблички. И так чтобы из этого «приличная для автоматической» печатная форма получалась, «почти как настоящая».
Вызов просто ПечатьТЗ(ТЗ) для любой таблицы или ПечатьТЗ(Контекст) для документа. Остальные параметры вызова необязательные, по умолчанию те которые удобнее всего.
Для сложных отчетов с настраваемыми группировками — есть другие механизмы.
Эта разработка удобна именно легкостью и отсутствием интерактива ))
(10) да все именно так, каждый инструмент хорош на своем месте
А вот ещё вариантhttp://www.infostart.ru/projects/1635
(12) В «запасниках» собственных разработок — аналогичные имеются.
«Многоуровневая группировка ТЗ (в результате получается дерево)»
Своя такая тоже есть. На скриншоте как раз такой пример.
Забавно было изобрести такое самостоятельно, а потом на инфостарте найти чье-то совершенно аналогичной структуры, за разницей названий колонок и прочими мелочами. В тот случае — сделала для себя «объединенный вариант» из своего и «не своего» решения, оптимальный по скорости построения и удобству использования применительно к своим задачам. Сейчас это тоже всего лишь одна глобальная функция ))
Я вообще-то имел в виду РедакторТЗ 🙂
Т.е. некий инструмент, аналогичный представленному, предназначенный в основном для отладки.
Кстати, почему-то все для отладки делают именно печать ТЗ, а не показ на форме. Почему интересно?
Не всегда показ на форме удобно
20 открывшихся в результате проведения табличек совсем не напрягает, в отличие от 20 модальных окошек
Ну так в том то и дело, что РедакторТЗ в отличие от ТЗ.ВыбратьСтроку(…) можно показывать немодально. Собственно, от того и сделано было, что ТЗ.ВыбратьСтроку(…) достало своей тупостью, а выводить в печатную форму мне почему-то и в голову не пришло 🙂
Я тоже обычно в ТП на форме результат вывожу. 😉
(17) Как отладочное и на форме — куда ни шло, если одно окошко.
Если отлаживаешь какие-нибудь бухитоги в рекурсии и нужно видеть все результаты — то ТП на форме маловато будет. К тому же это форма, печатная форма. Я ей настолько широко пользуюсь……. Если прописать ПечатьТЗ() в глобальнике в обработке ячейки таблицы — то не вижу необходимости в ТП на форме, не сравнить по удобству.
Отладка
Авто-печатная форма отчета когда лень рисовать, а хочется, чтобы не криво
Авто-печатная форма документа (не поймут ведь если ТП на форме 🙂 )
Часто выручает, даже если на ходу нужно сварганить перенос из базы в базу или сравнение данных двух баз — в одной базе выбрал что нужно и сохранил mxl, в другой прочитал mxl и что нужно с ними сделал…
Только я не понял куда прописать процедуры из обработки ПриОткрытии() и Сформировать(). Или там оставить?
Никуда их не нужно писать
ПечатьТЗ() в глобальник
Таблицу — в общие
Для эстетов — что-то вроде
Если ТипЗначенияСтр(Расшифровка) = «ТаблицаЗначений» Тогда
ПечатьТЗ(Расшифровка);
И все ))
А дальше использовать «по вкусу»
Все остальное — это всего лишь демо-пример
Я делал подобное. Мне показалось удобнее выводить прямо в Excel
Зачем прямо в Excel?
В 1С- есть красивый механизм расшифровок, который в Excel работать не будет. Формат таблицы такой, что в Excel вручную сохраняется с минимумом проблем — т. е. правильные выравнивания и т.д.
На уникальность идеи этой разработки — не претендую, думаю много кто такое делал. И еще много у кого руки не доходили ))
для отладки выводил ТЗ на форму, а печать думаю будет лучше, надо попробовать.
Спасибо.