Удаление объектов и битых ссылок из конфигурации




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

    Обработка Удаление объектов. (Работает в управляемом приложении).

    Гораздо лучше, чем стандартная, экономит много времени.

    Перейти к публикации

    Reply
  2. sergeypv

    При удалении битых ссылок регистров сведений:

    {Форма.Форма(355)}: Ошибка при вызове метода контекста (Записать): Ошибка записи! Не установлен отбор по регистратору (Регистр сведений: Цены номенклатуры)

    НЗ.Записать();

    по причине:

    Ошибка записи! Не установлен отбор по регистратору (Регистр сведений: Цены номенклатуры)

    Reply
  3. igormiro

    Все исправил, скачивайте.

    Reply
  4. ASV

    Подскажите плиз, в чем отличие если стоит галочка «Удалять через «Удалить объекты»

    Reply
  5. mr.Kot

    Вот почему, почему! Почему 1С не сделает удаление объектов с возможностью отбора, ведь это же так просто и так нужно. Спасибо за обработку 🙂

    Reply
  6. spisyshkin

    Спасибо за обработку! Вы молодец!

    Reply
  7. smirnoffs

    А можно ли удалить часть устаревшей номенклатуры, при условии, что в документах установки цен и, возможно, чеках есть ссылки на элементы номенклатуры?

    Reply
  8. Ibragimov

    Огромнейшее спасибо за обработку, регулярно выручает в нашем нелегком деле! 🙂

    Reply
  9. Anna1

    У нас сейчас вовсю идет внедрение УПП 8.2, обработкой пользуюсь постоянно на протяжении всего внедрения, очень удобно: в любой момент можно удалить из базы ненужные документы,почистить справочники. Большое спасибо!

    Reply
  10. maikl_len

    Спасибо за обработку! Вы молодец!

    Reply
  11. asg1975

    Работает ли контроль ссылочной целостности? Удаляет через Пометку удаления или Полностью? Чем лучше УниверсальныеПодборИОбработкаОбъектов.epf? На вопрос «Подскажите плиз, в чем отличие если стоит галочка «Удалять через «Удалить объекты»» тоже не увидел ответа. Автор вы где?

    Reply
  12. igormiro

    Работает, если установлен монопольный режим.

    Если есть ссылки удалять не будет.

    В сообщениях будет видно где используется объект.

    Reply
  13. igormiro

    (10) asg1975,

    Удалять через «Удалить объекты» есть такая процедура в конфигурации. Её использую. там можно проверять на ссылочную целостность.

    Reply
  14. asg1975

    Не сочтите за назойливость, но в чем выигрыш по сравнению с универсальной от 1С «УниверсальныеПодборИОбработкаОбъектов.epf»?

    Reply
  15. igormiro

    (13) asg1975, Моя обработка еще кроме работы с объектами ссылками работает с регистрами сведений.

    И ещё удаляет битые ссылки во всех регистрах.

    Reply
  16. vamleshka

    А что означает «Удаление из любых регистров пустых ссылок»? Очень бы хотел чтобы была возможность удаления объектов, если в них присутствует «Битые ссылки». Это вообще возможно написать?

    Reply
  17. igormiro

    (15) vamleshka, Да возможно принципе, это реализовано на вкладке удаление битых ссылок.

    Reply
  18. Razrabotchik_www

    Уважаемый, igormiro. Вы можете пожалуйста добавить в свою обработку след. функцию:

    Во время удаления определенной группы (например, сгруппированных документов реализации), чтобы в области Служебных сообщений отображался детальный ход выполнения (удаления того или иного документа).

    Просто после использования вашей обработки у меня сложилось неоднозначное впечатление и я не знаю, что поставить: «+» или «-» (честно говоря, сначала хотел поставить «-«).

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

    Я так до конца и не понял — делала ли вообще эта обработка удаление документов или нет.

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

    Заранее спасибо!

    Reply
  19. stel1985@mail.ru

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

    Reply
  20. Razrabotchik_www

    Автор, пожалуйста ответьте мне. Очень нужно знать.

    Reply
  21. igormiro

    (19) Razrabotchik_www, Сейчас у меня времени нет. Добавлю как смогу.

    Reply
  22. Razrabotchik_www

    (20) спасибо за быстрый ответ! 🙂 Ставлю плюс за хорошую обработку.

    Reply
  23. igormiro

    (21) Razrabotchik_www, Функционал добавил, качай и проверяй

    Reply
  24. Razrabotchik_www

    (22) проверил. Не знаю в чем проблема… 🙁 У меня до сих пор во время процесса удаления не отображаются детальные записи (какой объект в данный момент был или не был удален). Детальные записи были отображены только после завершения удаления.

    Я хотел, чтобы было как в типовой обработке. В ней во время процесса удаления в области служебных сообщений сменяются записи (какой в данный момент был или не был удален объект). Плюс к этому есть полоса состояния, которая визуально отображает процент оставшегося количества объектов для удаления. В типовой я могу оценить (примерно) какая скорость удаления и что удаление вообще происходит, но в ней нет отборов и группировок, чего очень сильно не хватает.

    Очень вас прошу, пожалуйста добавьте функцию (или же объясните незнающему как ее увидеть/включить если она уже есть).

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

    Reply
  25. Kometa

    Обработка классная! У меня нагородили юзеры ненужные элементы в справочнике, другие юзеры удалили эти ненужные элементы. А в доках остались ссылки. Обработкой подправляла хвосты, сейчас права всем закрыла, чтобы огород не высаживали в 1С.

    Reply
  26. orsprog

    Ваша обработка выглядит достаточно заманчива в плане удобства использования. Обработка Удаление объектов подправляла битые ссылки просто чудно а главное быстро…спасибо большое очень пригодилась…попробую удалить еще документы за преличный период…

    Reply
  27. zhleonid8

    Респектую, но ещё ни одно удаление не приносило столько пользы сколько приносит проблем,

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

    Reply
  28. happyden

    Выложите версию для 8.1 раз уж заявляете что поддерживается 8.1?

    Reply
  29. AnotherSide

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

    Если бы еще «вкрутить» сюда механизм удаления средствами SQL (скриптики…), цены бы не было!

    З.Ы.: и версию для 8.1, пожалуйста. Не все еще перешли на 8.2)

    З.З.Ы.: под 8.1, на самом деле переводится за 5 минут) Но! Мне кажется, было бы полезным добавить возможность выбора сразу нескольких видов справочников, документов и т.д.

    Reply
  30. AnotherSide

    Кстати, мне кажется, что в вариант удаления без применения метода УдалитьОбъекты(), тот к-ый в цикле, было бы целесообразно добавить строчку вида «Объект.ОбменДанными.Загрузка = Истина»… Ибо процесс удаления ускоряется в десять раз, особенно у док-ов со множеством вариантов движений по регистрам — запись лишняя по регистрам обрубается.

    Reply
  31. VitaliyPovod
    Ibragimov пишет:

    Огромнейшее спасибо за обработку, регулярно выручает в нашем нелегком деле! 🙂

    Целиком и полностью поддерживаю!

    Reply
  32. igormiro

    (29) AnotherSide, Полностью согласен в новой версии учту.

    Reply
  33. vkt

    Хотел удалить записи в регистре сведений. Установил отбор, заполнил таблицу удалений. А кнопочки «Выполнить удаление» — нет.

    Reply
  34. igormiro

    (32) vkt, Ошибку исправил. Если будут еще ошибки пиши.

    Reply
  35. igormiro

    Качайте новую версию обработки об ошибках сообщите!!!

    Reply
  36. _LEV_

    Спасибо, скачаем — заценим! Может и предложения появятся 😉

    Reply
  37. net7wolf
    happyden пишет:

    Выложите версию для 8.1 раз уж заявляете что поддерживается 8.1?

    Согласен. если нет под 8.1 так и убрать токовые ссылки.

    Reply
  38. igormiro

    (36) net7wolf, Для 8.1 только старая версия. Второй файл.

    Reply
  39. igormiro

    (27) happyden, Для 8.1 только старая версия. Второй файл.

    Reply
  40. rozer

    Вопрос: Есть <объект не определен…> в таблицы последовательности то как в этом случае поступит обработка?

    Reply
  41. igormiro

    (39) rozer, <объект не определен…> это битая ссылка. Попробуй просто восстановление последовательности сделать.

    Reply
  42. igormiro

    (39) rozer, Добавил функционал в обработку удаление битых ссылок из последовательностей. Попробуй.

    Reply
  43. rozer

    (41) спасибо!

    Reply
  44. rozer

    (41) сорри но не увидел в 8.1 🙁

    Reply
  45. igormiro

    (43) rozer, Добавил и под 8.1, выполнятся может долго, так как будет восстанавливать последовательность документов.

    Reply
  46. rozer

    (44) немного не то… восстановление здесь не поможет. Воспользовался этим http://infostart.ru/public/62857 — переделал на 8.1

    Reply
  47. igormiro

    (45) rozer, Ты не понял, моя обработка делает тоже самое что и http://infostart.ru/public/62857, только после удаления она корректно восстановит последовательность документов.

    Reply
  48. rozer

    (46) спасибо, но восстановление последовательности мне в «центральной» базе РИБ не надо. Надо просто было исправить косяк.

    Reply
  49. Ibragimov

    спасибо!

    Reply
  50. DimitrT

    Спасибо — полезно попробовать — может будут идеи по доработке…

    Reply
  51. serjpsv

    В этой обработке можно установить фильтр по названию удаляемых документов?

    Reply
  52. serjpsv

    Крутая обработка! Спасибо

    Reply
  53. serjpsv

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

    У меня на ЗУП 8.2 он не работает

    Reply
  54. igormiro

    (52) serjpsv, Индикация не работает на управляемых формах. На обычных формах только пи включении флага отображать индикатор.

    Reply
  55. igormiro

    Обновление обработки.

    Обработка выполняется быстрее. Улучшен алгоритм работы с контролем ссылочной целостности.

    Reply
  56. Inetguru

    Уважаемый автор, если возможно добавьте такой функционал: восстановление из выбранного файла сохранения базы выбранного объекта данных (на выбор давать только не существующие в оригинале базы и измененные по сравнению с ним) со всеми вытекающими-восстановление или изменение всех связанных объектов. Перед операцией желательно предварительно показать что произойдет детально, возможно даже отобразить наподобие окна сравнения конфигураций с двух сторон оригинальный объект и тот что станет после восстановления. Если будет заменен документ, то показать какие именно реквизиты документа претерпели изменения. Возможно отдельно выделить восстановление битых ссылок в оригинальной базе.

    Reply
  57. kobol

    Огромное спасибо, выручил на 5+

    Reply
  58. AlexO

    (46) так восстановление последовательности можно отключить, если не нужно?

    Reply
  59. olgadogi

    Использовала для чистки базы, все прошло очень удачно. Большое спасибо

    Reply
  60. igormiro

    (57) AlexO, Пока нельзя, поле праздников добавлю отключение

    Reply
  61. Ranika

    Спасибо, очень порадовал скриншот с подробным описанием ))))

    Reply
  62. Igly

    (59) Так что там насчет отключения восстановления последовательности, удалось сделать? Или тут еще старая версия? Уже везде вокруг наступило «послепраздников» ))

    Reply
  63. igormiro

    (61) Igly, Скачивай, появилась настройка, отключения восстановления последовательности, проверь должно работать.

    Если нет то напиши.

    Reply
  64. Signal

    Скажите, а на управляемые формы не планируете перевести?

    Reply
  65. igormiro

    (63) Signal, Обработка полностью работает на управляемых формах, по умолчанию основная форма управляемая. Только не отображаться индикатор.

    Reply
  66. igormiro

    (63) Signal, См 2 рисунок Форма управляемая. Если что то не работает то пишите.

    Reply
  67. OlegrVasil

    Очень полезная обработка. Спасибо автору и за «живую» реакцию в том числе.

    Reply
  68. Igly

    Где можно почитать в правилах (вообще, где ссылка на главной на правила сайта?) про методику учета местной «валюты»? Почему происходит списание со счета за каждое скачивание (например как здесь списалось, и за вариант 81, и за вариант 82)?

    Reply
  69. Signal

    (65) Скажите пожалуйста, а возможность удалять не используя монопольный режим, будет реализована?

    Reply
  70. igormiro

    (68) Signal, Без монопольного режима — реализовано, только без контроля ссылочной целостности.

    Если с контролем ссылочной целостности, то только в монопольном режиме (ограничения платформы).

    Reply
  71. Katish7

    Не могу скачать обработку, посылает на страницу со способовами оплаты, перехожу в интернет-магазин, там нет такой обработки. Подскажите, как скачать?

    Reply
  72. Katish7

    Извините за флуд не по теме. Разобралась.

    Reply
  73. Katish7

    У меня есть база и в ней есть объекты с битыми ссылками (документы). Автор, скажи, твоя обработка сможет найти и удалить все элементы, содержащие битые ссылки в реквизитах?

    Reply
  74. igormiro

    (72) Katish7, Посмотри на какой объект (реквизит) в документе, и сделай отбор по объекту где значение заполнено, а за тем удалить

    Reply
  75. Katish7

    Спасибо, получилось!

    Конечно хотелось бы чтобы обработка сама искала где именно эти ссылки есть битые.

    Ну да ладно, зато действительно работает быстро. Ставлю плюс!

    Reply
  76. nshrek

    полезная и интересная обработка. Спасибо за разработку. Часто битые ссылки или восстанавливаю или чищу через тестирование базы. С этой обаботка дело пойдет быстрее

    Reply
  77. KostyaBu

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

    Reply
  78. Igly

    Еще одна очень полезная вещь в определенных ситуациях. Спасибо!

    Хочется еще, чтобы был мало-мальский хелп в обработке. А то отрубили интернет, а тебе приспичило поработать (ну интернета-то нет ))) и сидишь методом тыка определяешь, в какой последовательности, что делать.

    Reply
  79. Katish7

    Скажите, чем отличается выполнение обработки с галкой «Использовать транзакцию» и без неё? Как будет работать быстрее?

    Reply
  80. igormiro

    (79) Katish7, Быстрее без транзакции, но в транзакции вы что то удаляете др. пользователи не могут эти объекты использовать так как они заблокированы.

    Reply
  81. zakiap2

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

    Reply
  82. Pretender195

    Нужная вещь для администратора 1с

    Reply
  83. Boroda

    Обработка, безусловно, очень полезная и нужная. Но хотелось бы узнать причину её появления вновь на небосклоне: какие-либо доработки, новшества, или исправление каких ошибок, или просто «поднятие»…?

    Reply
  84. mnikol

    В списке конфигураций нет БГУ. Жаль…

    Reply
  85. igormiro

    (86) mnikol, Обработка универсальная и работает с любой конфигурацией.

    Reply
  86. kkprps

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

    Reply
  87. igor_1c

    А у меня проблема. конфигурация УПП. По регистрам Товары в НТТ и Товары Организации появляются биты ссылки серий номенклатуры. Типа <Объект не найден…>, в регистре Партии товаров на складах такого нет, даже не знаю что делать. Товарный отчет не работает из-за этого. может эта процедура удалит такие серии.

    Reply
  88. igormiro

    (89) igor_1c, Проще будет в сериях найти где ссылка объект не найден и переопределить на др. объект.

    Reply
  89. alida555

    Для ЗУП 8.2 не подходит ?????

    Reply
  90. igormiro

    (91) alida555, Что ошибку выдает, или что?

    Reply
  91. alida555

    (92) Ни как не реагирут … ошибки не дает ..не запускается безединого коментария …Жаль очень нужен …

    Reply
  92. igormiro

    (93) alida555, Добавь как объект в конфигурацию и 100% откроется.

    Reply
  93. mybracho

    Скачал. Спасибо

    Только не то что нужно. Теперь для 8.1 буду качать.

    Reply
  94. smaznev
    Reply
  95. ZORGE_Tech

    Спасибо огромное автору за эту обработку. Очень полезная вещь. Очень помогла при очистке справочника контрагенты от помеченных на удаление объектов. Прекрасная обработка!

    Reply
  96. commo

    Огромное спасибо за обработку. сейчас как раз очень нужна. однозначно «+»

    Reply
  97. chantonov

    Вышлите пожалуйста эту обработку на chantonov@yandex.ru.

    Очень нужно! Спасибо заранее!

    Reply
  98. super-drema

    Спасибо за обработку

    Reply
  99. agulaev

    Отличная идея и реализация! Удачи Автору! Спасибо!

    Reply

Leave a Comment

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