<?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='\
Лучше бы не разными шрифтами, а цветовой дифференциацией штанов сделал выделение.
Название душевное. Плюс вам!
(2) сразу написал что для регистров накопления (остатки) — это для тех кто в танке и читать описание не умеет.
Мне требовались остатки я и написал для себя. Если писать для всего, нужно время, которого мало.
И самое главное если все и всия назвал бы звездолетом! а так звездолетик )
(1) Это можно сделать стилями. Сейчас выделяются «приход» зеленым, «расход» красным. Можно сделать и целиком для строки фоном.
Делается одной строкой в css стили. class для определения приход/расход уже проставляется при выводе Тем кто знаком с css сделать фон строки — минутное дело.
Мне просто показалось выделение всего фона не наглядным и я оставил только текст.
Мало того, если есть собственные таблицы в css, добавить в обработку очень легко собственные стили.
Пожелание: уменьшить шрифт вывода информации по регистрам
(7) Этож HTML,
— можно в стиле указать нужный размер шрифта.
— можно зажать ctrl и колесом мышки уменьшить.
(8) Спасибо за оперативный и подробный ответ.
ЕРП 2.2.3. Хотел сравнить движение номенклатуры по РН «Товары организаций» для номенклатуры, но такой возможности пока нет. Причина: для РН «Товары организаций» объект Номенклатура «сидит» в измерении АналитикаУчетаНоменклатуры. Аналогичная ситуация для РН «Товары организаций к передаче», «Товары организаций к оформлению», «Себестоимость товаров», «Выпуск продукции», «Выручка и себестоимость продаж и т.п..
Нет планов доработать свою обработку под эти регистры для объекта Номенклатура?
В справке написано: Дополнительные фильтры по другим измерениям.
Это что значит?
Кстати на странице
только на Яндекс ссылка работает
(9)
Обработка берет все регистры накопления.
Не могу точно сказать по данным регистрам, так как у меня сейчас под рукой нет ЕРП,
на следующей недели попробую глянуть, почему не попадают.
Чтобы попали регистры в обработку, они должны быть регистром накопления (остаточным).
Доп. фильтры — это когда, на название колонки нажимаешь и тогда появляется список возможных фильтров по данному измерению. При нажатии происходит фильтрация с указанным отбором.
(9)
Понял я твою проблему. Добавил связанные объекты, теперь можно контролировать эти регистры.
Пользуйтесь на здоровье )
(13) Протестил в ЕРП, Погонял по фильтрам. Все отлично..
Вопрос, как можно использовать в качестве фильтра период записей в регистрах накопления? В частности, хотелось бы видеть записи только за январь.
Пожелание: когда просматриваешь записи в РН, то при большом количестве колонок хочется больше места. сдвинув разделитель областей влево. Но мешает ограничение по полю выбора объекта. Можно изменить форму обработки как в скриншоте?
(14) ок, я подумаю, что можно сделать,
а сейчас код открытый, вы можете менять под себя
Можно ли сделать вывод итоговой суммы по колонкам ресурсов для остатков? Пример в скриншоте