Анализ закупок в бюджетном учете




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

32 Comments

  1. mvv1975

    Анализ закупок для ББУ8 и БГУ8 в разрезе КОСГУ, контрагентов и номенклатуры.

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

    Reply
  2. gizmotrons

    Немного поигравшись с переименованием имен счетов ЕБСПУ был приятно порадован. отчет понравился, осталось потестить.

    Reply
  3. mvv1975

    (1) Не понял насчет наименований? Я вроде их правильно написал — и для БГУ и для ББУ.

    «осталось потестить» — Вы что мне плюсик без тестирования поставили? Зачем?

    Reply
  4. Isa

    Отчет хороший, спасибо! Только бы ещё добавить группировку по группам номенклатуры, с бюджетников требуют такие данные.

    Reply
  5. mvv1975

    Интересно, кто качает для 8.1?.. Неужели есть еще кто на ББУ8 работает?

    Reply
  6. Inetguru

    Отчет понравился. Мы используем конфигурацию Воинская часть вер.1 (написанная на основе бухгалтерии бюджетного учреждения). Поэтому при открытии отчет выдавал ошибки о не обнаруженных элементах ЕБСПУ. Пришлось править наименования.

    Reply
  7. Inetguru

    s,

    Reply
  8. Lenchik

    {Справочник.ВнешниеОбработки.Форма.ФормаЭлемента(180)}: Ошибка при вызове метода контекста (Создать): Ошибка подключения внешних метаданных: Ошибка загрузки документа.

    Внешний отчет не может быть прочитан текущей версией программы.

    Вот что выдает в БГУ 🙁

    Reply
  9. mvv1975

    (7) Вы наверно пытаетесь запустить для версии 8.1, а БГУ — это 8.2

    Reply
  10. Lenchik

    😀 8.2 конечно

    Reply
  11. bkn_oktava

    Замечательный отчет! Спасибо!!!

    Reply
  12. sp01

    Спасибо за отчет!

    Reply
  13. dopolnenia

    Отчёт то что надо, главное с энтузиазмом поиграться в настройках

    Reply
  14. -Random-

    плюс

    Reply
  15. tv_kz

    большое спасибо!!! отчет суперский мои бухгалтера в восторге

    Reply
  16. kurvik

    Спасибо за отчет.Бухгалтера как раз спрашивали.Вот бы ещё добавить группировку по группам номенклатуры-было-бы замечательно.

    Reply
  17. ChLN

    Отчет работает и это главное

    Reply
  18. Ola_z

    Отчет очень хороший. Пригодится не только для бухгалтеров, но и для МТО. Надо протестировать на своей базе. Спасибо

    Reply
  19. Mirared

    Спасибо за отчет. Очень полезная штука! Бухгалтерам очень понравился этот отчет. Еще раз спасибо!

    Reply
  20. ГБУ

    ОШИБКА!

    Когда в отчёте убираешь галочку с «Номенклатура» то выдаёт ошибку:

    {ВнешнийОтчет.АнализЗакупок.МодульОбъекта(406)}: Ошибка при вызове метода контекста (ПолучитьОбласть)

    Область=Макет.ПолучитьОбласть(ИмяСекции);

    по причине:

    Область не найдена: Уровень4

    PS: Бухгалтерия государственного учреждения, редакция 1.0 (1.0.7.2)

    1С:Предприятие 8.2 (8.2.14.540)

    Reply
  21. mvv1975

    (19) А смысл в таком отчете без номенклатуры? Ну в принципе конечно надо бы без ошибок делать… На днях исправлю — заодно и группировку по группе номенклатур добавлю

    Reply
  22. Mirared

    неплохо было бы в отчет добавить колонки с данными начального и конечного сальдо.

    Reply
  23. Mirared

    +(21) это как предложение для доработки

    Reply
  24. xaker1C

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

    Reply
  25. xaker1C

    Не работает в БГУ 8.2 в 1.7.2

    Reply
  26. mvv1975

    (24) Какая ошибка появляется? С какими настройками?

    Reply
  27. annkod

    надо потестировать, с первого взгляда понравилось)

    Reply
  28. Ola_z

    Отчет очень нужный. И не только для бухгалтерии. У нас закупками занимается и отдел информатизации и МТО. И ведут контроль за расходованием статей каждый месяц, каждый квартал. Спасибо. Нужно будет попробывать на своей базе.

    Reply
  29. vera4ka

    спаибо,скачала и ушла тестить))

    Reply
  30. vera4ka

    можно вопрос? уплата налогов… когда оплачиваем поставщику ,например по 223 или др. статье, то есть увязка счета и косгу. т.е счет 302,23 это 223 статья и т.д. когда же оплачиваем налоги, то конечно корреспондирующий счет 303, на котором расходные косгу не участвуют. как-нибудь можно придумать, что если это налоги, тогда брать из Дт характеристика движения по дебету, ну или как-то по -другому, я не знаю. просто оплата всех налогов встает не на свои места.вы конечно может скажете, что это анализ закупок,а уплата налогов это не закупки, но ведь начисления налогов сюда попадают, тогда может можно поколдовать и с оплатой?

    Reply
  31. Sasha255n

    Вообщем то пригодится но если бы сделал отчет по исполнению договров т.е. допустим договор заключен на 500000 руб а оплатили по нему 300000 и остаток то для нас такой очень нужен

    Reply
  32. Жискар

    Спасибо. Классный отчет.

    Reply

Leave a Comment

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