<?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С видимо неспроста убрали этот отчет, он больно много может показать, а учить его скрывать некоторые регистры на которые нет прав у пользователя они не захотели.
От того сейчас все себе и делаем давно знакомые и полюбившиеся приблуды))
Я считаю, что хотя бы для роли «АдминистраторСистемы» 1С-ки должны были оставить этот отчет. Иногда необходимо знать, какю движуху выполнил тот или иной док (без изобретений новых велосипедов)…А они его вообще вырезали из конфы…Автору спасибо.
(2) soulsteps, рад что пригодилось.
спасибо за комментарий, а то народ скачивает, скачивает и молчит =))
В рознице 2.1 в списке выбора документов отчет, для самописных документов не прикрепляется (их в списке выбора нет) как обойти данную ситуацию? (для док.РТУ — отработал нормально)
могу скрины прикрепить…
(4) Светлый ум, значит для ваших самописных документов не предусмотрена возможность назначения доп.обработок/отчетов.
Смотрите документацию по БСП — раздел «Настройка назначаемых дополнительных отчетов и обработок»:http://its.1c.ru/db/bsp21doc#content:22:1
(5) попробую решить вопрос на форуме:
http://forum.infostart.ru/forum40/topic158023/
(6) Светлый ум, ответил вам там же ))
В двух словах для тех кто также захочет прикрутить этот отчет к своему самописному документу:
1) нужно в соответсвующей общей команде добавить в состав типов параметры команды свой документ
2) добавить в модуле формы (списка/объекта) следующую строку
(7) теория с ИТС тяжело и сухо заходит — благодаря более адресному замечанию разобрался значительно быстрее — спасибо.
В выше указанной теме на форуме — привел описание с картинками, на примере конфигурации «Розница 2.1» — и моего самописного документа.
http://forum.infostart.ru/forum40/topic158023/ )
— Нюансы были, например один из основных: общие команды, описанные в статье, называются в типовой конфигурации по другому..
(
На Зарплата и управление персоналом, редакция 3.1 (3.1.1.81) не взлетело, пришлось в модуле формы, в процедуре «ВыполнитьКоманду(ИдентификаторКоманды, МассивОбъектов) Экспорт» добавить код
Применимо для Отчет по движениям документа (внешний отчет)
(9) Craig, хммм, странно.
проверил на ЗУП 3.1.1.95 — все работает корректно.
А куда вы потом эту структуру ПараметрыДанных передаете?
Можете целиком показать процедуру ВыполнитьКоманду из модуля формы?
(3) А мы пользуемся типовой настройкой «Настройка панели навигации формы».Видно в каких регистрах идет движение док-та.
Очень пригодился, спасибо! Сравнивал движения документа до перепроведения и после.
(12) Пожалуйста)
Рад, что пригодилось.
Скачал ваш отчет ради интереса. Делал похожий отчет. Решил сравнит
Посмотрел. Советую внести изменения.
1)Показывать таблицу движений по праву доступа просмотр
2)Ваш отчет работает в безопасном режиме
В безопасном режиме:
// Игнорируется привилегированный режим, но у вас и так он не используется
в функции ОпределитьНаличиеДвиженийПоРегистратору(Документ) идет обращение в таблицам регистров
Если у пользователя нет прав он получит сообщение об ошибке
Лучше это учесть
Либо с УстановитьПривилигированныйРежим(истина) и соответственно не безопасным режимом выполнения обработки….
Либо добавить что то похожее (добавлена проверка)
Показать
Это не камень в огород. А рекомендация
Спасибо.