<?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С — Файл — открыть — fnCQ.ert… смотрим… делимся архивом с коллегами по программе 😉
не работает-Форм.ВысотаЗаголовкаТаблицы(«Стутсы»,0);
{D:BAZAFNCQ.ERT(452)}: Поле агрегатного объекта не обнаружено (ВысотаЗаголовкаТаблицы)
(2) FormEx уже установлен? тогда нужно обновить
FormEx -установлен и обновлен
(4) Проверь, может подгружается старая версия?
Помощь — О программе — вкладка Formex — версия должна быть 2.0.5.93 beta (на более ранних релизах не тестировал)
>>>Зато не требует изменения конфигурации.
Грузить доп глоб. модуль не в счёт ? 🙂
(6) там всего то пару строк, да и кто его там увидит… 🙂
а у меня говорит
Ошибка при выполнении команды;
Ошибка при выполнении команды;
(8) Обработка при первом запуске создает в КаталогИБ() служебную папку и скидывает туда файлы. Возможно права на КаталогИБ() надо посмотреть.
папка создана
файлы скинуты
(10) Тяжело будет отследить _когда_ выскакивает сообщение? (хотя бы в какой процедуре)
P.S. КаталогПользователя определен? Туда настройки сохраняются…
Ошибка при выполнении команды;
возникает только при работе с файлами/ командаСистемы и т. д…
там надо копать.
(10) Нашел ошибку: Оказывается проверка каталога ФС.СуществуетФайл(КаталогИБ()+»
ul») возвращает 1 только на локальных путях, а при сетевом доступе (типа \компшара) всегда возвращает 0.
На работоспособность обработки данная ошибка влияния не оказывает. обработочку обновил.
у меня пишет 4 раза «Ошибка при выполнении команды» и умирает 🙁
(15) то же самое 🙁
Ни фига не работает..
меня другой вопрос интересует как поставил пароль на конфигурацию а то обходить научился а вот ставить нет
Компоненты все обновлены, тоже ошибки вылетают.
обработка запоролена, раскурочить могу, но стоит ли…
(14) аналогично
Всем сорри, с последним изменением занес ошибку. Пересобрал — теперь должно быть ок.
(14),(15),(16),(19) — попробуйте заново скачать
(18) код скрывать и не собирался — пароль остался после «танцев с бубном» по поводу сохранения иконок внутри обработки. Пароль снял.
Да простит меня автор, но вскрытие показало что описанный (14) симптом есть проявление неосмотрительной попытки создания структуры каталогов внутри каталога fnCQ, который по замыслу автора должен уже существовать! Отсюда есть 2 пути решения: 1) сами создаем в каталоге ИБ каталог с вышеуказанным именем и радуемся 2) автор исправляет досадную помарку
(21) и где ты там такую ошибку нашел?
я тоже не выдержал и снял пароль.. у себя ошибку исправил.
(23)+ там вроде все проверки на существование каталога стоят…
Чтож, в целом разработка интересна хотя бы тем, что нашел для себя новые методы добавления кода в глобальный модуль. 🙂 За это спасибо!
(24) У тебя стоит проверка ФС.СуществуетФайл(КаталогИБ()+»fnCQ..»)
т.е. проверяется существование родительского каталога, а надо проверять
ФС.СуществуетФайл(КаталогИБ()+»fnCQ»)
(26) Это я так пытаюсь обойти ошибку, которую описал в (13).
(27) Странно, у меня функция СуществуетФайл работает одинаково и в сетевом и в локальном варианте без всяких ухищрений
Судя по наличию кнопки с дискетой предполагается реализация возможности передачи файлов?
(29) Нет, планировалась передача ссылок на объекты конфигурации. Но к сожалению пока некогда заняться.
повесило сразу же, при открытии
Не могу понять в чем ошибка, Формэкс установлен, последняя версия, конфигурация его активно использует. Аська не работает, вылетает на вышеупомянутой 458 строке
Форм.ВысотаЗаголовкаТаблицы(«Стутсы»,0);
{Y:MAINBASE_2009FNCQFNCQ.ERT(458)}: Поле агрегатного объекта не обнаружено (ВысотаЗаголовкаТаблицы)
(32) на 99% — формекс не самый свежий — посмотри Помощь — о Программе — закладка Формекс — какая там версия и путь к компоненте?
Должна быть 93 бета.
(32) В принципе можешь просто закомментировать строчку, а на форме размер ТЗ увеличить — будет не так красиво но функционально.
Вкладки формекс нет, есть только 1С++
поиском прошелся, везде, где была старая версия, обновли новой.
(35) странно. Проверь через
Сервис=СоздатьОбъект(«Сервис»);
ВерсияСтрокой=»»;
Сервис.Версия(ВерсияСтрокой);
прописал жестко откуда грузить формекс, теперь вылетает при запуске. если закомментировать строку, все работает.
36 выбивает базу.
(37) Я думаю у тебя старая версия 1с++, та которая содержит в себе FormEx — отсюда и траблы. Сделай как в (34) или обнови обе компоненты и грузи раздельно (только если активно используешь их функционал то сначала проверь на совместимость)
Действительно, все дело в 1С++ :-/ пока не хотят дружить друг с другом, но аська заработала.
взлетело под терминалом!!! первая софтина обмена сообщениями которая под ним взлетела!!! урра!
а нельзя чтобы ещё окно на панели внизу мигать начинало? а то если база свернута не видно что пришла месага. а баз у меня 4-5 всегда.
следующим шагом будет прикручивание смайлов от квипа?
потом протокола icq (шутка)
(41) Если ты имеешь ввиду мигать окном клиента RDP — то это скорее всего нереально. Можешь просто настроить разные звуки для каждой базы (файлик sound1.wav в каталоге fnCQ в каталоге базы), если звук мапиться…
(42) Обработку развивать не собираюсь — если есть желание — исправляй и выкладывай 🙂
(43) ты что)) я не умею! я только 1ской.
я без звуков работаю. они меня категорически бесят. всё должно быть потихому:)
спасибо!
(43) не клиента рдп, а мигать базой на панели задач. квип так мигает на панели задач, когда сообщение приходит. ну раз не будешь развивать..ну может кто другой..но это уже рюшечки…главное что работает))
ещё бы слать сообщения юзерам у кого обработка не запущена…под рдп такого не встречал..
(45) Вообще-то обработка шлет тому, у кого не запущена…
Принцип работы такой: Запускаешь обработку, закрываешь…
Если тебе послали сообщение, то обработка запустится (зависит от настроек) в течение 20 секунд.
Если обработка просто свернута, а не закрыта — сообщение дойдет через 10 секунд.
Если обработка активна — сообщение доходит в течение 2-х секунд.
Если обработка в текущем сеансе не запускалась, то сообщение дойдет до пользователя при следующем запуске обработки.
Теперь по смайлам — если напротив юзера (слева) отображается конверт — значит обработку он закрыл, но сообщения получать будет.
Этот же «конверт», но справа — обозначает что есть непрочитанное сообщение от этого пользователя.
По звукам и миганиям — можно использоватьhttp://infostart.ru/projects/3277/ 😉
Точнее не по звукам, а по сообщениям всплывающим.
У меня временами выскакивает ошибка
найдено=спПользователей.НайтиЗначение(НомерЮзера);
{C:1C_BASEOLGA_WORKFNCQFNCQ.ERT(404)}: Значение не представляет агрегатный объект (НайтиЗначение)
Похоже, в функции ПолучитьСписокПользователей() переменную сп нужно задать как СписокЗначений, а не просто «».
Хотя (не пойму) — временами нормально все работает
А вообще — шикарная вещь 🙂 Необходимая в хозяйстве
(49) странно…
Попробуй прибить весь каталог fnCQ и заново запустить обработку — видать кто-то неудачно «зарегистрировался» в чате.
Если отловишь ошибку — запости сюда — я сразу поправлю.
плюс за идею
все работает спасибо
(52) А чего тогда плюс не ставим?
Понравилось, жаль у нас не прижилось, начальство неодобрительно относится ко всяческим аськам и мессенджерам
Чем этот чат отличается от остальных?
Как организовать автоматическое отправление сообщения нужному пользователю в зависимости от определенного события?
(55) основное отличие — этот чат заточен на работу при использовании терминального сервера.
«Живой» монитор журнала регистрации — может пригодится.
(56) это совершенно другая задача. Данный чат может быть лишь частью такой задачи — как средство визуализации сообщения о событии.
Кстати, один из способов отлавливания событий я описывал тут: