Универсальная обработка "Изменение записей регистров сведений и накопления" (8X)




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

57 Comments

  1. alexandr851c

    Будет ли работать на Ут11?

    Reply
  2. Erofeevgv

    (1) alexandr851c, под управляемые формы пока не сделал. Ждите через пару дней. Единственный вариант — запустить программу как обычное приложение. Тогда обработка функционировать будет.

    Reply
  3. CheBurator

    Спасибо

    Как раз то что мне нужно в данный момент

    .

    Хорошо бы «прилепить» эту обработку как плугинчик к https://w1c.ru/epf-1.html

    Reply
  4. Erofeevgv

    (3) CheBurator, Согласен, было бы неплохо. Как-нибудь займусь )

    Reply
  5. gfoods

    Скачал обработку.

    Вроде работает, но очень не хватает групповых операций над выбранными строками.

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

    А что если таких записей 100/1 000/10 000?

    Тоже самое и с значениями реквизитов, надо бы сделать групповое изменение на один выбранный реквизит, аналогично стандартной «Групповая обработка справочников и документов»

    Reply
  6. Erofeevgv

    (5) gfoods, Согласен, просто к сожалению все руки не доходят. Ближайшем будущем обязательно сделаю. Может в течении недели

    Reply
  7. gfoods

    (6)

    С удовольствием скачаем обновление, если появится!

    Reply
  8. AntonB

    Здравствуйте.

    А в групповом изменении нельзя добавить что-то вроде заменить значение одного поля значением другого поля? Например во всех записях заменить СуммаУпр на Сумма.

    Reply
  9. Erofeevgv

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

    Reply
  10. Defrag

    Неделя затянулась на 2 года. Групповая обработка — так и не сделана.

    Reply
  11. ravencrow

    В УТ 11.3 не работает ваша обработка Изменение записей регистров сведений и накопления 8.2-8.3 (УФ).

    Невозможно подключить дополнительную обработку из файла.

    Возможно, она не подходит для этой версии программы.

    Метод объекта не обнаружен (СведенияОВнешнейОбработке)

    Reply
  12. Erofeevgv

    (11) Она не подключаемая. Просто через файл-открыть открываете и все.

    Если программа ругается на открытие — значит вам для пользователя нужно назначить профиль «Открытие внешних отчетов и обработок»

    Reply
  13. ravencrow

    (12) спасибо, уже разобрался.

    Reply
  14. quadrodecor

    Все еще ждем и надеемся на групповое изменение реквизитов, биг дата эра наступила!!!

    Reply
  15. Erofeevgv

    (14) Дождались )

    Reply
  16. Redhatych

    на УФ некорректно работает.

    тестировал на «Рознице» 2.2.5

    регистр Штрих-коды

    мне нужно исправить записи, у которых измерение Упаковка заполнено.

    отбираю. отбор сработал правильно.

    устанавливаю Упаковка в пустую ссылку. выполняю. на экране — всё так, как надо.

    нажимаю записать и… получаю дубль записи: заполнена и не заполнена Упаковка.

    а это, мягко говоря, совсем не, что я ожидал 🙂

    Reply
  17. Redhatych

    не охота было разбирать код.

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

    Reply
  18. Erofeevgv

    (16) Надо посмотреть. Может где то ошибся. Упор был сделан на регистры, подчиненные регистраторам. Перепроверю механизм. Спасибо за информацию, и прошу прощения за потраченный стартмани )

    Как решение удалить записи, которые не удалились,через эту же обработку. Хотя это не решение, а так — латание дыр.

    Reply
  19. user_2010

    (17) эта обработка Поручика может делать групповое изменение реквизитов Регистров сведений для 8.3.10?

    Reply
  20. Redhatych

    (19) да, конечно.

    Reply
  21. user_2010

    (20) спасибо!

    Reply
  22. Erofeevgv

    (19) и ЭТА обработка может сделать групповое изменение. Косяк был но он давно исправлен

    Reply
  23. user_2010

    (22) понятно! Спасибо!

    Reply
  24. totskysergey

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

    Reply
  25. totskysergey

    (24) В дополнение: Отмеченные записи не сохраняются в регистре.

    Reply
  26. Erofeevgv

    (25) Сергей, проверю.

    Должно работать. Чуть позже отпишусь.

    Reply
  27. SVGS
    эта обработка Поручика может делать групповое изменение реквизитов Регистров сведений для 8.3.10?
    да, конечно.

    (20) А у меня что-то вообще не получилось добраться до Регистров сведений в УТ 10.3…

    Этот режим доступен только на управляемых формах?

    Reply
  28. SVGS

    Правильно ли я понял, что функционал обработки за 2 стартмани точно такой же, как за 1 см для 8.2?

    А отличие только в том, что она работает на УФ?

    Reply
  29. Erofeevgv

    (28) Все верно

    Reply
  30. Kontakt

    (29) Пытаюсь открыть обработку «Изменение записей регистров сведений и накопления 8.2-8.3 (УФ)» под 1С 8.3 УПП 1.3 — не открывается. Формы управляемые. Мне нужно под 8.2. Можете прислать? Под 8.2-8.3 не нужно. Зря скачал.

    Reply
  31. Kontakt

    (30) все, ок. автор помог)

    Reply
  32. Ксения84

    Добрый день!

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

    Reply
  33. Erofeevgv

    (32) Можно руками добавить запись в любой регистр. Просто в случае с подчиненными нужно еще и регистратор указать.

    Reply
  34. Ксения84

    Руками то можно, но обработка этого не делает, например для выбранной группы номенклатуры?

    Reply
  35. Erofeevgv

    (34) Чтобы автоматически создались записи с различными номенклатурами из определенной группы? Не, так получиться )

    Вообще идея конечно хорошая… Возьму на заметку для следующего апгрейда. А пока только ручками…

    Reply
  36. Ксения84

    Вопрос с созданием новых записей решила стандартной загрузкой данных из табл документа.

    Reply
  37. ElenkaLisenka

    Добрый день, скачала обработку для управляемых форм, запустила изменение РС (изменяю головную организацию) и смотрю в журнал регистраций, почему-то там изменяется не только выбранный регистр, но и попутно куча других, вопрос зачем? например 8000 записей выбранного регистра обрабатывается около часа, т.к. идут какие-то изменения и в других регистрах.

    Reply
  38. Erofeevgv

    (37) Обработка меняет только указанный регистр.

    Такое возможно если при записи регистра срабатывает еще какое то событие. Но это уже в модуле набора записей вашего регистра прописывается.

    Какая конфигурация, какой регистр?

    Reply
  39. ElenkaLisenka

    (38) ЗУП КОРП 3.1 РС например ПлановыеНачисления

    Reply
  40. ElenkaLisenka

    И еще выбираю РС ДанныеОВремениДляРасчетаСреднегоФСС, отбор делаю по Головной Организации и по Регистратору, нажима отобрать — думает около часа все равно выдает все записи.

    Reply
  41. kwazi

    респект автору и уважуха. В копилку!

    Reply
  42. user592684_vn

    Добрый день!

    В ERP не работает отбор по Организации в регистре ЗаданияКРаспределениюРасчетовСПоставщиками

    В регистре есть записи с не заполненными полями Организация

    В отборе ставлю Организация Равно (значение не заполнено)

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

    Что делаю не так?

    Reply
  43. deutsch2008

    Супер!

    Reply
  44. Erofeevgv

    (42) Добрый день. Сложно сказать. Пока не могу проверить.

    Reply
  45. mart1120

    Автору большое спасибо!

    Reply
  46. ezhikofff

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

    Reply
  47. Erofeevgv

    (46) Явно проблема в конкретном регистре. Предполагаю что у вас там какие то процедуры в наборах записей.

    Что за конфа? что за регистр? Типовой или самописный?

    Reply
  48. user782082

    УТ 11.4.6.188

    Регистр сведений: ИсточникиПервичногоИнтереса

    Такое чувство, что отбор вообще не работает. Вывел чуть ли не все записи.

    Reply
  49. Erofeevgv

    (48) Проверю

    Reply
  50. jeron

    (49) Добрый день Григорий.

    очень нужна эта обработка для УФ. для изменения регистров сведений — штрихкоды. надо поменять тип штрих кода на 10 тысячах объектах в базе.

    Отсюда скачать за стартмани не представляется возможным.

    Помогите пожалуйста. моя почта r0xx0@mail.ru

    могу скинуть денег на яндекс или еще куда.

    Заранее благодарен.

    Жду ответа

    Reply
  51. jeron

    (50)

    (49)

    Спасибо огромное. нашел в интернете.

    Reply
  52. v.l.

    (0)

    Скачал для «версии 8.2».

    Нет УФ.

    Что делать?

    Reply
  53. v.l.

    (30) А давайте поменяемся?

    Я скачал якобы «8.2», но по факту там обычные формы.

    Reply
  54. jeron

    (52)на почту напишите r0xx0@mail.ru

    Reply
  55. D1eWiLdeN

    напишите на почту, если не сложно ri2werst@gmail.com

    Reply
  56. wer

    Здравствуйте Григорий.

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

    Помогите пожалуйста. моя почта zhilenko@inbox.ru. напишите реквизиты у сумму куда перевести оплату за обработку. Заранее спасибо.

    Reply
  57. Osten37

    Просьба к автору скинуть обработку для УФ на trein58@mail.ru. Оплачу 4 стартмани любым удобным способом. Спасибо.

    Reply

Leave a Comment

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