УСН 7.7. Книга учета доходов и расходов помесячно




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

28 Comments

  1. Арчибальд

    Пришлось перезалить из-за текста итогов

    Reply
  2. Hellgga

    Спасибо огромное.

    Но я теперь только завтра смогу скачать…:(

    Ольга.

    Reply
  3. artbear

    (0) Добавь, плиз, в описание актуальную версию УСН, на которой лично ты тестил обработку

    Reply
  4. Арчибальд

    (3) Яволь!

    Reply
  5. Ish_2

    Без расшифровки сокращения лучше не приводить.

    КУДИР — слово, чувствую, какое-то неприличное.

    И цвет зеленый..

    Reply
  6. Арчибальд

    (5) А уж я то как перепугался, когда это слово увидел…

    Но ты прав (уже второй раз, я считаю) КУДИР — цвета каки.

    Reply
  7. Hellgga

    Ну, и что ж Вам так не нравится?

    КУДиР — книга учёта доходов и расходов.

    Вообще-то Куд — это божество древних славян (отсюда: кудесник).

    Пужливые Вы, однако…

    Скачать всё ещё пока не могу…

    Reply
  8. artbear

    (4) Цитата: «Версию УСН взял самую свежую, октябрьскую (7.70.135)»

    ИМХО последняя 7.70.175 🙂

    Опечатка или реально для 135 сделано?

    Reply
  9. Hellgga

    Арчи, спасибо, вроде так.

    Только цвет, может, поменяешь?

    Во-первых, он очень тёмный, во-вторых кое-что напоминает…

    Пусть будет как у 1С — серенький.

    Reply
  10. Ish_2

    (10) По причине крайней молодости меня он не слушает.

    А Вы, Екатерина- женщина серьезная, обстоятельная…

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

    Reply
  11. Арчибальд

    (10) Капризный, как болонский собачка 😀

    Во втором файле — серый вариант.

    Reply
  12. Hellgga

    Добрый день.

    1. Спасибо. Сейчас скачать не могу.

    2. На «болонский собачка» я не похожа.

    С уважением,

    Ольга

    Reply
  13. Hellgga

    Саш, у меня почему-то скачалось опять так же…. цвета Хаки.

    Reply
  14. Арчибальд

    (14) Еще раз проверил. Первый (КУДИРмес) — хаки, второй (КУДИРсер) — серенький.

    Reply
  15. Hellgga

    Ну, не знаю…

    Теперь до понедельника.

    Reply
  16. LanaSN

    Спасибо, очень помог отчетик, особенно для таких организаций, где счетов-фактур за день около сотни, проверить книгу доходов и расходов за квартал целая проблема, а за месяц уже реально! А цвет я поправила сама 🙂

    Reply
  17. Арчибальд

    (17) См (12). Для капризных — серый фон 🙂

    Reply
  18. Hellgga

    (18) No comment…. 🙂

    Reply
  19. Len75

    Спасибо, отчетик удобный, Как цвет поправить..поделитесь опытом кто знает….

    Reply
  20. petrovskayaolga

    ВыделятьВходящийНДС = Константа.ВыделятьВходящийНДС.Получить(Дата2);

    {C:DOCUMENTS AND SETTINGSE.OGLODKOVAРАБОЧИЙ СТОЛНОВАЯEXTFORMSКУДИРМЕС.ERT(21)}: Поле агрегатного объекта не обнаружено (ВыделятьВходящийНДС)

    У меня вот такую ошибку выдает

    Reply
  21. Арчибальд

    (21) Это обработка ТОЛЬКО для УСН.

    Reply
  22. Gulak

    Спасибо! Очень нужная штука!

    Reply
  23. Gulak

    Вот бы еще была кнопка «обновить» как например в оборотках… а то каждый раз приходится искать место где остановилась… это уже когда на просмотр выводит…

    Reply
  24. Gulak

    И вот еще бы выбор периода… не за один месяц, а за ЭН-ный период например…

    Reply
  25. Gulak

    Может я обнаглела совсем, но было бы очень приятно!

    Reply
  26. Gulak

    за ранее СПАСИБО! (на всякий случай!)

    Reply
  27. Gulak

    по цвету зря вы накинулись! зато сразу видно, что это не штатная КУДиР!

    Reply
  28. Доня

    Скачала серый вариант

    Спасибо Все хорошо открывается

    Только разобралась — это же для Конфигурации УСН !!!

    Reply

Leave a Comment

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