<?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='\
Программа для оценки занимаемого объектами конфигурации 1C 8.х в файле базы данных места с привязкой имени объекта 1С к имени таблицы в 1CD.
Внимание! НЕ работает с базами 8.3.8 с размером блока больше 4Кб.
Перейти к публикации
Удобная штука. Но к сожалению в базах на платформе 8.0 в колонке Объект1С не отображается ничего, а на платформе 8.2 в колонке Объект1С непонятные GUID идентификаторы. Вот и гадай после этого, на что же память уходит. А так конечно +. Автор доделывай для других платформ.
Да, наиболее актуально поддержать 8.2 конечно.
Ну у меня в 8.2 вообще в поле объект пусто.
И кстати что значит пустые таблицыhttp://clip2net.com/s/NXfs
У меня 8.1. В колонке Объект1С тоже не отображается ничего.
(4) а велика ли база и можно ли ее получить?
Вобщем, есть обновление, но раз присутствуют такие массовые баги, выкладывать пока не буду.
Добавил экспорт в word/html, значительно ускорил работу, устранил утечки и т.д. Разберусь с багами и обновлю. Те конфы, которые есть у меня в работе (в т.ч. и от 8.2) нормально разбираются
(5) 15 Гб 🙂
(6) да уж… на дискете не утянешь… Похоже понадобится делать опцию протоколирования разбора
Платформа 8.2
*.1CD размером 47,5 Гб
Открытие заняло 2 минуты
Потребляемая память от 9 до 192 Мб
Загрузка ЦП 50%
Колонка «Объект 1С» совсем не заполнена
В колонке «Таблица» имеются пустые строки, размер по ним соответственно равен нулю.
Вот как-то так…
Автору спасибо за программу, особенно если она доведется до ума!
Платформа 8.2
Перебрал несколько тестовых демо-баз.
Колонка «Объект 1С» практически вся заполнена.
Автор, просьба подумать об обновленной версии.
спасибо, думаю пригодится
(6) пжалста, попробуй новую версию на той же базе
(11) На моем 47 Гб-ном файле отработала отлично
Все «Объекты 1С» заполнены, ну кроме служебных таблиц разумеется.
Работает быстрее и ест меньше памяти и ЦП.
Респект!
У меня работает, спасибо
но у меня не русская локаль — можно ли зделать и англискую версию?
Еще бы группировку по объектам, а, то у документа куча табличных, раздельно не много, а вместе много и явно не видно 🙂
(11) Проверил.
Первые 1115 строк заполнены. Правильно или нет не знаю, но заполнены.
Затем идет 2850 пустых строк, в которых нет вообще ни каких данных. Только нули.
Как я понимаю, имена табличных частей справочников и документов не выводятся?
И что такое «Размер блобов»?
BLOB – Binary Large OBjects, а применительно к данной обработке не знаю, щас поглядим, что это.
Присоединяюсь к (14). Для анализа очень не хватает сводных данных по объекту содержащему табличные части.
Выгрузка данных в Word не так актуальна. Лучше данные выгружать в Excel. Возможностей по постобработке в нём значительно больше.
И ещё. Нет данных о регистрах сведений, регистрах накопления, регистрах бухгалтерии. Да, и с регистрами расчетов не всё в порядке.
(15) если не в тягость, попробуй на новой версии.
Проверил
После пробегания прогресс бара (10 секунд) замирает на несколько минут с сообщением «Чтение конфигурации 1С»
При повторном открытии прогресс бар уже не показывает, мелькают только названия таблиц. Затем снова замирает с сообщением «Чтение конфигурации 1С»
Группировку объектов лучше сделать в виде дерева с плюсиками
Для анализа не хватает имен табличных частей. Может быть отдельной колонкой
После изменения настроек не хватает кнопки «Обновить». При этом повторного сканирования можно не делать, а только изменить порядок отображения
Настораживают имена Объектов 1С типа .7E86FBB2-D17E-43…
(20) ну дык, прочитать 357 Мб конфигурации кусочками по 250 байт быстро не получится. По поводу регистров расчета и прогресс-бара поправлю
(21) а Вы при чтении файла API-функции MMF (memory mapped files) не используете? Может быстрее будет 🙂
(22) «Шутку понял» (с) Гоблин, а вообще-то мапирование файлов в память нисколько не ускоряет обработку, оно используется для экономии памяти при совместном использовании dll или для межпроцесового разделения данных
(23) Про dll это естественно, но разве не уменьшается количество обращений к диску за счёт кеширования страниц?
Я не знаю насколько эффективно кешируется обращение к диску из ReadFile, а спроецированные файлы выделяются 4Кбайтными страницами.
И ещё, из Рихтера:
Проецируемые файлы применяются для:
загрузки и выполнения EXE- и DLL-файлов. Это позволяет существенно экономить как на размере страничного файла, так и на времени, необходимом для подготовки приложения к выполнению,
доступа к файлу данных, размещенному на диске. Это позволяет обойтись без операций файлового ввода-вывода и буферизации его содержимого,
разделения данных между несколькими процессами, выполняемыми на одной машине. (В Windows есть и другие методы для совместного доступа разных процессов к одним данным — но все они так или иначе реализованы на основе проецируемых в память файлов.)
(21) Нужно бы добавить прогресс бар на эту операцию
Очень интересная прога. Автору +100500.
Проблемы описанные в (20) в 1.0.3.0 остались.
+26
Ещё бы возможность вывести колонку «Процент» размера индекса к размеру данных.
Кнопки со стрелками «Влево» и «Вправо» не обрабатываются?
Вещь хорошая.
Не хватает простой справки. Что означает колонка «Всего»?
Очень классная и полезная штука. Автору СПАСИБО!
Очень интересная прога. Автору +100500.
На версии v1.0.3.0 от 09.03.11 для базы 8.2 размером в 21,5 ГБ не отображается колонка «Объект 1С». Для базы 8.2 размером 411 МБ всё отображается. Думаю, дело в размере базы.
Прогресс-бар выскакивает только при первом прогоне.
Хотелось бы в заголовке программы видеть версию программы, чтобы не путаться в дальнейшем
В заголовках числовых столбцов принято указывать единицу измерения. Пример: «Размер данных, байт».
Хотелось бы, чтобы в таблице разделители строк и колонок были видны.
Интересно баг исправлен?
А с файловым вариантом работает?
У меня просто есть файловая база размером под 5 гиг!
Пользователи забили ее до такого состояния за неделю.
И естественно говорят, что ничего не делали!
А базу то почистить надо.
надеюсь эта обработка покажет где кабан сидит :)!
отличная штука. Когда ждать для 8.2?
Как водится, обнаружилось что самые большие таблицы — совсем не те про которые думал.
Сразу стало ясно — пока в SQL.
Спасибо.
отличная вещь. нашел заразу которая тянула базу на дно ))
Както странно работает… в какой колонке и в какой размерности показывается информация о размере*?
Неплохая штука. Если бы еще прикрутить вывод результата в текстовый файл хотя бы, для пакетной обработки, цены бы не было
Плюсую…нужная обработка…спасибо
Полезная обработка. Сразу видно, что закрывается, а что нет. Какие регистры пухнут, какие справочники настроены не оптимально. Одним словом обработка для тех кто ценит скорость работы базы 1С
Для 8.2 подходит тоже….
А на последней версии 8.2 будет работать?
Да! И забыл спросить на каком языке программирования написано? Есть ли возможность получить исходный код программы. Я бы с удовольствием ее доработал, расширил так сказать функционал. Ведь всем известно, что программы с открытым кодом пользуются большей популярностью чем закрытые проекты!
Большое спасибо!
Очень полезная штуковина.
Теперь буду спать спокойно, а то база большая вот и думай когда упрется в ограничение на размер одной таблицы.
Спасибо за утилиту. Реально когда вопрос стал актуальным, то она помогла быстро обнаружить наиболее раздуваемые таблицы и принять меры по их сжатию(ну и оптимизации записи данных в эти таблицы), отсрочив тем самым дорогостоящий переход на СКЛ.
(41) tiger_x, Вроде работает. Смотрел базу 7 Гб. Открывалось не быстро, зато увидел то, что никогда не видел и статистика меня поразила. Теперь понял где наиболее большие объемы набираются. В некоторых случаях это практически бесполезные данные в моей базе. Удалил ненужное. Обязательно нужно делать сжатие и реструктуризацию после всех манипуляций. Хотя и заняло у меня это действие больше двух суток, но результатом я доволен. База стала чуть меньше 4 Гб. Теперь думаю еще над обрезкой.
Автору респект и пожелание дорабатывать дальше эту нужную утилитку в бардачке любого одинэсника
давай обновляться
Неправильно считает на релизе платформы 8.2.15, база в режиме совместимости 8.2.13.
>PS выражаю признательность уважаемому awa за помощь
http://infostart.ru/catalog/19633/) сделал:
Вероятнее всего, проблема в том, что многоуважаемый awa в своей разработке Tool_1CD (
Обновление 19.09.2011 Добавлена поддержка 8.2.14.
А т.к. последняя дата изменения этой программы 01.03.2011, то, соответственно, здесь этой поддержки нет.
Вот скрины из обоих программ:
http://i.imgur.com/16cuS.png
http://i.imgur.com/2crZv.png
И еще есть 2 пожелания, не связанных с этой ошибкой:
1) при переключении галочки «Объединять объект с таб.частями» мгновенная перестройка таблицы
(т.е. всегда хранить развернутые данные, а если нужно, по настройке сворачивать)
2) при включенной галочке «Объединять объект с таб.частями» для регистра бухгалтерии объединяются все таблицы, к нему относящиеся.
В итоге, при общем размере этих таблиц в 4 ГБ это поле подсвечивается красным, как будто приближается к ограничению.
На самом деле каждая из таблиц может занимать по 2 ГБ и еще может вырасти в 2 раза (сам проверял, спокойно добавляется еще 3 млн. проводок без ошибки).
В итоге имеем такой глюк, что запустив 1-ый раз показывает на регистр бухгалтерии 4 ГБ, добавив 100 тыс. проводок и перезапустив программу у регистра бухгалтерии будет всего-то 100 МБ (т.к. идет переполнение внутренней 32-битной беззнаковой переменной).
Спасибо за программу. Есть пару вопросов. (все сообщения прочел)
1. Размер в чем ? байтах ?
2. Что такое блобы
3. У меня ВСЕГО<>Размер данных+размер индексов+размер блобов+размер удаленных. Так и должно быть ?
4. Можно сделать, что бы банные из таблицы копировались в буфер ?
Спасибо
+(51)
Имею например:
Всего: 1323879083
Размер данных: 196409933
Размер индекса: 55066624
196409933+55066624 = 251476557.
как так ? где реальный размер данных в таблицах ?
Классная прога, два дня чистил базу и безрезультатно, а с помощью этой проги узнал что 70% всех данных это справочник bp_записи_журнала_изменений ), единственное что не сходятся «всего» и сумма в остальных колонках, но для общей оценки забитости базы информации вполне достаточно. Хотелось бы иметь возможность выгружать отчёт в Excel для дальнейшей обработки и т.п. Автору респект!
Скажите, развитие программы планируете ?
Хорошая вещь для SQL. Может кому интересно будетhttp://infostart.ru/public/15052/
Шикарная обработочка!!!
Спасибо!!!!
УДАЧИ!!!!
Спасибо за обработку!
Как раз нужно узнать что происходит в 6,5 гиговой базе. А в скуле она вообще больше 500 гигов и прирост в день по 15 гигов
Присоединяюсь к просьбе о добавлении выгрузки результатов в csv файл. Намного удобнее было бы анализировать. Может еще кто подскажет как можно добраться до содержимого таблицы? Чтоб уже по записям посмотреть
Спасибо АВТОРУ!!!
Автору плюс. Но есть вопрос, существует ли подобный инструментарий для SQL баз?
И я + автору
Большое человеческое спасибо. Функционал очень нужный и востребованный. Когда база данных — «черный ящик», от не можно ждать много неожиданностей. Но заглянув в нее, и поняв, где намечается дыра (особенно своевременно)- это очень важно.
Подскажите все таки, что такое «размер блобов»?
И в чем измеряется всё? В байтах? Битах?
И должно ли быть: «Размер данных» + «Размер индекса» + «Размер блобов» = «Всего»? (а то у меня не равно)
(63) x2z7yy, каждая таблица состоит из четырёх объектов:
1) Описание
2) объект записей таблицы
3) объект BLOB-данных (строки и бинарные данные неограниченной длины)
4) объект индексов
описание обычно помещается в один блок (4 Кб), поэтому его размер никому не интересен
данные о размере объектов хранятся в БД в байтах
(64) andrewks,
ну так если вот взять мою запись, и сложить все, даже плюс 4кб на описание — «всего» не выходит.
и еще если в байтах… размер одной таблицы(на скрине) = 1 938 594 680 байт это = ~ 1.5Гб… а у меня файл .1CD всего 800 мегабайт.
(65) x2z7yy, я не могу Вам пояснить по данной утилите, т.к. не являюсь её автором.
но я Вам разъяснил, как вообще устроено хранение таблицы в файловой БД
(66) andrewks, спасибо!
но вопросы по обработке остаются открытыми…
Спасибо за обработку! Сейчас будем анализировать базы на периферии.
(65) эээ… а информация в этой базе сильно конфиденциальна? Нельзя ли ее получить с целью исправления бага?
(69) ну с этой базой не получится, начальство не поймет:) А вообще это на всех базах так, штук 5 точно открывал… На типовой демке бухгалтерия казахстана точно также (не могу выложить с работы, что-то с интернетом, только если на выходных с дома)
Очень интересная утилита
Так как позволяет определить что за таблицы следует оптимизировать
Круто! Давно ждал чего то подобного )
Бодрая вещь =) автору плюс однозначно
(0) Миша, ее бы распараллелить как то. Статус «Чтение конфигурации» висит долго и занимает полностью одно ядро. Остальные 7 ядер незаслуженно отдыхают 🙂
ОЙ какая полезная утилитка. Совсем недавно столкнулся с 5Гб файловой БД, которая сказала «хватит это терпеть» и отказалась создавать новые файлы. Пока руками не сделал свертку базы и чек БД работа стояла…а тут можно посмотреть конкретно кто в базе «толстый» и кому надо «худеть»…
(0)Вопросы так и остаются без ответа:
>И в чем измеряется всё? В байтах? Битах?
>Что такое «блобы» в данной программе?
>Почему строки раскрашены в белый, серый и желтый цвета — что это означает? Красный, я догадался — превышение данных в 4 ГБ 🙂
(76) Выше уже отвечали за меня, но повторю: 1) в байтах 2)реквизиты-строки неограниченной длины, бинарные данные, картинки и т.п. хранятся отдельно. Блоб —https://ru.wikipedia.org/wiki/BLOB 4) желтый — группирующий узел, т.е. в нем суммируются размеры подчиненных, белый/серый — обычное разделение четных/нечетных строк в таблицах с целью улучшения читаемости данных.
Оппа! Забираем =) Как раз думал на днях как бы узнать размер одного справочника. А то подозрения на его слишком быстрый рост.
MMF у меня есть база у которой почему то не определяется колонка «Объект 1С», там вообще пусто.. база не очень большая, порядка 1Гб.. правда работала под 8.3.4, может в этом дело?
(79) 8.3 не поддерживается, собственно, не держал в руках 8.3… ретроград я. Добавлю поддержку в ближайшее время + накопились багофиксы
(80) будем ждать.. 8.3 актуально
(81) AllexSoft, я проверил на одной базе 8.3 — успешно показывались объекты, можете предоставить какую-нибудь базу 8.3. на которой они не отображаются?
Спасибо! Классная штука, да еще и с экспортом!
Для 8.3 актуально
Спасибо огромное! Очень помогла.
Добрый день.
Протестировала базу данных 1с Бухгалтерия 8.2 общим объемом 8 гб Вашей программой V8TableSizes.exe.
В протоколе есть расхождение по итогу в таблице РегистрБухгалтерииХозрасчетный.Не сходятся «всего» и сумма в остальных колонках.
Фрагмент протокола в прикрепленном файле.
Поясните пожалуйста. Спасибо огромное.
Жду ответа
(86) в выделении каждая строчка — отдельная таблица, т.е. суммирование происходит только по строке. В верхнем узле основная таблица объекта, а не группировка
Добрый день.
Итоговое значение размера таблицы ACCRGAT3526 объекта РегистрыБухгалтерии.Хозрасчетный -3 950 888 744 , т.е. достигает критического размера 4 гб, Смысла переходить нам сейчас на клиент-серверный вариант нет. Так как мы планируем переходить на платформу 1С:Предприятие 8.3. Какие мероприятия можно провести для уменьшения размеров базы. Есть ли сервисные программы для сжатия баз? Или, например, рассчитать остатки на начало 2014 года, а данные с 2000г. по 2014г. перенести в архивную базу?
Спасибо.
Спасибо. Проблему решили
(77)
Вы как-то странно объясняете. В (64) andrewks вкратце объяснил, но хотелось узнать именно от автора — что-почем в его собственной программе ))
У 1С на каждую таблицу три файла:
1) файл записей
2) файл индексов
3) файл значений неограниченной длины (это тоже поля-записи, но они отдельно от 1)
BLOB в 1С (и, соответвенно, что вы и меряете у себя в программе) — это записи таблицы с полями неограниченной длины.
BLOB, по Вики — строки и бинарные данные неограниченной длины. А в 1С — это, обычно: картинки, макеты и различные файлы (например, XML), сохраненные в бинарном (т.е. двоичном) представлении. Так вот, их размер и сморим. Это и хотелось узнать от автора программы.
Также, на что обращать внимание — превышать 4 Гб не могут индексы одной таблицы.
Спасибо. Только что всё успешно показало на файловой УТ
Скажите пожалуйста что делать с результатами ? ))
http://i.imgur.com/3G6trRk.png
база МЗБУ 3,8 Г
Спасибо, то что надо
спасибо! очень удобная вещь!!!
Спасибо, очень хорошая вещь!
Если утилитой cnvdbfl, сконвертировать файл ИБ 1Cv8.1CD из формата 8.2.14 с размером таблиц 4096, в формат 8.3.8 с размером таб 8192
то ваша программа перестает читать файл базы данных
инф по утилитеhttp://its.1c.ru/db/v838doc#bookmark:adm:TI000000666
скриншот ошибкиhttp://www.picshare.ru/view/7691204/
Столкнулся с той же ошибкой. Размер страницы 16К. Автор, обнови пожалуйста. Или поделись исходниками (на чём написана?). Очень нужна информация по размерам таблиц.
(98) пока автор думает, можно перегнать в скуль и получить запросом или аналогичной обработкой.
Кстати обработки есть и наверно и для файловой базы сработают.
Спасибо автору за разработку! Но есть пара замечаний — неплохо бы хотя бы элементарный поиск по колонкам или настройку сортировки, т.к. вывалено все «как есть» и искать не совсем удобно (да можно выгрузить в файл и там уже вертеть как хочешь, но зачем, если (судя по кнопочкам 🙂 ) писано на си-шарпе и наверняка есть методы сортировки у табличных полей) и справочку по настройкам — я не сразу нашел галку «Анализ удаленных» — весьма увеличила скорость парсинга, а конкретно в моей задаче и не требовалось их анализировать — смотрел размер таблички регистра сведений.
(100) Ну вот как обычно — поспешишь — людей насмешишь.. Есть сортировка) Но справка не помешал бы более подробная, а не просто перечисление версий и исправленных багов/добавленных фич
Не работает. Пишет «неверная сигнатура в заголовке страницы данных» платформа 8.3.9.1850.
(96)(98)(102)Подтверждаю…
Очень хотелось бы обновления от автора.
(122)Можно получить хотя бы тестовые вариант?