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