<?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='\
>Для выполнения необходимы компоненты:
>FormEx.dll версии 2.0.5.0#33 от АЛьФа
>RWidjets.dll версии 1.3.3 от robert
>UsersDef.dll от atos12
Хорошо хоть, что Linux установленный не требует
> Хорошо хоть, что Linux установленный не требует
Сам не сторонник использования несколькиз внешних компонент, но что поделаешь, если ни фирма 1С, ни многоуважаемые авторы вышеперечисленных компонент не дают возможности 3 в 1..
позволю себе заметить:
1. DLL лучше ложить в КаталогПрограммы() — меньше проблем потом будет с использованием подобного функционала
2. to RinGO — при объединении 3 в 1 могут возникнуть проблемы совместимости использования
3. Обнаружено падение 1С на шестом нажатии Enter на таблице пользователей.
4. При загрузке компоненты FormEx не проверяется а может она уже у меня в глобальнике загружена — таким образом при повторной загрузке мы видим очень веселые картинки — а точнее родное меню 1С сокращается примерно до 30 пикселов вне зависимости от длинны текста — так что если закоментировать повторную загрузку ФормЭкс — с родным меню 1С феномены прекращаются
5. В ТЗдерево — неправильно отображаются пункты меню пользователя
6. В качестве предложения: использовать 1С++: вместо ТЗДерево -> TreeCtrl, а также Общие.Форма.Привязка
4. При загрузке компоненты FormEx не проверяется а может она уже у меня в глобальнике загружена — таким образом при повторной загрузке мы видим очень веселые картинки
По-моему в последней версии Альф поставил проверку на повторную загрузку.
>По-моему в последней версии Альф поставил проверку на повторную загрузку.
Может быть, но помогло именно коментирование загрузитьВнешнююКомпоненту()…
> …таким образом при повторной загрузке мы видим очень веселые картинки
Мужики, а у вас какая версия FormEx?
> to Lustin > Обнаружено падение 1С на шестом нажатии Enter на таблице пользователей
Перетоптал N-е количество раз — не падает…
>По-моему в последней версии Альф поставил проверку на повторную загрузку. — Компонента FormEx уже загружена! — АЛьФ таким образом проверяет…
вот полная конфигурация тестового стенда (точнее загруженные внешние компоненты)
система WinXP SP2 Athlon 64+ 3800 (512+512) ASUS nf570
1C 7.7.025 SQL — не патченная!!!
Все внешние компоненты расположены в КаталогеПрограммы — доступ локальный (НЕ! терминальный), я собственно являюсь Администратором
1C++
ProductVersion : 2, 5, 0, 0
SpecialBuild : Nightly build 2007-02-13
UsersDef.dll
Last Modif. Date : 17/11/2005 22:23:18
RWidjets.dll
FileDescription : RWidjets
FileVersion : 1.3.3.0
FormEx.dll
ProductName : FormEx™
ProductVersion : 2, 0, 5, 0
SpecialBuild : #33
vkLoader.dll
FileDescription : Загрузчик внешних компонент 1С-Предприятия 7.7
FileVersion : 1, 0, 0, 2
ProductVersion : 1, 0, 0, 2
Показать полностью
До этой обработки подобная конструкция работает уже давно.
Удалось отловить ошибку на шестом нажатии
«ERRRORRR funcRedrawMenu»
У пользователей — самых главных Администраторов — все равно показывает меню Файл и Операции закрытыми
На интерфейс Продавец — где вообще три кнопки активно, выводит активными меню отчетов которых вообще не должно быть
Пустые пункты меню — это как?
И раз уж на то пошло — на какой конфигурации тестировалась обработка?
to Lustin
У нас 1С 7.70.021 SQL (тоже не патченная). Конфигурация своя — не типовая(все писали с чистого листа — на компоненте «Бухучет»).
Вчера выложил beta-версию разработки — «MD-независисмый список пользователей», откуда «вырезал» обсуждаемую обработку. Попробуй выполнить из нее обработку адм_выгрузкаИнтерфейсов.ert и результат — папку «Интерфейсы» — кинь мне на мыло, попробую разобраться…
>»ERRRORRR funcRedrawMenu»
…Если используете 1С++, то сначала загружайте 1cpp.dll, потом RWidjets.dll
1С++ блокирует обработку некоторых событий. Скорей всего дело в этом.(это комментарий разработчика RWidjets — robert)…
А из опыта: чем больше используешь ВК, тем выше вероятность конфликтов
>>1С++ блокирует обработку некоторых событий. Скорей всего дело в этом
я ниже опубликовал код загрузки своих компонент. 🙂
раньше просто с ними проблем не было…
>>и результат — папку «Интерфейсы» — кинь мне на мыло, попробую разобраться…
сделаю
to Lustin
И еще: не помню где, но в памяти уменя отложилось, что АЛьФ объявил, что боле не будет поддерживать функционал FormEx в1С++…
Разобрался из-за чего происходит ошибка:
Структура интерфейсов у меня такая:
Администратор
|_Менеджер отдела продаж
|_Администратор сервисного отдела_
|_Менеджер сервисного отдела
Так вот на интерфейсе Менеджер сервисного отдела обработка входит в бесконечный цикл
Неужели ни у кого нет вложенных интерфейсов с уровенм вложенности больше ОДНОГО
Понял… Посмотрю…
>>И еще: не помню где, но в памяти у меня отложилось, что АЛьФ объявил, что боле не >>будет поддерживать функционал FormEx в1С++…
Ну если быть совсем точным то у меня отложилось что произошло разделение 1С++ 2.5 и FormEx 2.0.5 — но на самом деле подобное проще узнать на http://www.1cpp.ru
Точный адрес ветки в форумеhttp://www.1cpp.ru/forum/YaBB.pl?num=1150441349/0
А там прямо и написано — если что-то не работает милости просим с багрепортами…
to Lustin
>>Так вот на интерфейсе Менеджер сервисного отдела обработка входит в бесконечный цикл
У меня при вложенности более одного уровня выдает:
адд_МП.ЗагрузитьИнтерфейс(текИнтерфейс);
{C:1CVADMINLIGHTМОДУЛИАДМ_СПИСОКПОЛЬЗОВАТЕЛЕЙКОНФИГУРАЦИИ.ERT(169)}: Не удалось прочитать файл: \Server11CV77datПаспортизация1C_PRZ1Cv7.MD
Я так понимаю: robert при разработке RWidjets не предусмотрел такой вариант…
прикольно
Администрация, введите плиз код с картинкой для отправки сообщений или запрет на ссылки для анонимов, задолбали спамеры
У меня не верно отображаются подчиненные интерфейсы — отображается не наследник, а интерфейс самого верхнего уровня.
Аналогично:(
Hеобходимы компоненты:
FormEx.dll версии 2.0.5.0#33 от АЛьФа
RWidjets.dll версии 1.3.3 от robert
UsersDef.dll от atos12
>>»может кому и пригодится(в принципе, очень удобно — не заходя в конфигуратор просмотреть интерфейсы пользователей).»
Помоему проще в конфигуратор зайти…)))