Реанимация Подчиненного Узла




Принцип обмена данными из 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. Плюшкин_

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

    Reply ↓
  2. BTRVODKA

    PowerBoy, Спасибо тебе огромное, ты меня просто спас. Спецально зарегался чтобы тебе + тыкнуть.

    Reply ↓
  3. 31337

    Скажите, а что делать если и эта обработка не помогает? Также, пишет что конфигурация БД не соответствует ожидаемой, хотя её перед этим загружали

    Reply ↓
  4. PowerBoy

    (4) А новую конфигурацию точно загрузили? Номера сообщений еще сверьте.

    Reply ↓
  5. Kolumb

    Всё гениальное оказывается просто!

    Reply ↓
  6. akocur

    Если под 8.1 не запускается, то необходимо зайти в режиме конфигуратора, открыть эту обработку и перекодировать.

    Reply ↓
  7. unknownDaemon

    Есть нюанс: ежели у тебя более одного ПО с РИБ??? Тада тока плакать и лить первоначальный образ или как? Нигде не нагуглил решение 🙁

    Reply ↓
  8. unknownDaemon

    Все туплю работает…. сорри 🙂

    Reply ↓
  9. MatveyIgor

    спасибо большое, помогло

    Reply ↓
  10. Создание Тьмы

    не помогает =(

    сделал, теперь при чтении или записи сообщения закрывается 1ска полностью, без ошибок

    Reply ↓
  11. fialca

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

    Reply ↓
  12. mialord

    Однозначно +

    Reply ↓
  13. WooDoo

    Проблему с нумерацией сообщений тоже решает. +

    Reply ↓
  14. Agema

    Помогите восстановить Главную (центральную) базу по подчиненной (периферийной). спасибо!

    А так +1

    Reply ↓
  15. Соратник

    Однозначно плюс от новичка в 8-ке, который чуть не поседел при виде этого сообщения и угрозе остановки обменов 🙂

    Reply ↓
  16. taishy

    А реально както отключить главную базу, если в общем модуле при запуске допущена ошибка и 1С закрывается? Т.е. нет возможности както запустить обработку в режиме предприятия.

    Reply ↓
  17. PowerBoy

    (17) запустить конфигуратор с параметром командной строки /ResetMasterNode

    Reply ↓
  18. alexandr_astafiev

    спасибо

    Reply ↓
  19. skelasam@mail.ru

    ОГРОМНОЕ СПАСИБО РУЛЬНАЯ ОБРАБОТКА!!! СПАСЛА ЖИЗНЬ ВСЕЙ ФИРМЕ!!! РЕСПЕКТ ТЕБЕ АВТОР!!!!!!

    Reply ↓
  20. Maximus00

    присоединяюсь к предыдущим ораторам. спасибо! немного только переделал третий пункт под себя

    Reply ↓
  21. lucius

    просто спасибо

    Reply ↓
  22. Емельянов Алексей

    Поставил + за обработку. А вообще у меня была такая проблема. Думал все капец.

    А потом сделал обмен не спомощью «Типового обмена», а через планы обмена и все заработало.

    Reply ↓
  23. s_vidyakin

    А что делать если в подчиненной базе ТОЛЬКО добавили нового пользователя, конфигу не меняли. И теперь при ПРИЕМЕ выдается сообщение о несоответствии. Эта прожка поможет?

    Reply ↓
  24. PowerBoy

    (24) Поможет

    Reply ↓
  25. s_vidyakin

    Кстати не замечали, на 8.2 в УТ 10.3.10.4 если сделать РИБ то при первом же обмене возникает такая ошибка (не соответствие конфиги ожидаемой). Думал руки кривые, позабыл 1С. Поставил 8.1 и УТ 10.3.6.8 — все заработало.

    Reply ↓
  26. munster

    (26) на 8.2 в УТ 10.3.10.4, данная обработка помогла, спасибо автору!!!

    Reply ↓
  27. AntiPro

    Спасибо за такое лекарство.

    Reply ↓
  28. Valkiria

    Спасибо! 🙂

    Reply ↓
  29. Urgat

    срочный вопрос

    после обработки перестало выдаваться сообщение «Конфигурация узла распределенной ИБ не соответствует ожидаемой!», НО сейчас при начале обмена на 10 % на подчиненном узле падает приложение если убрать сообщение центральной базы то оно закрывается при 55%. никаких сообщений в журнале нет только «начало обмена» и все

    что посоветуете?

    конфа — измененная УТ 10.3.3.3

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

    до настройки обмена между центром и новым узлом в БД (данные) центра внесли изменения, так же наверно как и в подчиненный узел

    Reply ↓
  30. 1c74rus

    )) гениально и просто!!! спасибо автор за идею

    Reply ↓
  31. ehrmann

    супер! 😀

    1С 8.1 УТ 10.4. Обновлял БД третьего уровня подчиненности

    Reply ↓
  32. Gens76

    Спасибо хорошая штука.А что делать если мне после лечения распределенной ИБ в ЦБ начало писать — Конфигурация узла распределенной ИБ не соответствует ожидаемой

    Reply ↓
  33. Raven2011

    В итоге что все таки спасает от этой напасти? напишите по подробнее и про как запустить файл лечения?

    Reply ↓
  34. kovireshad

    Удалось сделать, все с помощью этой обработки

    Reply ↓
  35. onyx

    спасибо, очень сильно помогла данная обработка…..

    Reply ↓
  36. skitalez

    Отличная работа, спасла от тяжкого труда.

    Reply ↓
  37. outsider

    Спасибо. Очень помогло.

    Reply ↓
  38. lyubashonka

    Спасибо большое за обработку, очень помогла!

    Reply ↓
  39. Sergleom

    Большое спасибо!

    Reply ↓
  40. okroshina

    Спасибо большое за обработку! Иногда после обновлений РИБ прекращает нормально обмениваться, выход только один — обновить базы все по-очереди. И здесь ваша обработка единственное лекарство!

    Reply ↓
  41. K_Tanusik

    Спасибо за обработку, если б не она не знаю что бы делала!!!!

    Reply ↓
  42. loivsky

    Большое спасибо.

    Хоть обработка и простая, но при косяках УРБД выручила.

    Reply ↓
  43. ASLatynin

    Спасибо!

    Reply ↓
  44. qwqwqwqwqw111

    В какой базе запускать?

    Reply ↓
  45. qwqwqwqwqw111

    12

    Reply ↓
  46. VapPaha

    спасибо! 1раз помогло

    Reply ↓
  47. trancenergy

    Спасибо, очень помогла обработка

    Reply ↓
  48. Borisych

    Описание слабоватое. Но столько оценок за пару строк кода 🙂

    Reply ↓
  49. PowerBoy

    (49) Нажмите в обработке F1 или кнопку Помощь и получите исчерпывающую информацию.

    Reply ↓
  50. anig99

    В очередной раз помогает. Уже подзабыл команды работы с РИБ.

    Reply ↓
  51. accnt

    Спасибо!надеюсь поможет))

    Reply ↓
  52. hawk

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

    Reply ↓
  53. wmalex86

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

    Reply ↓
  54. wmalex86

    в центре смотрю, модуль документа есть полностью, на периферии обрывется посередине процедуры. :(( ТИИ, chdbfl, выгрузку-загрузку делал, не помогло. ппц какойта… никто не сталкивался?

    Reply ↓
  55. revril

    спасибо, очень полезная обработка)))

    Reply ↓
  56. BuHHu_l7yx

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

    Reply ↓
  57. swamp

    спасибо еще раз, не раз спасла меня.

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

    Reply ↓
  58. Пщпщ

    Хорошая обработка. Очень помогла.

    Reply ↓
  59. shatshat

    спасибо огромное. помогло очень

    Reply ↓
  60. Yfnfirf

    спасибо 🙂 пользовались вашей обработкой во время внедрения в крупной компании — после очередного обновления конфигурации приходилось реанимировать некоторые узлы %)

    Reply ↓
  61. molsergey

    Рабочая обработка. Советую.

    Reply ↓
  62. Лиза777

    Очень нужная обработка! В распределенной базу бывают часто проблемы с синхронизацией баз с главным узлом. Эта обработка помогает решить большую их часть.

    Reply ↓
  63. mchammer4

    Большое спасибо! очень важная обработка! с помощбю нее решил свои проблемы 🙂

    Reply ↓
  64. HameleonA

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

    Reply ↓
  65. Elena_Ya

    Спасибо большое! Полезная обработка!

    Reply ↓
  66. wmalex86

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

    Reply ↓
  67. Поручик

    (67) Обработка заглючить не может, так как представляет собой всего навсего обёртку для одной штатной процедуры.

    Reply ↓
  68. SmokeAce

    Долго валялась на флэшке без дела и вот пригодилась !! Автору респект, выручила в трудную минуту !!!

    Reply ↓
  69. timunya

    крутая вещь, спасибо большое автору за труд

    Reply ↓
  70. von_de

    Спасибо — пользуюсь регулярно.

    Reply ↓
  71. revril

    да,спасибо)))тоже постоянно пользуюсь)

    Reply ↓
  72. LoboVik

    Спасибо … Отличная вещь. Если бы не эта обработка фирма бы стала на колени.

    Reply ↓
  73. Mshaydurov

    Спасибо! Классная вещь!

    Reply ↓
  74. nuary

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

    Reply ↓
  75. pav_s45

    Спасибо, уже не знал что делать когда выпала ошибка. Работает отлично!

    Reply ↓
  76. AlexanderKai

    Как-то на работе вдруг встала система планов обмена данных между филиалами и центром. Система была в два уровня. Сидели 3-4 дня втроем, перерыли весь интернет, меняли внутренний формат xml-файлов. Но все равно выскакивала ошибка «Конфигурация узла распределенной ИБ не соответствует ожидаемой!»

    Все оказалось гораздо проще, чем мы думали. Мы начали обновление платформ на части из филиалов. Видимо на разных версиях платформы контрольная сумма считается по-разному или что-нибудь в этом роде. Поэтому везде нужны одинаковые версии.

    Reply ↓
  77. chadilla

    Спасибо за обработку! очень полезная штука.

    Reply ↓
  78. chp13

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

    Reply ↓
  79. ODmitriy

    Я уже думал все, приплыли. А тут такая отличная обработка! Спасибо большое за проделанную работу.

    Reply ↓
  80. Artemuch

    А кто знаем как она под плтфОРМОЙ 8.2.15 работает?

    Reply ↓
  81. Artemuch

    И в чем разница в функциоанле между вот этим http://infostart.ru/public/20819/

    Reply ↓
  82. Artemuch

    У меня уже бухгалтерия центральную два раза умудрилась обновить а с периферийки не грузились. не знаю как им это удалось но факт. Попробую этой штукой похимичить

    Reply ↓
  83. fixin

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

    (88) дык попроще будет, да и пораскрученнее. Я почему-то эту юзаю…

    Reply ↓
  84. ODmitriy

    Спасибо, большое.

    В свое время очень помогла данная обработка.

    Reply ↓
  85. wmalex86

    Скажу всем по секрету эта обработка достаточно мощная) правда я пользуюсь другой но смысл тот же. выручает постоянно. пока без проблем

    Reply ↓
  86. NMankina

    пыталась запустить обработку, пишет, что внешняя обработка не может быть прочитана текущей версией программы. стоит 1С:Предприятие 8.2 (8.2.13.219)Бухгалтерия предприятия, редакция 2.0 (2.0.32.6) . Может, делаю что нибудь не так?

    Reply ↓
  87. PowerBoy

    (93) Надо сконвертировать ее, открыв в конфигураторе.

    Reply ↓
  88. fixin

    Мощный мальчик, ты еще живой?

    сделай выбор главного узла при подключении.

    Если видов плана обмена несколько (все типовые) не работает.

    кодом кинуть, или сам доработаешь?

    Reply ↓
  89. PowerBoy

    (95) Доработаю.спс.

    Reply ↓
  90. fixin

    (96) о, живой! Клево. Доработай. Юзаю только эту обработку. Привык к ней. Спасибо!

    Reply ↓
  91. PowerBoy

    (97) Обновил, спец. для тебя. Теперь ты мой должник. 🙂

    Reply ↓
  92. fixin

    (98) я так и знал, что инициатива наказуема. Только я у себя уже давно обновил, будем считать, что победила дружба. Но для других пригодится. Красавчег!

    Reply ↓
  93. Sharloc

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

    Reply ↓
  94. swamp

    так она теперь только для 82?

    Reply ↓
  95. swamp

    (94)

    вот что пишет?

    ЧЯДНТ?

    Reply ↓
  96. PowerBoy

    (101) Там три обработки для 8.0,8.1,8.2!

    Reply ↓
  97. medv

    (103) (файл скачан)

    Остановились на 4 пункте — сняли РИБ, загрузили, установили РИБ. Обмен заново — сначала из центральной надо прочесть изменения? Если выгружаем сначала из периферии — в центральном узле ругается — «Ошибка при чтении изменений при обмене РИБ: …. Изменения конфигурации не могут быт получены из подчиненного узла периферийной ИБ…» — заметили по объему выгруженного файла — как из центрального узла по объему.

    Ошиблись с порядком выгрузки/загрузки?

    Reply ↓
  98. zigomodo

    (100) Sharloc, Да,меня тоже очень выручила при обновлении базы которая уже 3 года не обновлялась.Главный узел затерялся)

    Reply ↓
  99. Ekzamenator

    (77) AlexanderKai,

    по ходу аналогичная проблема. Филиалы на 8.2, а центр на 8.3. Удаленные обмен принимают, а центр не хочет. Поставил на удаленном 8.3 пока также. Ковыряем дальше.

    Помогите кто чем может!

    Reply ↓

Leave a Comment

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