<?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='\
Отчет без формы (нет отборов). Еще итоги по контактной информации выводятся. В общем минус
(1)
Может быть и минус, но найдите мне более лучшие аналоги. 😉
Когда найдете, тогда и поговорим.
Делал на скорую руку, не до нюансов типо итогов было, но пользователи юзают и не жужжат.
думаю, и другие пользователи будут пользоваться с удовольствием, ведь не все же перфикционисты.
имхо мне — не принципиально 🙂
И что?
Элементарный «Универсальный отчёт» справится с этой задачей ничуть не хуже. А он нынче есть почти во всех конфигурациях.
(4) не знаю, в УТ 10.3 в универсальном отчете есть только разрезы по регистрам накопления (а не сведений). А если вы про конструктор отчетов, то пользователям боязно такую штуку давать, еще лишнего увидят. Пусть контролируемо смотрят только контактную информацию.
(3) по мне тоже. большинство пользователей за годы 1с8 уже научились пользоваться стандартными отборами СКД
(5) В БП 1.6 и то уже были регистры сведений в Универсальном отчёте.
(6) Там есть все РС или только некоторые, в частности регистры по контактной информации есть?
В УТ 10 нету такого отчета, я им пользуюсь, возможно будет полезен и другим пользователям не таких продвинутых конфигураций, не говоря уже про конфу Розница.
Тем более пользователю не нужно думать над структурой информации. Взял и вывел в шахматке… Не уверен, что кроссом можно вывести через универсальный отчет, хотя может и можно, но надеюсь это просто делается.
Посмотрел. Да, в БП 2 есть отчет по регистру, но кроссом не выводится. Выдает фигню, т.к. представление — не ресурс. Можно конечно, заморочиться и настроить пользовательское поле для детальных записей:
И уже по этому полю делать кросс-таблицу, но это все не тривиально для начинающего пользователя, взять готовый отчет проще.
(6) (7) Не мучайтесь. Вот универсальный Универсальный отчетhttp://infostart.ru/public/84642/
Если пользователю нужен готовый отчет, то пусть берет. Я не против 🙂
Может быть и минус, но найдите мне более лучшие аналоги. 😉
Когда найдете, тогда и поговорим.
(2) Вот например:http://infostart.ru/public/101526/
в типовых (в том числе в УТ 10.3), есть отчет по контактной информации:
в этом отчете можно выбрать источник получения информации (регистр, справочник)
и объекты по которым данная информация нужна
внешний вид итогового отчета
(10) Гм, действительно, такой отчет есть. 😉
(9) пример некорректный. Мне нужна была КИ физлиц, в основном, а вы мне контрагентов показываете. 😉
(8) еще раз повторю — иногда пользователю проще дать готовый отчет (или готовые настройки, не суть), чтобы он нажал кнопку и получил, а не обучать его использовать универсальные отчеты.
(12) Что-то ты без разбора стал буквально наваливать когда-то , где-то сделанные наспех вещи.
Вещи настолько элементарные , да еще и имеющие гораздо лучшие аналоги в типовых, что мне становится грустно.
Оно ,конечно , дело твоё. Но несолидно. Для Гения.
(13) век живи — век учись. 😉
Хотя нет, в Рознице такого отчета нет, а отчет из УТ без переделки не работает.
Вспомнил — я делал его для розницы.
Так что отчет остается актуальным, и товарищ Лунс, спасибо за критику, но — отчет полезен. 😉
Так что Ишь грустишь ты зря. Порой проще пять минут поковырять СКД, чем переделывать отчет из УТ для Розницы.
(12)
пример некорректный. Мне нужна была КИ физлиц, в основном, а вы мне контрагентов показываете. 😉
У Вас русским по белому написано в заголовке — (контрагенты, юрлица, физлица)
А я Вам показал аналог, сделанный не тяп-ляп за 5 минут, а качественно и удобно.
Учитесь 😉
(14) что значит отчет без переделки не работает?
в УТ 10.3.7.9 отчет такой есть:
возможности его более полные чем то, что ты разместил.
и ценность твой отчет имеет только для тех, кто не знает возможностей типовых конфигурации или пока еще не прочитал комментарий (10) в этой теме.
На самом деле он вреден. Так как дублирует типовой, причем дублирует не в полной мере. И приучает пользователей, вместо прочтения документации, пользоваться непонятными «обработками»
вывод: изучайте документацию дамы и господа. там много интересного.
(16) сохрани его из УТ, запусти в Рознице. Выдаст ошибку. Для не-программистов размещаю свой отчет. Лирику комментировать не буду. В Рознице такого отчета нет, кому надо, пусть юзает.
Возможности может и больше, чем у моего, но когда нужно сформировать отчет в Рознице, а готового варианта нет, думаю, мой отчет пока единственное решение. Или перепишите отчет из УТ, как вариант. 😉
(15) Возможно, у вас было много времени писать отчет. Я сделал быстро и универсально. Учиться тут нечему — если есть время — лабаем на отлично, нет времени — лабаем просто на хорошо.
И потом, чем ваш отчет лучше моего? Ваш отчет сделан не на СКД, соответственно у пользователя меньше возможностей крутить его так, как ему надо. Это касается отборов. Так что пока не убедили, Диего.
(17) конечно выдаст ошибку. ведь в конфигурации «розница» нет регистра «КонтактнаяИнформация»
А вот то, что твой отчет используя запрос к этому же регистру, тем не менее работает в «Рознице», надо считать чудом:
Это не лирика. Это фантастика!
(19) в Рознице 1.0.5.6 есть регистр сведений Контактная информация. Скриншоты приводить или так поверите?
А ругается он при открытии совершенно на другую вещь:
И потом, чем ваш отчет лучше моего? Ваш отчет сделан не на СКД, соответственно у пользователя меньше возможностей крутить его так, как ему надо. Это касается отборов. Так что пока не убедили, Диего.
Не, это не мое. Своё я бы не стал так нагло расхваливать 🙂
Если пользователь знает, что такое СКД — ему вообще никаких отчетов не надо. Он сам все себе нарисует.
А моим тупым бухам очень понравился тот юзер-френдли отчет: галочки где нужно ставить они умеют.
Если не убедил, ну и пусть. Больше обещаю не оффтопить.
(21) и опять не убедили. Выше я показывал, что нарисовать этот кросс-отчет на СКД не тривиально. Пользоваться отбором СКД проще, чем рисовать структуру отчета в СКД.
В рознице 1.0.5.6 такой регистр есть.
но так же там есть отчет «Универсальный отчет» который позволяет вывести информацию и из регистров сведений:
при этом, он сделан на СКД.
(22) По умолчанию, универсальный отчет предоставляет пользователю упрощенную форму настройки:
продвинутые же пользователи могут переключить режим в расширенный.
поэтому твой отчет уступает по всем статьям.
В БП тоже есть такой отчетhttp://screencast.com/t/jiJuynrfcdW
В общем резюмирую.
Суммируя все доводы приведенные выше, данный отчет является бесполезным и даже вредным.
Поэтому «-«
(23) ну вот видите, вы уже признали свою ошибку, сделанную сгоряча. По поводу универсального отчета я уже писал в (7), почитайте пожалуйста. Мой отчет не для продвинутых пользователей…а для обычных.
(26) конечно же, вы имеете право на свое субъективное мнение. Но пользователи, которые хотят готовый отчет, могут качать мой.
Кстати признаю один момент — в Рознице есть отчет по регистрам сведений, но настраивать его в кросс-виде не тривиально.
(28) платить или нет — это выбор пользователей. Если ему проще скачать готовый отчет, чем нетривиально ковырять схему кросс-таблицы СКД в универсальном отчете, он выберет мой отчет.
Насчет Розницы не знаю — у меня нет информации о том, когда там отказались от контактной информации, поэтому не могу предоставить вам развернутую информацию для каких платформ подойдет моя обработка, для каких нет. Главное требование — наличие регистра контактной информации. 😉
(30) Добавил в описание:
Нужно добавить что-то еще?
(32) спасибо. 😉
Спасибо. Это явно удобнее универсального отчета.