<?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='\
Не удобно, что нужно создавать операцию в ручную, сделали бы привязку к документу передача материалов в эксплуатацию.
Это разные задачи, моя была в передаче МЦ с одного сотрудника на другого уже переданного в эксплуатацию материала (то есть собирается все, что числится за данным сотрудником по счету МЦ.04, и перекидывается на другого). Если же делать автозаполнение через стандартные документы «Списание материалов из эксплуатации» и «Передача материалов в эксплуатацию», то мороки будет гораздо больше, а смысл останется тот же.
Скажите,пожалуйста, какими проводками отразить этот перенос МЦ между сотрудниками в документе «Операции, введенные вручную»?
Проводки ДтМЦ.04 — КтМЦ.04. В кредите — с кого переносим, в дебете — на кого. Сама обработка делает то же самое, просто она нужна, когда на сотруднике висит этих мц по самое не хочу и надо найти, что именно на нем висит, и вбить пару десятков позиций — у нас как раз такая ситуация.
А так все это можно и ручками делать.
Уважаемый warden, мне все-таки
Обработка не создает документ, она его всего лишь заполняет.
Документ может быть пустой. Впрочем, если в нем есть строки, они будут удалены. Почему так? Во-первых, обработка не будет каждый раз создавать новую операцию, в принципе, это не смертельно, можно ненужные и пометить на удаление, но гораздо проще перезаполнить уже существующий документ. Во-вторых, чтобы создать новый документ программно, нужно знать как минимум его дату (а вдруг вам нужно создать не сегодняшним числом, а неделей назад), организацию (без нее не проведется, а откуда мне знать, на какую организацию вам нужно, организация по умолчанию не всегда указана), то есть это уже два реквизита, которые нужно заполнить, вместо одного «Документ переноса». Согласен, минималистски.
Все, что нужно сделать, выбрать сотрудников и документ и нажать «Выполнить», все проводки документа заполнятся автоматически. Если в документе уже были проводки, они сотрутся. Дата, на которую выясняется наличие МЦ у сотрудника — это дата самой операции. Вот и все.
Вот теперь понятно!:) Спасибо за информацию!
Штука хорошая, только в моей базе субконто2 соответствует МОЛ. Ещё в данной обработке не хватает склада, в моем случае субконто 3. Перемещение может быть не только с МОЛ, но ещё и со склада на другой склад.
Всё равно пригодилось, только чуть-чуть подделать под себя
кстати, проводка делается не совсем корректно:
забалансовые счета ни с чем не корреспондируют, а данной обработке происходит корреспонденция счета МЦ.04 с самим собой…
Было бы лучше уйти от такой корреспонденции, и разбить одну проводку на две, как требует теория бухгалтерского учета
Девушка, это было давно и вообще неправда:)
А я согласен с YuliaYVS две проводки мне кажется более правильно.
Обработка вполне работоспособная. Немного пришлось доделать под себя.