<?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='\
Пишем в табло Константы.Пароль.Получить() — получаем «HelloWorld!))»
(1) Шустрый ты ))
Во внешнюю обработку копируем форму констант и снимаем у реквизита галку «РежимПароля»
(3) Облом. Нарушение прав доступа!
(4) В конфигурации единственная роль с отключенными внешними обработками, отчетами и COM-соединениями.
Да ну? Все равно скачивать твою поставку не буду 🙂
**
а табло не отключается?
ХешАвторизации = ПользователиИнформационнойБазы.ТекущийПользователь().СохраняемоеЗначениеПароля;
ХешАвторизации это SHA завернутое в base64, декодируешь и получаешь счастье 💡
(7) табло и просмотр выражений являются неотъемлемой частью платформы
**
По-моему прикольная задачка 😉
ХешАвторизации = ПользователиИнформационнойБазы.ВыбраныйПользователь.СохраняемоеЗначениеПароля;
ХешАвторизации это SHA завернутое в base64, декодируешь и получаешь счастье 💡
(9) Вход в Предприятие — Администратор без пароля.
А нам нужна константа ))
Ну а еще, думаю, можно через ОЛЕ подсоединиться к этой базе и посмотреть значение константы.
(11) Думаю, нельзя
a DDE?
(12) Почему? У пользователя нет прав на ком-соединение?
(14) Да
(13) Аналогично
Ну тогда табло, отладчик и т.п.
Плюс за пиар Tool_1CD ))
Зайдите в Отладчик и всё получите.
1. Зайти в Модуль приложения,
2. поставить точку останова на оператор ПолучитьОбщуюФорму(Метаданные.ОсновнаяФормаКонстант.Имя).Открыть();
3. войти в 1С
4. остановились в отладчике, получаете «HelloWorld!))» всё, что угодно вычислив выражение и без табло.
Глупейший вопрос. Ответ очевиден.
Есть 1001 способ узнать значение константы. Начиная с табло и заканчивая консолью запросов или конструктором отчётов.
В пофигуратор входить необязательно.
А за слова
хочется поставить минус
(19) Я так же делал, думал мож еще есть идеи? ))
(20) Ты невнимателен. Консоли запросов и конструкторы отчетов в данном случае проблемно запустить. Расскажи хотябы один из своих 1000 и одного способа, чтобы он сработал.
(21) >> Ты невнимателен. Консоли запросов и конструкторы отчетов в данном случае проблемно запустить.
В чём проблема?
А решения могут быть такими:
1. Посмотреть в отладчике.
2. Если нет прав на данные, но есть конфигурация, то найти в конфигурации функцию в привилегированном модуле которая возвращает эту константу или записывает её куда-нибудь в доступное место. Обратиться к этой функции.
3. Посмотреть в конфигурации в какие другие переменные/реквизиты копируется значение константы. Порыскать по ним.
4. Самый надёжный способ: Взять копию базы, снести всех пользователей, стать админом, дать себе достаточно прав и посмотреть таки в табло/консоли.
(22) Так и есть, решение в отладке. Права на данные есть, пользователь и так админ, но прав на внешние отчеты и обработки ему не дашь (вся конфигурация только чтение).
Аудитория на ИС подкованная, решение видит сразу. Почему бы такое задание, например, не дать на собеседовании? или дополнтельного задания студентам?
пароль можно посмотреть с помощью опенпасс. наводим курсор на *** и читаем. надеюсь я не повторил чьих либо мыслей:) все посты не читал. всех с новым зулом!!!
(24) Дай ссылку на такой опенпасс, а то мой не подошел.
Мы об этом думали, как альтернативное решение.
То что пароль хранится в базе в открытом виде знают 99,99% здешних обитателей и выудить его из базы нет никакой проблемы.
Не археолог я, просто тема только сейчас на глаза попалась.
Прочитал первый ответ на задачу и вспомнилось кое что.
В 7.7 в глобальном модуле базы когда-то давно писал функцию и вызывал её из табло у юзеров.
Функция делала что мне надо с константами и т.п. и возвращала 1 при успехе, 0 при исключении.
Из табло можно было вызывать глобальные функции, а процедуры нельзя, вроде.
Интересно, надо бы попробовать, в 8-ке процедуры из табло вызываются?
(27) Niberu, Табло
Табло — специальное окно, в котором отображаются результаты вычисления введенных в него формул.
Для показа табло выберите пункт «Сервис — Табло».
Табло и пункт открытия показываются только во время выполнения отладки.
Управление табло и результатами вычислений осуществляется с помощью команд контекстного меню.
Табло представляет собой четырехстраничную форму, каждая страница которой содержит таблицу для ввода формул, результаты вычисления которых необходимо контролировать. Формулы могут включать арифметические выражения, выражения с использованием функций и процедур встроенного языка системы 1С:Предприятие, а также функции и процедуры глобального и общих модулей.
Каждая формула вводится в первую колонку таблицы и должна находиться на отдельной строке. Результат вычисления формулы выдается во второй колонке справа от формулы. Если формула введена неправильно, то вместо результата появится фраза «Ошибка в выражении!».
Результат расчета может быть скопирован в буфер обмена выбором пункта «Копировать результат» контекстного меню второй колонки.
Для некоторых типов данных возможен просмотр значений в отдельном окне.
Если в процессе работы исходные данные, используемые в формулах, изменились, то для получения актуальных результатов расчетов необходимо выполнить обновление. Для этого в контекстном меню табло выберите пункт «Пересчитать» или «Пересчитать все».
прикинь, просто нажать ф1 !
(28) я знаю, что вы умный.
А я писал про юзерское табло в 7.7 в режиме «enterprise».
> процедуры из табло ?
Конечно нет.
Благодаря вам, tango, мысли из куч по полочкам расставляются.