<?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='\
А по проще то ни как?
Почитайте, еще в 8.3.9 появилась Аннотация &Вместо:http://v8.1c.ru/o7/201603module/index.htm
Есть и другие варианты отладки попроще:
https://infostart.ru/public/827126/#4P
Да, решение со снятием с поддержки конфы не эффективно, посмотрел я «https://infostart.ru/public/827126/#4P» какой-то не очень просто вариант.. там километр кода.
Когда появились расширения я сделал для основных конфигураций по расширению. В нем я перехватывал:
1. ПРоцедуру добавления внешней печатной формы из файла и писал путь к файлу в коментарий
2. Процедуру печати, если в коменте путь к существующему файлу, то открывал его вместо загруженного.
Таким образом данное расширение весит не много, можно подключать на живые базы, мои узкие задачи — отладка печатных форм, закрыло полностью.
(2)
Там статья про регламенты с использованием БСП: Дополнительная обработка и отчеты просто, а в самом низу 4 пункт «Отладка» с ссылкой на статью где около 10 строчек кода и с одной строкой в случае если вы в доп обработке храните параметры и вам надо протестировать с сохраненными параметрами.
Просто данная статья как я думал будет о том как тестировать доп обработки которые могут быть Командой, регламентом, формой, отчетом… А тут только про команду, да еще и метод который снимает с поддержки.
Команды вообще тестировать проще до добавления в допы. На форму ссылку на документ вывести и все протестировать, после чего уже добавлять обработку в допы.
А зачем снимать с поддержки? модуль же можно в расширение «вместо«, закинуть..не?
(3)Чего-то я не понял как вы хотите протестировать печатную форму до подключения? В любом случаи правка конфы — не вариант.. если вы сидите в одной конторе можно копию поправить, а вот если у вас на обслуги фиг пойми сколько… это вообще не вариант.
(4)
Не слышал, поведайте на примере?
(5)
Наша беседа это тот случай когда комментарии лучше статьи…
(6)Шутите?
https://infostart.ru/public/829577/#2P
Вот пример с вместо
В первом комментарии ссылка на 1с с подробной документацией, даже с картинками.
Намного полезнееdevtools освоить
(7) Нет, ваш способ мне не нравиться, и вот почему:
Все-таки у вас процедура вызывается не через стандартные механизмы, соответственно будут «пробелы» в отладке, что, на мой взгляд, не очень удобно., для обычных форм была такая штука, ВнешниеПечатныеФормы.epf, вещь отличная, но не на БСП. Я сделал вот такое расширение, первый раз промаялся долго, в районе получаса часа, затем по аналогии для других конфигураций.
Пользоваться очень просто:
1. Подключаем расширение
2. Загружаем форму во внешние (при этом в коментарии прописывается путь к файлу, который и будет вызывать)
3. ТЕстируем.
Все механизмы стандартные, т.е. все параметры передаются как при реальной печати.
(10)На вкус и цвет как говорится.
П.С. Если все комменты собрать и нормально заилюстрировать и по типам команд разбить отличная статья выйдет
Доп отчеты и обработки это легаси, используйте расширения.
(9) Осваивать этот большой инструмент только ради отладки внешних обработок?
Ничего посложнее не нашлось? 😉
(12)
Это всего лишь Ваше мнение, а не реальность.
1 Более менее дорабатывать можно в расшерении с версии 8.3.9, а что делать если режим совместимости 8.3.8 или младше?
2 Доп обработки позволяют создавать команды, регламенты, формы и т.д. с хранимыми параметрами без добавления констант и прочих прелестей.
3 Позволяют делать горячее обновление которое не требует перезахода клиентом.
4 Позволяет легко настраивать видимость под конкретных пользователей.
П.С. Сам я использую расширения уже более 3-х лет и очень уважаю данную возможность и слежу за развитием, но доп отчеты и обработки в плане регламентов и добавления формы обработки использую регулярно.
(13)Весь не нужно (хотя полезно со все точек зрения), а в части отладки его установка и запуск проще и лучше документированы чем текущий способ. Обычно следующий вопрос, «а как отладить запрос»
(15) Все зависит от характера работы прогера — если дорабатывает конфиги внешних заказчиков (аутсорс или фриланс), то использование данной подсистемы будет нецелесообразным (для доработок зачастую достаточно пары-тройки внешних консолей и далеко не всегда есть возможность ее встраивания в конфу заказчика), если идет разработка крупного проекта или постоянные доработки своих конфигов (штатный прогер) — другое дело, подсистема будет полезна, а встраивать ее во все базы только ради использования тех же внешних 2-3 консолей — ну как бы и нафиг оно нужно?
p.s. Плюс подсистема реализована на обычных формах, каждый раз запускать обычный режим приложения для ее использования тоже постепенно начинает вымораживать, нежели простое открытие внешних консолей.
(16)Похоже вы давно ИР не пользовались. Есть вариант в виде расширения, для отладки достаточно работать под толстым клиентом.
может проще у обработки сделать форму и там выбирать объект и вызывать команду модуля?
https://infostart.ru/public/84922/
Любопытно посмотреть применение этого метода на компьютере с базовой версией ) без патчей и кряков ))
Почитал комменты, спасибо за подсказки и критику.
(19)
Какого именно?
(21) Их много всяких.
Спасибо автору! Очень помогло.
(23)
Спасибо Вам, сейчас есть методы попроще)
(24) огласите весь список, пожалуйста (с)
(25)
https://infostart.ru/public/73691/
Например:
(26) сенькс