<?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) А чем графическая схема не подходит?
Ошибка 8.3.9.1818
(5)Для нисходящей конструкции все здорово. Но если добавить ветвления, то возникает много неприятных моментов, с добавлением связей снизу вверх и самими ветвлениями . Это все конечно можно реализовать, но должна быть очень хорошо продуманная логика добавления и связывания каждого элемента. Нужно всегда понимать где находится элемент1 и элемент2 и как их связать минуя все ранее нарисованные элементы. Да еще это более менее красиво должно выглядеть для пользователя( не набором непонятных элементов).
Возможно конечно я использовал не самый «матерый» вариант (обработкаhttp://infostart.ru/public/102902/) , но работать с графической схемой мягко говоря не очень. В наш век, когда 1С взаимосвязана с многими языками и когда для создателей сайтов уже существуют всякие скрипты, которые существенно облегчают эту задачу 1С как-то явно просела в этом вопросе(конечно визуально приятно все это создавать, однако программно очень трудоемко)
Отсюда и вопрос, возможно кто-то уже использовал некие внешние компоненты или знает какие-то более простые способы построения подобных схем. Я был бы очень рад получить ответ.
(7) Ну так это разные задачи. Автоматически сформировать понятную для человека схему и от руки нарисовать ту же самую схему.
Автоматически — это сложно, а вот вручную можно рисовать в той же графической схеме. Там есть инструменты для рисования связанных объектов.
И сразу можно оценить насколько понятна отображаемая схема
(6) делал в 8.3.10.2168, сегодня проверю на Вашей версии платформы
(6) к сожалению в платформе 8.3.9.1818 ошибка не воспроизвелась…
Главное, чтобы еще у пользователя не стояло запрета на открытие внешних отчетов и обработок из файлов.
Интересно
(7) Есть несколько библиотек на JS для рисования диаграмм, на входе надо всего лишь дерево узлов и связей в JSON. Можно таскать мышкой узлы и добавлять дополнительные подписи и прочую инфу в узлы. Например навигационную ссылку на объекты 1С. Простор для фантазии огромен, была бы задача
http://visjs.org/network_examples.html
Например
Подскажите, в веб-клиенте работает ваш пример?
(15) не подскажу, не проверял
Когда скучно в 1с можно поиграть. Как-то писал своим бухам разминку для ума и зрения. На УФ. Прикольно все в восторге.
Автору респект за пример!
Есть вполне практическая потребность в подобной реализации на проекте.
Но при экспериментах с обработкой столкнулся вот с каким неприятным моментом…
Пока рисуем на пустом поле canvas — всё идеально отрабатывает и сохраняется результат.
Но как только в canvas подсовываем картинку в качестве подложки для рисования — то само рисование идёт прекрасно, а вот сохранить результат уже невозможно.
Выдаёт ошибку SecurityError и не сохраняет (см. скрин).
В интернете нашел много упоминаний, что таким образом IE борется за безопасность. Но что с этим можно сделать, если рисовать надо именно поверх картинки — вот вопрос.
Опытным путём установили, что ругается, если фон в canvas подсовывать в виде локального файла или web-ссылки на картинку.
//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==’;
А если в виде строки base64 (пример):
image.src = ‘data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4
То нормально проглатывает и сохраняется всё!
Переводить картинку каждый раз в строку или есть какие-то обходные пути?
Может кто сталкивался?
(18) да, брать двоичные данные, если поменялись сохраняем в файл результат работы
(18) как на примере с ДО, в любом случаи мы должны сохранить новую версию файла, если поменяли ее
можно пример функциональности? просто интересно какую задачу можно решать
(21) Пометки делать нужно на скриншотах, которые сохранены были ранее. Т.е. уже в справочнике картинка есть, сохранена в рамках другого процесса. И надо на ней пометки примитивные делать. Это не коммерческий проект — так, для внутренних нужд…
Спасибо. Однозначно плюс. Очень пригодилось сегодня.
добрый день. а можно бесплатно воспользоваться данной обработкой?