<?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='\
😀 Это где же такие симпатичные девушки работают?
Фотка с девушкой заслуживает отдельного плюса 😀
Что есть «Tits» на майке ? Напрашивается вольный перевод.
(3) «tits» — синица (англ.)
Почему-то сразу вспоминается народная поговорка: «Лучше синица (tits) в руках, чем …» 😀
(5) Это даже на эротику не тянет… Какие-то проблемы с этим?
(5)…. в догонку… O-Planet тогда Хью Хафнер Инфостарта (:
срочно менять на бородатого мужика!
(4) но в данном контексте перевод однозначный…и на этот разгуглоперевод не ошибается 😀
ЗЫ Вот какое влияние оказывают женщины…сколько комментов и ни один про обработку…
Я тебя, Саша, решительно осуждаю.
Но … девушка хорошая. Программистка 1с ?
Мечты…мечты… Я бы такую поучил 1с (: Скорее всего она web-программист…
… ну, ВЫ только посмотрите какие у (нас) программистов комплексы относительно крАсивых дЭвушЭк …
… ужжжж …
… открываем главную стрАницу ИС … идЁм вниз … смотрим «Лидеры продаж» … и … О!… боже… что МЫ тАмА видим-с … ??? …
и на первой и на второй очень даже и секси и порно … ))) …
… ВОТЧТОхотелосьПОДметить …
…
(2)
Фотка с девушкой заслуживает отдельного плюса
А Вы Инфостарт с Контактом не перепутали?
есть еще вот такаяhttp://i5.photobucket.com/albums/y164/wteach/pictorials/Stupid/forbidden-t-shirt-funny-sings-wallp.jpg …ошибка 403 😀
Tits — на главную страницу !
не читал, но фотку одобряю
Сиськи обрамлены тэгами. Поэтому перевод однозначный и синицЫ тут ни при чём.
Кстати, наличие тэгов делает картинку уместной.
За оформление публикации «+» АДНАЗНАЧНА…Жириновский 😀
Весна, однако. Пока только один комментарий как-то связан с обработкой…
обработка заслуживает пристального внимания но девушка таки победила и внимание досталось ей 😀
Мы попали на первую страницу!
(22) Этого мало.
Твоя обработка вполне претендует (скажу по секрету) на выбор экспертов.
Они тоже люди.
(23) надо будет цену за обработку установить (:
Так и знал, что здесь обсуждают фото девушки! 😀
Как модератор категорически советую аватар обработки сменить на более содержательный и отражающий суть разработки. Фото девушек и вольные аватары — помещайте в блог и в комменты.
(26) аватар отражает суть обработки — простое, общедоступное и наглядное чтение XML файлов.
здесь аватар не менее связан с сутью обработки.
Собственно
З.Ы. Мысленно поверните девушку в профиль и сравните со скриншотом результатов обработки…
Весь день пялюсь в обработку 🙂
(27) кривые совпадают! фотка уместна! 😀
Согласен с Че. Скрыл все флудовые комментарии. Они оказались действительно почти ВСЕ 😀
(0) Классная обработка 😉
http://forum.infostart.ru/forum1/topic39294/
ЗЫ на всякий случай девушку продублировал
спасибо пригодилась
Спасибо, хороший пример для освоения ЧтенияXML
И для того что бы понять что 1С так ни фига и не сделали для удобной работы с XML.
(34) а что Вы считаете удобной работой?
(35) Одна большая кнопка, которая все делает сама. :))
(35) В данном случае удобно — это когда для работы с XML как с деревом, не приходится вставлять в код подобные куски кода с преобразованием текстового файла в дерево.
Ведь XML фактически хранит древовидную структуру.
(37) у меня вроде нет прямой работы с xml как с текстовым файлом… только методы xml. Хочется, чтобы 1с работала с xml также со своим деревом? Проблема в том, что такой подход потребует загружать весь xml файл сразу в память, а не читать его последовательно…
(38) Вот в том и проблема получается, сначала читаем последовательно, строим дерево, а потом уже обрабатываем данные.
Я не говорил, что тут работа как с текстом, тут на уровень выше, работа с элементами (тэгами). Но XML по сути объектная модель данных, с такой моделью и хочется работать.
(39) Вобще-то в 1С-ке используется как раз таки объектная модель — DOM — которая и выполняет всю грязную работу, ну и память жрет. Был бы sax парсер — вот тогда бы вы делали бы все ручками;-) Не, то, что вы имеете ввиду, это просто отсутствие синтаксического сахара, упрощающего написание кода, — который есть в других языках.
Создаем док в C# XDocument doc = new XDocument(
new XElement(«Document»,
new XElement(«Rekvizit»,
new XAttribute(«Date», 34124234),
new XAttribute(«Name», «fgergwertge»),
и т.д.
IEnumerable<XElement> docs = from t in doc.Root.Elements(«Document»)
и тд.
(41) идеальных языков нет. к С есть претензии по массивам и работе с БД.
(42) ну, это не совсем C — это C#, который вобщем-то разительно отличается от своего предка. Но у меня претензий не было;-) Чем старше становлюсь, тем больше убеждаюсь, что не в языке правда;-).
Вполне приличная обработка, для моего конкретного случая подошла весьма, т.к. самому некогда было заморачиваться.
Для проверки файла ХМЛ пригодится
комментарии не читает
Еслиб ни девка, прошел бы мимо. Рефлекс блин. Она особо ии чем не отличается, таких сотни на любом мусорном сайте, но на этом конкуренции нету. Главное чтоб в тенденцию не перешло.
С изобретением велосипеда.
Я бы вдул. и «Инфостарт одобрил».
Может кто поможет лень побороть? На входе xml-строка, на выходе — отформатированная строка xml.
Очень полезная штука! Спасибо!
Спасибо, удобная и полезная вещь!
(47) arjuna, это КПВ
Полезная штуковина. Спасибо автору!
работает! спасибо автору
теперь все через (ж) XML — а по сему полезная разработочка — тем более бесплатно — спасибо щедрый автор
(55) спасибо. не забудьте плюс поставить
Спасибо! большое! очень-очень в тему !
нормально работает, спасибо автору.
(57)(58) а плюсики поставили?
Обработка выдает ошибку
file://D:/1.XML .
{Форма.Форма.Форма(129)}: Ошибка при вызове метода контекста (Прочитать)
Если ФайлXML.Прочитать() Тогда
по причине:
Ошибка разбора XML: — [36,16]
Фатальная ошибка:
Unescaped ‘<‘ not allowed in attributes values
SystemId:
Но после чего все выводит как надо. В чем может быть проблема? Не хотелось бы ковыряться в обработке.
(60) bashirov.rs, судя по всему проблема в самом файле
(61) Вы правы. Спасибо разобрался)
зачем это поделие когда есть AKXMLEdit ? если бы редактирование XML тогда согласен, а так не понял зачем оно..
(63) AllexSoft, сама по себе обработка скорее всего не понадобится (кроме случаев, когда сидишь за компом пользователя, то быстрее запустить обработку из справочника, чем устанавливать сторонние программы). Во-вторых обработка содержить процедуры и функции, которые могут быть использованы в составе других обработок.
Спасибо, помогла обработка!
(Все-таки интересно почему при отладке, выскакивает ошибка, а при чтении в режиме предприятия НЕТ!? )
(65) ice_nio, а что за ошибка?
что — то там за границами массива, но именно при отладке, в предприятии работает как часы…
хорошая «примочка»… спс
одну мааленькую добавочку еще приделать надо бы (я себе уже сделал) — кнопку «Развернуть»
при 1 нажатии — разворачивает всё… при 2-ом сворачивает
текст для кнопки — тоже «бесплатно»
Процедура РазвернутьНажатие(Элемент)
ЭлементыФормы.Развернуть.КнопкаПоУмолчанию = не ЭлементыФормы.Развернуть.КнопкаПоУмолчанию;
Свернуть = не ЭлементыФормы.Развернуть.КнопкаПоУмолчанию;
для каждого стр1 из ДеревоXML.Строки цикл
если Свернуть тогда
ЭлементыФормы.ДеревоXML.Свернуть(стр1);
Иначе // сразу всё дерево
ЭлементыФормы.ДеревоXML.Развернуть(стр1, Истина);
КонецЕсли;
Если Свернуть тогда
Для каждого стр2 из стр1.Строки цикл
ЭлементыФормы.ДеревоXML.Свернуть(стр2);
для каждого стр3 из стр2.Строки цикл
ЭлементыФормы.ДеревоXML.Свернуть(стр3);
для каждого стр4 из стр3.Строки цикл
ЭлементыФормы.ДеревоXML.Свернуть(стр4);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ошибка иногда вываливается…страшная… (см. файл)
если реальная ошибка в структуре XML есть — у меня недопустимые символы были…
надо в «попытку» обернуть внутри Функция ЕстьЧтоЧитать()
и предупреждать… ошибка в формате XML или что-то такое…
Спасибо Вам большое, классная вещь. Давно искал нечто подобное универсальное