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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *