Очистка данных регистров (удаление любой ненужной информации)




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

48 Comments

  1. Rothschild

    (0)

    а что обработка делает с документами-регистраторами —

    — оставляет как есть или помечает на удаление ?

    и что делать с этими документами после зачистки их наборов движений ??

    и собственно какова практическая ценность работы ???

    Reply
  2. Rothschild
    Обработка очень функциональна и не имеет аналога по широте настроек.



    мяго говоря — тендициозное заявление

    Reply
  3. Rothschild

    (2)

    табличка отбора в форме — это что:

    — табличное поле связанное с отбором объекта «ПостроительОтчета»

    — табличное поле связанное с отбором объекта «КомпоновщикНастроекКомпоновкиДанных»

    — или самопальная таблица значений

    ***

    склоняюсь к последнему варианту, поскольку не вижу колонки

    с флагом «Использование»

    Reply
  4. streettrack

    Вот для чего нужна табличная часть, док.рег. обработка ничего не делает( а зачем???)

    Reply
  5. Sasha255n

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

    Reply
  6. streettrack

    забыл написать в описании писал для себя(удалять задвоения в КБК, не давала создавать новые а старые были не активными после слива 2х баз в одну). а вообще она для любой конфы подойдёт.

    Reply
  7. ShantinTD

    (3) Rothschild, а что тогда за колонка слева? (не подписана, тип булево)

    (6) streettrack, а, может быть, правильнее пометить на удаление (или перевести в архив) регистраторы? Там, где они есть, конечно. А то лажа получается: документ проведен, а движений у него нет. И вообще: неправильно устранять последствия не устранив причину — нужно сначала правильно слить 2 базы, а потом уже удалять что-то.

    Кстати еще вопрос: что значит «ограничение удаления»? Это «удалить первые столько-то записей»? А чем вторые столько-то хуже? И опять же: если удаление записей из регистра занимает много времени — ищи ошибку.

    Reply
  8. Rothschild

    (7) ShantinTD,

    Ладно колонку «Использование» увидел !

    🙂

    Но как отбор реализовал, streettrack так и не ответил:

    — табличное поле связанное с отбором объекта «ПостроительОтчета»

    — табличное поле связанное с отбором объекта «КомпоновщикНастроекКомпоновкиДанных»

    — или самопальная таблица значений

    Reply
  9. streettrack

    (7) ShantinTD,

    Объясняю, писал для себя, работаю в организации после других программеров, использую её ТОЛЬКО для удаления КБК(задвоённых)ТОЛЬКО для этого и писал! А то что бонусом она другоё удалить может…ЭТО БОНУС)))

    Как основа думаю не плохая(если кому то ещё нужно будет от неё, либо допишет,либо мне напишет)

    Ограничение удаления начинает работать после установки флажка на очищать/удалять, если не нажимать удаляет выборочно на ваше усмотрение, т.е. выделением 1,2,3,n,…

    У меня не занимает, вот посмотри, как думаешь, быстро это очистится? я думаю не очень)))

    Reply
  10. streettrack

    (7) ShantinTD,

    И ещё один БОООООЛЬШОЙ ПЛЮС!

    Обработка работает со ВСЕМИ РЕГИСТРАМИ! Т.Е! полезна для чистки всего сейчас смотрел новые обработки в рубрике.

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

    Reply
  11. streettrack

    (8) Rothschild,

    Процедура ИмяРегистраОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

    Регистримя = ВыбранноеЗначение;

    Тип = Лев(Регистримя,Найти(Регистримя,».»)-1);

    Имя = Сред(Регистримя,Найти(Регистримя,».»)+1);

    Если Не Найти(Тип,»РегистрНакопления») = 0 Тогда

    РегистрОбъект = РегистрыНакопления[Имя];

    иначеЕсли Не Найти(Тип,»РегистрСведений») = 0 Тогда

    РегистрОбъект = РегистрыСведений[Имя];

    иначеЕсли Не Найти(Тип,»РегистрРасчета») = 0 Тогда

    РегистрОбъект = РегистрыРасчета[Имя];

    иначеЕсли Не Найти(Тип,»РегистрБухгалтерии») = 0 Тогда

    РегистрОбъект = РегистрыБухгалтерии[Имя];

    КонецЕсли;

    НаборЗаписей = РегистрОбъект.СоздатьНаборЗаписей();

    ОтборРегистраОчистки= НаборЗаписей.Отбор;

    НаборЗаписей.Прочитать();

    КоличествоЗаписей = НаборЗаписей.Количество();

    КонецПроцедуры

    УДОВЛЕТВОРИЛ)? ИЛИ ТЕБЕ ВСЮ ОБРАБОТКУ ДАТЬ?))))

    Reply
  12. Rothschild

    УДОВЛЕТВОРИЛ)? ИЛИ ТЕБЕ ВСЮ ОБРАБОТКУ ДАТЬ?))))

    1. на первый вопрос — ответ — «нет».

    2. на второй вопрос — ответ — тоже «нет»

    😉

    ***

    я просто интересовался как реализованы

    не имеющие аналога по широте

    настройки отбора в обработке.

    Reply
  13. streettrack

    (12) Rothschild,

    Слушай кинь в лс почту)

    Или скачай и посмотри)))))

    Reply
  14. Rothschild

    (13) streettrack, лааамы!

    Reply
  15. streettrack

    (14) Rothschild, ???

    Reply
  16. ShantinTD

    (13), (15) streettrack, задан конкретный вопрос: как реализован отбор? Предложены варианты:

    — табличное поле связанное с отбором объекта «ПостроительОтчета»

    — табличное поле связанное с отбором объекта «КомпоновщикНастроекКомпоновкиДанных»

    — или самопальная таблица значений

    Сложно ответить какой же из трех вариантов правильный?

    А скачать — можно. Только зачем? За стартмани? Экий ты хитрый…

    Reply
  17. streettrack

    (16) ShantinTD,

    Всё рукописное и самоделанное 😉 вручную)

    КАК ТЫ НАЗВАЛ «САМОПАЛ»))))

    Но самопал, не значит же что криво;)

    Reply
  18. ShantinTD

    (17) streettrack, ну это не я назвал.

    Да, можно и велосипед выпилить напильником из цельного куска железа. Зачем покупать такой, которым все пользуются? Зато хендмэйд!

    Успехов!

    Reply
  19. DAnry

    Ну и чего вы пристали к автору? Обработка работает? Да! Полезна? Да (по собственному опыту знаю — с задачей очистки регистров не каждый день сталкиваешся, но бывает; особенно при внештатных ситуациях)! Функциональна? Да, к тому же достаточно гибка в использовании. Вывод: обработка имеет право на жизнь, предназначена для программистов или продвинутых пользователей. Кому не подходит пишите сами или изменяете под себя. Автору — респект.

    Reply
  20. streettrack

    Спасибо)

    Reply
  21. Ганс

    Спасибо) помогла в чистке)

    Reply
  22. pavel_pss

    Полезно. спасибо.

    Reply
  23. EugenLiquor

    Нормальная обработка, только нашел ее бесплатную версию на просторах интернета. Удобный интерфейс и исправно выполняет свои функции — что еще надо от обработки?

    Reply
  24. streettrack

    (23) EugenLiquor, Может кто из добрых пользователей кто уже скачал и выложил её)

    Незачто) пользуйтесь наздоровье

    Reply
  25. streettrack

    (21) Ганс, незачто)

    Reply
  26. streettrack

    (22) pavel_pss, Вам спасибо за скачивание

    Reply
  27. mrdug

    streettrack, и не имеет аналога по широте настроек?

    врать не стыдно?

    Reply
  28. streettrack

    (28) mrdug, обоснуйте! не помогла? чем не понравилась? не делает то о чём Вы думаете XD

    или что?)))))) ищите то что вам нужно, людям помогает, благодарят, и я их…. либо не то нужно… либо чего то вам не хватает;)

    Reply
  29. Olga306112

    Спасибо за обработку, помогла при чистке регистра не активных рабочих счетов в БГУ. Стандартные обработки не правят регистры.

    Пожелание: Было бы удобнее , если б высвечивался список отобранных записей, которые нужно удалить.И сделана возможность корректировки этого списка ( как в станд обработке поиск и замена значений). НО поставленная передо мной задача была выполнена — спасибо.

    Reply
  30. streettrack

    (30) Olga306112, учту) как будет время добавлю и редактирование этого списка.

    Reply
  31. XiPyPg

    ппц как обычно все печально =(( вид сравнения сделайте чтоб можно было менять

    Reply
  32. bercut0077

    Отлично хорошая разработка, спасибо помогла

    Reply
  33. streettrack

    (33) bercut0077, Спасибо пользуйтесь)))

    Reply
  34. Bacemo

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

    Reply
  35. Drizer2000

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

    Reply
  36. Svetlana1

    Не работает. Почему не пишете, что не работает в управляемых формах?

    Reply
  37. vzal

    (37) А если запустить конфигурацию в режиме Толстый клиент (обычное приложение)?

    Reply
  38. master_yoda

    Замечательная чтука, в ближайшее время скачаю. В конфигнурациях построеннных на основе библиотеки стандартных подсистем, когда включаешь возможность чтения истории измененния объектов , регистр в котором эти все изменения хранятся очень быстро «засирается»…посему думаю что сия обработина мне сильно пригодится, т.к. есть возможность выборочного удаления данных….

    Reply
  39. chmv

    Было бы интересно задать условие

    Reply
  40. tannnnnn

    Для БП 3.0 обработка не работает. Желательно в описании обработок писать в каких конфигурациях обработка действительно работает.

    Reply
  41. streettrack

    (41) tannnnnn, Знаете проверял на 4 конфигурациях, пишите в л.с. свою почту изменю вам под БП 3.0

    Reply
  42. hakerxp
    Обработка очень функциональна и не имеет аналога по широте настроек.

    Порадовало))

    Reply
  43. streettrack

    (44) hakerxp, =))))))) САМ В ШОКЕ))))))

    Reply
  44. webcisp

    Хотел почистить РегистрСведений.СписанныеТовары — куда там … 🙂 отбор можно сделать только по полю регистратор и то по одному документу .. а почему по Полю период нельзя ?

    Reply
  45. Defrag

    В ЗУП 3.0 не работает

    Reply
  46. golv

    Доброго времени суток!

    А под КА 2.0 Ваша обработка адаптирована?

    Как раз такую ищу.

    Спасибо!

    Reply
  47. lenamol

    Обработка не открывается, пустое окно .

    Reply
  48. streettrack

    Какая конфигурация? Управляемые формы?

    Reply

Leave a Comment

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