Автозаполнение валюты учета в БГУ8




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

11 Comments

  1. mvv1975

    Как известно в БГУ8 введен сквозной показатель — Валюта учета. Какие-то документы без её указания провести невозможно, какие-то можно. Ну а операции врукопашкую заполняемость валюты не проверяют. Плюс — перенос остатков практически не заполняет валюту учета. Таким образом по валютным счетам остатки валютных сумм становятся кривыми…

    Перейти к публикации

    Reply
  2. I2020

    Да любят бухгалтера ляпать ручные операции, и даже не задумываются об валюте.

    замечательная обработка в помощь самим же бухгалтерам.

    Reply
  3. nu_fguz_buh

    Только в некотрых ручных операциях была не проставлена валюта. Но быстро все исправили с помощью этой обработки.

    Reply
  4. AlexZOne

    Ох и намучились мы после переноса с этой валютой… Спасибо за обработку. Сэкономит время.

    Reply
  5. alex_fursov

    Добрый день! Создал операцию вручную в которой поставил сумму, но не указал сумма валюты, ваша обработка при нажатии на кнопку «Заполнить ничего не нашел. Может я что то не правильно делаю? Подскажите в чем моя ошибка. Заранее спасибо!

    Reply
  6. gosha13

    Спасибо. Сэкономил время.

    Reply
  7. CrazyFrog

    Скачаю и тоже попробую. Очень нужная вещь!

    Reply
  8. sodrk

    Спасибо! Но обработка потребовала доработки: не учитывались документы «Сторно» и «Корректировка записей регистров». Плюс по документам с движениями, но запретом проведения, изменения не сохранялись (пришлось изменить запись документа на запись отредактированного набора движений). Плюс были сделаны ещё некоторые доработки под наши требования, но они очень легко легли на предложенный код.

    Reply
  9. мастеровой

    (7) sodrk,

    если не сложно, киньте код для «Корректировки записей регистров» с записью отредактированного набора движений.

    или mvv1975 просьба отредактировать под реалии 2016 года.

    Reply
  10. mvv1975

    (8) мастеровой, пять лет прошло, и эта штука все еще актуальна… Хм. Логичнее тогда банально пройтись по проводкам валютных счетов и проставить сумму валюты равной сумме документа. Скажем, предоставить выбор периода, перечислить больные документы и тем у которых пользователь уставит галочки заменить проводки… Ну может быть и есть смысл в подобной штуке. На досуге что-нить такое сварганю

    Reply
  11. Agema

    (10) получилось? А то попалась база с косяками в валюте, есть сумма, а само субконто «руб.» не заполнено и не стоит сумма. Пока врукопашную исправляют, а так пригодилась бы.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *