<?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='\
При запуске конфигуратор 1С 8.1.:
Ошибка:
Необрабатываемое исключение в приложении.
Accessibility
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///D:/WINDOWS/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
—————————————-
mscorlib.resources
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///D:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
—————————————-
System.Windows.Forms.resources
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///D:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
—————————————-
************** Оперативная отладка (JIT) **************
Для подключения оперативной (JIT) отладки файл .config данного
приложения или компьютера (machine.config) должен иметь
значение jitDebugging, установленное в секции system.windows.forms.
Приложение также должно быть скомпилировано с включенной
отладкой.
Например:
<configuration>
<system.windows.forms jitDebugging=»true» />
</configuration>
При включенной отладке JIT любое необрабатываемое исключение
пересылается отладчику JIT, зарегистрированному на данном компьютере,
вместо того чтобы обрабатываться данным диалоговым окном.
Тоже самое и при запуске самой конфигурации в режиме предприятие.
Итог: «Не удается найти указанный файл»
На ПК:
Win XP SP3
1C 8.1.13.41
Код:
ProcessStartInfo startInfo = new ProcessStartInfo(«C:\Program Files\1cv81\bin\1cv8.exe»);
А нельзя разве использовать пути %PROGRAMFILES% (у меня например WinXP стоит не как у нормальных людей), форточки иногда и на других дисках стоят, не только на C:>
Вот видимо и ответ на мои посты выше 🙂 Разумеется файл не найден будет, т.к. на <C> у меня ничего нет.
Еще можно на C# вытаскивать путь к этой папке из реестра, что позволило бы оптимизировать доступ к каталогу с 1С. Это как один из возможных вариантов. Просто у меня С# не установленно, а то мог бы поиграться с вашим кодом. Но идея хорошая, за что ставлю «+»
Учту все ваши замечания, это только начало 🙂
Кстати как узнать по которому пути установлена 1С или же другой софт?
Хотелось бы хранить пароли к базам, только вот никак не придумаю где и как.
Ну зачем же .NET framework для такой ерунды? )
[5] Например:
Путь к папке Program Files — %PROGRAMFILES%
Пример: %PROGRAMFILES%1cv81 (откроет каталог с 1С — при условии, что она установлена по умолчанию)
Можно попробовать здесь поискать:
HKEY_LOCAL_MACHINESOFTWAREClassesApplications1cv8.exeshellOpencommand
HKEY_LOCAL_MACHINESOFTWAREClassesV81.InfoBaseListshellOpencommand
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion InstallerFolders
В моем случае везде был прописан путь к 1С 8.1
[6] Пароли можно хранить в реестре (правда надо будет использовать какой-нибудь метод шифрования данных)
(7) а чем это плохо?
Тем более в винде это уже практически стандартная часть оси 🙂
Как бы нам не хотелось но за .NET framework будущее. Если уж под линуха создан Моно…
[6] Еще можно написать алгоритм на С#, который будет шифровать данные о пользователе (например, жуткий способ, делать смещение символов: Была буква А — стала буква Д, можно и посложнее). Раньше в нете лежали коды на С++, где приводился пример написания таких алгоритмов. Дальше можно шифрованные данные хранить а файле настроек или записывать в реестр.
Добавляй еще пакетный запуск, регламентные задания… ;))
(11)Согласен, в этом направлении и двигаюсь.
(9) А плохо это тем, что «стандартная часть оси» это только для тех кто пишет под .NET 🙂
А остальным приходится скачивать довольно не маленький дистрибутив или вообще отказываться от подобных разработок, потому что нет прав на установку framework-а (как мне, например).
Впрочем, я здесь хотел сказать только, что для такой банальной вещи как «стартер» 1С тащить .NET framework вовсе не обязательно…
(13) у тебя нет прав на установку framework-а дома?
Ты не можешь скачать порядка 50 Мбайт в век безлимитного инета?
Если у тебя нет прав на установку framework-а обратись к системному администратору 😉 Думаю он тебя направит в нужное русло 😉 🙂
А вообще думается за managed языками будущее разработки.
Ява достаточно широко используется, также будет и использоваться dot NET
(13) К сожалению, каких-то пару лет и без фреймворка ничего работать не будет.
Например, Винда 2008, 7, Виста уже юзают фреймворки почти по умолчанию 🙁
(15) не почти, а по умолчанию стоит 2 framework
(15) и не к сожалению.
Библиотека на самом деле очень мощная, многие вещи делаются гораздо проще чем при использовании нативного кода
(14)(15)
http://russian.joelonsoftware.com/Articles/PleaseSirMayIHaveaLinker.html
Да я в общем-то ничего не имею против framework-а…
Просто на данный момент ситуация сложилась так, что большинство используют в качестве «рабочей» оси — ХР. И на работе инет, естественно, не безлимитный, не говоря уже о том что я не админ…
Тут как с 7.7 и 8, ни к чему «стрелять из пушки по воробьям», я могу аналогичный стартер написать просто в блокноте, без всяких фреймворков и т.п., разве что окошко будет чуть попроще может…
ЗЫ: И читайте Джоеля Спольски, ведь умные вещи пишет, доступно:
(18)
Автор: Джоэл Сполски
Переводчик: Анар Мустафаев
28 января 2004
Пять лет прошло ужо 🙂 Многое поменялось. Когда-то требовалось скачать некоторые dll, к примеру MFC7*.DLL
Мелкософт не зря двигает именно C#, хотя винда написана на C++ 😉
<я могу аналогичный стартер написать просто в блокноте>
я также знаю о существовании функции CreateWindow(…), вот только сколько это займет времени уже другой вопрос.
Мелкософт наконец то сделал нормальную RAD, почему бы ею не пользоваться. Хотя я сам больше сердцем тяготею к Делфям 😉
Данная програмуселька написана с целью изучения возможностей C#, а дальше будет видно…
Сыровато конечно, но за реализацию на C# плюсую авансом. Надеюсь будешь периодически обновлять разработку. 😉
Лучше убрать явный выбор версий 1С, а сделать в корне 2 ветки: 8.1 и 8.2
(20) постараюсь
(21) надо бы заняться…