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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *