<?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='\
странная идея хранения .header перекочевала и в эту версию. Header это всего-навсего
{ описание заголовка файла }
TFileHeader = class
private
FCreated: TDateTime;
{ время создания файла }
FModified: TDateTime;
{ время последнего изменения файла }
FAttributes: TFileAttrSet;
{ атрибуты файла }
FName: string;
{ имя файла }
public
при этом
{ аттрибуты файла }
TFileAttributes = (faNormal, faReadOnly, faDir, faHidden, faSystem);
TFileAttrSet = set of TFileAttributes;
8 байт — дата создания, 8 байт — модификации, 4 байта аттрибуты, имя файла в юникоде.
Зачем плодить файлы? если вам интересны эти поля — устанавливайте их на соответствующих файлах данных. Хотя лично я бы выкинул бы их нафиг. У вас и так еле ползает эта утилита, а вы еще эту бодягу разводите.
Файлы .header используются при unpack/pack — тут я ничего не менял.
А в режиме parse/build создаются только файлы с данными.
А за информацию по атрибутам огромное спасибо. Но вот мне ни разу не попадались файлы, в которых бы эти атрибуты были заполнены. Было бы интересно на такие файлы посмотреть.
(1) А че, можно быстрее все сделать? (чтобы как в конфигураторе летало)
(4) Распаковака в памяти делается быстро. Все остальное время занимает запись на диск. Поэтому чем быстрее диск, тем быстрее будет работать.
(4) распаковка УТ (аналог вашего Parse, т.е. с разбором всех base64, с 1С-именами файлов и т.п. преобразованиями) — 32 сек, сборка — 27 сек
я рад за «распаковку УТ» 😉 только из комментария непонятно: распаковка УТ это или название программы или распаковка Управления торговлей, а «аналог вашего Parse» — это дистанцирование от «жуткого V8Unpack» или ссылка на некую волшебную программу? 😉
в общем не понял … сорри …
(7) УТ — конфигурация Управления торговлей (т.е. файл *.CF), аналог вашего Parse — подразумевалось, что результат распаковки на диск — в преобразованном из внутреннего формата виде (http://slil.ru/25659603) А приведение мною замеров времени — не только членомерение, но и подтверждение того, что есть еще резервы для ускорения и не только в «записи на диск» дело.
(8) Мда. Круто. Прям таки завидую, белой завистью естественно. Но теперь мы знаем к чему стремиться — это уже хорошо =)
(8) Проверил сейчас на УТ (старенькой правда) — 52 секунды. Но это без преобразования в осмысленные имена.
И все таки запись на диск составляет процентов 90. Видимо есть способы писать быстрее, осталось их узнать.
Может кэширование записи на диск?
(10) используй профайлер, а не умозрительные 90%. Однозначно DWORD CV8File::_httoi(char *value) надо переписать (учитывая кол-во вызовов).
Жестоко выглядит:
pFileData = new BYTE[FileDataSize];
****
FILE *file_in = fopen(filename_in, «rb»);
учитывая размеры cf с образами распределенки и/или конфы поставщика.
(12+) потерялось ret = fread(pFileData, 1, FileDataSize, file_in);
(12) Пока что приоритетнее все-таки преобразовывать в имена 1С, а потом и наращивание производительности можно занятся. Профайлером под VC6 никогда не пользовался, может посоветуешь что-нибудь? Или в VS2005 что-нибудь есть?
(14) AQTime, тока он денег стоит, ежели белый
MMF, так может присоединишься к коллективу disa_da, brix8x и иже с ними. И совместными усилиями сделаете «красивую» утилиту ???
(16) у меня детки дома по лавке скачут голодные, мал мал меньше, ждут, когда я краюху хлеба принесу. Альтруизм в больших количествах мне не доступен.
Не глядя плюс за исходники, дома гляну. Автор спасибо!!
Автор спасибо! уверен что будут новые идеи!
MMF Но жмуриться не надо! у всех есть проблемы… а если будем по одиночестве работать то ничего не добьемся!
еще такой вопрос! как можно открыть файл .1CD или .dt файл?
К стати… есть бинарный вариант для распаковки hbk файл! кому нужно оброщайтесь!
для файлов *.dt
http://www.infostart.ru/projects/2217/
(23) Спасибо!
Насколько понял не распаковывает обработки с паролями на модуле, даже если этот пароль известен?
Данная распаковщик допускает ошибки в командах «Исключение» и «КонецЕсли»;
Исправил кто?
Вот уж мега-спасибо!
С помощью тулзы успешно провёл даунгрейд внешней обработки с 8.1 до 8.0. .)
Конечно, пришлось немного поковыряться ручками… но, в целом, сэкономил массу времени.
—
One Ass
(0) Разборку файлов не удалось довести до «человеческих» имен папок?
(28) Все дело в том, что у меня нет реальных задач, где бы такая функциональность понадобилась. Все с чем мне приходится сталкиваться — решается через тот функционал, который есть. А просто сделать ради сделать неинтересно!
Напишите на чем угодно преобразование в осмысленные имена (например на том же 1С) и я добавлю это в V8Unpack. Ничего сложного там нет, правда MMF ругался что некоторые данные хранятся замудренно, но я думаю и это можно решить. Но сразу предупреждаю — перебирать все GUID’ы и где и как хранятся данные каждого вида метаданных занятие ну очень нудное.
Вот если иметь реальную задачу, группой, да еще бы платил кто-нибудь за это — дело сразу пойдет =). Или кризис дойдет до такого момента, что работы совсем не будет, тогда можно и распаковку будет продолжать =)
А так могу только идейно помочь. Например для затравки дать элементарную обработку, которая строит дерево метаданных до документа/справочника/константы по распакованным данным.
(29) Давай обработку, вдруг руки дойдут или время найду 🙂
(30) Положил сюда
(30) И ссылкаhttp://ifolder.ru/11722513
(0) Супер вещь. Что то не нашел в описании что означает PARSELEVEL={0|1|2}
На счет профилировщика VC6 он примитивен до нельзя… работает только в DEBUG запускаешь его через меню далее все как в 1С8 список точек их время и количество запусках (пишет в окне сообщений). А еще он есть только в Prof версии.
Исправь ссылкуhttp://svn2.assembla.com/svn/V8Unpack/track/
Будет ли ГУЙ?
Кто нибудь нашел способ добавить новую форму во внешнюю обработку?
(36) Я таки нашел, но гемор это БОЛЬШОЙ. Хочется API уже наконец заиметь.
(32) по ссылке файлик удален 🙁
(38) рискну предложить посмотреть публикациюhttp://infostart.ru/public/69976 — честно говоря, смысл обработки выложенной в (32) был заимствован там целиком.
_
Конвертнул исходники в VS 2010 может кому пригодятся… Архив с исходниками во вложении.
Как собрать обратно уже с открытым кодом?
Спасибо
Безоной разработки по жизни ни как, точно.
хорошая вещь, спасибо
(41) архив исходников VS2010 скачивается битым с Инфостарта
Весьма полезная вещь для анализа внутренней структуры
(46) Проверил вроде не битый… Может временный баг был?
(49) сейчас отлично — видимо был глюк Битрикса
Не могу запустить утилиту, может есть мануал какой на эту тему.
Предлагаю ознакомиться с аналогичной разработкой, написанной на C# и .Net Framework. Была идея организовать контроль версия для конфигураций 1С:
http://infostart.ru/public/103834/files/
а документацию к программе где посмотреть?
Скачал. Будем смотреть что это за зверь. =)
Кто нибуть пробовал EPF запаковывать? При UnpackAll.bat — распаковываются нормально, PackAll.bat — результата не дает…
Я так понимаю что в результате распаковки должен создаться каталог с файлами (это есть) и в нем в том числе должны быть файлы с расширением .unp (этого нет). Фактически в каталоге только файлы:
FileHeader
куча *.header
куча *.data
Пробовал обработки и 8.1 и 8.2. В какую сторону смотреть?
Вообще, реально добавить с помощью данной разработки произвольный макет в существующую обработку?
Супер! Особая благодарность за открытый код! Спасибо!
Я именно такое и искал!
Вот только жалко, что последняя запись в SVN числится 2008 годом.
как запустить инструмент?
Обращаюсь к разместившему здесь от имени автора, пора автору опять учить 1С 🙂
В 17 релизе не работает.
(59) babys,
http://infostart.ru/public/103834/
Попробуйте на 17 релизе C#-аналог, может будет работать
А можно разжувать что запускать то? Мне нужно например увидеть в рарс альфа 5.0 текст в закрытых модулях общего модуля — скачал, запускаю приложение — что то моргает на экране и тишина… ЧЯДНТ ? подскажите что нужно по шагам чтобы это запускалось.
v8unpack Версия 3.0
Оптимизировал сборку .cf(.epf|.erf) файла. На больших конфигурациях вылетала «Segmentation fault».
Исходники и собранные бинарники здесь .
Проект дляcodelite IDE . Workspace создаем в корне (иначе грабли при сборке по F5) далее добавляем проект v8unpack.project.
Всем удачи!
С помощью этого инструмента можно ли заменить тип реквизита обработки и тип элементов на форме.
Было бы здорово иметь такую возможность, или подскажите как самому это доделать.
Заранее благодарен.
Под Windows 8 не запускается V8Unpack.exe. Может кто то сталкивался — библиотеки какой не хватает?
(64) Manticor, попобуй запускать от имени админа
Можно ли этим приложением извлечь из базы необходимые модули (не из конфигурации, а именно из базы)?
Подскажите плиз, где инструкции, описание и т.п. ???
При попытке распаковать файл конфигурации БП 2.0.64.27, происходит unpacktofolder error in creating file!, ближе к концу файла.
Успевает распаковаться 13107 файлов. А жаль, я уж размечтался привинтить свой любимый Tortoise SVN+Merge
Кто может быстро помочь починить базу после сетевого сбоя? Прошу откликнуться.
email: smilohov@mail.ru
skype: smilohov
Спасибо огромное за программу!! Она спасла меня!
Мне нужно было найти старый релиз 2.1.10.2, а у меня была конфигурация с релизом 2.1.7.1, и все обновления, которые не хотели ставиться ни при каких условиях.
Конфигуратор говорил, что обновление не подходит под этот релиз, а предназначено для другого релиза, и писал номер моего, который я пытался обновить.
Все ссылки на всех обменниках давно протухли, половина обменников позакрывалась, и взять следующий файл поставки было негде!
Но с этой программой мне удалось выполнить восстановление поставки, распаковав мою конфигурацию, и файл обновления этой конфигурации в одну папку, а потом собрав из этой папки конфигурацию обратно! И все начало нормально обновляться!
получится файл dt ею распарсить на файлы?
это вопрос к 1с , а не к распаковщику . распаковщик распаковывает так, чтобы можно было обратно запаковать.
Смысл теряется в распаковке. Цена вопроса 2 строки кода.
(74) поподробнее пожалуйста.