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




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

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

    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 не будет опубликован. Обязательные поля помечены *