<?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='\
интересно, но пока не осознал практической пользы от этого….
гы, и 1с вылетает периодически…
Если делать по-хорошему, то облако должно быть самоадаптирующимся… нафига продажнику все это облако??? по колву обращений по ссылкам — все неиспользуемые элементы должны тонуть вниз, а нверх всплывать (нехорошая, блин, ассоциация) часто используемые.. потом редко используемые/ненужные должны консолидироваться в тучу «прочие» и в итоге получаем интерфейс, адаптирующийся под юзера.
Итого — задумка в (0) — ок, но все отсальное — бяка.. 😉
(2) да кстати у меня тоже вылетала, я пока не смог понять почему
Понравилась идея. Автор может патентовать. Казалось бы, что можно еще придумать, и вот, можно, если постараться.
открыл обработку, щелкнул «все справочники». После заполнения целую минуту тупо пялился на экран пытаясь понять что и где выведено.
Не смог понять зачем одни названия делать гигантскими шрифтами, а другие крайне маленькими (в глазах рябит капитально). Подчеркивание названий, как в примере, у меня почему-то отсутствует. Подводишь мышку к названию, курсор не меняется. Только по наитию можно определеить, что после щелчка по названию что-то должно открыться.
Окно обработки не масштабируется при изменении размеров главного окна.
После 2-3 счелчков (все справочники, все документы) идет стабильный вылет предприятия.
Как и где можно применить тоже не понятно. Может автор немного распишет идею применения?
Идея прикольная, только желательно бы развить:
1. Добавить критерии ранжирования/рейтинги/баллы.
Позиции с большим рейтингом пусть будут наверху, с большим штрифтом и т.д.
С меньшим идут в кучке внизу 🙂
В качестве рейтинга для картинки может выступать количество документов и т.д.
2. Позиции с малым рейтингом пусть будут совсем маленькие, и подсвечиваться/увеличиваться могут только по результатам поиска.
Честно говоря непонятно зачем такой инструмент управления.
Облако совсем для других целей.
Мне вот это понравилось
слева посередине
Ставлю минус за бесполезность.
(9) забавно. Хе хе, прикидываю, ежели такую мульку в конфу вставить, то сколько новых слов русского (и не только русского) языка узнаешь когда будешь слышать маты пользователей, пытающихся в нужное слово тыкнуть:)
я не спорю что сыро и бесполезно отчасти, но что-то новое сделано в стане взаимодействия с пользователем, возможно кто-то возьмет за основу и что-то переделает и сделает лучше, я же не против.
Интересно, но вылетает как только ткну на «Все справочники» и т.п. — и 1с закрывается 🙁
За идею +!
1С вылетает в функции ПолучитьИндексСерединыСУчетомВесов — она уходит игогда в бесконечную рекурсию. У меня это произошло, когда между ЛевГр и ПравГр сумма весов оказалась равна 3, и в каждом вызове, то ВесСлева=2 и ВесСправа = 1, то наоборот, ВесСлева=1 и ВесСправа = 2. И переменная Претендент мечется где-то между ЛевГр и ПравГр бесконечно. Точнее, пока 1С не упадет от переполнения.
Имхо, эту функцию проще вообще без рекурсии реализовать, только ВремМас отсортировать. А для этого ВремМас лучше сделать таблицей значений, а не массивом структур.
(13) Спасибо, впечатлен. Исправлю как можно скорее данную оплошность.
(14) Кстати, если вместо <a href target=tf> писать <a href=»» target=tf>, то будет нормально отображаться курсор руки при наведении на ссылку. И непонятно, зачем сделана ссылкой надпись «Итого:».
А вообще, концепт замечательный! Понятно, что в таком виде обработка практического применения практически не имеет (сорри за каламбур), но вот как идея отличная! Оказывается, можно рисовать очень необычные интерфейсы без применения внешних ActiveX-ов исключительно средствами 1С. Необходимо только знание HTML…
(15) ага это тоже учел и сделал подсветку при наведении…
в приницпе на формах 1С можно многое нарисовать но плюс HTML это автоматическое размещение элементов ну и жабаскрипт так что да можно создавать «навороченные» интерфейсы.
идея хороша
уровень реализации впринципе характерен как для большинства поделок 1С :), есть куда совершенствоваться
теперь сделай хорошее практические применение механизму
Идея интересная. Сортировку при выводе неплохо бы добавить.
Ещё бы интерфейс доработать.Животрепещущие показатели воткнуть. Типа дебиторки-кредиторки, запасов и т.д. Тогда для юзеров сие творение будет представлять интерес.
Графическое представление величин в учете — сильная штука в принципе. Цифры не все юзеры воспринимают. А вот графически представленные величины поймут все.
ту 9
Мне вот это понравилось
слева посередине
хочешь набросаю, могу даж под 1с, естс активХ, но не бесплатно, потому как времени свободного нету,
Молоток, идея класс.
Рассказываю, как применил:
показываю бухгалтеру, запускаем… Просто не облако получается, а ТУЧА (у нас УПП внедряется, сотни документов и справочников). Бухгалтер быстро вникает(толковый дюже), и ему сразу бросаются в глаза:
а) документы, которых в принципе не должно быть в базе (кто-то тренировался и не удалил)
б) масштаб цифр: количество разных документов или справочников (сразу нашли справочник, в который ошибочно грузанули несколько тысяч лишних элементов;)
в) лишние проведенные документы (по количеству). Пример: база работает 6 месяцев, а документов, которые делаются раз в месяц — 7. т.е. явно лишний документ (он пустой, проводок не делает, другим способом не найдешь)
Все вышеуказанное происходило где-то за 10 мин без разминки 😉
Конечно, можно и другими способами вылавливать ошибки, но это будет не так приятно. Ну, надоедают прямоугольно-правильно-логично выверенные таблицы даных! А тут свежий взгляд!
Метод перспективен однозначно, надо развивать.
Идея суперская,
иногда получаешь базу, непонятно кем писанную,
и возможно с ошибками в технологии бухучета.
Я нетехнологично листала универсальный журнал.
А тут запустил — пару минут и вся поднаготная на ладони.