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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *