Свёртка базы для БП 3.0




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

25 Comments

  1. maksa2005

    А смысл иметь внешнюю обработку, если они есть в штатной конфигурации и нормально работает???

    Reply
  2. kit

    (1) maksa2005, В описании указал, что смысл только в произвольной дате.

    Reply
  3. Borisych

    http://infostart.ru/public/379727 — более приемлемый вариант свертки?

    Reply
  4. kit

    (3) Borisych, А у меня не за деньги, а насчет приемлемости ещё неизвестно. Типовой вариант скорее всего надежнее.

    Reply
  5. demo-05

    Документы ввода остатков делаются? регистров по НДС? Есть демо-пример?

    Reply
  6. kit

    (5) demo-05, Разумеется, создаются. В основе штатная обработка.

    Reply
  7. bvv003

    День добрый!Выдает ошибку,

    Ошибка инициализации модуля: Форма.Форма.Форма

    по причине:

    {Форма.Форма.Форма(508,56)}: Переменная не определена (СообщенияДляЖурналаРегистрации)

    СоединенияИнфо = ПолучитьИнформациюОНаличииСоединений(<<?>>СообщенияДляЖурналаРегистрации);

    {Форма.Форма.Форма(584,70)}: Переменная не определена (СообщенияДляЖурналаРегистрации)

    ТекущиеСоединения = ПолучитьСтрокуСоединенияИИнформациюОСоединениях(<<?>>СообщенияДляЖурналаРегистрации);

    {Форма.Форма.Форма(755,75)}: Переменная не определена (СообщенияДляЖурналаРегистрации)

    ТекстыМакетов = ПолучитьТекстыМакетов(ИменаМакетов, СтруктураПараметров, <<?>>СообщенияДляЖурналаРегистрации);

    Reply
  8. kit

    (7) bvv003, Какой релиз?

    Reply
  9. Sharloc

    БП 3.0.42.54

    Аналогичная ошибка при запуске

    Reply
  10. kit

    (9) Sharloc, Выложил обновленную версию.

    Reply
  11. steelsi

    не работает, выдает ошибку Поле объекта не обнаружено

    {Форма.Форма.Форма(63)}: Поле объекта не обнаружено (ИнформацияОПользователе)

    Объект.ИмяАдминистратораИБ = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформацияОПользователе.Имя;

    Reply
  12. steelsi

    Не могу найти на сайте внешнюю печатную форму Акта о списании малоценных и быстроизнашивающийся предметов из документа требование-накладная для БП 3,0, нет ли у вас в наличии и сколько она будет стоить?

    Reply
  13. steelsi

    Релиз 3,0,42,73

    Reply
  14. kit

    (13) steelsi, А какую версию скачали?

    Последняя — Свёртка базы БП 3.0 релиз 3.0.42.54

    Reply
  15. kit

    (12) steelsi, Эл. адрес давайте, скину, которой я пользуюсь.

    Reply
  16. steelsi

    (15) mrgo7771@rambler.ru , спасибо

    Не могу найти на сайте внешнюю печатную форму Акта о списании малоценных и быстроизнашивающийся предметов из документа требование-накладная для БП 3,0, нет ли у вас в наличии и сколько она будет стоить?

    Reply
  17. ALLES

    А документы прошлых периодов (реализации, с/ф выданные) после свертки остаются в базе так-же как и сделано в типовом варианте обработки? Или же все сделано Документами ручного ввода и старых документов до даты свертки вообще не остается НИКАКИХ?

    Ибо типовая обработка оставляет муеву тучу документов проведенными (но без проводок): в них оставлены только движения по регистрам

    Reply
  18. kit

    (17) ALLES, Как в типовом варианте.

    Reply
  19. ураниум

    изменение периода — работа на 5 минут

    Reply
  20. kit

    (19) ураниум, Совершенно верно. ))

    Reply
  21. tailer2

    (16) steelsi, Документ «Передача материалов в эксплуатацию»

    Производство ® Передача материалов в эксплуатацию

    Документ предназначен для отражения операций передачи в эксплуатацию специальной одежды, специальной оснастки, инвентаря и хозяйственных принадлежностей. Документ можно вводить на основании документа Поступление (акт, накладная).

    Печатные формы

    Ввод на основании

    Reply
  22. Alex_E

    Вариантов не один))) вот мой http://infostart.ru/public/509628/

    Reply
  23. Yureckaya

    Александр, спасибо.

    Reply
  24. kit

    (23) Yureckaya, Рад, что пригодился.

    Reply
  25. Team leader

    (3) За описание свертки, спасибо — но ваша платная в отличие от данной.

    Reply

Leave a Comment

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