<?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='\
(0) Взгляни у меня «Комплект отчетов…»
Разумеется, плюс.
(1) Посмотрел. Отчет по списанию — идея та же.
НО
Вы программеры любите эффектно вызвать отчет, а мы бухи, любим красиво распечатать. 😀
(2) Я потому и послал, что идея та же.
А что, неужели так уж некрасиво распечатывается? 😥
(3) Просто нелюблю количество под суммами — нечитается.
(4) Я тоже этого не люблю. Заказали клиенты… 😐
а сортировать по инвентарному номеру можно?
(6) сортировка в отчете стандартная, но если надо, за плюсик можно сделать 😉
Очень хорошая обработка ! Большое спасибо!
Действительно,стоящий труд…спасибо.
Очень достойно!!! Спасибо
сделайте, пожалуйста, а плюсик уже поставила, спасибо
:{}
(11) (12) Сделано, пользуйтесь 🙂
Хорошо работает, наглядная и читаемая форма.
классный отчет, как раз то что искал…….+
Ребята Помогите. Есть Эта обработка «Материальный Отчет DS» только для бюджета. Как раз все подходит, только не хоз.расч. план счетов.
(16) Для бюджета у меня нет, но думаю ваш программист легко мог бы переделать этот отчет. Насколько понимаю, нужно только счета построения отчета заменить на бюджетные.
Был бы рядом програмист. а так он к нам приезжает рас в год, и то на баланс. (конце года) Ребята помогите………….
(18)
Попробую помочь если никто из программистов, работающих с бюджетом, не откликнется. Это было бы проще.
У меня нет бюджетной конфы, поэтому дай мне описание бюджетных счетов учета материалов в 1С в следующем виде:
Код; Наименование; Субконто1; Субконто2; Субконто3;
Например
Группа счетов 10; «Материалы» ; Материалы
счет 10.1; «Сырье и Материалы»; Материалы; МестаХранения;
Наименования субконто нужно взять в конфигураторе в плане счетов.
а дальше посмотрим.
(19) Счета в бюджетке — это справочник 😳
(18) (20) Тогда я пас.
классный отчет!!!
только зачем выводится код по субконто — ведь это аналитика в 1С, пришлось убрать
(22) Спасибо за коммент, раз так понравился отчет, можно и плюсик поставить!
Код субконто 1С большинство использует как инвентарный номер, поэтому он и выводится в отчете.
так то по материалам, а по контагентам и их счетам?
даже два плюсика поставлю
(24) Согласен, не очень красиво. Делал, чтоб вывести код статьи затрат, а все остальные стали выводиться до кучи.
Отличная форма! У меня раньше не по одному дню уходило, чтобы что-то сваять из стандартных отчетов по всем нашим объектам. А делать это приходится каждый месяц. В-общем, спасибо Вам!
Потскажыте плиз для бух. учета Украины подойдет, ито собрался делать тоже из «Подрядчик строительства».
(27) Попробуйте, потом расскажете. В любом случае будет легче этот отчет дорботать, чем новый ваять.
Добрый день. Помогите найти обработу — «РЕЕСТР закупок». но есть нюанс, в том что, я хочу выбор производить по коменариям.
спасибо за обработку!
(30) Пожалуйста. Если понравилось, можно плюсик поставить.
Спасибо, но жалко, что нет возможности суммирования строк по совпадающей номенклатуре для нескольких выбранных складов. Собственно, для этого и скачивал.
Для бух. учета Украины, конечно не подходит но за основу взять то что надо, правда много процедур глобального модуля которых в бух. учете для Украъни просто несуществует, мне надо было делать попроще , вот я и взял чуть другой за основу отчет. А так отчет очень хорошый, видно что проделано много работы, большой плюс.
(33)Спасибо. А где «большой плюс»?
замечательный отчет. Поставила бы два плюса, да модератор не позволит
(7)
Спасибо! Отличный отчет
Спасибо большое за прекрасные отчеты! Очень помогли!
Спасибо огромное за отчет! Он великолепен!
Подскажите пожалуйста, как в отчет добавить Номенклатурную группу материала и нормы расхода
Скачала, плюсик
спасибо пригодился
Великое СПАСИБО! Очень помогла данная обработка. Жизнь спасла)))Иначе бы!
Хорошо, что есть такие люди, как Вы!