<?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='\
есть статистика об эффективности метода для справочника Номенклатура с количеством элементов от 100к?
+(1) или документов с аналогичным количеством записей в БД
(1) Для больших объёмов надо допиливать в первую очередь место, где у меня помечено «черновик». Там тогда нужно сделать запрос вместо вызова СКД. Ну и, естественно, обработка должна вызываться не в цикле каждый раз (как это в примере, для каждого объекта), а единожды, с передачей массива ссылок на сервер.
Статистики, к сожалению, нету. Делал как приблуду по просьбе жены, на днях)
как это развидеть?
(4) Если вам шашечки, а не ехать, то извольте тут не флудить. А желающие гундеть пусть задумаются, насколько сама БСП соответствует стандартам кода 1С.
(5) стандарты не для того, чтобы им слепо следовать. это том рекомендаций как, например, толковый словарь. не все же люди говорят и пишут правильно и под одним словом понимают один смысл, но стремится к этому нужно. объяснять зачем был придумал словарь нужно?
(1)
(1)
Все должно красиво работать. Дин.список тонким клиентом запрашивается в области видимости на форме.
Если сильно вверхниз, можно группе выделения сменить групп. реквизит.
(3)
Очень хорошая идея, спасибо. Попробую у себя.
(5)
🙂 Без «гундеть», тут не могут..
БСП, наверно, ничему, кроме соображений бизнес интересов собственно самой 1С не соответствует.. Та же структура с другого подьезда выдает сертификаты программистам.
Весело.
Каждый раз думаешь из БСП чего-нибудь «дернуть» по быстрому, а вылезает длиииииииинная борода… с граблями…
(6)
Хотелось бы видеть стандарты декларируемые непосредственно в коде конфигураций с которыми имеешь дело. Оно было и есть как-то не совсем и не всегда так..
(10) почему-то я сейчас вспомнил мемы Кличко :))
Наверняка в аду есть отдельный котел для тех, кто после знаков препинания и арифметических знаков не ставит пробел…
(13) А ещё для тех, кто реквизиты в объектах и объекты в дереве метаданных не сортирует по алфавиту))) и кто пояснения пишет к процедуре «НекоеВыполнениеДействия» в духе «// эта процедура выполняет некое действие» и точка))) и особенно для тех, кто такие «эргономичные» интерфейсы клепает, что на малый монитор не лезут и крутить надо))) Продолжить?
А вообще интересно, по делу кто-нибудь выскажется, или только гундеть умеем?)
Вообще что характерно: возбухают по поводу стиля кода обычно те, кто сами на ИС мало или ничего не выкладывает. Кто пользуется плодами чужих трудов. Таких вообще год от года всё больше — халявщиков, жирующих на чужом труде. И именно они гневно возмущаются, мол как же так, их величествам глазки ломать неохота — мало что код на дармовщинку, так он ещё и должен быть белым и пушистым. Такое прямо капризное детское возмущение, типа погремушку не того сорта дали.
Собеседую я тут одного «товарисча» на предмет себе в помощники. Уверенно хочет шестизначный оклад. Ставлю задачу, мол, как будете решать? Он выдаёт «скачаю обработку». Причём не то чтоб сильно шаблонная задача-то, не тот случай, когда есть типовые удачные решения. Говорю, а где, а если не найдёте? Он, уверенно: «ну, на ИС есть наверняка, или попрошу кого-нибудь допилить». Я аж дар речи потерял от подобной наглости.
Так и здесь. Мало что код выложен, ещё изволь их величествам имена переменных, чтоб, значитца, ндравилось) Зажрались ребятки. Почитали б на досуге исходники сишного или паскалевского кода — резко бы просветлились, особливо насчёт имён переменных))
Копался в коде печати кассовой книги УТ 11.2. Если очень вежливо, то — такой код наверняка не получил бы 1С-Совместимо. Желающие да посмотрят сами)