Простой перенос документов через текстовый файл




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

41 Comments

  1. CheBurator

    Для переноса доков между одинаквыми базами потянет?

    Reply
  2. CheBurator

    Днем попробую, как раз надобность возникла, две одинаковые базы — вторая = первая + 1 день, надо со второй в первую перекинуть… Буду пробовать днем, http://www.infostart.ru/projects/?id=181 еще есть — с первого раза не пошла — будем пробовать…

    Reply
  3. > Обработка распространяется бесплатно. Вы можете ее беспрепятственно использовать в коммерческих целях.

    Наглое вранье 😉 — запаролена!

    Reply
  4. > через текстовый файл c:/1.txt.

    а вот нет у меня диска С:…

    хоть бы можно было папки указывать в выгрузке/загрузке ;-(

    Reply
  5. Блин! Ну что мешало сделать выгрузку документов, а потом загрузку не в конец/начало дня, а добавить типа «с оригинальным» временем?

    Reply
  6. Да, и хорошо было бы не просто выдавать результат загрузки, а «скрестит» проверку и загрузку — т.е. в протоколе

    Загружен документ А

    — не прописана номенклатура (отсутствует)…

    Reply
  7. O-Planet

    какой сердитый чебурашка …

    Reply
  8. O-Planet

    > Обработка распространяется бесплатно. Вы можете ее беспрепятственно использовать в коммерческих целях.

    > Наглое вранье 😉 — запаролена!

    Нет, не вранье! Я же не написал, что можете менять исходный код! А ИСПОЛЬЗОВАТЬ — скоко угодно.

    Reply
  9. O-Planet

    ВСЕ ЧЕБУРАШКИНЫ ПОЖЕЛАНИЯ УЧТЕНЫ! КАЧАЙТЕ…

    Reply
  10. Спсб, но смотреть буду уже как след.раз припрет…

    Еще хорошо бы перенос справочников забабахать…

    Reply
  11. Super

    Нами эта обработка используется для связи удаленных точек, продающих топливо, с офисом

    Reply
  12. Super

    +1

    Reply
  13. egles

    А обработка может приход и расход из ТИС в Типовю перенести(корректно)?

    Reply
  14. O-Planet

    Может. Файл прототипов делаешь и вперед. У меня на паре фирм переносят.

    Reply
  15. не понял что за файл прототипов?

    Reply
  16. O-Planet

    ОпЫсание читай. А если кратко — он позволяет совместить несовместимое!

    Reply
  17. CheBurator

    Блин, подстава… а где перенос справочников??????????

    Не конечно можно, взять документ, запихнуть в него всю мою номенклатуру и перетащить один этот документ… -он по ссылкам потянет все нужные справочники?

    Reply
  18. BEPTEP

    Автор, а не могли бы Вы для примера/ознакомления выложить файл прототипа или его кусок(на примере одного документа). Желательно для переноса документов между РАЗЛИЧНЫМИ конфигурациями, например ТиС-Бух, УСН-Бух.

    Заранее спасибо

    Reply
  19. blinick

    Добрый день в папке не было файла прототипов вечером попробую ну так в принципе довольно клевая штука

    Reply
  20. viddik

    Пример файла прототипов в студию! Не для среднего ума его формат…

    Reply
  21. passerg

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

    Reply
  22. mvntula

    При наличии д-та в «приемнике» добавляется еще один

    Reply
  23. gif

    Ерунда.Тащит не учитывая время.

    Reply
  24. O-Planet

    (20), (23) Хм… Давно наверное не обновлял я этот отчетик. Сейчас и прототипы (пример) есть, и по текущему времени можно сохранять. Обновляю…

    Reply
  25. toppeadop

    Мои лыжи не едут?

    Код
    Форма.ДобавлятьТовары.Доступность(0);
    {C:\1C\INFOSTART\PERENOS\ЗАГРУЗКА ДОКУМЕНТОВ.ERT(1391)}: Поле агрегатного объекта не обнаружено (ДобавлятьТовары)

    Показать полностью

    Reply
  26. toppeadop

    и еще…

    Если Спр.НайтиПоРеквизиту(«КодПриПереносе»,Номер,1)=0 Тогда

    {C:1CINFOSTARTPERENOSЗАГРУЗКА ДОКУМЕНТОВ.ERT(382)}: Неверное имя реквизита!

    это я из бухгалтерии в торговлю пытаюсь перенос сделать.

    Reply
  27. O-Planet

    Блин-блин-блин… Кажись выложил спец версию, кое-для кого избранного адаптированную. Сейчас исправлюсь…

    Reply
  28. belka555

    Клево!!!

    Reply
  29. valya977

    Большое спасибо!Если б такая же обработка была для 8ки,жить стало бы легче.

    Reply
  30. O-Planet

    (29) ВООООТ!!! А то все: КД, КД… 🙂

    Reply
  31. vikglushkov

    А случаем ни кто не поделится файлом прототип для переноса документов из Торговля в Бухию

    Reply
  32. flaks

    Спасибо! Очень помогают такие обработки!

    Reply
  33. PEDuCKA

    Оброботка спосла уйму времени. Пришлось переносить документы за всю рабочую неделю, вручную заняло б пару дней минимум, а тут справился за пару часов.

    Интуитивно понятный интерфейс, никаких проблем с использованием не возникло, освоение заняло максимум 5 минт.

    Огромное спасибо!

    Reply
  34. Iksteram

    и мне помогло, спасибо 🙂

    Reply
  35. viknab

    Поделитесь файлом прототипа для переноса

    Reply
  36. Текстовый

    все почти корректно перенеслось. спасибо

    Reply
  37. Nikolenka

    Надо попробовать из Бух в Бух перенос сделать…

    Reply
  38. korida

    Простенько. Кого-то вполне может устроить.

    Reply
  39. selen

    Перенеслось из Торговля в торговля….

    Reply
  40. ras5656

    Оброботка спосла уйму времени. Пришлось переносить документы за всю рабочую неделю, вручную заняло б пару дней минимум, а тут справился за пару часов.

    Интуитивно понятный интерфейс, никаких проблем с использованием не возникло, освоение заняло максимум 5 минт.

    Огромное спасибо!соглашусь, спасибо

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

    Мне понравилась-работает быстро, 39 тыщ объектов выгружает 25 сек, загружает 45-60 сек. Не проводит доки, ну это ерунда-стандартной провела и все, самое главное быстро и качественно. Но минус есть- создает доки с номерами от 1 и вперед и если документ уже был, то он дублируется.Хотя как вариант рассмотрела-загружаю из магазина и смотрю, что конкретно они меняли в накладных(любят у нас не так отгрузить, как выписано), хотя все по телефону оговариваем,а тут-наглядно, мои доки проведены, а их создались непроведенные , а накладных там максимум пару штук в день, 2 раза в неделю.

    Reply

Leave a Comment

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