Обработка для тестирования внешних обработок заполнения табличных частей




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

    У обработки для 8.1 не назначена основная форма. При открытии ничего не происходит. Поправьте.

    Reply
  2. poppy

    (1)

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

    Как ты отрываешь обработку, когда ничего не происходит? Через Файл-Открыть?

    Reply
  3. artbear

    (2) Да, я лично юзаю обработку как внешнюю, только на своем компе.

    В этом случае основная форма, конечно, нужна.

    ну и исправить самому несложно 🙂

    Reply
  4. poppy

    (3)

    Исправить? А смысл?

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

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

    Так что исправить самому не так уж не несложно…

    Дык, нужно ли назначать основную форму?

    Reply
  5. poppy

    Обновлена обработка для версии 8.1

    Исправлена ошибка. Обработка не работала с документом КорректировкаЗаписейРегистров типовой УТ.

    Reply
  6. DealMaker

    Спасибо, poppy!!!

    Очень остроумное, а главное, уместное решение:))))))

    Reply
  7. KereberoS

    Как же пользоваться данной обработкой, если в обработку не передается ссылка на документ и его табличную часть? Или это только шаблон, который требуется доработать под свои нужды? 🙁 Но старания не могу не похвалить! 🙂

    Reply
  8. KereberoS

    Пардон, разобрался.

    Ошибка в описании. Ведь нужно указать, что обработка подключается не просто как обработка, а обработка заполнения табличных частей!! А когда открываешь как обычную (пример, «OtladkaVneshnejPechatnojFormy.81», то есть соблазн выбрать документ и его табличную часть. Чего, увы, нет… :(((

    Reply
  9. aka AMIGO

    Нормалый плюс. Спасибо! Успехов!

    Reply
  10. glanton

    Плюс тебе! Так гораздо удобнее!

    Reply
  11. FIXXXL

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

    Только ошибка небольшая в строке 59 модуля формы:

    ЭлементыФормы.Объект.ОграничениеТипа

    заменить надо на

    ЭлементыФормы.ОбъектСсылка.ОграничениеТипа

    Reply
  12. poppy

    (11) Спасибо. Исправлено.

    Reply
  13. poZZitive

    Отличная вещь. Без нее голову сломаешь пока отладишь вотч…. +

    Reply
  14. IgorXml

    Спс отличная штука. Мне давно её рекомендовали. Всегда торопился и как-то справлялся. Но сейчас я стал крутым и у меня было время посмотреть попользоваться. Сегодня сделал то что надо благодаря этой обработке с толком и с расстановкой. 🙂

    Reply
  15. MAntaNA

    В чём может быть дело: при отладке моей внешней обработки заполнения ТЧ документа с помощью этой обработки, если происходит ошибка, то просто останавливается выполнение моей обработки без всяких сообщений. А при повторном запуске моей обработки в этом же сеансе предприятие просто виснет, приходится перезапускать его и заново открывать документ, заново запускать эту обработку отладки и из неё — мою обработку.

    Reply
  16. rasswet

    не совсем понял как именно «позволяет упростить»

    Reply
  17. Natalya_K

    Отличная обработка 🙂 Огромное спасибо! 🙂

    Reply
  18. iren-tren

    Обработка прекрасна!

    Спасибо за нее.

    Reply
  19. zldrq

    — платформа 8.1

    — конфигурация бухгалтерия 1.6 с последним обновлением

    — скачиваю соответствующую обработку

    — добавляю: сервис — дополнительные отчёты и обработки — дополнительные обработки внешних частей

    — выскакивает

    Reply
  20. zldrq

    вопрос снимается.

    надо было сразу посмотреть внутренности файла

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

    хм

    Reply
  21. IP43

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

    Reply
  22. renat_1st

    (15) Поддержу. У меня тоже самое в 8.2

    Reply
  23. gad_d

    Обработка хорошая, но не работает с документом «УстановкаЦенНоменклатуры» в УТ10.3.

    Reply
  24. UncleVader

    А как насчет 8.2?

    Reply
  25. avenira_

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

    Для тех, кто ещё не знает: для того, чтобы обработка, написанная для 8.1 заработала на 8.2, нужно её открыть в конфигураторе 8.2 и на вопрос «Конвертировать?» ответить «да»

    Reply
  26. isn

    Здравствуйте! можете выложить обработку на внешний ресурс?

    Reply
  27. djaik

    Спасибо, очень полезная вещь.

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

    Аффтору вечный РИСПЕКТ И УВАЖУХА.

    Reply
  28. Osuul

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

    Reply
  29. Lyolik

    Большущее спасибо. Очень не хватало такой обработки.

    Reply
  30. Одинец

    Весчь хорошая.. теперь ждем реализации под управляемое приложение!

    Reply
  31. h_vitya

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

    Reply
  32. Tristania

    Спасибо очень удобно!

    Reply
  33. bes-kkm

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

    Reply
  34. Sergey_Murzinov

    Спасибо, крайне удобно, пользую

    Reply
  35. artmicro

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

    Reply
  36. jeniav

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

    Reply
  37. Istur

    При изменении имени файла через выбор не происходит типизация Объекта, так как не происходит событие «ПриИзменении» имени файла. Надо вставить в кусок вызов процедуры «ИмяФайлаПриИзменении(«»)»:

    Если Диалог.Выбрать() Тогда

    ИмяФайла = Диалог.ПолноеИмяФайла;

    ИмяФайлаПриИзменении(«»);

    Иначе

    Reply
  38. Стил

    Не раз ей пользовался, очень помогает

    Reply
  39. MYRZILKA123

    согласен здорово

    Reply
  40. MeaTDeN

    Очень полезная обработка. Все время приходилось тестировать через Форму, уходило дополнительное время для написания ВПФ. Спасибо автору.

    Reply
  41. c36c36

    Согласен, можно и так:

    При изменении имени файла через выбор не происходит типизация Объекта, так как не происходит событие «ПриИзменении» имени файла. Надо вставить в кусок вызов процедуры «ИмяФайлаПриИзменении(«»)»:

    Если Диалог.Выбрать() Тогда

    ИмяФайла = Диалог.ПолноеИмяФайла;

    ИмяФайлаПриИзменении(«»);

    Иначе

    платформа 8.1

    — конфигурация бухгалтерия 1.6 с последним обновлением

    — скачиваю соответствующую обработку

    — добавляю: сервис — дополнительные отчёты и обработки — дополнительные обработки внешних частей

    — выскакивает окно: «выбранный файл не является внешней обработкой. либо данная обработка не предназначена для запуска в этой конфигурации»

    — сообщение:

    {Справочник.ВнешниеОбработки.Форма.ФормаЭлемента(189)}: Ошибка при вызове метода контекста (Создать): Ошибка при выполнении файловой операции ‘C: empвнешние обработкиOtladkaObrabotokZTЧ.epf’

    Reply
  42. Shickom

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

    Reply
  43. Гость

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

    Reply
  44. i21012009

    Спасибо, очень удобный инструмент для отладки

    Reply
  45. AlexO

    Идея хорошая, но из-за кривости самой 1с — вся работа загублена на корню.

    Как раз для тестирования обработок табличных частей и не подходит:

    — подцепляется через раз к конфигуратору — требует постоянно закрывать себя и открывать;

    — описания ошибок не показывает — просто останавливается;

    — может просто зависнуть (видимо, останов на ошибках), и тогда — перегружать снова Предприятие;

    Все-таки старый добрый способ — скопировать код обработки ТЧ в обрабатываемый документ, сделать в документе кнопку, и подцепить к ней код, — остается самым надежным и практичным.

    Можно еще во внешнюю обработку код скопировать для отладки.

    Аналогично, как и в (15)

    Reply
  46. Tangram

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

    Reply
  47. Mamakan

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

    Reply
  48. egvv

    Хорошая работа!

    Reply
  49. WendyH

    Как ни странно, полностью соглашусь с AlexO. Неудобства остаются, а менять одни неудобства на другие особого смысла не вижу. Как отлаживал код обработки в другом месте или выводом в файл лога в контрольных точках информацию, так и буду, походу, делать дальше.

    И сетовать я предпочитаю не просто на «кривость 1с», а на то что, в общем то, ничего в этом плане с древних времён так и не улучшается. Хотя даже у меня возникали идеи как это можно было бы упростить или хоть немного добавить удобства (в отладке внешних обработок).

    Reply
  50. TrinitronOTV

    Спасибо большое автору, очень удобно пользоваться данной обработкой при отладке программного кода. Сегодня как раз помогла в отладке при создании заполнения табличной части Требования-накладной

    Reply
  51. Karlitos

    Спасибо, нужная вещь оказалась! 🙂

    Reply
  52. dedicated

    Спасибо большое, очень помогла ваша обработка!

    Reply
  53. jobkostya1c8

    Хорошая вещь этот самый отладчик обработок заполнения табличных частей. Работоспособная. Экстренно пригодилась.

    Reply
  54. jobkostya1c8

    Кстати, возможно глюк на сайте — обработку скачал, стартманьку сняли, а статуса нет.

    Reply
  55. kbuka

    подскажите, а под 8.3 работать будет?

    Reply
  56. e85

    Какова актуальность обработки?!

    Reply
  57. sh_max

    (67) (68) Замечательно работает на 8.3.11.Естественно что только с обычными формами.

    Reply

Leave a Comment

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