[8.2] Универсальная обработка "Универсальные подбор и обработка объектов" (управляемые формы)




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

75 Comments

  1. Душелов

    В очередной раз понадобилось, а от 1С пока ничего такого нет.

    Сделал свой аналог, который был для 8.1

    Reply
  2. Душелов

    Ах, да, забыл дописать — это первый ПЕРЕНУМЕРАТОР на управляемых формах 😀

    Reply
  3. Tatitutu

    ты как всегда впереди планеты всей ))) Так держать.

    p/s Когда пиво пить пойдем под коньячок 😉

    Reply
  4. Душелов

    (3) Ну так мне не хватало инструментов универсальных, пришлось написать, дабы ускорить свою дальнейшую работу.

    ЗЫ: предлагаю на следующей неделе. Готов в любой день, но красивее — в пятницу 🙂

    Reply
  5. alexer

    По поводу пивка, пожалую в пятницу тоже полторашку возьму.



    🙂

    Reply
  6. Душелов

    (5) Так присоединяйся 😉

    Reply
  7. alexer

    (6) В душе я с вами. *DRINK* — жалко что такого смайла нет.

    Reply
  8. Юрий С

    (1) Вообще-то от 1С такое уже есть… На диске ИТС, например.

    Reply
  9. Душелов

    (8) Да? Серьезно? И давно?

    Reply
  10. Юрий С

    (9) Не, с февральского ИТС.

    Но зато давно есть КонвертацияВнешнихОбработок82. 🙂

    Reply
  11. Душелов

    (10) Февральский я не видел. А что даст эта конвертация?

    Reply
  12. Душелов

    (10) Можете сюда выложить с ИТС-а обработку. Или кинуть мне в личку, очень интересно посмотреть, что сваяли 1С-овцы.

    Reply
  13. Юрий С

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

    С ИТС скину, только как? Через файлообменник?

    Сюда выкладывать вроде как не серьезно…

    Reply
  14. Душелов

    (13) Да через тот же http://narod.yandex.ru/disk/all/

    А ссылку мне в личку. Буду благодарен.

    Reply
  15. Юрий С

    (13) Даю ссылку на ИТС-овскую обработку с февральского диска:

    http://narod.ru/disk/17854363000/%D0%A3%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%­81%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%D0%9F%D0%BE%D0%B4%D0%­B1%D0%BE%D1%80%D0%98%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%­82%D0%BA%D0%B0%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%­B2.epf.html

    Reply
  16. Душелов

    (15) Спасибо, но это вообще не серьезно. Это обыкновенная, сконверченная обработка из 8.1. А я-то понадеялся…

    И губы раскатал на конвертер — подумал уж, что обычные формы конвертит на управляемые…

    Разговор идет именно про управляемые формы.

    Reply
  17. Юрий С

    (16) А зачем для обработок подобного рода управляемая форма?

    Я не знаю…

    Но я не думаю, что эта — просто сконверченная, потому что я конвертировал — у меня получилась больше по размеру файла. Скорее всего, просто одного производителя и одного алгоритма.

    Хотя, — кто ж его знает…

    А ваша сделана с управляемыми формами? Я просто не смотрел. И что это дает?

    Я чёт-даже не понял, как открыть внешнюю обработку в режиме управляемого приложения?

    Reply
  18. Душелов

    (17) >зачем для обработок подобного рода управляемая форма?

    Не все же работают в 8.2 в режиме совместимости. Есть и те, кто только на управляемых формах. В скором времени все конфигурации будут только управляемые.

    >А ваша сделана с управляемыми формами? Я просто не смотрел. И что это дает?

    Это дает возможность использовать обработку в конфигурациях, типа Управление небольшой фирмой и Управление торговлей 11, и т.п.

    Reply
  19. Юрий С

    (16) А зачем для обработок подобного рода управляемая форма?

    Я не знаю…

    Но я не думаю, что эта — просто сконверченная, потому что я конвертировал — у меня получилась больше по размеру файла. Скорее всего, просто одного производителя и одного алгоритма.

    Хотя, — кто ж его знает…

    А ваша сделана с управляемыми формами? Я просто не смотрел. И что это дает?

    Я чёт-даже не понял, как открыть внешнюю обработку в режиме управляемого приложения?

    Кстати, я и вашу обработку не могу открыть как внешнюю, а вот с диска ИТС — обычным образом открываю, через менюшку «Открыть файл». В чем проблема?

    Reply
  20. Душелов

    (19) >Кстати, я и вашу обработку не могу открыть как внешнюю, а вот с диска ИТС — обычным образом открываю, через менюшку «Открыть файл». В чем проблема?

    Потому, что она на управляемых формах и ее открывать надо в режиме управляемого приложения или в вашем случае — тонкого или веб-клиента.

    Reply
  21. Юрий С

    (20) А-а-а, вона как!

    Симпатично.

    Ну, возьму и вашу на вооружение — вдруг когда надо будет именно через тонкого клиента запустить?

    Reply
  22. Юрий С

    (18) а при чем тут режим совместимости?

    И без режима совместимости можно всегда запустить в толстом клиенте.

    Например, бухия 2.0

    Reply
  23. Душелов

    (22) Бухия 2.0 полностью на управляемых формах? Не в режиме совместимости?

    Reply
  24. Юрий С

    (22) Нет, она не в режиме совместимости.

    Но она может окрываться и как управлемое приложение, и как обычная.

    А вот Управление небольшой фирмой может окрываться только как управляемое приложение.

    Reply
  25. Душелов

    (24) А что тогда по Вашему «режим совместимости» ?

    Reply
  26. Юрий С

    (25) и по-моему, и по 1С-овски это то, что написано в конфигурации — в свойствах, в графе «режим управления блокировкой данных».

    Reply
  27. Душелов

    (26) В конфигураторе — меню «Сервис» — «Параметры» — закладка «Общие»

    Reply
  28. Юрий С

    …И в толстом кдиенте (обычное приложение) можно легко открыть обычным способом 1С-овскую обработку у той же Управление небольшой фирмой.

    Reply
  29. Юрий С

    (28) вы, видимо, путаете режим совместимости и режим открытия в 1С.

    Режим совместимости указан именно в конфигураторе в Свойствах, и его нельзя изменить, не разрешив предварительно изменения в конфигурации.

    Смотрите в Свойствах конфигурации в самом низу — «Совместимость»

    Reply
  30. Юрий С

    (27) у вас в голове каша.

    Под совместимостью понимается именно совместимость с 8.1.

    И режимов открытия гораздо больше — так, есть еще режим открытия Толстый клиент (обычное приложение). — Смотрите в Параметрах на закладке Запуск 1С Предприятия

    Reply
  31. Юрий С

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

    Я оценил.

    Reply
  32. PaNick

    Не нашел даты и номера в реквизитах документа в отборе, а так круто!

    Reply
  33. PaNick

    И думает как-то очень долго помойму. Хотя функции свои выполняет )

    Reply
  34. Душелов

    (33) В отборе — раскрыть «Объект», как и в 8.1.

    (34) Это уже пропускная способность сервера, IIS и т.п.

    Reply
  35. Душелов

    +35 Ах да, забыл сказать — касперский очень не любит тонкий клиент. Душит его, как может (при включенной проверке 80-го порта)

    Reply
  36. ДимокШ

    Спасибо за обработку, на ИТС-ках ждал ждал, искал искал, а тут — БАЦ уже есть!

    Спасибо большое!!! 😀 💡

    Reply
  37. y-ha

    Спасибо за хорошую обработку!

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

    Но и скажу свои замечания:

    1. Открыл обработку, выбрал справочник Номенклатура (УТ-11), задал отбор, выполнил действие, закрыл обработку. Опять ее открыл — справочник остался в поле Объект поиска. Нажимаю Настройки отбора … и ничего не происходит. Пока не перевыбрал справочник.

    2. Иконки типа объекта в списке Объект поиска не помешали бы — а то как-то сливается 🙁 Да и вообще выбор объекта предлагаю по удобнее сделать — сразу выбрать из группы Справочники или Документы, а в группе уже сами объекты.

    3. Не совсем понятна кнопка Изменить в списке Найденные ссылки. В поле Наименование (для справочника) и Объект (для документа) показывает лупу — можно открыть карточку элемента справочника/документ, на других столбцах — ничего не делает. Так может быть тогда сразу открывать карточку элемента/документ? Или есть какие-то расширенные функции?

    4. Не понял что такое «Произвольный алгоритм» — можно пример или описание?

    Надеюсь мои замечания не обидят — работа действительно хорошая!

    Reply
  38. TbSasha

    А как установить реквизит в табличной части документа? Написал вот такой код:

    Для каждого Кол из Oбъект.Товары Цикл

    Кол.Количество = 1;

    КонецЦикла;

    Объект.записать();

    Но количество не устанавливается.

    Reply
  39. khnatik

    Не могу разобраться как пользоваться этой обработкой.

    Выбираю объект поиска — Номенклатура,

    Обработки-Установка реквизитов, выбираю галкой СтавкаНДС 18%, жму выполнить — пишет обработка <Установка реквизитов> завершена, обработано объектов:0

    Почему не стал ничего обрабатывать?

    Reply
  40. zacyx

    полезная обработка

    Reply
  41. galyausik1

    очень пригодилась!!! спасибо!!!

    Reply
  42. RRR1RRR

    А возможно ли сюда включить и обработку регистров тоже?

    Reply
  43. shomo

    Огромное спасибо. Вот и будет народу счестье по массовому изменению данных в документах….

    Reply
  44. alexanderal

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

    Reply
  45. grad84

    Спасибо, очень полезная штука

    Reply
  46. AzagTot

    Спасибо! Помогла 🙂

    Reply
  47. Индира

    Спасибо программеру-автору)

    Reply
  48. valex15

    (1) Спасибо

    Reply
  49. Neva1

    Очень пригодилась обработка. На ИТС-е пока ничего подобного нет

    Reply
  50. zuevnp

    регулярно пользуюсь

    Reply
  51. Signal

    Скажите, а возможность регистрации в плане обмена, не собираетесь прикрутить?

    Reply
  52. Signal

    Полезно также было бы иметь возможность выполнить произвольный код

    Reply
  53. Yzbest

    Посмотрим — надо перенумеровать реализации — они связаны с сф номерами?

    одно дело справочники, а вот перепроведение документов

    может потянуть за собой..

    ну да ладно — потестим.

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

    Reply
  54. Yzbest

    не.. реализация не хочет…

    ут11. и смысл?

    Reply
  55. yokko

    Спасибо, хорошая вещь

    Reply
  56. d1mk

    да — пригодилась

    Reply
  57. serg_gres

    (61) madway,

    Похоже правда. Уже и страница в контакте http://vk.com/club35947497.

    Никогда не знал его лично. Но ощущаю, как потерю. Очень жалко.

    Reply
  58. Поручик

    (61)(62) http://forum.infostart.ru/forum1/topic54460/

    Продолжение разработки http://infostart.ru/public/120464/

    Reply
  59. ponaroshku

    спасибо:)) очень выручили

    Reply
  60. ponaroshku

    Прочитала последний комментарии:(( очень жаль

    Никогда не знала лично человека, но его обработки всегда выручали

    Светлая память

    Reply
  61. Moll

    Большое спасибо разработчику данной обработки, действия твои долгое время ещё будут служить народу.

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

    Reply
  62. vavka

    Спасибо, чтож 1С забыла про нас, на управляемых формах.

    Reply
  63. maxx

    Обработка хорошая, но расстроила скорость работы. Нужно было пометить на удаление 40 000 документов, обработка показала что будет это делать 20 часов, написал простенькую свою и она пометила за 20 минут. Наверное замедление из-за индикатора.

    Reply
  64. Dansur

    Светлая память.

    Reply
  65. eugen91

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

    Reply
  66. Bacemo

    Понравилась, но не хватает пункта в действиях — Печати документов

    Reply
  67. alekseies

    пригодилась ……………… плюсую!!!

    Reply
  68. petrov_al

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

    Reply
  69. petrov_al

    Кстати, автору, лично меня раздражает что при постановке в режим произвольного запроса…вываливает запрос ко всему объекту со всеми полями…который мне нафиг ненужен. Приходится делать лишнии телодвижения по очистке. Можно же написать типа «выбрать * из …» либо в отдельных случаях вообще ничего неписать.

    Reply
  70. shutniksasha

    Пригодилась…

    Reply
  71. kit

    Плюс.

    Reply
  72. fatalist56

    попытался отобрать по наименованию элемента справочника (наименование содержит текст) — вывалил все элементы справочника

    Reply
  73. EugeneSemyonov

    Добрый день!

    А у меня обработка открывается криво — на форме только кнопки «Все действия» и «Помощь». Почему так?

    Платформа 1С 8.2.19.83. Конфа самописная.

    Основной режим запуска: Управляемое приложение.

    Режим управления блокировкой данных: Управляемый

    Режим совместимости: Версия 8.2.13

    Reply
  74. Поручик

    (78) Ссылка на продолжение обработки вверху.

    Автора оригинала уже давно нет в живых.

    Reply
  75. vladm2008

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

    Reply

Leave a Comment

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