<?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) Чем хороша такая конструкция?
А чем плоха? Чем они вообще отличаются?:-)
Это все-равно, что спорить, что плохо, что индексы ТаблицЗначений или СписковЗначений начинаются с 1, а не с 0.
Я так с нуля люблю, но это дело привычки.
1С язык мне не родной, я его вспоминаю, когда в 1С’не наваять что нуно:-)
(3) Затем что в прямых запросах нельзя строки неограниченной длины обрабатывать. Или по части поля сравнивать.
Хотя во многих случаях это хороший вариант, более быстрый.
Да и функции эти — работы со СпискамиЗначений — можно использовать и в других случаях, не только для этой задачи.
(5) не понял.
1) Ты хочешь устанавливать фильтры на основе реквизитов, которые имеют неопределённую длину?
2) Что значит «в прямых запросах нельзя по части поля сравнивать»? (желательно пример)
(6)
1) Я не то, чтобы хочу, но если будет такая необходимость организовать фильтрацию или поиск, то какие проблемы:-)
2) Например, поле номер рамы: LAPP12345ERT569835789. Пользователям удобно искать или фильтровать не полный номер рамы, а только по последним символам, допустим по 5789.
И вообще, злые вы….:-)
Хоть бы плюсик поставили:-)
По сути, ценно тут то, что можно получить объединение и пересечение двух множеств.
А для каких задач это использовать (фильтры это так, пример), это уже второй вопрос.
прикольно
Тут пришла мысль:-)
Объединение можно получить еще одним способом.
Слить два списка вместе, а потом удалить двойников из результирующего.
Хоть это тоже самое, только в профиль:-)
Что-то типа такого:
Показать полностью
Venger,
фильтровать не полный номер рамы, а только по последним символам, допустим по 5789
это очень даже просто реализуется в прямых запросах так:
Показать полностью
Я не злой, я просто пропагандирую 1с++ 😉
http://www.1cpp.ru/docum/icpp/html/IndexedTable.html#innerjoin
По соединениям/объединениям:
+(12) она, кстати, и с буфером обмена умеет работать:http://www.1cpp.ru/docum/icpp/html/ext
По текущей задаче (отбор элементов по полям подч. справочника):
предложенный тобой код будет работать только для полей, у которых стоит галочк "Сортировка", т.к
Показать полностью
Примерно так будет выглядеть твоя задача с использованием 1sqlitehttp://infostart.ru/projects/2127/
Показать полностью
ВСЁ! Если надо ещё и по другим подч. справочникам или добавить условие, то это легко формируется динамически, т.к. ТекстЗапроса — это строка и ей оперировать очень просто!
А если условий будет 10? У тебя списки будут 10 раз объединятся и фильтроваться??
С этими ВК (1sqlite и 1С++) — да согласен, задача фильтров лучше решается.
Пасибки, многие ВК я еще не изучал на предмет использования. FormEx смотрел только одним глазком, что он может.
Но, во-первых, эти функции для списоков могут пригодится и для других целей возможно. Фильтры были как пример для этих функций.
Во-вторых, использовать чужие ВК — это зависимость, а если там баг или глюк, а если надо что-то особенное.
Поэтому я склонен идти по пути «придумывания велосипеда», чтоб когда надо будет «придумывать космический корабль», уже быть готовым к этому:-)
Вот собираюсь основательно взяться за изучение Delphi вообще, и в приложении к 1С (ВК и ВП) в частности.
Правда времени как всегда мало на это все:-)
Но в любом случае спасибо, я всегда рад советам.
(15) Разработчики 1с++ всегда рады помочь: есть форум, багзилла. К тому же исходники 1с++ ты всегда можешь скачать и сам у себя собрать свою собственную 1с++.
А в каких, например, случаях могут понадобится такие объединения списков? (просто интересно)
Лучше возьмись за изучение С++, оно к 1С ближе 😉
Удачи!
(16) >А в каких, например, случаях могут понадобится такие объединения списков?
Надо подумать:-) У кого-то есть идеи?:-) Самому интересно:-)
(16) >Лучше возьмись за изучение С++, оно к 1С ближе 😉
C++ года четыре назад в универе учил, в основном под консоль правда, но обновить знания и пойти дальше не помешает и в С++, конечно.
Но и Delphi не помешает;-)
Кстати, сам язык 1С 7.7 больше Бейсик напоминает. У кого какие ассоциации?
Понятно, что 1С на С++ писался, поэтому и ближе. Верно?
В любом случае, я рад, что есть кому подсказать, так что Вам все-равно пасибки:-)
У меня работает отбор по нескольким свойствам, создал справочник, где папка — свойство, а содержимое-возможные выборы. Меньше геморроя при заведении нового свойства и т.д. Единственно, гемор. при заполнении в номенклатуре, но написал табличную обработку…
Вообще Юзеры довольны, когда из громадного списка мебели отбираешь : тумбочки, нужного цвета
и нужной коллекции… (Я использовал СписокВСтроку и обратно для поиска по ТЗ)