<?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='\
Господа кто тестировал эту замечательную вещь отпишитесь на сколько сильно от нее раздувается база и есть ли проблемы по быстродействию. А так просто обалденное решение, плюсую!
да, мне тоже понравилось.
Никто еще не упел про тестить эту программу
Особенно интересно как это на скриншоте 3608 изменения набора записей представлены.
Однозначно ПЛЮС !!!
Понравилось. Хочу попробовать на 1С бухгалтерии. Интересной будет диаграма нагрузки пользователей, а то бухи жалуются, что работы невпроворот — вот и посмотрим, а заодно и кто и что меняет «ручонками шаловливыми»……. Писал давным давно подобное под 77 с использованием 1СРР — использовал Перехватчик… но там только факт изменения фиксировался …. Однозначно полезная весчь!!!!!!!!!!!!!!
Замечательная Вещь !!!
Убери у всех измерений ОсновнойОтбор — быстрее станет.
А под 7.7 чето такого нету??
{ОбщийМодуль.ОбщегоНазначения(1749,43)}: Процедура или функция с указанным именем не определена (глЗначениеПеременной)
ДублироватьСообщенияВЖурналРегистрации = <<?>>глЗначениеПеременной(«ДублироватьСообщенияВЖурналРегистрации»);;
Конфигурация УПП. В чем может быть причина ошибки при открытии Журнала истории
объектов ?
В УПП 1.2.12.21 не работает при открытии любого справочника, документа выдается список ошибок, пример ошибки указана в посте 10
Вещь замечательная! Понравилось, буду тестить… Спасибо!
(10,11) AKV77 — ошибка в том что ты не правильно сравнил и объединил конфигруации. Открой в конфигурации УПП модуль сеанса или модуль приложения — они пусты, потому что ты заполнил их модулями из моей конфигурацией. При объединении сними все галочки и поставь на общем модуле, подписки на событии, картинках, перечеслении, регистре, и константе — и нет больше ошибок.
Код не включен. Хочется версию, чтобы выгружать события в SQL а не в регистр сведений. Я понимаю, есть тут и платная подобная вещь с SQL, но лучше бы взялся и доделал бы, тем более у данной есть некоторые преимущества в простоте
(13) на первый взгляд смотрится крайне завлекательно, однако 🙂
неплохо бы добавить подсистему, объединяющую твои объекты. Ибо не есть гуд, когда после объединения объекты приходиться по наименованиям выискивать.
неплохо бы добавить интерфейс, пусть даже состоящий из одной кнопки на панели.
В таблице настроек по правой кнопке вроде бы доступны функции редактирования, но фактически я могу только удалить строку. Причем, если я случайно удалю какую-либо строку, то придется полностью перенастраивать всю таблицу.
большое ррр за отсутствие хоть какого-то описания описания или справки. Ну почему я должен напрягать фантазию и догадываться, нафига нужна кнопка «Свернуть».
Кстати, ежели на пустом журнале регистрации нажать кнопку свернуть выдаст ошибку.
Бухгалтерия предприятия, провожу документ реализация, заползаю в движения, вручную корректирую проводки (удаляю одну). Если вызываю историю объекта Регистр бухгалтерииНаборЗаписей выводится «изменений не было. Объект был просто записан», хотя я удалил проводку. Если сделать откат на объекте Реализация, то галка ручная корректировка снимается, но проводка не восстанавливается.
Предложение. Может стоит разделить таблицу объектов на 2. В основной держать основные объекты (справочники, документы и т.п), а во второй всяческие связанные регистры? Мне кажется так будет немного удобнее.
вот, как то так 🙂
еще немного косяков, но уже серьезных. (Смотрел все на БП)
проводим документ реализация, в журнале истории объектов фиксируются изменения. Все хорошо.
Баг 1
Помечаем этот же документ на удаление. В журнале изменений ничего не фиксируется.
Баг 2, скорее даже непродуманная фича, которая легко может привести к нарушению учета.
Встаем в журнале регистрации на строку движений регистра Хозрасчетный нашей помеченной на удаление реализации (причем строку эту мы только по нюху определить можем, ибо в колонке объект написано только регистрНакопленияНаборЗаписей, а для какого документа ХЗ) и жмем кнопку откатить объект. В результате получаем записи по регистру бухгалтерии у помеченного на удаление объекта. Что есть прямое нарушение логики работы программы.
Баг 3, ну очень сурьезный. Собственно, прослеживается практически во всех подобных разработках.
Как только в журнале регистрации по документу или справочнику появится хоть одна запись этот элемент НЕВОЗМОЖНО удалить ибо на него присутсвуют ссылки в журнале изменений. Через год работы мусора в базе будет немеряно.
Баг 4
по текущей реализации движения каждого документа фиксируются отдельной строкой.
Я таки хочу удалить документ реализация (который был проведен, а потом помечен на удаление).
При контроле в окне удаления помеченных объектов выдается ссылка на наш Журнал изменений. Ползу в журнал, нахожу строку документа и удаляю ее. ВСЕ строки движений по этому документу остаются в журнале!
Ура, документ удален. Заползаю в журнал изменений, тыкаю в строку с движениями и восстанавливаю ее. В результате получаю движения по соответствующему регистру с регистратором «Объект не найден».
Серьезно тестировать лениво, но думаю ход мыслей для поиска косяков понятен.
Вообще, штука конечно полезная, только нужна соответствующая реализация. Чтобы использование данной разработки не создавало потенциально опасные дыры в работе учетной системы.
Тестил, штука очень хорошая, вот правда один момент обнаружился. Любой объект , до момента первой записи в регистр, первые изменения не фиксирует, пишет что изменений не было объект был только записан. Ну я конечно нашел вариант перезаписать все объекты в базе, но думаю это не выход так что прошу обратить на это внимание…
А есть ли ограничения по правам пользователей, чтобы журнал работал?
В УПП после установки этого журнала не у всех пользователей запускается программа — пишет, что ошибка прав доступа.
Заголовок поправь. » восстаВноления» написано
Автор, поправь заголовок. Подумай о тех, кто будет искать такую фичу.
Если поставить галочку «Использовать регистрацию выполнения записи объекта», то периодически у всех выскакивает ошибка «В данной транзакции уже были ошибки».
Можешь дать исходный код?
Уважаемые пользователи, я начинающий в 1С подскажите как открыть данную подсистему?
Что делать если я ее уже внедрил, а теперь хочу убрать из конфигурации?
У меня 8,2
При сравнении и объединении конфигураций, база перестала работать….
т.е. она загружается но ни один документ, справочник не работает.