<?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='\
1. Отрихтуйте форму. Привязки, рамочки и т.д. сильно повышают эргономичность.
2. Выводите в таблицу без заголовков колонок и строк. И что за микрокартинка в последней колонке?
3. «по состоянию на проведена» — а где дата?
Исправите — будет плюс.
не корысти ради…. исправил ошибки.
(2) Уже лучше. А если разложить ответственных лиц и комиссию на две разные рамочки, подписи сделать «… №1» и т.д. — станет совсем приятно для глаза.
Не то чтобы это были ошибки, смысловое я ещё не смотрела.
(3) буду благодарен, если посмотрите и укажите на смысловые ошибки
Выложена пустая обработка, автор, посмотрите, будьте добры
Спасибо огромный плюс, очень пригодилась =) Бухгалтера довольны
Исправил обработку, неправильно работала, выложил. Забирайте.
(7)
гм. что же вы исправили, если при открытии вашего отчета выдает ошибку:
{ОбщийМодуль.УниверсальныеМеханизмы(831)}: Значение не является значением объектного типа (Строки)
Если ДеревоМакетов.Строки.Количество() > 1 Тогда
(упп 1.2.29)
Не понятно, почему столбцы «Остаток расходов…» и «Расчетный остаток расходов…» заполняются одинаковыми значениями. Расчетный остаток должен рассчитываться, в таком случае могут возникнуть отклонения, отображаемые в последних двух столбцах. В этом смысл инвентаризации, мне кажется.
(9) рассчитываться бухгалтером и заполняться вручную — вы это имели в виду?
если это критично для вас, могу добавить галочку «не заполнять расчетный остаток»
Спасибо. Пригодилась. Хороший отчет
Спасибо! Мне очень пригодился бухгалтер был очень рад! отличный отчет у меня на УСО сформировался без проблем )))
Спасибо большое за труд!!! Пригодился.
Спасибо. Пригодилась. Хороший отчет
Спасибо большое хороший отчет, нам очень пригодился, бухгалтер безумно счатслив, как и я. Спасибо автору….
Спасибо! Мне очень пригодился бухгалтер была очень рада!
Вот блин 🙂 а наша контора в своё время нанимала 1С:хомнет на весь день, чтобы они доработки сделали, они и этим занимались. А мог бы сэкономить, да, если бы знал, что можно тут скачать. Хорошая мысля приходит опосля, как правило. Надо бы несколько разработок своих сюда выложить
А всё таки расчет последних двух колонок нужен, как ни крути… Ручками считать — это проще в екселе, через макрос, там хотя бы можно выгрузить в 1С (бух справку) и возиться меньше… Доработка не помешает
(18)
Предложите алгоритм расчета?
сижу думаю, пробую сделать.
Чисто логически для определения результатов необходимо арифметически высчитать сумму списания за месяц (первоначальную сумму поделить на срок погашния) умножаемое на кол-во месяцев использования за год, потом из всего этого повычитать то что списалось по расчетам программы. Как правило почти на рубли не идет.В зависимости от знака отнести на результаты
спасибо, отчет хороший, пригодится
попадают рбп по которым на отчетную дату уже давно кончился срок
либо по которым он еще не начинался
например рбп появилось в январе 2012, а я строю отчет на конец 2011 года
(22) Смотрите, что у вас числится на 97 счете. Именно от этих остатков и «пляшет» отчет.
ВЫБРАТЬ
ХозрасчетныйОстатки.СуммаОстатокДт КАК СуммаКСписаниию,
…
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&КонПериода, Счет В ИЕРАРХИИ (&Счет97), , Организация = &Организация) КАК ХозрасчетныйОстатки
(23) я не стала залезать в код
просто нашла другой отчет тут же на инфостате, который формирует все верно
Спасибо, отчет пригодился ))
Спасибо большое. Как раз то, что было нужно моему бухгалтеру :)))
Спасибо, за отчет! Собрался писать отчет, а он уже есть. Чуть подправил для своих целей и готово. От бухгалтеров спасибо.
Для УПП 48 релиз корректно отобразит данные? Он как формирует на конкретную дату? Или можно допустим что бы сформировался только за 2013 год?
Зря скачал. Все равно придется свой писать. 8 графа не верно заполняется. 76,01,2 счет не попадает в отчет.