<?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)(2) Добавлено!
Еще раз спасибо, так даже лучше
(6)Исправлено. какой вы однако эстэт, батенька
В отчете явно нехватает возможности отбора/подбора по счетам,субсчетам/группе счетов, субсчетов (включая забалансовые счета 002 и 003, МЦ.02-МЦ.04), + чтоб счет отображался в табличной части, + чтоб в табличной части производилась группировка по этим счетам/субсчетам. Материалы на счетах 002 и 003 вообще не попадают в отчет. Минус за отсутствие возможности какой-либо сортировки табличной части (материалы в таблице расположены в каком-то хаотическом порядке, найти что-либо и разобраться — бесполезная затея). + можно было бы добавить и графу цена за единицу (средняя). В этом виде отчет был бы незаменим для большинства пользователей. В таком виде не знаю кому нужен отчет, разве-что для микро предприятий, у которых 10 наименований материалов!
(8)
1) Изначально отсортировано по коду.
2) По поводу добавления дополнительной аналитики по субсчетам и забалансовым счетам — подумаю. Хотелось бы еще чьи-нибудь пожелания на этот счет услышать.
Зря вы так грубо, наоборот я сказала спасибо, удобная штука
(10) selinata2005, спасибо за поддержку. Может на самом деле что-то следует добавить по функционалу?
Меня в принципе все устраивает, т.к. у нас микропредприятие, мало материалов, но с другой стороны, я согласна с высказываниями по №(8), можно немного расширить аналитику.
ок. Сделаю возможно в следующей версии.
Спасибо, будем ждать.
Еще цены не хватает (Сумма/Количество) ))) у меня 99 % бухов просят, правда непонятно зачем…
Спасибо, Comper, всегда мечтал написать нечто подобное, ничто не наталкивало на правильный путь.. открыл модуль твоего созданного отчета, и все ясно понятно стало!!!! отредактировал и исправил под свое предприятие, интересссно очень, 5+ тебе!!!
(15) Добавлена цена
(17) нет рамки у цены и почему-то остатки отчет смотрит на начала дня (00:00:00), а по идее должен на конец дня смотреть по моему )))
(18) Исправлено
(19) Инфостарт как и Миста лучший отладчик )))
(20) точно 🙂
Лучше стало, но хотелось бы, чтоб отчет выглядел в виде таблицы, с выделенными графами (т.е. отобразить границы колонок)
(22) Готово
Спасибо, спасибо, спасибо. Вы класс!
Можно было бы немного посимпатишнее сделать и справку написать что он делает, но в общем неплохо. Плюсую
Хорошая обработка
К сожалению, отчет не работает по счету 10.7, т.к. там аналитика не по складам, а по контрагентам.
Просим доработать эту хорошую обработку (ввести выборку по контрагентам).
От наших бухгалтеров большая благодарность разработчику и +.
(27) Работает. Вы наверно хотели сказать, что хотелось бы добавить аналитику)
ок. Обязательно подумаю над этим.
Уточняю просьбу.
Мы просим добавить в отбор объект «Контрагент», чтобы можно было осуществлять отбор материалов в разрезе контрагентов.
Спасибо.
P.S. Надеемся, что фраза «Обязательно подумаю над этим» это не 1 апрельская шутка. 🙂
(30)
🙂
Просим реализовать в отчете возможность сортировки материалов или по наименованию или по коду.
Это будет экономить время еще больше.
Спасибо.
(32) Спасибо за предложение. Изначально отсортировано по коду. Подумаю на счет сортировки по наименованию.
Было бы не плохо иметь возможность скрывать не нужные колонки.Кроме того, как показывает практика поле Кодвесьма не информативен, если бы выводился Артикул, было бы куда приятнее. И еще неплохо было бы увидеть колонку с единицами измерения.
Я бы добавила еще сортироваку. И еще бы подпись мол внизу что с остатками ознакомлен и согласен.
Бухгалтерия предприятия, редакция 1.6 (1.6.13.3) чет у меня не работает по складам????
(36) Протестировано на редакции 1.6 (1.6.15.5). Все отлично работает!
Возможно вам стоит обновить свою программу.
Консольный отчет который делается за 5 минут, и код тоже оставляет желать лучшего
(38) Никто и не собирался доводить отчет до мегасовершенства. Тут есть все, что нужно, а главное бесплатно.
зачем модуль запаролил
Нужна группировка по складам, дай пароль, доделаю групировку, или сам доделай, только мне срочно нада, в головную сёдня отсылаем остатки материалов
вот ЭТО да еще и паролем закрываете ?
не стыдно ?
(42) Этот отчет создан для пользователей, а не для учащихся, и прекрасно работает.
Теперь для 82.
по сверке пригодилась спасибо
Мне пригодился, спасибо!