<?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='\
Как быть с клиент-серверной версией?
а когда для выгрузки cf был нужен монопольный режим?… ) «бета» пишется с одной «т».
А так, за «выгрузку без установленной платформы», конечно плюс!
(1) для клиент-серверной вообще элементарно
Даешь выгрузку конфигурации в mdf. Что бы с файловой можно было работать как с серверной…
(3) Как?
(5) А там конфигурация, в одной табличке хранится.
(0) а зачем две програмулины (для 1CD и DT)? не лучше ли одну сделать?
(7) разумеется можно, но тогда такой продукт не выйдет никогда
когда делал DT — не было опыта работы с 1CD.
А так можно потом сделать общую сборку. Ну только когда все части хорошо обкатаны.
(3) Разумеется элементарно. Но только львинная доля присутствующих смаху этого не сделает.
Причина: Нет соответствующей квалификации.
И неужели кикто ничего не скажет насчет скорости экспорта? 🙂
Ведь сравните время экспорта средствами 1С и этой утилиты.
Иногда на порядок показатели отличаются
Экспортирует быстрее конечно чем платформа. Молодец! Ну в платформе явно криво кэширование сделано. Это еще на партнерском и тут отмечалось в частности Rebelx’ом. RAM-disk для этого начали использовать с переопределением путей для системных папок. А теперь еще в разы быстрее cf сохраняется. Вот только хочется быть уверенным, что там все в порядке и это именно основная CF, а не CF базы данных.
как раз это CF базы данных
Лично мне нужна будет возможность указания каталога приемника через командную строку
Еще бы для скуля турбоутилиту сделали бы. German, ну где же она???
(14) Для скуля можно сообразить .. на досуге навояю
(13) работа с командной строкой будет добавлена в финальной версии
Вот еще бы импорт обратно. А то бывает портится в файловой базе таблица config и кранты. А так загрузил внутрь рабочий CF и все отлично.
(17) во первых не всегда заливка сработает, ведь может и сама база уже быть битая
а во вторых заливка конфы без реструктуризации — как на бомбе сидеть.
а реструктуризацию реализовать — это считай езе одну 1С написать 🙂
(18) Так если ту же конфигурацию заливать что и была то и реструктуризации не надо.
(18) всегда можно вызвать реструктуризацию принудительно (Тестирование и исправление)
(20) Герман это с точки зрения клиент серверной версии — все просто.
с точки зрения файловой — все происходит на порядок сложней.
выражение «А то бывает портится в файловой базе таблица config и кранты» — это выражение с точки зрения пользователя, которому говорит о проблемах сама платформа.
На самом же деле все может быть намного хуже. А платформа лишь споткнулась на таблице CONFIG.
Такую базу штатными средствами часто не исправишь.
Заливка CONFIG — пройдет удачно лишь в случае физической целостности БД.
Короче говоря каждая ситуация уникальна, и требует индивидуального рассмотрения!
Странно: выгрузил программой и 1С-кой. В первом случае размер ЦФ-ка 67,1 метр, во втором — 67,9. Когда пsтаюсь обїединить конфу с ЦФ-ком, выгруженным программой, 1С-ка схлопывается с ошибкой формата потока. Это так задумано? или я чего-то не знаю?
(22) не можете дать базу?
(23) могу. как?
(25) Уже несколько человек просили разработать VCL-компоненту (для Delphi) для работы с *.1cd.
Те кому интересна будет эта наработка пожалуйста как-нибудь проявитесь.
(25) Интересное дело эта компонента, если конечно в исходниках.
Даешь исходники! Я бы контекстную подсказку научил методам общих модулей…
(27) Хотя нет. Это я замахнулся слишком)
Сделал cf — своей упп-шной базы, попробовал сравнить в конфигураторе — конфигуратор вылетел с ошибкой потока. Жду финальный, безглючный релиз
(25) интересное предложение… может лучше в с++ писать утилитку?
Может выложишь исходни на разборку *.dt, и *.1cd! за одно посмотрим и может и предложение будут?
(30) Специально для тебя я должен движок на C++ переписывать? 🙂
Автору Большое Человеческое СПАСИБО!
(31) Может дашь на Delphi а мы сделаем и для с++?
(33) Может ты дашь мне доллар а я сделаю из него кусочек хлеба?
(33)> Может дашь на Delphi
Забавный вид сексуальных фантазий :)))))))))
(35) Не говори. я бы так не сформулировал 🙂
(34) ну что сказать! я думал… что раз свободный проект… помочь хотел. но видимо что он становиться платным!
(35)видимо у тебя плохие манеры!
(37) ты разве видел где то упоминание что проект «свободный»?
То что рядом с кнопкой «Скачать» не стоит цена — это лишь означает, что проект для свободного скачивания.
(38) Понятно!
(38).может присоединиться и копать вместе?
(40) Окопы?
Када ждать обновления?
(42) Обновление будет по мере наличия свободного времени. проект бесплатный, а в условиях кризиса приходится хвататься за любую денежную работу.
Ошибка потока
(44) Версия бета. Я знаю про этот косяк. выгружает нормально если нет удаленных записей. т.е. если не удаляли никаких объектов метаданных.
Спасибо. Сейчас попробую отменить все пометки удаления и еще раз проверить.
Отменил все пометки удаления, всё равно «Ошибка формата потока»
(47) Нужно выполнить «Сжатие информационной базы» в конфигураторе. Тут пометки на удаление ни причем
Свет мигнул. — 1с не запустилось. chdbfl.exe исправило пару ошибок. Потом ошибка формата потока после авторизации. тулза CFExport.exe сделала конфиг. но он тоже с ошибкой формата потока . Че делать? все кэши потер и на другом компе пробовал. БП 1.6
Выскакивает «Ошибка формата потока данных», ничего не помогает.
Попроббовал данной утилитой вытащить конфигурацию, получилось.
Но при загрузки конфигурации в 1С, выдается ошибка «Структура конфигурации несовместима» … странно, 1С то не переустановливал и не обновлял… «1С:Предприятие 8.1 (8.1.15.14)»
(51) Ну, так читай описалово:
В силу разных причин выходной файл получается битый. Это связано в первую очередь с замудренностью формата базы данных 1С 8.Х (*.1cd).
«Война» с форматом ведется постоянно, но переменным успехом.
неплохая парсилка
Спасает когда у клиентов падает база! Спасибо большое!
оч приятная вещица, спасибо )
Спасибо автору! Полетела как то база у клиента «Ошибка формата потока» наверное у многих она встречалась, так вот все препробывал тестирование и исправление разными способами, кэш чистить, но вот только эта обработка спасла меня ))) Спасибо большие вам !!!!
Спасибо большое, выручила
Не пашет нефига, виснет и все…
Обработка очень помогла, спасибо !
А с 8.3 работает?
Так же «ошибка формата потока», перепробовал вытащить различными способами, и tool_1c пробовал, вытаскивал конфу, но при загрузке в новую базу, таже ошибка, соответственно конфа видимо битая. Но есть еще CONFIG SAVE — сохраненная конфа, она загружается, но выдается сообщение, мол надо сделать обновление.
Нету такой обработки которая могла бы из файловой в SQL загрузить таблицы? В SQL с подобной проблемой тоже сталкивался и решил ее путем замены таблицы CONFIG на CONFIG из другой базы. В файловой такой трюк не получиться, разбить на таблицы нужно.
А можно, используя ваши разработки, как-то сохранить обработки или отчеты как внешние?
(63) Johny_v, Вопрос не понял
Подлечил битую базу при помощи данного инструмента.
— не давало войти в конфигуратор: по отдельности выгрузил Цф и данные, подлечил — затем снова собрал.
Спасибо +1, на дворе 2018 до сих пор актуальна.