<?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='\
Положи пару картинок!
Что интересного есть в рассматриваемой обработке по сравнению с другими существующими?
Например, «Настраиваемый журнал документов» (UniJourn.ert) с диска ИТС умеет все тоже самое, плюс имеет много других «вскусностей».
Спасибо очень помогло
Спасибо!
Мелочь, а приятно!
Обработка UniJourn.ert формирует реестры документов, а данная очень полезная обработка выводит строки документов по уникальному полю
to Чебурашка: будут
to poppy: ну скажем проще мой отчетик по настройке, обрабатывает табличные части и это я на первый взгляд тока
да ещё чтобы мой отчет использовать не надо покупать ИТС диск, Абсалютно бесплатно 😉
Есть замечания. Если формируем реестр одного вида документа со своими колонками, а потом тут же по другому, но количество колонок меньше, то в реестр выходят колонки из первого отчета.
И еще. Красивее будет ввести группировку по документу если он табличный.Т.е. в первой строке первой колонки документ, вторая колонка заполняется по табличной части документа, а сам документ в каждой последующей строке не повторяется. Ну как то так.)
Ну насчет «выводит строки документов по уникальному полю» — универсальная печать документов тоже вроде такое умеет 😉
но это я так — погундеть… 😉
Бяка! 😉
Хочется нормальные фильтры по образу и подобию МножественногоФильтра — тогда можно выбирать в реестр очень гибко!
to vat-74: исправил, добавил возможность группировки, зацени
Чебурашка а чем тебе не нравиться множественный фильтр тут??? объясни
Хочу: реестр документов «поступление ТМЦ» по всем документам с кодом операции = «Купля/продажа или Поступление на отв.хранение», но кроме двух клиентов А и Б.. ну и с суммой взаиморасчетов, большей чем 200 тыс.
…???
Заметьте — я не сказал, что не понравилось, я — просто выразил свое неудовольствие куцыми возможностями фильтра. Кому -то — хватит, мне — НЕТ!!!
интересные идеи… но тогда прийдется отказаться от простоты интерфейса
Хорошая вещь, понравилась…
но есть одно маленькое предложение — добавить возможность вывода номера, даты и вида документа в отдельных колонках
Можно ли добавить сортировку и по другим (свободным) реквизитам документа?
to Legin: предложение хорошее, более информативно получается, так и сделал
to Merlin1975: сортируются тока по реквезиты которые выводятся, т.к. одинаковые реквизиты документов группируются в одну колонку.
Было бы неплохо еще и нумератор сделать и возможность выводить как по времени создания так и по видам доков
to DobroProd: есть переключатели сортировать по дпте документа или по виду.
не понял про нумераторы
Отличная разработка, актвно используем в нашей организции. Только вот всплыл такой момент:
добавляем фильтр например по Номенклатуре. Выбираем группу Номенклатуры (не конкретную позицию!!!) и тогда отчет не работает, так как видимо фильтр применяется только по значаению. А было бы очень удобно если бы отчет реагировал на групповые элементы справочников. Такое реально сделать ?
Заранее спасибо.
Да фиг знает 🙂 , не пробовал. Надо посмотреть
вроде подправил
вроде сделал, тестируйте
Молодца!
Обработка неплохая, только фильтр по номенклатуре действительно не работает (по другим реквизитам не проверял — расстроился сильно). Но все равно +
Спасибо от наших бухов!!!
лСтрДлина=Макс(Окр(Метаданные.Справочник(ВидСпр).ДлинаНаименования/2,0),лСтрДлина);
{C:DOCUMENTS AND SETTINGSАДМИНИСТРАТОРРАБОЧИЙ СТОЛРЕЕСТРДОКУМЕНТОВ.ERT(898)}: Поле агрегатного объекта не обнаружено (ДлинаНаименования)
так вот
Спасибо огромное, очень хорошая и полезная обработка
Огромное спасибо! Выручили!
Спасибо большое! То что давно нам было нужно!
Спасибо, очень помогла
пасиб!
Обработка клаас, но не могу сделать фильтр по реквизиту, значение которого равно 0.
почему-то у меня не формируется реестр, только «шапку» выводит
Даже не знаю что поставить (+ или -).
При повторном открытии отчета:
Для Инд = 1 По Метаданные.Документ(ТекВид).РеквизитТабличнойЧасти() Цикл
(252)}: Значение не представляет агрегатный объект (РеквизитТабличнойЧасти)
(37) странно, только у Вас такая ошибка вышла за несколько лет существования отчета. Конкретно что делаете?
Делаю реестр документов (документ не родной, дописан для своей конфы). Первое открытие — получил реестр настроил вывод по колонкам, настроил печать. Дважды вывел на печать. Записал настройки. Решил поменять для этого же документа фильтр отбора по другому контру и на тебе «здрасьте».
(38,39) Дальнейшие попытки вывести даже с записанными настройками приводили к ошибке (см. (37)). При открытии (37).
Надо бы 2 кнопочки добавить, чтобы всем видам документов галки ставить/снимать.
Обработка замечательная, но такая же ошибка выскакивает как в п.37 😥
А можно эту обработку адаптировать под торговлю и склад? потому-что в данном виде она выдает ошибку
ошибка как в п.37
Я бы подправил, но… уже ушел с семерки и смутно помню что я в этом отчете наваял 🙁
Если кто-то возмется исправить и выложит у себя, я не буду против
Суммирует реквизиты шапки по числу строк табличной части. Т.е. умножает числа шапки на количество строк ТЧ. =( Исправте пожалуйста.
При попытке открыть архив пишет что «файл поврежден или имеет неизвестный формат»?
Спасибо. Пригодилось.
Все бы хорошо,но нет всего малости, как очищать фильтр отбора.
очень неплохая вещь… только почему-то не всегда запятую в числах ставит :))
Давно пользуюсь, очень гибкая обработка, неплохо.
Спасибо большое! То что давно нам было нужно!
Спасибо большое! Очень пригодилась!
Спасибо за обработку
Обработка отличная. Спасибо большое!
Очень понравилась, спасибо.