Универсальная обработка: Выгрузка и загрузка справочников




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

99 Comments

  1. Starik

    Вопрос автору: что значит умеет работать с большими объемами справочников?

    Reply
  2. wolfsoft

    Ответ автора: не знаю, как сейчас, а в 2003 году эта обработка с ИТС использовала при работе объект «Текст», который, по крайней мере тогда, работал с файлами не больше определенного размера (точно размер не скажу, не проверял). В результате чего, если объем выгружаемых данных превышал этот лимит, то 1с (21 релиз) жестко вылетала. В моей версии используется объект «AddIn.V7TextFile» (расширение V7PLUS.DLL), который умеет работать с файлами больших размеров.

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

    Reply
  3. wolfsoft

    Вообщем-то, конечно, не Бог весть что, но простым пользователям может пригодиться 🙂

    Reply
  4. Starik

    Я делал выгрузку из ЗиК и забыл отключить спр. Адресный классификатор, ждал часа 2 и все вроде выгрузилось, файл занимал 15 метров (посчитал сколько городов, улиц, … у нас в России). +1

    Reply
  5. wolfsoft

    Спасибо за отзыв и плюсик 🙂

    Оптимизацией скорости работы этой обработки, увы, не занимался 🙂

    Из моего, там только ограничение выгрузки истории периодических реквизитов и работа с большими объемами.

    Все остальное — авторство 1С 🙂

    Reply
  6. wolfsoft

    2 (Maniac) Ни за что! :)))

    Reply
  7. sokol_chl

    а мне понравилось, спасибо

    Reply
  8. wolfsoft

    Спасибо за отзыв 🙂

    Reply
  9. Не являюсь зарегистрированным лицом. Но эта обработка очччень нужна.

    Reply
  10. wolfsoft

    А разве так сложно зарегистрироваться?

    Reply
  11. das

    Хорошая обработка, оч полезно

    Reply
  12. egles

    очень неплохо

    В общем +1, вот бы еще и документы прихода и расзода переносились было бы вообще супер!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    Reply
  13. константин

    Посмотрим чья лучъше?

    Reply
  14. wolfsoft

    to Egles:

    Посмотри вот это, может чем пригодится http://infostart.ru/projects/index.php?id=181&ref=987

    to Константин: Смысл? Я всего лишь подправил обработку от 1С. Я ее не писал.

    Reply
  15. Я начинающий программист С 1с не работала Язык в стадии изучения Кто поможет?!

    Reply
  16. 4321

    Есть обновление tranref.ert от 26.02.2006

    Reply
  17. wolfsoft

    И что там изменилось? 😉

    Reply
  18. wolfsoft

    Спасибо всем, кто оставлял комментарии и плюсовал рейтинг 🙂

    Reply
  19. MACTEP

    Не плохо!!!

    Reply
  20. MACTEP

    Я её уже встречал, вот только она была? или похожая?

    Reply
  21. wolfsoft

    2 МАСТЕР: «Переделанная стандартная универсальная обработка с диска ИТС», ее можно «встретить» на ИТС 😉

    Reply
  22. xotara

    Спасибо!+1

    Reply
  23. SvetDavudov

    попробую

    Reply
  24. Tyranosaurus Rex

    Отличная прога… а главное много вопросов не задает +1

    Дал бы +2 да неразрешають

    Reply
  25. Viktoria

    пробую

    Reply
  26. lik

    Спасибо !+1

    Reply
  27. wolfsoft

    Спасибо всем, кто голосует! Особенное спасибо тем, кто еще и комментарии оставляет! 🙂

    Reply
  28. braynt

    Ошибка при выполнении метода компоненты c:grivaze1SBDBv7plus.dll

    В чём может быть ошибка????

    Reply
  29. wolfsoft

    Попробуй поставить «v7plus.dl»l посвежей.

    Reply
  30. braynt

    Я взял с 484 релиза!!!

    Reply
  31. wolfsoft

    Дату длл-ки озвучь.

    Reply
  32. O-Planet

    Елки! Похоже мне пора выкладывать wrap.ert с отключенной пометкой удаления. Во рейтинг подскочит! 🙂

    Reply
  33. wolfsoft

    O-Planet:

    Вы считаете эти изменения равноценно-полезными? 😉 Тогда — вперед.

    Reply
  34. А что за неё голосовать, если она закрыта, и её нельзя посмотреть в действии?! За кота в мешке, что ли?

    Что за тайна? Можно обойтись и стандартной, в таком случае…

    Reply
  35. wolfsoft

    2 Stan: Если лень регистрироваться, чтобы скачать обработку, то уж регистрироваться, чтобы проголосовать точно не будешь. Так зачем мне ее тебе открывать? Пользуйся стандартной.

    Reply
  36. alisa

    пробую.

    Reply
  37. Тоска

    Подскажите бестолковому буху, почему пишет при попытке загрузить курсы валют с сервера http://www.rbc.ru в 1СПредприятие (7вер) — Не удалось обнаружить компоненту V7Plus.dll что Это значит и где взять данный длл

    Reply
  38. wolfsoft

    Это значит, что у Вас нет компоненты «V7Plus.dll». Взять этот длл можно у того, кто ставил Вам «1С».

    Reply
  39. som1

    Очень нужное дополнение к стандартному функционалу!

    Reply
  40. Delon

    Обработка нужная каждому!

    +1=100.

    Reply
  41. Aelita

    Здорово, что есть люди, которые делятся своими трудами)))))

    Reply
  42. almatrade

    Спасибо! Помогло, только РНН не перенсло, но ето скорей наше дополнение, типа вашего ИНН а так все чего ожидал!

    Reply
  43. himera

    1с только учу, было оччнь надо, пасиб! +1

    Reply
  44. NickLee

    Полезная маленькая фенечка… 🙂 Спасибо !

    Reply
  45. lomalex

    Хорошая вещь !!!

    Reply
  46. Acserg

    Скачал, при случае попробую, спасибо автору.

    Reply
  47. CheBurator

    Вот еще кто-бы рассказал, например Типовая ТиС — как перенести номенклатуру с базовыми единицами измерения в такую же базу ТиС…?

    Reply
  48. eldiz

    спасибо

    Reply
  49. Virus_exe

    Че такое?

    «»»»»»Не удалось обнаружить компоненту v7plus.dll!»»»»»»??????

    Reply
  50. wolfsoft

    2 Сhe Burashka: «Вот еще кто-бы рассказал, например Типовая ТиС — как перенести номенклатуру с базовыми единицами измерения в такую же базу ТиС…?»

    А в чем проблема? Это Вы про циклические ссылки? 😉 Вот этой штукой можно http://infostart.ru/projects/181/ 🙂 Она конечно тормознутая, не спорю, особенно при переносе документов, но со справочниками проще, потому по-быстрее.

    2 Virus_exe: У вас не установлена длл-ка v7plus.dll. Если не ошибаюсь, можете найти ее в дистрибутиве конфигураций 1С.

    2 всем остальным: Большое спасибо за все комментарии!

    Reply
  51. CheBurator

    не, я не про циклические ссылки…

    я про то — как синхронизировать подчиненный номенклатуре спр.единицы — если в единицах нет кода и наименования, а синхронизацию надо делать как минимум по паре ОКЕИ+ШК

    аа?

    Reply
  52. wolfsoft

    2 Сhe Burashka: Ясно, тогда моя обработка, увы, не поможет.

    Reply
  53. AlexDorf

    Полезно.

    Reply
  54. Нужная обработка

    Reply
  55. ruslanice

    Отличная обработка давно искал +1

    Reply
  56. borisova

    +1

    Reply
  57. jeka66

    Справочник номенклатуры из ТиС в бухгалтерию перенесся, но цены стали нулевыми (видимо их не перетаскивает) ?

    Reply
  58. wolfsoft

    Проверил на типовых ТиС и Бух при полностью автоматической установке соответствий без каких-либо дополнительных настроек. Цены перенеслись.

    Reply
  59. CheBurator

    хм.. как и предполагалось…

    Если СпЗнач.Получить(«ТипЭлемента») = «Элемент» Тогда

    {G:1С\_МАГАЗИНИГРУШЕК.DIRTRANREF.ERT(649)}: Значение не представляет агрегатный объект (Получить)

    — попытка переноса между двумя идентичными конфигурациями ТиС.

    переносятся 2 справочника — номенклатура и Цены номенклатуры, свернутые на текущее число.

    Reply
  60. CheBurator

    Ага! Вроде поборено: перед выгрузкой текстовых значений хорошо бы их проверять на «нечитаемые» символы типа РазделителяСтрок

    Reply
  61. CheBurator

    +1

    в чистую базу номенклатура, цены и единицы номенклатуры перенеслись корректно

    Reply
  62. wolfsoft

    2 Сhe Burashka: Да, совершенно верно, если в текстовых полях есть символы типа «РазделительСтрок», то будет глюк — поскольку сохраняется все в текстовый файл по-строчно и считывается по-строчно (Если в одном из сохраняемых полей есть символ «РазделительСтрок», то в текстовом файле при сохранении «организовывается» две строки вместо одной. Соответственно, при считывании обработка получает только первую строку, т.е «огрызок» данных, который она в принципе не может «понять»).

    И выход Вы предложили абсолютно верный.

    Более того, у меня самого даже был такой момент в работе, но — лень-матушка: мне было проще «набросать» обработку, которая подправила в справочнике «Номенклатура» многострочные текстовые поля, заменив «РазделитьСтрок» на «пробел». На этом и успокоился 🙂

    Reply
  63. wolfsoft

    Сейчас подумал… А ведь там всего одну строчку подправить в «tranref.ert»! Вот что значит, работать тупо, не думая…

    Лопухнулся я кажется 🙂

    Reply
  64. CheBurator

    > но — лень-матушка: мне было проще «набросать» обработку, которая подправила в справочнике «Номенклатура» многострочные текстовые поля, заменив «РазделитьСтрок» на «пробел». На этом и успокоился 🙂

    +1

    я тоже так сделал… 😉

    кстати — судя по всему из-за аналогичной фигни ругалась универсальная выгрузка/загрузка XML mcexp.ert — типа что-то «группа должна содержать element — из-за чего собственно и ломанулся сюда, а когда здесь разобрался — проверять уже лень было…

    Reply
  65. v.l.

    Добавлю в свою коллекцию.

    Reply
  66. Ferrari

    Хорошая обработка, я ее использовала для переноса справочников 1С Комплексная конфигурация 7.7 For sql, для такого конфига тока так ))

    Reply
  67. Abadonna

    (63) Самокритика — это есть ошен карашо +1

    Reply
  68. MACTEP

    ДАЖЕ В КОМПЛЕКСНОЙ СРАБОТАЛА ЗАМЕЧАТЕЛЬНО … ХОРОШИЙ ТВЕРДЫЙ ПЛЮС

    Reply
  69. Marinas

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

    Reply
  70. astonvilla

    Пользую данный продукт давно но не знал автора.

    Спасибо ему за труд :))

    Reply
  71. Adlink

    Перенес всю номенклатуру в комплексной,все нормально.Полезная вещь.

    Reply
  72. v_vitalik

    сегда нужна такая вещь

    Reply
  73. Sprite

    Попробовал. Классно!

    Было бы очень полезно добавить возможность обновления реквизитов выбранного справочника.

    Например: Необходимо обновить штрих-коды в параллельной базе.

    Reply
  74. santilka

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

    Reply
  75. SaschaL

    Удобная обработка особенно когда нужно перенести данные а времени как всегда в обрез

    Reply
  76. keer

    Закиньте пожалста сабж на soundforum2@e1.ru

    Reply
  77. Rodrigis

    Хорошая обработка

    Reply
  78. N.I.G.T.

    Давно искала, большая благодарность от измученного пользователя.

    Reply
  79. vinny62

    Почему-то не перетягивает подчиненные справочники?!

    Напр., в ТМЦ проигнорировала цены, единицы!

    А в периодич.реквизитах проставила только дату?

    Reply
  80. wolfsoft

    (81) Ответ на Ваш вопрос здесь

    http://www.1partner.nnov.ru/forum/index.php?fid=3&id=12008231447837

    Reply
  81. johni457

    Хорошая обработка

    Reply
  82. samury

    Молодец!

    Reply
  83. su_mai

    Плюсы мог бы и не просить, такие классные обработки все равно все заплюсуют… 😉

    Reply
  84. bstan

    Давно искал такое!

    Reply
  85. oskar

    Хорошая обработка

    Reply
  86. nowice

    не скачивается!!!!!

    Reply
  87. gugal

    >>В противном случае — при несоответствии рейтинга количеству скачиваний — доступ к обработке будет ограничен.

    А что, если я скачал, а оказалась фигня, то я тоже должен «+» ставить?

    Reply
  88. Sir12

    Непонятно нафига козе нужны подобные баяны, когда еще в 2004 году был написан Универсал 2.7 ? Да еще автор мнит себя чуть ли не благодетелем всей земли при этом :))) Переписав пару строчек чужого и при этом примитивного кода.

    Reply
  89. jk3

    Размер 0.24 kb, скачивается файл empty.txt, в нем:

    Данная разработка «убрана» с сайта «инфостарт.ру».

    Скачать данную обработку Вы можете здесь:

    http://www.1partner.nnov.ru/develop/

    Обсудить, задать вопрос, оставить отзыв можно на «Партнерском» форуме:

    http://www.1partner.nnov.ru/forum/

    по указанным ссылкам файлы существуют, конкретнее здесь:

    tranref.zip (~18 Кб, 08.07.2007)

    par_attr.zip (~6 Кб, 08.07.2007)

    Reply
  90. Kristi74

    но — лень-матушка: мне было проще «набросать» обработку, которая подправила в справочнике «Номенклатура» многострочные текстовые поля, заменив «РазделитьСтрок» на «пробел». На этом и успокоился smile:)

    +1

    я тоже так сделал… smile;-)

    кстати — судя по всему из-за аналогичной фигни ругалась универсальная выгрузка/загрузка XML mcexp.ert — типа что-то «группа должна содержать element — из-за чего собственно и ломанулся сюда, а когда здесь разобрался — проверять уже лень было…

    Reply
  91. 2011b11

    Спасибо добавлю в нашу коллекцию обработок, протестируем, если конечно время будет

    Reply
  92. PDi023

    Много лет пользовался….автору 5+

    Reply
  93. Sasha255n

    Вообщем то не плохая обработка я поставлю плюс

    Reply
  94. krund

    Вообще не плохая обработка. Удобно, когда надо обработать большой объём.

    Reply
  95. Лена_Лена

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

    Reply
  96. internetname

    Удобная вещь, жаль уже не надо.

    Reply
  97. N_aix

    Хорошая обработка!

    Reply
  98. Zas1402

    автору спасибо за старания

    Reply
  99. vkovko

    (60) что добавить в обработку то подскажите?

    Reply

Leave a Comment

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