Удаление данных по организациям из информационной базы




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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. AndreyD

    Привет, Андрей!

    Очень полезная обработка но к сожалению сохраненная под 8.1., а у нас УПП под 8.0.

    Если не очень сложно мог бы ты сконвертить ее под 8.0 или лучше дать пароль. Огромное спасибо!

    С уважением,

    Андрей

    Reply
  2. Voffffka

    удалять непосредственно? ЭТО как?

    Reply
  3. LeonF

    don`t work

    Reply
  4. veravera

    А есть ли для комплексной 7.7

    Reply
  5. YAN

    (3) а подробней можно :)?

    (4) для 7.7 я не пишу, а вообще подобных вещей для 7.7 не встречал.

    Reply
  6. Altair777

    (4) а нужно?

    Reply
  7. garmin-osa

    Молодец, мне очень помогла. Однозначно плюсую !!!

    Reply
  8. correct_coding

    Так, не понял. А если например создан документ «корректировка регистров» где много много записей, всего одна из которых по данной организации, эта обработка что, поищет ссылки и грохнет к чертям весь документ ??

    Reply
  9. YAN

    (8) Не проверял, но скорее всего да грохнет, но это можно поправить и добавить исключение.

    «Корректировка регистров» вообще плохой документ и использовать нужно аккуратно и по одной организации (я лично придерживаюсь этого правила)!

    Можно кончено дописать код по проверки но скорость выполнения снизится в разы!!!

    Reply
  10. HitGroove

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

    Reply
  11. ОЛЬГА 007

    А для ЗУП, 2.5 она подходит?

    Reply
  12. YAN

    (11) Не тестировал, но привязки к конфигурации нет! Главное чтобы был справочник «Организации».

    Reply
  13. fedor40

    Делал удаление в ЗУП 2.5.16.

    Удалил 3 организации, но в 4 не смог удалить НастройкиПользователей (у нек она выбрана осн орг) и НДФЛприменениеВычетов. Т.е. работает она на 99,9 %.

    Reply
  14. Dostal

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

    Reply
  15. wert

    в обработке есть подводный камень, если в документе указанны несколько организаций то документ всеравно удаляется целиком. Пример — документ корректировка регистров сформированный обработкой свертки базы с ИТС.

    а так обработка понравилась, автору спасибо

    Reply
  16. goldzavod

    Спасибо, для меня спасательный круг, т.к. при загрузке данных постоянно цепляеться старая организация, обработка спасает от хаоса 😀

    Reply
  17. weterok

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

    Reply
  18. YAN

    (13) Спасибо учту.

    (14) (16) очень рад, что помогла и помогает 🙂

    (15) Да Вы правы, наверное этот документ нужно как-то отдельно учитывать при удалении. Спасибо, учту.

    (17) Ничего дурного в этом не вижу, обработка доступна по принципу как есть!

    Reply
  19. geosfed

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

    Есть только одно «но». Не очищаются записи в сложных регистрах там измерение например не Организация а Подразделение.

    Reply
  20. ivd

    5++++++

    Reply
  21. ivbs

    Выбрал 8 организаций сразу. Отработала 4, примерно по 11-12 тыс. записей на каждую. Потом система молча закрылась. Работает быстро. 5+

    Reply
  22. Punisher

    В базе 20 организаций. Выбрал 19 — удалить.

    Удалило на 80%. Ошибок не выдало, но некоторые документы не удалило. ХЗ почему.

    Reply
  23. 2317207

    Хелп. В 8,2 не могу зарегистрировать эту обработку—- Выбраный файл не является обработкой или не предназначен для запука в данной конфигурации (2.0.19.9 ).

    Reply
  24. 1cmax

    НДФЛприменениеВычетов — содержит в ресурсе организацию, что не позволяет в стандартной форме установить отбор для набора записей регистра сведений.

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

    перебрать/прочитать данные по полученному отбору и для записей с соответствующим ресурсом произвести удаление 🙂

    а еще удаление из регистров сведений поместить перед удалением прочих объектов

    Reply
  25. Dr_DelProg
    1cmax пишет:

    НДФЛприменениеВычетов — содержит в ресурсе организацию, что не позволяет в стандартной форме установить отбор для набора записей регистра сведений.

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

    перебрать/прочитать данные по полученному отбору и для записей с соответствующим ресурсом произвести удаление

    а еще удаление из регистров сведений поместить перед удалением прочих объектов

    тоже проблема с удалением из данного регистра в ЗУП:

    НЕ УДАЛЕНО:ООО «АБЗ» РегистрСведенийКлючЗаписи.НДФЛПрименениеВычетов

    НЕ УДАЛЕНО:{ВнешняяОбработка.УдалениеПоОрганизациям.МодульОбъекта(88)}: Метод объекта не обнаружен (ПолучитьОбъект)

    + к этому, стоит сделать сортировку документов перед пометкой в обратном порядке — чтобы различные проверки последовательности при записи помеченного не срабатывали.

    Reply
  26. EastGuy

    А почему нет опции отключения контроля записи?

    Reply
  27. lexi

    Кто может сказать насколько быстро и качественно работает данная обработка?. Стоит задача из базу ЗУП с 20 организациями выделить одну в отдельную базу. Данная обработка подойдет?

    Reply
  28. YAN

    (27) В свое время, эта обработка разрабатывалась для выделения из базы в 200 организаций всего 5. Насколько быстро это проходит зависит от объема документов! Возможно Вам проще воспользоваться конвертацией.

    Reply
  29. bela88

    Спасибо за обработку! Протестировали на своей базе — удалили 10 организаций. Времени затратили в разы меньше, чем потребовалось бы вручную удалять все ненужные объекты. Единственное, что не удаляет объекты НДФЛПрименениеВычетов и НастройкиПользователей. А так замечаний нет!

    Reply
  30. natik86

    Подскажите, а в УТ 10.3 (8.2) будет работать? И удалит ли эта обработка всю информацию по организации или что то может оставить?

    Reply
  31. K_Tanusik

    Спасибо за обработку. Использовала уже 2 раза.

    Reply
  32. mihas1001

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

    Reply
  33. Dimon_911s

    Спасибо за обработку! Плохо, что не удаляет объекты НДФЛПрименениеВычетов и НастройкиПользователей. А так замечаний нет!

    Reply
  34. Sergey_Murzinov

    Время от времени помогает

    Reply
  35. Old Daemon

    {Форма.Форма.Форма(60)}: Ошибка при вызове метода контекста (УстановитьПометкуУдаления)

    Док.УстановитьПометкуУдаления(Истина);

    по причине:

    по причине:

    Не удалось сделать непроведенным «Опись сведений АДВ-6-2 (до 2010 года — Ведомость уплаты АДВ-11) СТС00000001 от 24.02.2010 0:00:00»!

    Блин, у чего с этим делать то ?

    Reply
  36. YAN

    (30) Не проверял, но не вижу проблем в использовании.

    (35) Обработка запущена под пользователем с полными правами? И используется ли для этого пользователя ограничение по периоду редактирования?

    Reply
  37. stellzzz

    Спасибо автору, до сих пор пользуюсь когда надо почистить базу, Плюсанул

    Reply
  38. vamleshka

    Данная обработка, подходит для любых баз в которых есть реквизит «организация»?

    Reply
  39. Podsolnuska

    Это просто фантастика — почему 1С не делает ничего подобного? Угробила вручную три часа времени на удаление документов и справочников, осталось чуть-чуть.

    Reply
  40. Podsolnuska

    СПАСИБО!!!!! УРА!)

    Reply
  41. dkprim

    к сожалению, обработка не может удалять данные по любой организации. из 10 получилось удалить 2, по которым было небольшое количество объектов в ИБ (от 1000 до 2500). при попытке удалить организацию с большим количеством объектов вылетает исключение и 1С закрывается 🙁

    AppName: 1cv8.exe AppVer: 8.2.14.533 ModName: unknown

    ModVer: 0.0.0.0 Offset: 84000018

    автор может чем-нить помочь в такой ситуации?

    Reply
  42. AleXpnz

    Удалил организацию, но НастройкиПользователей пришлось удалять ссылки вручную

    Reply
  43. YAN

    (41) Скажите, а формируется список ссылок в типовом механизме поиска ссылок (Операции — поиск ссылок) на не удаляемые организации ?

    Reply
  44. YAN

    (42) Вы говорите про настройку пользователя «Основная организация»?

    Reply
  45. dkprim

    (44)

    да, конечно. типовой механизм нашел более 18k объектов..

    Reply
  46. tlesja@mail.ru

    Мне вот очень понравилось,чистила несколько баз, так вообще вещица клевая. Она хоть и написана под 8.1, но там же есть возможность конвертации. Так что, все в порядке! Спасибо автору!!!

    Reply
  47. bazcom

    СПАСИБО ОГРОМНОЕ, до этого делал так

    ОБЯЗАТЕЛЬНО СОХРАНИТЕ СВОЮ БАЗУ.

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

    После этого проконтролируйте, какие еще объекты ссылается на вашу организацию следующим образом: «ОПЕРАЦИИ > Поиск ссылок на объекты». В верхнем окне появившейся формы укажите организацию, которую вы собираетесь удалить. Нажмите кнопку найти.

    Оставшиеся объекты можно пометить на удаление так. Выделяете в списке объект и нажимаете на кнопку «Открыть». Затем в открывшейся форме объекта на его панели инструментов нажимаете на кнопку «ДЕЙСТВИЯ > Найти в списке». Помечаете на удаление. И таким образом пока все ссылки не отметите на удаления.

    Reply
  48. vovkakursk

    Очень удобная обработка! 5+

    Reply
  49. eli1984

    Очень удобно! Особенно когда в базе куча организаций, а аудиторам нужна только одна, для них сделать нарезку очень удобно этой обработкой.

    Reply
  50. auditexpert

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

    Reply
  51. Alex®

    Спасибо за обработку. Помогла))

    Reply
  52. NtS

    присоединюсь к (29), действительно очень хорошая обработка, остается править только 2 регистра после нее, работает очень быстро

    Reply
  53. 02RUSlan

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

    Reply
  54. yuraos

    Спасибо! Тема актуальная судя по рейтингу и по количеству сходных статей.;)))))

    Разруливает ли ваша обработка ситуацию с перекрестными ссылками между фирмами,

    когда в одном объекте могут быть ссылки на 2 и более организации?

    Reply
  55. YAN

    (55) Перекрестные ссылки это результат особенностей учета, а выложенная обработка не учитывает такие ситуаций.

    Reply
  56. Andre_ultra

    Обработка помогла. Спасибо. Добавил только несколько строк к документу «КорректировкаЗаписейРегистра»

    Reply
  57. AndreyMurom

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

    Reply
  58. Stepan_1c

    спасибо, помогли сэкономит время =)

    Reply
  59. malina-da

    Молодец, спасибо, сам занимался пару раз этой ерундой, пользовался обработками с ИТС, в следующий раз попробую эту обработку.

    Reply
  60. Dragonva

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

    Reply
  61. goodgod

    Спасибо!! ОЧЕНЬ съэкономили время…

    Reply
  62. ser1985

    Очень хорошая обработка, помогла вычистить базу от ненужных организация, прошлый админ пытался перевести базы из 7.7 на 8.2, и видимо не удачно

    Reply
  63. karya

    Удобная обработка помогла при переносе с 7.7 на 8.

    Reply
  64. irishka77

    ГОД пользуюсь.СПАСИБО! Правда удаляет не все, на разных базах по разному

    Reply
  65. Nikodim113

    Отличная обработка, выручала не один раз. Спасибо автору.

    Reply
  66. Владимир Зайцев

    Веь хорошая , но конфигуратор запоолен.

    Reply
  67. Владимир Зайцев

    Мне очень она помогла.

    Reply
  68. SpartakM

    Еще бы добавить отбор по периоду.

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

    Reply
  69. gekz

    Пользуемся. Довольны.

    Reply
  70. a4a

    Досталась 8.2 база с дополнительной не нужной организации, после неудачной выгрузки, видимо (теперь спросить не у кого…). Пытаюсь как-то через конвертацию данных в пустую выгрузить одну организацию — что-то не выходит. А тут такая обработка! Спасибо!

    Reply
  71. xxx6662000

    Спасибо! Помогли. Вот уж не думал что может и мне такая пригодится.

    Reply
  72. kkk

    классаная штука. часто ей пользуюсь

    Reply
  73. choosen1

    Однажды эта штука спасла мою задницу от кучи проблем. Представляете — в одной базе велись несколько фирм, и вдруг — срочно нужно отделить одну фирму оттуда от всех и вырезать данные по ней в отдельную конфу. Причём не завтра, а вчера это нужно сделать. Так что — я как-то истерично быстро нашёл именно эту обработку и дочистил базу от тех данных, которые вручную никак не удалялись. В общем програ сработала как часы и спасла ситуацию и меня в ней. Благодарность автору, здоровья и множество мешков денег! 🙂

    Reply
  74. manan

    Выложите разработку с открытым исходным кодом.

    Reply
  75. Владимир Зайцев

    Да , работает как часики!

    Reply
  76. Seregalink

    Спасибо, очень хорошая вещь, при случае может пригодиться!

    Reply
  77. sevipa

    Пользовался уже не раз, не хватает только отбора по метаданным… иногда не все надо удалять

    Reply
  78. Artemuch2

    Привет Андрей! Да ты реально молодец! Удобная штука когда из базы надо вырезать Одну организацию

    Reply
  79. Редкий

    норм тема

    Reply
  80. sumixam

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

    Reply
  81. YAN

    (61) Спасибо, проверю, исправлю.

    (70) Добавить можно.

    (76) Ответ нет

    (79) Идея очень хорошая, обязательно добавлю

    (82) Проблем быть не должно.

    Reply
  82. zsder

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

    Reply
  83. aochkasov

    Очень пригодилась. Хорошая обработка. Спасибо!

    Reply
  84. zakiap2

    Хорошая обработка, при проблеме выгрузки УРИБ по организации помогает

    Reply
  85. pav22001

    Задача: в КА 1.1.18.1 удалить ВСЕ данные по 2-м из 3-х организаций. Обработка справится с этой задачей?

    Reply
  86. Kreds1

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

    Reply
  87. WWWolfy

    У меня обработка стала удалять документы, которые относились к Организации, которую хотели оставить.

    Т.е. удалялись док-ты Организации, у которой галочка не стояла. Конфа — типовая УТ.

    Получается что обработка удаляет лишнее.

    Reply
  88. YAN

    (91) Какая именно УТ? Обработка начала удалять все документы или определенного типа ?

    Reply
  89. WWWolfy

    УТ 10 на 8.2 (последняя)

    Есть подозрение на документы «Корректировка записей регистров», которые вводились при свертке базы.

    В документах Корректировка есть ссылки на документы по разным Организациям.

    Но обработка не только их удаляет, но и вообще все с ними взаимосвязанные.

    Беда.

    Reply
  90. _sir_

    Большое спасибо, нужная вещь!

    Reply
  91. nika.1007

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

    Вдруг она кроме удаления информации чего то еще «не очень полезное» делает.

    Поэтому «-«

    Reply
  92. sevipa

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

    Reply
  93. 1cmax

    (83) А баги исправлены с рс?

    Reply
  94. BalVlad

    (95) nika.1007,

    Согласен с Вами, но обработка нужная, поэтому ничего не буду ставить, а так хотелось поставить плюс.

    Reply
  95. Nik_Nik

    Удаление в РС: Настройки прав доступа пользователей

    Удаление в РС: Объекты доступа документов

    Удаление в РС: Объекты, запрещенные для редактирования

    Удаление в РС: Объекты информационных баз

    Удаление в РС: Ответственные лица организации

    {ВнешняяОбработка.УдалениеПоОрганизациям(193)}: Ошибка при вызове метода контекста (Записать): Операция не выполнена!

    С чем это ошибка может бысть связана, 6 организации и так все стопорятся!

    Reply
  96. Lapitskiy

    Автор, а пароль еще стоИт на обработке? Неохота тратить СМ, скачивая запароленные вещи.

    Reply
  97. YAN

    (101) Lapitskiy, все также.

    Reply
  98. AzagTot

    Что может скрываться в модуле обработки?

    Ответ тут: http://infostart.ru/public/19610/

    Поэтому никогда не рискну запустить такую обработку в своей базе.

    Reply
  99. YAN

    (103) AzagTot,

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

    Обработка распространяется по принципу как есть.

    P.S.: Виндовс не включайте там такое есть!!! )))

    Reply

Leave a Comment

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