Выгрузка/загрузка документов из ТиС в Бухгалтерию 7.7




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2018-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='\

31 Comments

  1. iov

    Просто как вопрос а чем интересней чем типовые или немного подправленные в конвертации данных ?

    Если просто альтернатива то можно и не тратить буквы на ответ.

    Reply
  2. iov

    (0) «Для корректной выгрузки/загрузки документов необходимо привести в соответствие (уменьшить/увеличить) длину номера выгружаемых/загружаемых документов.»

    Вот это порадовало. Нет ну не серьезно. А как насчет глубины справочников?

    в бухии их всего 3 а в торговле (непомню 9 вроде).

    А банковские выписки?

    Эт так к сведению.

    как совет — написать универсальную процедурку приведение к длинне (штатную юзать не советую)

    для сокращения глубины справочников — сливать названия групп «невлезающих справочников» .

    Включить возможность незамещения объектов (например перегружаеп ПКО а они по ссылкам вытянут опять Реализацию а она товары и тд).

    И удачи на этом тернистом пути 😉 .

    Reply
  3. iov

    P.S. Плюс если найдется хоть одна фишка отличающая этот велосипед от заводского.

    P.P.S. Я не жадный- я экономный 🙂

    Reply
  4. New Look

    (1) Просто альтернатива. Нужен был именно такой состав документов и чтобы выгружалось/загружалось именно документами. Бесплатных обработок нужного функционала не нашел.

    Reply
  5. New Look

    (2)

    А как насчет глубины справочников?

    в бухии их всего 3 а в торговле (непомню 9 вроде).

    Согласен не проверяется.

    А банковские выписки?

    Не выгружаются.

    Включить возможность незамещения объектов (например перегружаеп ПКО а они по ссылкам вытянут опять Реализацию а она товары и тд).

    Вот этого не понял.

    И удачи на этом тернистом пути .

    Спасибо.

    (4) Фишек нет. За плюсами не гонюсь. Смысл выкладывания сюда — может кому то пригодится и сэкономит время.

    Reply
  6. iov

    (5) «Включить возможность незамещения объектов (например перегружаеп ПКО а они по ссылкам вытянут опять Реализацию а она товары и тд).»

    Объекты выгружаются по ссылкам из документов ? (контрагенты, номенклатура, другие документы ?) Если да то тогда надо учитывать иногда возможность выгрузки документов без выгрузки связанных объектов. например если изменились цифры или количество (быстрее и не тронет например документ — основание).

    За «За плюсами не гонюсь. Смысл выкладывания сюда — может кому то пригодится и сэкономит время.» Лови плюс. 🙂

    Reply
  7. iov

    Но таки советую Конвертацию данных посмотреть…

    Там быстрее и проще что-изменить даже стороннему человеку потому как действует универсализация.

    Reply
  8. New Look

    (6)

    Объекты выгружаются по ссылкам из документов ? (контрагенты, номенклатура, другие документы ?) Если да то тогда надо учитывать иногда возможность выгрузки документов без выгрузки связанных объектов. например если изменились цифры или количество (быстрее и не тронет например документ — основание).

    Обработка делалась под заказ и такая задача не стояла.

    Лови плюс.

    Спасибо 🙂

    Но таки советую Конвертацию данных посмотреть…

    Там быстрее и проще что-изменить даже стороннему человеку потому как действует универсализация.

    Давно собираюсь, да руки не доходят. А когда возникает необходимость как всегда нет времени на изучение 🙁 .

    Reply
  9. Dinkin

    Не поняла? Файл выгрузки есть, а файл загрузки?

    Reply
  10. New Look

    (9) Не понял вопрос.

    Reply
  11. Dinkin

    Извините. Все нормально. Я просто не посмотрела и скачала одну выгрузку.

    Reply
  12. vannav78

    «Для корректной выгрузки/загрузки документов необходимо привести в соответствие (уменьшить/увеличить) длину номера выгружаемых/загружаемых документов.»

    Вот это порадовало. Нет ну не серьезно. А как насчет глубины справочников?

    в бухии их всего 3 а в торговле (непомню 9 вроде).

    А банковские выписки?

    Эт так к сведению.

    как совет — написать универсальную процедурку приведение к длинне (штатную юзать не советую)

    для сокращения глубины справочников — сливать названия групп «невлезающих справочников» .

    Включить возможность незамещения объектов (например перегружаеп ПКО а они по ссылкам вытянут опять Реализацию а она товары и тд).

    И удачи на этом тернистом пути .

    Reply
  13. New Look

    (12) В чем смысл копирования сообщения более полутора летней давности?

    Reply
  14. sveta210180

    У нас все работает. Есть потребность в выгрузки из ТиС справочников номенклатуры , контрагентов и пр.

    Нельзя доработать данную полезняшку? И расширить список выгружаемых доков .Наша благодарность не будет иметь границ (в пределах разумного))))

    Reply
  15. New Look

    (14) Стучите в скайп — agersv

    Reply
  16. intech33

    Спасибо, обработка хорошая.

    Reply
  17. forexclubalex

    Возможно как то из Бухгалтерии в ТиС выгрузить?

    Reply
  18. New Look

    (17) Думаю, что возможно. Но не данными обработками.

    Reply
  19. forexclubalex

    а какими например?заранее спасибо!

    Reply
  20. New Look

    А не знаю. Не возникало надобности из бухгалтерии в ТиС переносить данные.

    Reply
  21. shrek_kz

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

    Reply
  22. jen5on

    Отличная обработка! Использую ее как пример для своих нужд.

    Reply
  23. Dinkin

    Использую данную обработку. Спасибо.

    Reply
  24. zayden

    Ваще супер автору респект работает даже с последними релизами

    Reply
  25. zweroboy

    Ребята, может я чего — то не так делаю, но прога загружает документы в бухгалтерию как — то непонятно. А именно: загружается только один документ из выгруженных, с последней датой.

    Reply
  26. New Look

    (26) Наверное что-то не так делается.

    Reply
  27. RDC

    Выгружает ли эта обработка Приходные кассовые ордера?

    Reply
  28. New Look

    (28) Нет.

    Reply
  29. ron1

    Обработка супер. Большое спасибо. Очень помогла в работе.

    И что интересно у нас 7.7 написана с нуля для нас на платформе 7.7. Ничего общего ни с одной типовой конфигурацией.

    Так обработка без проблем справилась со спр-ком Номенклатура.

    Reply
  30. Bugor73

    Спасибо огромное…осталось доделать только банк и кассу и возвраты…

    Reply
  31. jinnka

    спасибо очень нужная обработка

    Reply

Leave a Comment

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