Универсальная обработка по переносу документов.




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

66 Comments

  1. dis12345

    ошибка

    из бух 77 в нее же вчерашнюю

    Документ ‘Завершение работ’: загружено 0 элементов

    Документ ‘Закрытие месяца’: загружено 0 элементов

    Если СчетФактура.ДатаДок < ‘01.01.2006’ Тогда

    {Документ.ЗаписиКнигиПокупок.Модуль Документа(222)}: Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)

    Документ не проведен! :Формирование записей книги покупок 00000001 (31.01.08)

    Документ ‘Формирование записей книги покупок’: загружено 1 элементов

    ИначеЕсли СчетФактура.СчетНДС = 2 Тогда

    {Документ.ЗаписиКнигиПродаж.Модуль Документа(117)}: Поле агрегатного объекта не обнаружено (СчетНДС)

    Документ не проведен! :Формирование записей книги продаж 00000001 (31.01.08)

    Reply
  2. idw

    Это ошибка возникала не в данной обработке, а в документах Формирование записей книги покупок и Формирование записей книги продаж. А ошибка возникла из-за того, что в данные документы не перенеслись счет-фактуры. Чтобы ошибка не возникала, надо сначало загрузить счет-фактуры, а потом уже документы Формирований.

    Reply
  3. SM_2008

    Спасибо, пригодилась, все работает :)))

    Reply
  4. X_X_X

    Запарился искать по сути стандартную обработку для Зик, перекинуть то надо было документов штук 100, наконец нашел — работает без ошибок.

    Reply
  5. PavelBaryshev

    Опупунная прога, все работает в ТиС, спасибо автору.

    Reply
  6. Lars Ulrich

    однозначно + !!!! супер весч, подмогла 🙂

    Reply
  7. fantomask

    Супер!!! спасибо!!!

    Reply
  8. Aneka2

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

    Reply
  9. ivanovnm

    Кажется всеми обработками с инфостарта уже пытался пользоваться.

    Эта единственная, которой мне удалось перетащить документы. Спасибо автору.

    Reply
  10. rapk118

    Воистину — просто работает, то что нужно без затей.

    Reply
  11. Dozgd

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

    Аффтор — Благодарю!

    Reply
  12. Dozgd

    В смысле — коды товаров получаются разными в базе источник и базе приемник :))) из за этого возможно и дубли товаров появляются…. (не проснулся еСчё 😉

    Reply
  13. marlboro57

    Выгрузка документов завершена

    Документ ‘Банк. выписка’: выгружено 0 элементов

    И такое по всем докам. В чем вопрос может быть?

    Reply
  14. idw

    Надо указать период в котором есть эти документы.

    Reply
  15. tatianastp

    Работает без нареканий. Автору — спасибо!

    Reply
  16. alexey737

    Хочу выгрузить во вчерашнюю базу операции по лицевым счетам, мне выдает Документ ‘Операция’: выгружено 0 элементов

    Документ ‘Операция по л/с’: выгружено 0 элементов

    Выгрузка документов завершена

    Хотя период я указал верно и даже с запасом.В чем может быть проблема? Мне после свертки базы будет необходимо перенести документы за день который я пропущу, ищу подходящую обработку.

    Reply
  17. idw

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

    Reply
  18. laa

    Спасибо. Очень пригодилось. Работает!!!

    Reply
  19. bronn

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

    Reply
  20. boogie_woogie

    Огромное спасибо, очень нужная вещь!!

    Reply
  21. Iris-ocean

    бух справки не переносятся. а именно субконто

    Reply
  22. idw

    (21) в какой конфигурации?

    Reply
  23. Iris-ocean

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

    Reply
  24. idw

    (23) это естественно, обработка справочники не переносит, только документы. Для переноса справочников используй Универсальную обработку по переносу справочников с диска ИТС tranref.ert

    Reply
  25. NikVars

    Проверил на ЗиКе — работает!

    Reply
  26. Eillecho

    А у меня на ЗИКе выгружаются только документы без движений в журнале расчетов, так что за прошлые периоды нет смысла выгружать

    Reply
  27. AB3012

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

    Reply
  28. jkkkk

    Супер!!! Очень пригодилась….

    Reply
  29. Лена_Лена

    Спасибо, очень нужная вещь, так как работаю в двух базах.

    Reply
  30. Gregyshka

    Очень пригодилась

    Автору спасибо

    Reply
  31. nick_e

    Даеш такую же для 8.2!? 🙂

    Reply
  32. idw

    (31) если базы одинаковые, то можно воспользоваться обработкой из КД ВыгрузкаЗагрузкаДанныхXML82.epf

    Reply
  33. LPas

    Пригодилась. Спасибо автору

    Reply
  34. AndreyBuka

    из бух 77 в нее же вчерашнюю

    Документ ‘Завершение работ’: загружено 0 элементов

    Документ ‘Закрытие месяца’: загружено 0 элементов

    Если СчетФактура.ДатаДок < ‘01.01.2006’ Тогда

    {Документ.ЗаписиКнигиПокупок.Модуль Документа(222)}: Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)

    Документ не проведен! :Формирование записей книги покупок 00000001 (31.01.08)

    Документ ‘Формирование записей книги покупок’: загружено 1 элементов

    ИначеЕсли СчетФактура.СчетНДС = 2 Тогда

    {Документ.ЗаписиКнигиПродаж.Модуль Документа(117)}: Поле агрегатного объекта не обнаружено (СчетНДС)

    Документ не проведен! :Формирование записей книги продаж 00000001 (31.01.08)

    Reply
  35. idw

    AndreyBuka Закрытие месяца не переноси, а просто вручную создай и проведи. Так лучше будет.

    Reply
  36. zhleonid8

    1с7((

    Reply
  37. amatisol

    31) если базы одинаковые, то можно воспользоваться обработкой из КД ВыгрузкаЗагрузкаДанныхXML82.epf

    Ответили: (32)

    Reply
  38. amatisol

    шибка

    из бух 77 в нее же вчерашнюю

    Документ ‘Завершение работ’: загружено 0 элементов

    Документ ‘Закрытие месяца’: загружено 0 элементов

    Если СчетФактура.ДатаДок < ‘01.01.2006’ Тогда

    {Документ.ЗаписиКнигиПокупок.Модуль Документа(222)}: Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)

    Документ не проведен! :Формирование записей книги покупок 00000001 (31.01.08)

    Документ ‘Формирование записей книги покупок’: загружено 1 элементов

    ИначеЕсли СчетФактура.СчетНДС = 2 Тогда

    {Документ.ЗаписиКнигиПродаж.Модуль Документа(117)}: Поле агрегатного объекта не обнаружено (СчетНДС)

    Документ не проведен! :Формирование записей книги продаж 00000001 (31.01.08)

    Reply
  39. idw

    (37) — (38) накручиваем себе очки здесь? Зачем копировать предыдущие комментарии?

    Reply
  40. fin7

    Супер! Все работает! Очень пригодилась

    Спасибо автору!

    Reply
  41. Canabis220

    За три года опечатку на главной можно бы и исправить.

    Reply
  42. idw

    (41) Это какую?

    Reply
  43. Canabis220

    (42) «Сужествуйте» и дальше так.

    Reply
  44. corsar4ik

    Спасибо за обработку! Попробую и обязательно отпишусь в комментариях.

    Reply
  45. corsar4ik

    Отличная обработка! Все быстро, просто и понятно :)!

    Только вот..

    К сожалению, обработка мне не подошла, так как не загружает справочники по ссылкам =(

    Reply
  46. BurSer

    Замечательно ! Срочно понадобилось перенести данные из сбойной базы, искал, нашел. Автору — респект ! Тем более, что история этой обработки заслуживает отдеьного внимания. Всем рекомендую сначала прочитать комментарии к этой обработке — много интересного почерпнёте.

    Reply
  47. Nikola178

    мда, судя по описанию и комментариям обработка весьма полезная и функциональная. Автору большое спасибо.Будем тестить

    Reply
  48. Гость

    из бух 77 в нее же вчерашнюю

    Документ ‘Завершение работ’: загружено 0 элементов

    Документ ‘Закрытие месяца’: загружено 0 элементов

    Если СчетФактура.ДатаДок < ‘01.01.2006’ Тогда

    {Документ.ЗаписиКнигиПокупок.Модуль Документа(222)}: Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)

    Документ не проведен! :Формирование записей книги покупок 00000001 (31.01.08)

    Документ ‘Формирование записей книги покупок’: загружено 1 элементов

    ИначеЕсли СчетФактура.СчетНДС = 2 Тогда

    {Документ.ЗаписиКнигиПродаж.Модуль Документа(117)}: Поле агрегатного объекта не обнаружено

    Reply
  49. Гость

    доброго времени суток) подскажите как пользоваться этой штукой)

    Reply
  50. idw

    (50) выгружаем документы в базе отправителе, загружаем в базе приемнике. Ничего сложного. )

    Reply
  51. Гость

    извините за назойливость, но поконкретнее можно?)

    Reply
  52. idw

    (52) открываем базу из которой переносим, запускаем обработку TranrefDoc.ert На первой закладке Выгрузка галочками указываем какие документы выгружать, указываем период выгрузки и указываем файл выгрузки. Жмем Выгрузить. Дожидаемся окончания, затем и идем во вторую базу приемник. Запускаем обработку TranrefDoc.ert, переходим на 2-ю закладку Загрузка, выбираем файл загрузки и жмем кнопку Анализ, затем жмем кнопку Загрузить. Всё.

    Перед всеми этими манипуляциями делаем копии баз!!!

    Reply
  53. Гость

    спасибо большое))) ещё вопрос) на 8.2 бухгалтерии пойдёт?)

    Reply
  54. idw

    (54) нет конечно. Эта обработка только для 1С 7.7

    Reply
  55. dicwork

    А если документ уже существует в результирующей базе — он перезапишется или пропустится?

    Reply
  56. idw

    (56) пропускаются. Сопоставление идет по номеру документа.

    Reply
  57. CrazyFrog

    Хорошая вещь! Несколько раз выручала! А для 8.2 аналогичной нет?

    Reply
  58. zharkov.ss

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

    Reply
  59. zharkov.ss

    Хорошая обработка, документы выгружены , выбрал период и запустил. Потом загрузил из сформированного файла. Теперь бухгалтерии осталось провести нужные документы. Автору спасибо! Выручил.

    Reply
  60. LanaSN

    Спасибо, очень полезная обработка, часто встречаются ситуации, когда необходимо перенести именно документы и желательно не затрагивать справочники, что не сбить периодические реквизиты, поэтому — огромное спасибо, за такую удобную обработку!

    Reply
  61. Ламия

    Пользуюсь подобной вещицей очень долго, даже не помню, от кого она мне досталась, но по скрин- шоту вижу, что она. Замечательная обработка и спасала не раз, в глазах окружающих творя чудеса!

    Reply
  62. art010

    Из ТиС в Бух тоже переносит?

    Reply
  63. idw

    (63) переносит документы из любой конфигурации 1С 7.7 в любую.

    Только настроить надо сопоставление.

    Reply
  64. Lionee

    Опробую

    Reply
  65. user1011094

    Почему переносятся документы без наименований товара? Просто проставлен порядковый номер и цены.

    Reply
  66. idw

    (67) скорее всего у вас не сопоставлена номенклатура по КОДАМ. Поэтому обработка не может найти товар по коду.

    Reply

Leave a Comment

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