<?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 (БП, УПП, УТ, ЗиУП и пр.), там где у документов есть реквизиты Ответственный и Организация. Зачем нужен этот отчет — да за тем, чтобы например оценить насколько загружены бухгалтера, и может быть пора расширить штат :-). Или наоборот, аргументами потрести перед бухгалтером, который говорит что он не успевает, а как будет видно (или не видно) из этого отчета делает то он не так уж и много 🙂 , значит он просто неэффективно работает.
Спасиб. Сейчас протестирую. Сразу же пожелание — а можно сразу по всем пользователям и можно с диаграммой? или самому дописать)
Какой ресурс вам нужен в диаграмме? А по поводу пользователей, там и так все пользователи сразу. И отсортировано все по убыванию — некий топ лист «трудокголиков» 🙂
Димон, хорош! А теперь то же самое — только на построителе отчета: чтобы группировки местами менять, отборы там всякие, сортировки…
И код разлочь, нехороший человек :))) Никто не украдет.
Molot нафиг тебе построитель. Заходи в конфигураторе в схему компоновки данных и добавляй свои настройки хоть графики хоть что… 🙂
а для семерки есть что-нить похожее?
Извини. Даже на заметил, что отчет — на СКД 🙂 Ну хоть настройки-то в интерфейс вывести — а?
Нехватает выбора видов документов
Зачем делать 3 левых соединения? Можно одним запросом все получить.
Привидите пожалуйста код этого запроса.
Я не сомневаюсь что можно, но это мое решение — две ТЗ и соединение в компоновке данных.
(11) Посмотри мой вариант:http://infostart.ru/profile/12366/projects/1838/ может быть увидишь что-нибудь полезное для себя…
Попробовал в УПП….
Почему-то не отображает документы дополненные в конфигурацию…
проверил на варианте (13) — нашло все,
НО не хватило памяти…
В отчет будут попадать только документы имеющие реквизиты «Организация», «Ответственный» — в этом то вся и задомка. У этих реквизитов типы «СправочникСсылка.Организации», «СправочникСсылка.Пользователи»
рульная штукенция море рутины отпало
Почему-то изменение настроек компоновки не влияет на вывод отчета, это невероятно печально…
Отчет хороший но работает крайне медленно — у меня за период месяц минут 5 строился 🙁 Пришлось писать самому — допишу выложу свой вариант.
Написал свой вариант отчета на базе построителя (платформа отчет «Универсальный») — скоро, наверное, выложу (а может и нет — еще не решил).
Провел замеры времени на рабочей базе за период = 1 месяц:
отчет NeeDiGeo — 8 минут
мой отчет — 15 секунд (как получилось сразу — оптимизацией скорости не занимался).
Написал не чтобы попонтоваться «вот какой я крутой», а с целью показать что в отчете автора есть архитектурный просчет — сначала все «запихать» в огромную таблицу значений, а потом ее обработать компоновкой. Зачем ? В то время когда есть пакетные запросы и всю подготовку данных можно сделать на стороне сервера БД, а потом просто вывести готовый результат.
(20) Выкладывай.
Только в СКД все равно результаты удобнее изучать.
Я про Построитель почти забыл в 8.1 🙂
Да, автору не мешает поработать над запросом, очень уж медленно 🙁
(21) Ну просто в СКД есть то чего сильно не хватало в построителе — нумерация строк, расчет доли от общего итога. А в целом мне платформа отчета «Универсальный» нравится больше.
спасибо коллеги за комментарии. до конца месяца возможно возьмусь оптимизировать, а возможно и переписать ). правда от СКД уходить не хочу, это факт.
(20) Пожалуйста приведите объемы базы — количество документов. Чтобы мне проводить тестирование на своих базах.
(24) УТ за месяц:
Документов всего: 50 000
Строк в документах всего: 500 000
Хорошая работа, Дмитрий. Спасибо, я плюсанул.
На здоровье! Но если честно руки не доходят переписать этот отчет через пакетный запрос. Может на след. неделе возьмусь )
А для 7.7 нет такой обработки?
А с какой целью модуль запаролен? ❓
Думал доработать, как минимум вывести настройки, отбор, выбор периода…
И выложил бы сюда.
Спасибо автору.Отчет очень хороший.Пригодился как нельзя кстати.
Спасибо за отчёт. Не смог разобраться, что откуда в нём берётся, а хочу получить ещё пару колонок — кроме «Проведённых документов» нужны «Проведённые по БУ» и «Проведённые по НУ».
Закрытый автором модуль формирует эти поля для СКД или сторонний разработчик может их добавить? Сколько это может стоит во втором случае?
Автору написал, но пока ответ не получил, поэтому спросил тут.
платформа 8.1.5.14, конфига УПП 1.2.34.1
Модуль открыть не могу
{ВнешнийОтчет.СтатистикаБазы(218)}: Ошибка при вызове метода контекста (Выполнить): {(17, 4)}: Неоднозначное поле «Документ.Дата»
<<?>>Документ.Дата МЕЖДУ &ДатаНач И &ДатаКон
по причине:
{(17, 4)}: Неоднозначное поле «Документ.Дата»
<<?>>Документ.Дата МЕЖДУ &ДатаНач И &ДатаКон
❓
Очень помогает в работе ежедневно
Все хорошо, но есть небольшая ошибка в логике. А если бухгалтер создает документ будущим или задним числом, то в запрос он не попадет на сегодняшнее число. Нужно брать дата изменения документа. Иначе может в день бухгалтер вбил 100 документов задним числом,а мы этого не увидим.
(34) Я бы это не назвал ошибкой. Это скорее отсутствие возможности ибо дата изменения документа есть не во всех конфигурациях. Отчет затачивался под типовую!
Пригодилось для анализ использования видов документов в 1С.
(36) Софтэксперт,
Если пригодилась плюсуйте. Не жадничайте!
как добавить группировку по месяцам в отчет?
Плохо что отчет нельзя настроить, беспонтовый отчет.
(39) Отчет можно настроить (я имею ввиду схему комопновки данных) правда в конфигураторе.
Спасибо за отчет. Тоже хочу отметить запароленность модуля/
Используется ли журнал регистрации?
Вид очет переделала под пользователя, им вообще только количество надо было по каждому сотруднику, не вдаваясь в подробности что они там назаводили.
Пригодился, единственное недостаточно гибкие настройки
Хорошая обработка. Нам очень пригодилась в работе. Пробовали ее на версии 8.1.Спасибо автору.
Да, забыла добавить, что в обработке для нас было важно именно замерить объем работы пользователей с документами. У нас у одного сотрудника зар.плата зависит от объема введенных в базы документов, поэтому давно искали такую.
Жалко что отчет только для 8.2 а для 8.1 нету
Плюс — отличная обработка
Минус — пароль..
итого 0 😉
Поработали мы с этой обработкой и обнаружили одну проблемку. Отчет не отражает реальной работы пользователей.
Поясню. Пользователь вводит документы допустим в январе фактически. В феврале поступили документы за январь. Пользователь занес их в феврале соответственно, но попали они в отчет за январь. Т.е.по факту часть работы пользователя теряется в отчете. Вот такая проблемка ))))
Может можно отчет на основе журнала регистрации сделать?
судя по выжимке из обсуждения — тут нужен комплексный подход с введением регистра сведений, фиксацией событий и отчетом по нему
тогда будет смысл и толк
Спасибо большое, очень помог отчет, ибо понадобилась такая информация очень срочно.
В конфигурации «Документооборот» 8 Корп в режиме неуправляемое приложение формирует пустой отчёт. Кто знает в чём может быть причина?
Спасибо за отчет!
Уточнение может надо было запросы не в цикле делать по каждому виду документов?
Не пробовали один запрос сделать? Интересно время формирования изменится?
Спасибо, полезный отчет.
Пожелание: добавить в запросы слово РАЗРЕШЕННЫЕ, чтоб можно было формировать под ограниченными правами.
Товарищ, что это «Не найден внешний набор данный «СтатистикаБазы»!? Отчет не работает!
(56) sashanox, Конфа, версия платформы я ж не телепат, товарищ …
Извиняюсь: 1С:Предприятие 8.2 (8.2.17.143), Управление производственным предприятием, редакция 1.3 БИТ.ФИНАНС 3.0
(1) зачем пароль на модуле?
ну или хотя бы можно было в список доступных полей вывести ссылку на документ, а не представление.
Элементарная задача с отсечением части документов по значениям каких-то реквизитов становится нерешабельной
(1) (59) alexx2510, как дети с этими паролями, чесслово
ИМХО, неприлично ставить пароль на платную обработку
при этом все знают, что пароль снимается в 5 сек
И да, на изменение настроек отчет никак не реагирует, все равно выводит данные, как задано по умолчанию
Это не отчет — а один большой косяк..
Отборы не работают, код закрыт… Настройки никак не влияют на вывод..
минус.
код закрыт — что за фигня. Минус
Вместо трех соединений проще указать такой запрос:
Показать
(32) lulyk,
Необходимо исправить модуль обработки:
В запросе использовался псевдоним документа КАК Документ. А так нельзя!
Необходимо выбрать другой псевдоним например Документ1
Что то не пойму как считается среднее количество строк ? общее количество строк / количество документов ? — где то сходится где то нет …. Заранее спасибо!
Не работает Ваша программа! )))
{ВнешнийОтчет.СтатистикаБазы.МодульОбъекта(218)}: Ошибка при вызове метода контекста (Выполнить)
по причине:
{(17, 4)}: Неоднозначное поле «Документ.Дата»
<<?>>Документ.Дата МЕЖДУ &ДатаНач И &ДатаКон
«Управление производственным предприятием для Украины», редакция 1.3 (1.3.53.1)
и + к этому исправить еще нельзя!
См. вложение…
Отчёт довольно старый, но если скажите пароль на модуль буду благодарен) Под 8.3 хочу доделать для себя.
Димон пора переписать на 8.3 или это кто-то сделает за тебя)