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




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

96 Comments

  1. rasswet

    а если без БСП, работать не будет?

    Reply
  2. Поручик

    Для конфигураций вида УТ 11. Она как раз построена с использованием БСП. Какие есть ещё конфы, не знаю.

    Reply
  3. IgorWeiss

    В УТ 11 работает, в УНФ и ДО нет….

    Reply
  4. Поручик

    Ну извиняй, нет у меня их.

    В чём выражается нерабочесть в УНФ? Там используется БСП версии 1.0.5, а я со свежаком работаю.

    Reply
  5. Sharloc

    в Комплексной 1.1 вылетает с ошибкой

    {Форма.ОсновнаяФорма.Форма(79,29)}: Переменная не определена (ДополнительныеОтчетыИОбработки)

    ПолноеНазначениеЗначение = <<?>>ДополнительныеОтчетыИОбработки.ПолучитьПолноеНазначениеПоВидуДополнительнойВнешнейОбработки­(ВидОбработки);

    а жаль … 🙁

    Reply
  6. Поручик

    (5)

    Похоже на то, что обработка пока только для УТ 11 и, возможно, УНФ. Знать бы, почему в (3) не работает.

    Для остальных конвертируйте в 8.2. обработку от poppy

    http://infostart.ru/projects/833/

    Reply
  7. Поручик

    Теперь работает и в УНФ. В редакции 1.2 прикрутили механизм внешних (дополнительных) печатных форм

    Reply
  8. Поручик

    В ожидаемой в конце февраля — начале марта текущего года Рознице 2 (в режиме управляемого приложения) тоже работает.

    Reply
  9. piffoff

    Спс. Пригодилась пару раз

    Reply
  10. kr_andr

    Спасибо

    Reply
  11. m818rt

    Для печати ценников пойдёт? а то в УТ 11 с печатью проблема (поля, размер — всё сбрасывает на 0)

    Reply
  12. Поручик

    (12) Не знаю, попробуй сам.

    Reply
  13. angler225

    Загружаю пример внешней печатной формы из Документооборота, выдает сообщение ‘Возможно, обработка (отчет) устарела или не является дополнительной:, хотя эта обработка подключается нормально.

    Reply
  14. Поручик

    (16) И что дальше?

    Reply
  15. angler225

    (17) А ничего, и тишина. Обработка не создается. Версия платформы 8.2.14.537.

    Reply
  16. Поручик

    (18) Ну нет у меня Документооборота. Разбирайтесь сами.

    Reply
  17. Поручик

    (20) Заголовок описания.

    Reply
  18. Поручик

    Обновление

    Переработан интерфейс обработки.

    [+] просмотр списка внешних печатных форм.

    [+] возможность регистрации печатной формы в справочнике «Дополнительные отчеты и обработки».

    [+] проверка файла при выборе на принадлежность к печатным формам.

    Reply
  19. Поручик

    Добавлена поддержка методов выполнения команд печати внешних печатных форм: Открытие формы, вызов клиентского метода.

    Reply
  20. Поручик

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

    Reply
  21. Mx00

    Спасибо, очень пригодилась 🙂

    Reply
  22. alexander_prok

    А не пробовали просто открыть ВПФ в конфигураторе и в режиме отладки напечатать стандартным способом (БСП)? Эффект тот же. 😉

    Reply
  23. RSBIR

    Решил протестить обработку на Бухгалтерия 3.0

    Результат при открытии формы:

    {Форма.ОсновнаяФорма.Форма(383)}: Метод объекта не обнаружен (ПолучитьПолноеНазначениеПоВидуДополнительнойВнешнейОбработки­)

    ПолноеНазначениеЗначение = ДополнительныеОтчетыИОбработки.ПолучитьПолноеНазначениеПоВидуДополнительнойВнешнейОбработки­(ВидОбработки);

    Дальше смотреть не стал. 🙁

    Reply
  24. Поручик

    (29) Ну не знаю. Расширенный синтаксис-контроль ошибок не выдаёт, за исключением одного предупреждения о возможно ошибочном методе, но оно обрабатывается. При открытии ошибок тоже нет.

    БП 3.0.18.9.

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

    Reply
  25. RSBIR

    Тестил на релиз 3.0.19.27

    Reply
  26. Поручик

    (31) Действительно, в БП 3.0.19.27 уже другая БСПятина. Там такого метода нет, вообще. Вот ведь гады! Was twaren sie?

    Буду другую делать.

    Reply
  27. Поручик

    (31)

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

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

    Reply
  28. RuslanZ

    Аналитика: Документооборот выдает: «Возможно, обработка (отчет) устарела или не является дополнительной». Версия БСП 1.1.3.1. На старых версиях не работает?

    Reply
  29. Поручик

    (34) Тему с начала читаем. Вдумчиво. По строкам.

    Reply
  30. RuslanZ

    (35) понял. А мне все казалось, что уже видел ответ на свой вопрос, но невнимательно просмотрел и не заметил.

    Reply
  31. Поручик

    (36) Если хотите, за 500 рублей могу заняться вопросом. От вас демо-база документооборота. Я знаю где обработка спотыкается, но не знаю отчего.

    Reply
  32. MaxS

    Печатная форма может открываться как форма.

    Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(«2.1.3.22»);
    …
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    …
    

    Тогда в обработке тестирования как минимум нужно сделать так:

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

    Показать

    Reply
  33. Поручик

    (38) Как будто этого нет. Скачают старьё с какой-нибудь файлопомойки, потом мне втирают.

    Reply
  34. Поручик

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

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

    Reply
  35. Поручик

    (34) По-моему, эта ошибка связана с тем, что база документооборота у вас клиент-серверная.

    Reply
  36. MaxS

    (39) Вы вынудили меня второй раз скачать вашу обработку, чтобы убедиться, что высказывание (38) верное.

    Некрасиво поступаете.

    Хотел помочь в доработке, привёл готовый код, но столкнулся с грубостью в ответ. Жалко тратить Вас своё время.

    Reply
  37. Поручик

    (42) Пальцы отвалились или маней жалко? Мог бы с сайта автора скачать, все мои работы там есть.

    Reply
  38. Новиков

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

    База файловая. Точка останова во внешней обработки стоит, сама внешняя обработка открыта.

    Дотрейсиваю до ВыполнитьСерверныйМетодОбработки в данной отладочной обработке, все хорошо. Дохожу до кода:

    Попытка
    ВнешняяОбработка.Печать(ОбъектыНазначенияМассив, КоллекцияФорм, ОбъектыПечати, ПараметрыВывода);
    Исключение
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
    НСтр(«ru = ‘Ошибка печати: ‘») + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
    Возврат;
    КонецПопытки;

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

    Может бы Поручик, любезно порекомендовал — куда копать?

    Reply
  39. Поручик

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

    Reply
  40. Поручик

    (42) Этот готовый код устарел на год, новые версии надо скачивать

    Reply
  41. Новиков

    (45) да собственно, я последний файл и брал 🙂 Более того, какая-то из Вашей предыдущей версии, работала. И я даже ей пользовался. Видимо, за прошедшее время, что-то изменилось.

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

    В любом случае, за ваш труд спасибо!

    Reply
  42. Поручик

    (47) С универсальностью облажался. На клиент-серверной такая же ерунда. Если кто-то что-то предложит вменяемое, дам пряник.

    Reply
  43. Поручик

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

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

    Reply
  44. Поручик

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

    Reply
  45. Поручик

    Исправлена отладка печатных формы с методом использования «ОткрытиеФормы». Не передавались ссылки на объект для печати и ссылка на печатную форму в ИБ.

    Reply
  46. Hi-Hightower

    Спасибо! Работает. очень пригодилась.

    Reply
  47. Goruch

    (59) Сурово.:)))

    Честно говоря, раньше мучился с этими доп. печатными формами и ее отладками. А оказывается одним кликом мыши это все легко решается.:)))

    Reply
  48. realmrak

    Спасибо, помогла. Порядок использования действительно важен)

    Reply
  49. Alister

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

    Reply
  50. Поручик

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

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

    Reply
  51. ilonnaa

    Подскажите последняя версия работает?

    Reply
  52. ilonnaa

    А блин читаю не внимательно ветку. Прошу прощения! Спасибо автору за прекрасную обработку! Очень нужна!

    Reply
  53. Поручик

    (74) Если нужна, купите у меня маней и скачайте.

    Reply
  54. ilonnaa

    (75) Как купить? Какие цены?

    Reply
  55. Поручик

    (76) Сто рублей на телефон и дам вам 10 маней. Скачаете сами, что хотите.

    Reply
  56. ilonnaa

    (77) как с вами связаться?

    Reply
  57. Поручик

    (78) Через личные сообщения

    Reply
  58. michael2006

    Пробовал обработку на конфигурации УНФ.

    Печать в шаблон Microsoft Word не отлаживает…

    Пробовал и так и сяк.

    Reply
  59. Поручик

    (80) 500 рублей и займусь вашей проблемой. У меня быстро всё отладит.

    Reply
  60. popro

    подскажите что означает «Отладка печати в этой папке не доступна. Используйте папку, доступную для учетной записи пользователя сервера 1С:Предприятия.» как определить требуемую учетную запись сервера?

    Reply
  61. popro

    это учетная запись от имени которой запущена служба ragent?

    Reply
  62. Поручик

    (82) Посмотреть параметры работы сервера 1С, от какого пользователя он работает. Как правило, это локальная учетная запись USER1CV82 или что-то типа того.

    Reply
  63. Поручик

    (83) или служба ragent.

    Reply
  64. forever-lilya

    Можно отладить:

    1. Открыть внешнюю печатную форму (обработку, отчет и т.д.) в режиме конфигуратора

    2. Добавить в начало модуля внешней печатной формы (обработка, отчет и т.д.) какую-либо стандартную процедуру или функцию из общего модуля. Например, ОбщегоНазначения.ПустаяДата().

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

    4. В итоге «про шагая» стандартную процедуру (функцию) вы попадете в свой внешний отчет (обработку, печатную форму).

    Reply
  65. AleksSF

    А можно в СсылкаНаОбъект сделать множественный выбор.

    Ведь уравляемых формах можно печатать несколько объектов из списка.

    Я думаю, что это было бы полезно.

    Reply
  66. Поручик

    (90) Наверное, можно. Будет стоить 500 рублей.

    Reply
  67. AndyInfo2012

    Отлично работает. Спасибо автору. И вопрос (может, не совсем в теме): как сделать, чтобы внешние печатные формы появлялись сразу после нажатия кнопки Печать вместе со штатными (сейчас после нажатия Печать нужно выбирать Дополнительные печатные формы…, потом нужную, потом Выполнить) ? Платформа 8.2.19.76, УТ 11.1.2.19 — если это имеет значение.

    Reply
  68. Поручик

    (92) В УТ 11.1 вашего релиза только если обновить БСП последнего на сегодняшний день релиза. То, что вы хотите, есть в БП 3.0.

    Reply
  69. Поручик

    (94) Потому что файл надо скачивать отсюда и читать описание.

    Reply
  70. l-Rain

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

    Reply
  71. bird21

    Пригодилась. Полезная штука.

    Reply
  72. buval

    Плюс за качественную обработку

    Reply
  73. unichkin

    (89) forever-lilya, платформа 8.3.4.389 — не помог ваш способ. Отладка пропускает код самой обработки, позволяя видеть только функции конфы.

    Reply
  74. virtyoz

    (89) Пробовал и на платформе 8.2.16 и 8.3.4, в модуль обработки так и не зашло, отладка стопорится на конце функции общего модуля.

    Reply
  75. Поручик

    Версия 1.2.7.

    [+] исправлены некоторые моменты для последних версий БСП и платформы 8.3

    Reply
  76. zspr

    Спасибо автору! Отличная обработка. Эконимит много времени и нервов!

    Reply
  77. markovki

    Пробую на БП 3.0

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

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

    Reply
  78. Поручик

    (103) Не знаю. Всё описано на странице.

    Reply
  79. makaorel

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

    Reply
  80. Region102

    УТ 11.1.6.17, платформа 8.3.5.924 не работает.

    Reply
  81. Поручик

    (106) И в чём выражается нерабочесть?

    Reply
  82. Поручик

    (106) 8.3.5.924 платформа тестовая, так что ваши проблемы.

    Reply
  83. lk78

    УТ 11.1 (8.3.4.482) не работает, не заходит в модуль обаботки на точках останова

    Reply
  84. Поручик

    (109) Выкиньте её, если читать не умеете.

    Reply
  85. lk78

    объясните ???

    Reply
  86. lk78

    так может она вообще не рабочая, зачем тогда людям стартмани тратить на вашу обработку …

    Reply
  87. stas1kbob

    а для внешнего отчета будет работать?

    Reply
  88. ZhokhovM

    (109) lok78, если не заходит в модуль обработки на точках останова, попробуйте перезапустить конфигуратор.

    Reply
  89. the1

    (89) forever-lilya, это было возможно на обычных формах, на управляемых такое не прокатит

    Reply
  90. GeterX

    При выборе файла внешней печатной формы возникает ошибка:

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

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

    Конфигурация: Зарплата и кадры государственного учреждения, редакция 3.0 (3.0.24.144)

    Reply
  91. Поручик

    (172) Ничего не скажу. Похоже, в ЗиК для государственного учреждения какая-то своя БСП, если она там вообще присутствует.

    Все конфы для гос. учреждений отдельная песня.

    Reply
  92. lisav

    За обработку спасибо, но она перестала работать в УТ:

    При выборе файла внешней печатной формы возникает ошибка:

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

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

    Конфигурация: Управление торговлей, редакция 11.2 (11.2.3.95)

    Reply
  93. Поручик

    (185) Так скачайте текущую версию.

    Reply
  94. pentanom

    Конфигурация УТ 11.3.4.124

    При открытии выдается ошибка:

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

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

    Этой функции (процедуры) я вообще нигде не нашел 🙁

    Reply
  95. vyacheslavb

    При выборе файла внешней печатной формы возникает ошибка:

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

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

    Зарплата и управление персоналом, редакция 3.1 (3.1.8.216)

    Reply
  96. Поручик

    (245) Не буду спорить. Какая там БСП? Я ЗУП ни разу в глаза не видел.

    Reply

Leave a Comment

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