Три бухгалтерских отчета (ДДС, Товародвижение и Ведомость по контрагентам)




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

38 Comments

  1. CheBurator

    несомненный +1

    аккуратно и понятно.

    автор — жжот!

    Reply
  2. cs25

    Добротно так выглядит. Главное РАБОТАЕТ. Плюсуем !!!

    Reply
  3. Wolf_DA

    Прелестно

    Reply
  4. DimSpirt

    Действительно, хорошая ВЕСЧЬ! +1

    Reply
  5. DimSpirt

    Че за хня, плюсую, вылазит «вы уже голосовали»:(

    Reply
  6. support

    может ip адрес совпадает с уже проголосовавшим?

    Reply
  7. homichochik

    Спасибо, мне все нравится!

    Reply
  8. ruzelka

    Все нормально работает +

    Reply
  9. bear_

    Спасибо! в тему.

    Reply
  10. Aneka2

    то, что надо!!

    Reply
  11. Aneka2

    не, не то… отчет ДДС. откуда он в отчете итого берет? если вручную все сложиь приход «итого» не сходится с обобтной ведомостью. расход идет, а приход нет.

    Reply
  12. Strange Device

    Исправил

    Reply
  13. Aneka2

    СПАСИБО! 🙂

    Reply
  14. ignio

    Класс!!!

    Reply
  15. honor

    Не работает, отчет Товародвиждение, кнопки вообще оказались ниже уровня экрана (((

    Reply
  16. Strange Device

    У Вас что семнадцатидюймовый монитор с разрешением 800*600? Если так, то обработки действительно не предназначены для таких разрешений, они рассчитаны на рекомендуемые стандартные настройки… Скрины кстати прилагаются, делались на семнадцатидюймовом мониторе, как видите выглядят вполне неплохо…

    Reply
  17. StadoAdama

    а как насчет в ДДС добавить входящее и исходящее сальдо?

    Reply
  18. YSALIKHOV

    Большой плюс, но где 52 счет??

    Reply
  19. unelma

    СПАСИБО! Очень нужные отчеты!!!!

    Reply
  20. unelma

    Скажите, пожалуйста, можете ли добавить в отчет «ведомость по контрагентам» периодичность: месяц, неделя, день и формат вывода: в тысячах ден.единиц или в рублях (с указанием точности до какого знака). Это очень удобно, например период месяц, а разбивка внутри по неделям. Огромное спасибо!

    Reply
  21. Strange Device

    Могу, конечно…

    Reply
  22. rasswet

    отлично!

    Reply
  23. Арина10

    Спасибо!

    Скажиет а можно ли этот отчет для 1с Торговля использовать? он у меня чего-то жалуется- 50.1, значение не представляет агрегатный документ 🙁

    Reply
  24. Strange Device

    2(23) Нет, для Торговля и склад эти отчеты использовать нельзя. Они целиком и полностью основаны на остатках и оборотах по плану счетов, какового в ТиС-е нет.

    Reply
  25. corsar4ik

    А можно ли…

    использовать этот отчет по нескольким собственным юр. лицам, в комплексной?

    или он будет только по одному отображать?

    Reply
  26. karbofos

    Качал давно для комплексной конфигурации. Работает прекрасно. Клиент доволен. Автору респект.

    Reply
  27. TrinitronOTV
    Strange Device пишет:

    Исправил

    пользуюсь давненько вашим трудом, спасибо вам большое

    Reply
  28. rodoz32

    Спасибо!Очень пригодился!

    Reply
  29. Мать Тереза

    +5

    Reply
  30. Мать Тереза

    Спасибо за ваши труды, пользоваться удобно и приятно.

    Reply
  31. Мать Тереза

    Использую для отчета начальству.

    Reply
  32. Stepler2009

    Вроде нормальная.. но слишком намудрили

    Reply
  33. LenaKool

    Товарный отчет просто супер!!! Автору спасибо огромное +++

    Reply
  34. Smath

    Ведомость по контрагентам хороша! Но не могу никак выбрать группу контрагентов, т.е. папки выбираются, а в отчете пусто

    Reply
  35. buhinfo

    Отчет о движении денежных средств понравился, но не хватает анализа движения по 71 счету (в дополнение к 50 и 51)

    Reply
  36. Strange Device

    (35) buhinfo, ну, как бы отчет называется «Движение денежных средств», а не расчеты с подотчетными лицами, если очень хочется, конечно, могу и расчеты с подотчетниками сделать, но это уже совсем другая история, там и субконто другие…

    Reply
  37. Доня

    Новое — это хорошо забытое старое

    Вот и пригодилось!

    Спасибо

    Вот только кнопка «Выбирать группу справочника не работает»

    При установке это кнопки (точка) выводится пустой отчет

    А почему ???

    Reply
  38. Strange Device

    (37) Доня, Эта галочка не влияет на формирование отчета, она влияет только на кнопки подбора в Отборах, при наличии этой галочки в подборе можно выбрать папку, и в отбор попадут все элементы находящиеся в этой папочке…

    Reply

Leave a Comment

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