Оценка объема и темпа роста информационной базы




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

25 Comments

  1. IamAlexy

    а для чего может понадобиться сей инструмент да еще и платный?

    особенно когда навалом халявных решений на эту тему ?

    Reply
  2. CheBurator

    а для семерки???!!!

    Reply
  3. mikhail.kozyrin

    Инструмент бесплатный для личного пользования. На мой взгляд данная обработка удобнее в работе, чем аналогичные.

    Reply
  4. Borisych

    Выполнен значительный объем работ, качественно (проверил на БП)

    В пересчете по курсу 1200руб./час выйдет неплохая сумма для заказчика, так что 1000 руб. — это бесплатно в сравнении с реальной стоимостью заказа обработки такого плана. К тому же дополнительно идет 50/50 = Автор/ИС

    Reply
  5. Gilev.Vyacheslav

    >Обработка позволяет подсчитать количество объектов в информационной базе: отдельно количество документов по видам, отдельно количество элементов справочников по видам, количество записей в регистрах сведений и накопления.

    Афтор, а в чем коммерческая выгода от этой обработки. За что платить?

    Reply
  6. Serj1C

    Как я понял 1000 — это выражение благодарности, никакого вымагательства или впаривания )

    Reply
  7. mikhail.kozyrin

    Где выгода в использовании обработки:

    1. Зная объем ИБ Вы можете оценить время, необходимое на выполнение некоторых операций с ИБ (выгрузка, удаление помеч. объектов, обновление). Зная время уже можно планировать свой рабочий день.

    2. Зная темп роста ИБ можно спрогнозировать время, когда объем базы превысит некоторое критическое значение. Зная эту величину можно обосновать закупку нового оборудования или модернизацию старого. Финансисты очень любят объективные оценки.

    Reply
  8. mad_maksim

    Люди, будьте внимательнее! Не обвиняйте автора без причины!

    Обработка бесплатна!

    1000 руб — это ВОЗМОЖНОСТЬ отблагодарить автора, не более.

    to gilv: Если ты не видишь смысла в какой-то вещи, это не значит, что его нет.

    Пример для тебя по данной обработке: при выполнении масштабного внедрения НЕОБХОДИМО предоставлять заказчику информацию о росте ИБ, причинах и тп.

    Обработка поможет в таком случае

    Reply
  9. rasswet

    (2) видел и для семерки, только не помню где. даже график там рисовался какой-то.

    Reply
  10. Тот

    Базопузомер. Для семерки. Написан в 2001-2002 годах. Идею развивать не стал.

    Графики действительно рисовал…

    Базопузомер имел большой успех когда переходили на новые стандарты учета. Он позволял оценить время перелопачивания базы.

    Reply
  11. Трактор

    (8) >> при выполнении масштабного внедрения НЕОБХОДИМО предоставлять заказчику информацию о росте ИБ

    gilv привык и, главное, умеет считать эти параметры другими средствами 🙂

    (10) Хорошая вещь была. Популярная. Спасибо.

    Reply
  12. Тот

    (11) Кстати, первая реакция не неё была «а нафиг кому оно надо?»

    А вообще я сперва на небезизвестном кубанском форуме изложил идею и предложил энтузиастам разработать такую штуку.

    Но в то время 1С-ники были крайне ленивы. И занимались больше вопросами доказательства теоремы БЖС.

    Потому написал сам.

    Кстати, термин «Базопузомер» был подхвачен Microsoft и появился «Базопузомер для Аксапты». Что вызвало бурю негодований сообщества 1С. Предлагали даже подать на Билла Гейтса в суд… Поисковики всё это выдают.

    Reply
  13. Трактор

    (12) >> Но в то время 1С-ники были крайне ленивы.

    Они и сейчас таковы. Просят «Дайте идею разработать!» Даёшь идею, они носом крутят.

    Reply
  14. Тот

    (13) Я знаю. У меня идей много. Но сам не тяну уже. Стар стал. Даже суперстар.

    Одна идея вообще позволит по моим оценкам заработать денег с целью выкупа яхты у Абрамовича. Но так никого и не смог увлечь… Сам начал — но не потянул. А яхта оказывается и не особо 1С-ников интересует. Напрягаться они не любят…

    ICQ#: 112603406

    Reply
  15. Трактор

    (14) У меня своя идея по зарабатыванию кучи денег есть 🙂

    Reply
  16. logdog

    10,14 … а для Базопузомер’а одну вещь дописать можете?

    Меня интересует вкладка бухучет => При выводе печать (о документах) нужно еще добавить таблицу

    Бухгалтерского учета:

    Код Наименование Количество Процент

    … и тогда вообще вся информация будет…

    Reply
  17. e.kogan

    Один вопрос: что есть «незакрытые» записи в вашей терминологии?

    Reply
  18. mikhail.kozyrin

    Незакрытые это такие записи, у которых сумма по всем измерениям <> 0. Например есть приход, а нет расхода. Или есть приход и расход на одну и ту же сумму, но реквизиты в измерениях различаются.

    Reply
  19. wolder

    Идея конечно гуд! Помнится и версия 7.7, но так и хочется добавить:

    Reply
  20. wolder

    1. Результаты хотелось бы экспортировать в Excel, так как отсет не хранит сведения с предыдущего отчета, касательно справочников.

    2. Различные графики украсили бы этот отчет ещё на 100%, и что особо любят видеть директора так это графики и темпы роста базы — а следовательно работы с базой сотрудников — а следовательно время затраченное сотруднкиами и т.п.

    3. Статистику по времени записи документов, какое время самое пиковое в дне, неделе, месяце. Соответственно от типов документов и будет видна работа пользователей.

    4. Справочники тоже имеют ТЧ и их хотелось бы тоже видеть.

    5. Количество созданных элементов справочником можно получить из Журнала регистрации, благо сейчас есть много способов туда залести.

    Конечно, всё это уже тонкости, но на то и универсальность что бы уметь всё, как собственно и прославиться как наш «Тот» 8)

    Reply
  21. zzz86

    Надо бы добавить статистику по регистру бухгалтерии.

    Reply
  22. mikhail.kozyrin

    По рекомендации zzz86 добавил статистику по регистрам бухгалтерии и расчетным регистрам.

    Reply
  23. lexxxus

    Какой облом!!! 🙁 Увидел — загорелся, думал вот это вещь!!! (Работаю с большими базами, для меня данная тема актуальна)

    За идею конечно — однозначно «+», а за реализацию «-«.

    Во первых обработка совершенно не бесплатна — в демо версии стоит ограничение на 100 000 объектов. Сначала попробывал на своей рабочей базе — не пошло. Потом решил попробывать в маленькой базе, которую перенес только остатки со старой. В последней базе (УТ) было с пару десятков документов оприходования, общее количество строк — 32 313, 9 документов Переоценки товаров в рознице (в общем числе 27 658 строк) и 2 документа Установки цен номенклатуры (14 218 строк). Обработка ДЕВЯТЬ РАЗ выплюнула сообщение, что превышен лимит в 100 000 объектов, после чего в конце вообще изрыгнула ошибку (см. на скрине).

    Никаких отчетов, нет каких-либо расчетов, связанных с объемом файлов базы…

    Reply
  24. Re:аниматор

    Превышен порог в 100 000 объектов.

    ОК

    {ВнешняяОбработка.ОценкаОбъемаИБ(109)}: Преобразование значения к типу Число не может быть выполнено

    Reply
  25. mikhail.kozyrin

    Re:аниматор и lexxxus благодарю за обнаруженные ошибки. Данные ошибки были исправлены.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *