<?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) Переборщил с чем ты имеешь ввиду?
(2) Оригинала не осталось, дословно не скажу. Был лишний параметр в Вопрос, кажется в конце стояло КодВозвратаДиалога.Нет после пустого заголовка. По крайней мере моя 8.2.10.77 ругнулась.
Я проверял на 8.2.11.236, может в 10 релизе что-то было по другому
ждем критику…
на скульной версии тоже ругается 255 таблиц как и все ранее опубликованные базопузомеры ?
(6) не ругается, т.к. объединение запросов не используется
(6) А ты пользуй не mssql, а любой другой sql сервер.
Зачетная вещь. Спасибо 😀
Супер, жаль не видно размер таблиц и индексов в килобайтах.
(10) 1С не предоставляет такой возможности в файловом варианте 🙁
однозначно + , вещь то нужная и полезная 😀
Количество строк в табличных частях объектов считает?
(13) нет, такой надобности не возникало
(14) >>>> Кофигурации: 1С:Управление производственным предприятием 8
Напиши, что работает во всех конфигурациях для тонкого клиента. Базы проверял в УТ 11, Рознице 2 и т.п.
(15) добавил, спасибо.
Если у кого-то есть возможность запуска в web-клиенте, не поленитесь запустите и отпишитесь, как это выглядит и работает ли вообще?
Конфигурация: УНФ 1.3.1.4.
Платформа: 8.2.13.219.
Режим: Файловый (без сжатия).
Наконец-то стало понятно где что прибавилось с огбновлением
Спасибо! Потестим
Спасибо! Очень хорошая вещь! Правда плохо что она только под управляемые формы! Было бы хорошо видеть эту обработку под обычным приложением!
Да вещь полезная как раз столкнулся с проблемой, sql пишет duplicate index.. таблица какая-то думаю при помощи вашей обработки как раз что нибудь прояснится.
Спасибо! Очень хорошая вещь! Обработка будет полезна всем, кто хочет быстро изучить новую конфигурация клиента или оптимизировать существующую. Большое спасибо! С новым годом!
Супер обработка. Всегда интересно знать истинные имена таблиц базы. Размеры для оптимизации пространства. У любого программиста должна быть эта обработка.
(24)
Спасибо за столь лестное определение!
не обратил внимания что под тонкий мне не удобно, а так неплохо, вот ещебы все базопузы в одно собрать ,а то приходится 2-3 разных запускать для полной картины
Поддержу вышеуказанное мнение.
Спасибо за работу!
Плюс за то что для тонкого клиента баллы накоплю скачаю,
Отличная обработка, спасибо.
Не хватает только инфы по количеству записей в таблицах SQL — также как и по количеству для метаданных. Для чистки базы очень удобно было бы — на SQL быстрее получается удалять записи — там есть команда truncate table.
Хорошая обработка.
Да хороша штуковина, но пора бы под базы данных с отключенной модальностью допилить, а то ошибки лезут по типу «Использование модальных окон в данном режиме запрещено!».
(33) Brawler, спасибо за замечание, подправил.
Не совсем конечно под 8.3
{Форма.ФормаУправляемая.Форма(1604)}: Ошибка при вызове метода контекста (ОткрытьМодально)
Форма.ОткрытьМодально();
по причине:
Использование модальных окон в данном режиме запрещено!
уже есть почти такая же 🙂
http://infostart.ru/public/191042/
(35) dour-dead, подправил, спасибо за замечание.
ПолучитьСтруктуруХраненияБазыДанных()
(39) dr.death, это ты к чему привел данную функцию?
(40) Это он привел данную функцию к тому, что в сообществе восхищаются элементарными данными которые получаются одной командой структуры данных — удивительно. Очень странно что для многих это открытие. Не скажу что обработка плохая или хорошая, она такая какая есть но полезность количества элементов в справочнике или документе вызывает сомнения без учета его качественного показателя — занимаемого места.
Для тех кто не знал что есть такая команда вот описание из синтаксис помощника.
ПолучитьСтруктуруХраненияБазыДанных()
Возвращаемое значение: Тип: ТаблицаЗначений.
Возвращает таблицу значений с описаниями структуры таблиц, индексов и полей базы данных в терминах модели базы данных 1С:Предприятия или используемой СУБД, в зависимости от значения параметра «Имена базы данных».
Лично для меня в торговых базах 1с интересны два показателя количество элементов номенклатуры и количество документов реализации за период, остальное не существенно. А еще вызывает удивление что выходящие толковые интересные статьи с оригинальными и полезными механизмами решения получают меньше внимания и плюсов чем обыденные вещи не несущие в себе ни явной ни очевидной ни потенциальной пользы(.
Было бы круто если бы обработка получала бы все данные в разделенной ИБ.
Хочется видеть физические размеры таблиц, такое возможно?
Возможно.
Статистика ИБ SQL
Разработка
(41)
Обработка писалась в качестве небольшого оценочного инструмента для себя. И зачастую полезно оценить порядок количества записей в справочнике, количество документов.
Ожидал большего. количество элементов не интересно куда интереснее вес этих данных. и сортировку и вывод информации не помешал бы.
1С:Предприятие 8.3 (8.3.6.2299)
Управление небольшой фирмой для Украины, редакция 1.5 (1.5.3.11)
В документе «РаспределениеЗатрат» есть табличная часть с таким же названием «РаспределениеЗатрат».
Ошибка при попытке заполнить документы:
{Форма.ФормаУправляемая.Форма(648)}: Ошибка при вызове метода контекста (Выполнить)
Выборка = Запрос.Выполнить().Выбрать();
по причине:
{(4, 10)}: Неоднозначное поле «РаспределениеЗатрат.Проведен»
КОГДА <<?>>РаспределениеЗатрат.Проведен
Интересно, я один пытался почистить регистры? На 83 строка названия регистра имени+(представление) реагирует очень плохо.
(45 )Для себя писала похожий инструмент для 7.7. По опыту использования своей обработки, понимаю, что Базомер 8.2, 8.3 пригодится, например, при конвертации данных. Однозначно «+».
Невозможно подключить дополнительную обработку из файла.
Возможно, она не подходит для этой версии программы.
1С:Предприятие 8.3 (8.3.9.2170)
Бухгалтерия предприятия, редакция 3.0 (3.0.48.21)
Подключила
Распечатать нельзя