<?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) xten, Можно.
Однозначно плюс уже за оформление!
интересно и наверное полезно
Есть более мощная штука, но автор забросил её развитие
Универсальная ОСВ 2.0
Чтобы вывести по контрагентам, например — что нужно сделать ?
(6) kiruha, Развернуть по субконто (того уровня на котором ведутся контрагенты)
(7)
На 75 — это Субконто1
На 95 — это Субконто2
На 90 — нет
(8) kiruha, Как вариант так:
(9)
Спасибо.
Но все таки неплохо было если бы бухгалтерам в группировки можно было ставить более им привычные понятия — например вид субконто, реквизиты (того же Контрагента).
До такого они вряд ли додумаются )
Вообщем желаю успеха в дальнейшем развитии разработки )
А БП 3.0 на УФ есть такая?
(12) FractalizeR, Нет.
Крутая вещь, качну и подпилю чутка)) А то с нуля делать лениво)
удобная штука и интерфейс радует.
Отличная универсальная ОСВ.
Аккуратный понятный интерфейс. Респект !!!
А Для УПП подходит?
(17) chmv, На сколько мне известно (хотя могу и ошибаться) в УПП 2 плана счетов (отдельно БУ и отдельно НУ) — поэтому данный отчет Вам не подойдет.
Если не секрет, чем не устраивает типовой отчет ?
Очень бы хотелось, но не хватает денег chmv2005@mail.ru
Заранее огромное спасибо.
Запуталась с группировками
У нас в настройке аналитического учета стоит — количественный учет. Смогу ли я сгруппировать суммы в Вашем отчете в разрезе по складам?
(20) FKLDOZ, Возможность разворота по складам зависит от того есть на счете субконто «Склад» или нет.
(21) спасибо за ответ! Да, на 10 субконто склад. Значит возможна группировка по этому субконто?
в УПП не устраивает типовой отчет — т.к. не дает анализ по значениям свойств объектов
Это уж точно, бухгалтерские отчеты в УПП — это отстой…
(22) FKLDOZ, Группировка возможна по любому субконто (в типовых конфигурациях из обычно 3) , в том числе и по этому.
Ошибка инициализации модуля: Форма.ФормаОтчета.Форма
тии(ЭтаФорма, Идент
по причине:
{Форма.ФормаОтчета.Форма(620,2)}: Переменная не определена (ОбработкаНовостейКлиент)
<<?>>ОбработкаНовостейКлиент.КонтекстныеНовости_ОбработкаКомандыНовости(
{Форма.ФормаОтчета.Форма(1238,2)}: Переменная не определена (ОбработкаНовостейКлиент)
<<?>>ОбработкаНовостейКлиент.КонтекстныеНовости_ОбработкаОповещения(ЭтаФорма, ИмяСобытия, Параметр, Источник);
{Форма.ФормаОтчета.Форма(1294,2)}: Переменная не определена (ОбработкаНовостейКлиент)
<<?>>ОбработкаНовостейКлиент.КонтекстныеНовости_ПоказатьНовостиТребующиеПрочтенияПриОткры
и далее
{Форма.ФормаОтчета.Форма(593)}: Метод объекта не обнаружен (НачатьРучнойЗамерВремени)
УИДЗамера = ОценкаПроизводительностиКлиентСервер.НачатьРучнойЗамерВремени(«ФормированиеОтчетаОборотноСальдоваяВедомость»);
и далее
Отчет не сформирован!
Родительский сеанс не найден
расшифровка счета
{ОбщийМодуль.БухгалтерскиеОтчетыВызовСервера.Модуль(1658)}: Ошибка при вызове метода контекста (ПолучитьИзВременногоХранилища)
ДанныеОбъекта = ПолучитьИзВременногоХранилища(Адрес);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)
(26) ssn5810, Вы уверены, что выложили ошибки именно этого отчета? Ни одной переменной описанной в ошибке — в отчете попросту нет.
отчеты в УПП это жуть
Здравствуйте! Для конфиг. Бухгалтерия государственного учреждения ред 1,0 подойдет?
(29) Lisa_, Нет