Бухгалтерская справка "Расчет налога на имущество"




Принцип обмена данными из 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='\

14 Comments

  1. karagiosis

    Обнаружен недочет. По п.3 и п.5 по в месяцах, в которых не было движения по основным средствам на соответствующих счетах, не показывается текущий остаток. В ближайшем времени исправлю

    Reply
  2. karagiosis

    Исправил

    Reply
  3. karagiosis

    Обнаружил (пока не исправимую ошибку): если выбрать период, включающий 2 последних месяца (ноябрь — декабрь) — не корректно отрабатывает запрос набора данных к оборотному регистру бухгалтерии (данные по пунктам 1 и 3 пропадают по некоторым месяцам). Смотрел в консоли запросов — при периодичности «месяц» и методе дополнений «Движения» — получаются данные на первый и на последний месяцы, пропуская промежуточные. С чем может быть связано — не могу понять. Возможно, что наши бухгалтера не внесли еще информацию по ОС за последний период. Данные за период январь 2013 — октябрь 2013 считаются корректно.

    Reply
  4. jonybanchicov

    Там короме зданий и сооружений нужно включить еще одну группу: «объекты с гос. регистрацией» по моему как — то так

    называется. Например, рельсовое полотно. Еще не земля и не здание , но тоже туда ….

    Если не прав, поправьте….

    Reply
  5. karagiosis

    (4) jonybanchicov, благодарю за замечание. Задал вопрос специалисту, жду ответа. Если подтвердит — добавлю

    Reply
  6. karagiosis

    Добавлено

    Reply
  7. karagiosis

    (7) husky, был изменен принцип формирования исходной модели данных. Ранее это был отчет на СКД, но в виду того, что я столкнулся с проблемой «пропадания» данных при некоторых условиях, при использовании дополнения в виртуальной таблице (и не смог ее оперативно решить)- решил его переделать на «старый манер». Важны были верные данные, а не красота решения и скорость… Хороший ли он сейчас — не могу сказать, у каждого человека свои критерии )

    Reply
  8. Sergyhmao

    Вроде как не учтен момент поступления земельного участка в собственность после 2013 г.? Два раза вычитается!

    Кроме того, в моем случае, плюсом по вновь введенному, в строку 3 почему то попал документ модернизация ОС в части того же земельного участка ( увеличение стоимости.

    Остальная модернизация правильно не учлась, а по земеле вошла в строку 3.

    Конф. — Управление производственным предприятием, редакция 1.3 (1.3.53.2)

    Reply
  9. karagiosis

    (9) Sergyhmao, если еще актуально — я добавил расшифровку в отчет — для проверки. Если нужно — напиши в личку — вышлю на ящик обновленную версию.

    Reply
  10. Гость

    Здравствуйте. Можно ли в отчет добавить Первоначальная стоимость ОС принятых на учет до 2013 и Амортизация основных средств принятых до 2013 с выводом списка по пунктам, для более удобного анализа отчета?

    Reply
  11. Гость

    (11) Владимир,

    Или добавить Остаточная стоимость ОС принятых до 2013 и остаточная стоимость принятых после 2013, с выводом списка ОС.

    Reply
  12. karagiosis

    (12) Владимир, поддержка отчета более не планируется. Код открыт. Можете добавить Сами.

    Reply
  13. a-m-gv

    Не актуален. Идея хорошая. Реализация не очень. Кто собрался скачивать обратите внимание:

    1. инв.номеров у отчете нет.

    2. В моем случае остатки ввели на 01/01/15 (свертка базы) позже 01.01.2013г. Движимое имущество с Датой принятия к учету между 01/01/13 по 31.12.14 попало в недвижимое.

    3. Расшифровок ячеек (элементарно, чтобы карточка ОС открылась) нет.

    Reply
  14. karagiosis

    (14) a-m-gv, по моим задачам, на момент времени разработки, этого было достаточно. За неимением аналогов (опять же на момент разработки) сделал, как видел эту задачу. Описание сделал максимально подробное. Не ленитесь, читайте, прежде чем скачивать.

    Reply

Leave a Comment

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