<?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) Реквизит элемента справочника «номенклатура»
(3) За долгую жизнь я привык понимать как, единица измерения.
Если читать «Единица измерения — отчет»,
то что-то не то получается.
Если я не точен или недостаточно точен, поправьте меня пожалуйста.
(4) «Единица измерения для отчетов» — реквизит справочника номенклатура.
Еще «Базовая ЕИ», «ЕИ хранения остатков», «ЕИ для отчетов» (это она!), «ЕИ мест».
Поправил описание еще раз, так понятней?
+(4) Добавил скриншот, показывающий какую ЕИ я имею ввиду.
Нельзя ли добавить колонку «Цена по себестоимости», которая вычислялась бы как себестоимость, деленная на количество? Или, может, подскажете, как это сделать?..
(7) Сам добавил, прошу прощения за беспокойство.
Спасибо огромное. По сути, сделали работу 1С по доработке глючного оригинала
А почему результаты в столбцах «Количество», отображаемые стандартным отчетом отличаются от результатов, отображаемых вашим отчетом?
Причем только по некоторым товарам из группы. По одним товарам все совпадает, по другим — в вашем отчете количественные данные больше.
(10) То есть количество в единицах хранения отличается от стандартного?
Странно остальное полностью типовой отчет… возможно из-за версии конфигурации… У Вас какая версия УТ?
У меня 10.3. Без изменений — стандартная конфигурация. Отличия в столбцах «в ед. хранения»
(13) 10.3…. а дальше? У меня то нет различий…
10.3.1.17
Понятно…старенький…
Вы можете сохранить этот отчет как внешний и кинуть мне его на мыло? Мыло кинул в личку..
Отправил
(17) Посмотрел одним глазком… Дело в том что действительно у Вас старый релиз и на нем не работает вот что:
В Вашем релизе в запросе используется «ДатаОтчета», а сейчас используется «ДатаКон», по этому видимо отчет в Вашей базе формируется на пустую дату (по есть на текущий момент) отсюда и отличия…
Варианта исправления 2:
1. Обновиться
2. По аналогии с моими доработками сделать доработки в своем отчете
Спасибо большое за совет!
Скорее всего поступлю по второму варианту 🙂 Поскольку не знаю, собираются ли делать обновления 🙂
(19) Пожалуйста! Найдете косяки пишите мне в личку 🙂 А то стыдно 🙂 Пока смотрел, сам нашел небольшой косячёк 🙂
скажите пож-та, а можно в настройке в «группировки строк» при выборе поля добавить ДокументОприходования?
Как ты это сделал. у меня отчет ни в какую не хочет отображать значение по новой колонке.
Пользовался данным отчетом, все нравилось, все отлично. Выводились остатки одновременно и на складах и в рознице. Но вдруг в один прекрасный момент, уже в этом году вдруг склады отвалились. Сейчас выводится только розница. В чем может быть проблема?
тема ещё поддерживается?
(24) Неа, устарело это все уже
Случайно для 8.2 не делали подобного?
(25) доработал для УТ 10.3 для 8.2. Могу выложить в новую тему? Вас добавлю в качестве изначального автора
(27) Конечно, выкладывайте.