Отладка обработок заполнения или создания связанных объектов для конфигураций 1С: Предприятия 8.2/8.3 на БСП (Управляемое приложение). Версия 1.2.8




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

83 Comments

  1. Yury1001

    А в чём отладка то заключается? На точку останова не реагирует.

    Reply
  2. Поручик

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

    Reply
  3. Yury1001

    (2) Да нет всё нормально, если где то в общем модуле ошибка можно остановиться посмотреть, а текст самой обработки не отлаживается.

    Reply
  4. Поручик

    (3) Тогда не знаю, сам разбирайся, как хочешь. Это обработку http://infostart.ru/public/141777/ я с помощью неё отлаживал.

    Reply
  5. alexandr1972_1

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

    Reply
  6. Поручик

    (5)(3) Под ограниченной системной учёткой отладка тоже происходит.

    Reply
  7. Поручик

    Обработка адаптирована для Библиотеки стандартных подсистем последних релизов

    Reply
  8. МимохожийОднако

    Недавно столкнулся с отладкой кода внешней обработки печати в УТ11. Подобной обработки под рукой не было. Что я сделал:

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

    2. Загрузил эту обработку через Администрирование обработок. Запустил. Получил ошибку.

    3. Вошел по ссылка в режиме Конфигуратор и увидел название временного файла во временном каталоге пользователя.

    4. Поставил в этом месте точку останова и вновь запустил обработку.

    5. Отладчик послушно остановился в указанном месте, а у меня появилась возможность посмотреть результаты запроса и другие места в обработке.

    6. Дальше всё просто…Скопировал из временной обработки то, что нужно в рабочую обработку и скорректировал код.

    При этом есть возможность открыть обработку из конфигуратора во временной папке с ней работать.

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



    Моё сообщение как еще один вариант отладки.

    Reply
  9. fuser

    Ошибка при вызове серверного метода.

    Вы запускаете обработку вызовом:

    ВнешняяОбработка.ВыполнитьКоманду(ИдентификаторКомандыОбработки, ОбъектыНазначения);
    

    Но если посмотреть общий модуль БСП ДополнительныеОтчетыИОбработки.ВыполнитьОбработкуНепосредственно, то увидите в ней проверку: Если структура сведений о внешней обработке содержит параметр «ВерсияБСП», то все вызовы дополняются еще 1 параметром ПараметрыВыполненияКоманды:

    Если ТипОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка
    ИЛИ ТипОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда
    
    Если ПередаватьПараметрыВыполненияКоманды Тогда
    ВнешняяОбработка.ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды);
    Иначе
    ВнешняяОбработка.ВыполнитьКоманду(ИдентификаторКоманды);
    КонецЕсли;
    
    ИначеЕсли ТипОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов Тогда
    
    СозданныеОбъекты = Новый Массив;
    
    Если ПередаватьПараметрыВыполненияКоманды Тогда
    ВнешняяОбработка.ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты, ПараметрыВыполненияКоманды);
    Иначе
    ВнешняяОбработка.ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты);
    КонецЕсли;
    

    Показать

    Рекомендую добавить аналогичный код в вашей обработке

    Reply
  10. Поручик

    (9) Завтра учту.

    Reply
  11. Поручик

    Добавлен учет версии БСП и параметр выполнения команды.

    Reply
  12. Поручик

    Обновление. Текущая версия 1.1.0

    [+] обработка адаптирована для использования с релизами БСП линии 2.1.3

    Reply
  13. Поручик

    Обновление. Текущая версия 1.1.1

    [+] обработка адаптирована для использования в клиент-серверных базах.

    Reply
  14. Поручик

    Вернул всё назад.

    Для отладки в клиент-серверном варианте следует использовать папку, доступную для учетной записи пользователя сервера 1С:Предприятия.

    Reply
  15. Поручик

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

    Reply
  16. citana

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

    Reply
  17. Поручик

    Исправлена незамеченная ошибка. Тоже никто не сообщил. Всем , как всегда, всё равно.

    Reply
  18. worker1c

    (17)

    Спасибо, так гораздо лучше!

    Reply
  19. Alister

    Большое спасибо автору за обработку, только начинаю УФ делать и без нее с отладкой беда.

    Reply
  20. XiPyPg

    Здраствуйте подскажите что делаю не так….скачал вашу обработку по отладке внешних обработок на заполнения. открываю 1с конф + режим отладки, там через открыть открываю вашу обработку, в ней выбираю свою, команду и документ выполняю а он не заходит в точки останова хотя результат по ним выводит. комнаду выполняю на клиенте, да и вобще 1с-ка целиком открыта на сервере

    Reply
  21. Поручик

    (20) Не знаю, что вы там делаете. 500 рублей и займусь вашей проблемой.

    Reply
  22. Brawler

    берем обработку из ДЕМО БСП

    _ДемоДополнительнаяОбработкаСозданияСвязанныхОбъектовНазнача­емая.epf

    меняем в ней Справочник._ДемоКонтрагенты на Справочник.Контрагенты

    запускаем

    выбираем команду «Создать копию и заполнить наименование (открытие формы)…»

    выбираем любой элемент справочника

    выполняем

    ловим ошибку

    {Форма.Форма.Форма(15)}: Поле объекта не обнаружено (ИмяФормы)

    ИмяФормыВладельца = Параметры.ИмяФормы;

    не робит обработка даже с примерами из БСП

    Reply
  23. Brawler

    (23) не понимаю чего ноешь ты.

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

    Reply
  24. Поручик

    (24) У тебя не спросил.

    Reply
  25. Поручик

    Обновление. Текущая версия 1.1.4

    [+] исправление некоторых ошибок при работе с БСП 2.1.3 и выше

    Reply
  26. Вальская Людмила

    Как «проголосовать за», в новом оформлении не нашла, говорю «Спасибо» так.

    Reply
  27. Alex

    Не работает. Не останавливается в точке останова…

    Reply
  28. Поручик

    (29) Печально. Вкурись в описание, может дойдёт. Если не получится, выбрось её.

    Reply
  29. Alex

    Вот по тому ты и поручик.. не быть тебе генералом 🙂

    Reply
  30. Mx00

    пробую заполнять табличную часть, строго по инструкции не получилось 🙂

    думаю нужно добавить пункт перед «выполнить» — открыть форму документа на котором тестируем обработку

    +++

    Разобрался, это у меня обработка такая досталась, которая определяет обрабатываемый документ через открытые окна и если такого окна нет, то и обрабатывать ей нечего…

    Reply
  31. Mx00

    А на точке останова не останавливается никак 🙁

    тестирую вот эту обработку http://infostart.ru/public/238394/

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

    Reply
  32. Поручик

    (33) С той обработкой только за деньги займусь.

    Reply
  33. Mx00

    (34) если деньги разумные, то можем обсудить

    на самом деле точка останова не срабатывает ещё безо всяких заморочек той формы, т.е. при открытии формы тоже не срабатывает

    работаю в БП 3.0 на платформе 8.3.4.389

    Reply
  34. Поручик

    (35) Прежде чем обсуждать финансовый вопрос, почитать очень внимательно описание тоже не помогло?

    Reply
  35. unichkin

    Класс =) Спасибо)

    Reply
  36. qwinter

    Не останавливается при отладке, хоть что делай. Тестировал на стандартной БСПшной обработке _ДемоДополнительнаяОбработкаЗаполненияНазначаемая.

    P.S. Протестировал еще одну свою, остановился…

    Reply
  37. qwinter

    Почему то отладка работает только если установить в «ПараметрыРегистрации» внешней обработки БезопасныйРежим = Истина.

    Reply
  38. Поручик

    (47) Ну я как-то не задумывался. Нет у меня таких обработок.

    Reply
  39. Поручик

    Обновление. Текущая версия 1.1.8

    [+] добавлена отладка обработок с методом «Заполнение формы» («ЗаполнениеФормы») без записи объекта.

    Reply
  40. biz-intel

    В вашей обработке проблемы с модальностью. Планируете рефакторинг?

    Reply
  41. Поручик

    (50) Если не лень будет.

    Reply
  42. МимохожийОднако

    (22) Brawler, вероятно забыл обновить справочник идентификаторов объектов конфигурации.

    Reply
  43. ll13

    Я использую другой подход к отладке внешних обработок БСП…

    http://www.obrabotki.com/otladka-bsp-1s/

    Reply
  44. ZhokhovM

    Поручик, добрый день. Есть вопрос, почему нельзя подключиться ни к одной из ваших обработок с методом ДополнительныйОтчет или ДополнительнаяОбработка? Как их отладить?

    Reply
  45. ZhokhovM

    Подписка.

    Reply
  46. Поручик

    (54) (146) Обычно, в конфигураторе отладчиком.

    Reply
  47. ogre2007

    Сделал по инструкции, не работает. Ошибок не выдает, обработку выполняет частично. Отлаживал обработку заполнения табличной части документов.

    Файловый режим.

    Платформа: 8.3.6.1977

    Конфа: ут 11.1.9.66

    Reply
  48. Cyberhawk

    Не работает (отладчик в точках останова не останавливается) на УНФ 1.5 и обработке заполнения объекта, подключаемой не в безопасном режиме.

    Reply
  49. MaxS

    БП 3.0.41.57

    Платформа 8.3.6.2299

    Версия обработки 1.2.0

    {(1)}: Метод объекта не обнаружен (НовыйРезультатВыполнения)

    СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения()

    Reply
  50. Поручик

    (59) Залил новый файл. Попробуй.

    Reply
  51. TMV

    (58) Cyberhawk, см. (47)

    Reply
  52. kaisar

    (59) MaxS,

    Reply
  53. qwinter

    Здравствуйте. А модальностью так и не занимались?

    Reply
  54. Поручик

    (63) Не помню. Что-то сделал.

    Reply
  55. RodinMax

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

    Reply
  56. baracuda

    Отличная обработка! Выручила. Лайк поручику!

    Reply
  57. HEKPOH

    Спасибо за обработку! Использую в работе

    Reply
  58. Brawler

    И снова 1С подосрало…

    В ЗУП 3.1 с БСП 2.3.3

    такая бяка вылезла

    {(1)}: Метод объекта не обнаружен (НовыйРезультатВыполнения)

    СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения()

    Тонны обработок по всей стране придется людям переделывать…

    Reply
  59. Поручик

    (70) Если вы про мою обработку, то исправлено ещё в сентябре прошлого года.

     Если СравнитьВерсии(ВерсияБСП, «2.1.6») >= 0 Тогда
    Попытка
    НовыйРезультатВыполнения = Вычислить(«СтандартныеПодсистемыКлиентСервер.ОписаниеРезультатаВыполнения()»);
    Исключение
    НовыйРезультатВыполнения = Вычислить(«СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения()»);
    КонецПопытки;
    ПараметрыВыполненияКоманды.Вставить(«РезультатВыполнения», НовыйРезультатВыполнения);
    КонецЕсли; 
    Reply
  60. wbazil

    хорошая обработка, в отладку попадает, спасибо

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

    Reply
  61. dkonakov

    в БП 3.0.44 похоже надо переписывать, СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения() — эта функция всё.

    Reply
  62. Поручик

    (73) ты файл где скачал?

    Reply
  63. dkonakov

    (74) Вижу, что уже исправлено. Спасибо!

    Reply
  64. veyron21

    Не работает((( Уже озвученная выше проблема появляется:

    {(1)}: Метод объекта не обнаружен (НовыйРезультатВыполнения)

    СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения()

    Идея обработки очень классная, помогает сэкономить кучу времени.

    Версия БСП 2.3.3.77

    Версия обработки 2.1.5. скачивал отсюда 24.10.2016

    Reply
  65. Поручик

    (76) Исправил. Там надо было в двух местах, а я второе пропустил.

    Reply
  66. Ryzhak

    {(1)}: Метод объекта не обнаружен (НазначаемыеОбъектыМетаданныхПоВидуВнешнегоОбъекта)

    ДополнительныеОтчетыИОбработки

    .НазначаемыеОбъектыМетаданныхПоВидуВнешнегоОбъекта(ВидОбработки)

    ЗУП 3.1.2.183

    Reply
  67. Поручик

    (78) Будет время, исправлю. Вы бы ещё версию БСП в ЗУПе 3.1.2 сказали, чтобы мне не шарить по юзерсу лишний раз.

    Reply
  68. Поручик

    (78)

    Не знаю, что там в ЗУПе, но в БП 3.0 последних релизов версия БСП 2.3.5., то есть за полгода почти ничего не поменялось в подсистеме дополнительных обработок.

    Reply
  69. alexhline

    тоже не работает в БП 3.0.44.204

    {(1)}: Метод объекта не обнаружен (НазначаемыеОбъектыМетаданныхПоВидуВнешнегоОбъекта)

    ДополнительныеОтчетыИОбработки.НазначаемыеОбъектыМетаданныхПоВидуВнешнегоОбъекта(ВидОбработки)

    Reply
  70. Поручик

    Удивительно. Проверю на неделе.

    Reply
  71. AnDrU89

    (81) А посидеть, ошибку поискать, не пробовали? Поправил немного код и все работает на ура, автору спасибо

    Reply
  72. EvgeniyNP

    А будет она работать в БГУ 2.0.54.31 с БСП 2.4.5.80?

    Reply
  73. Поручик

    (84) Не знаю. Я же не многостаночник.

    Reply
  74. EvgeniyNP

    (85)Тогда по другому, с такой версией БСП будет работать?

    Reply
  75. Поручик

    (86) По-крайней мере с той, которая была на 20.06.17. Я ею нечасто пользуюсь

    Reply
  76. EvgeniyNP

    (87) Ясно, спасибо

    Reply
  77. Поручик

    (88) Вроде работает.

    Бухгалтерия государственного учреждения, редакция 2.0 (2.0.54.32)

    По крайней мере, при открытии ошибок не выдаёт. Я пользовался СозданиеСвязанныхДокументовУниверсальнаяУФ.epf

    Reply
  78. EvgeniyNP

    (89) у меня при отладке ругается

    {ВнешняяОбработка.ЗаполнениеТаблицыРаспределенияНДС.Форма.Форма.Форма(27)}: Значение не является значением объектного типа (Объект)

    ВладелецФормыОбъект = ВладелецФормы.Объект;

    это какой-то нюанс обработки проверки?

    Reply
  79. dklp

    (90) аналогичная проблема.

    тестирую внешнюю обработку вида ЗаполнениеОбъекта с типом команды ВызовКлиентскогоМетода, обработчик команды размещен в модуле формы внешней обработки:

    &НаКлиенте
    Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    

    при попытке отладить внешнюю обработку выдает ошибку:

    «{ВнешняяОбработка.ЗаказКлиентаРазбить.Форма.Форма.Форма(25)}: Значение не является значением объектного типа (Объект) ДанныеФормы = ВладелецФормы.Объект; »



    в общем, предложенная автором обработка для отладки внешних обработок не может вычислить выражение «ВладелецФормы»

    1С:Предприятие 8.3 (8.3.12.1529)

    Управление торговлей, редакция 11 (11.4.5.71)

    Reply
  80. Поручик

    Значит, что-то поменялось в БСП.

    Reply
  81. Поручик

    (91) Посмотрите в отладчике, какой-тип у ВладелецФормы. У меня нет релизов УТ 11.4.

    Reply
  82. dklp

    (91), (92), (93)

    обработка для отладки внешних обработок не может вычислить выражение «ВладелецФормы»

    В общем, я нашел способ как через вашу обработку отладки достучаться к владельцу формы моей тестируемой обработки (то есть к форме документа, к которому привязана обработка заполнения, в моем случае — к документу ЗаказКлиента).

    Вместо выражения «ВладелецФормы» в коде модуля формы своей обработки временно использую такую конструкцию:

    &НаКлиенте
    Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    Элемент = ОбъектыНазначенияМассив[0];
    КлючПоиска = Новый Структура(«Ключ», Элемент);
    ВладелецФормы_ДляОтладки = ПолучитьФорму(«Документ.ЗаказКлиента.Форма.ФормаДокумента»,КлючПоиска,,,,);
    …
    КонецПроцедуры

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

    После завершения отладки можно в код внешней обработки заполнения документа снова вернуть выражение ВладелецФормы для обращения к форме документа из внешней обработки.

    Как-то так.

    Reply
  83. UmBu

    Если сделать поправки dklp (94) отладка работает.

    Reply

Leave a Comment

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