Внешние обработки и отчеты 1С:Предприятие 8.2




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

81 Comments

  1. BabySG

    Вставлю свои пять копеек: http://www.1c-pro.ru/index.php?showtopic=26882

    Reply
  2. VShevelev

    Не могу понять из примеров, как подключить дополнительный отчет или отчет прикрепляемый к объектам. В дополнительные отчеты и обработки загружаются, но вызвать ниоткуда невозможно. Непонятно, Спилберг!

    Reply
  3. VShevelev

    Проверил на конфигурации Управление небольшой фирмой — работает,

    надо на Документооборот 1.0.8 — НЕ получается.

    Дополнительный отчет 8.2 — Указать разделы командного интерфейса — нет разделов.

    Внешний Отчет 8.2 — Назначение обработки — не цепляется ни справочникам, ни к документам.

    Внешние печатные формы работают,

    МассивНазначений.Добавить(«Справочник.ВнутренниеДокументы»);

    РегистрационныеДанные.Вставить(«Назначение», МассивНазначений);

    проходит нормально.

    Reply
  4. kharitonov@gmail.com

    1С:Предприятие 8.2 (8.2.12.96)

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

    СЛОМАЛ всю голову вид: ДополнительнаяОбработка

    «запускаю по расписанию»

    не хочет выполнять процедуру «ВыполнитьКоманду», точнее ни чего не делает только в конце вываливается по ошибке :

    {ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(369)}: Значение не является значением объектного типа (Метаданные)

    ЗаписьЖурналаРегистрации(НСтр(«ru = ‘Дополнительные отчеты и обработки'»),

    осталась одна надежда на Вас

    Reply
  5. альбина

    Подскажите, пожалуйста, что делаю не так, всю голову сломала: нужно поменять печатную форму для ТТН в УНФ

    создала внешний отчет (.erf) с видом «Отчет», и вызовом клиентского метода

    нужно из модуля формы открыть форму отчета и передать значение реквизита Документ

    делаю так:

    &НаКлиенте

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

    Если ИдентификаторКоманды = «1» Тогда

    ФормаОбработки = ПолучитьФорму(«ВнешнийОтчет.ПечатьТТН.Форма.Форма», Новый Структура(«Документ», ОбъектыНазначенияМассив[0]));

    ПараметрыПечати = ОткрытьФормуМодально(ФормаОбработки);

    КонецЕсли;

    КонецПроцедуры

    в модуле формы отчета есть процедура

    &НаСервере

    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Объект.Документ = Параметры.Документ;

    КонецПроцедуры

    Но при создании формы ошибка:

    Форма.Форма.Форма(32)}: Поле объекта не обнаружено (Документ)

    Объект.Документ = Параметры.Документ;

    в структуру Параметры ничего не передается судя по всему, хотя при создании формы я передаю ссылку на документ

    в чем моя ошибка?

    Reply
  6. альбина

    почему-то не передается структура параметров в открываемую форму

    Reply
  7. Serega456

    Проверить, открывается ли отчет как внешний отчет, т.е. «Файл-Открыть-…». Если нет, значит в параметрах или в реквизитах отчета действительно не хватает объекта «Документ». Потому что при таком коде

    «ФормаОбработки = ПолучитьФорму(«ВнешнийОтчет.ПечатьТТН.Форма.Форма», Новый Структура(«Документ», ОбъектыНазначенияМассив[0]));

    ПараметрыПечати = ОткрытьФормуМодально(ФормаОбработки);»

    если все объекты существуют, форма должна открыться.

    Reply
  8. isn

    Здравствуйте!

    Не могли бы Вы выложить обработки на внешний ресурс.

    К сожаление не могу скачать с инфостарта.

    Reply
  9. d_hof

    У меня при попытке установить файл ZagruzkaSpav_82.epf выдается ошибка:

    Возможно, обработка (отчет) устарела или не является дополнительной:Метод объекта не обнаружен (СведенияОВнешнейОбработке)

    программа УНФ Управление небольшой фирмой, редакция 1.3 (1.3.1.4)

    Reply
  10. Aydrey

    Спасибо, нашел то что нужно.

    Reply
  11. lenka-nes@mail.ru

    спасибо! пригодилась. Пока еще не привычно писать такие обработки после 8.1

    Reply
  12. peacemaker75

    спасибо, тоже помогло.

    Reply
  13. kirillkr

    То ли в УТ11 косяк, то ли лыжи не едут, но ДополнительныйОтчет не работает — вернее не виден ни для кого.

    Reply
  14. БарсиК

    Люди, человеки, хелпните мне по доброте душевной)

    1С 8.2 УТ (баз) 10.3

    Пытаюсь прикрутить к документу (ну, допустим, к Заказу Покупателей) кнопку Внешней обработки (не печатной). Делаю все по статье (даже по «пяти копейкам» из первого поста сверялась), а в результате в документе не появляется ничего нового нигде (а может, не там ищу… но вроде б во все уголки заглянула, даже туда, где априори быть не должно)

    Спасибо

    PS файл скачать не могу (мелко плаваю), может быть там есть какая-то подсказка, пользовалась только статьей.

    Reply
  15. kirillkr

    (14) Это для Управляемых приложений, т.е. для УТ 11.

    Reply
  16. БарсиК

    Спасибо за ясность (пусть даже и псисимистическую))

    PS посмотрела, что за зверь такой — пишут, что переход с базовой не планируется даже((

    Reply
  17. Stepping1C

    За пояснение спасибо.

    Только начал внедрение Розницы 2.0.

    Захотел добавить внешнюю обработку, да не тут-то вышло …

    Еще раз спасибо надеюсь поможет.

    Reply
  18. kr_andr

    Спасибо

    Reply
  19. medv

    Огромное спасибо, воспользовалась для создания веншних обработок для заполнения табличных частей. Помогло! У 1С не так много где описано, как создавать свои — и для примера ничего не проводят

    Reply
  20. dimonbaton

    Спасибо! помогло разобраться!

    Reply
  21. e85

    Сейчас скачаю посмотрю, что это за зверь. 1с-цы как то перемудрили с внешними формами, в этои плане 8.1 проще, возможно если бы была более подробная информация, что, где и как делать, возможно было бы проще. А так полезную информацию днем с огнем не найти 🙁

    Reply
  22. espero2000

    Пытался на основе примера «Печатная форма 8.2.epf» вывести печ.форму c помощью макета, но никак не принимается команда ПолучитьМакет(). Пишет: Метод объекта не обнаружен. Хотя в описании языка стоит такой метод у внешнего отчета. У кого нибудь есть отчет с использованием метода ПолучитьМакет()?

    Reply
  23. AlexO

    Автор, а что не так с внешними обработками и отчетами в 8.2? судя по скринам — реализован функционал подключения в 8.1.

    И понравился список в Заказах — это на ДС сделано? что там за раскраска доков?

    Reply
  24. AlexO

    да, еще случайно теперь узнал благодаря файлу автора, что формат docx — это на самом деле зазипованный набор xml-файлов и каких-то шаблонов…

    вот оно как, однако… ))

    Reply
  25. lstep

    Имею 1С 8.2 конфигурация Управление торговлей. Есть необходимость использовать внешнюю обработку в формате .epf. Не могу понять, как это осуществить… Ранее работал с 1С 7.7 — там все было просто. Может быть и здесь все просто, но пока чего-то не улавливаю. Если можно — поясните…

    Reply
  26. mihas1001

    Полезная статья, автору респект!

    Reply
  27. vec435

    просто и всерьез

    Reply
  28. SergTH0000

    Надо было срочно вставить обработку в конфу с этой статьей за 5 мин. написал=)

    Reply
  29. blackbumer

    Ищу внешние печатные формы заказа поставщику, внутреннего заказа с ВЕСОМ товара для УТ 10.3

    Очень надо знать общий тоннаж заказа, чтобы заказывать транспорт

    Reply
  30. нормальный такой

    Здравствуйте.

    Конфа УТ11.0 (11.0.7.8)

    В общем из типовой конфигурации сохранил как внешний отчет «Отчет Прайс-Лист», внес некоторые изменения, работает через «Файл — Открыть …»

    Почитал Вашу публикацию и добавил Экспортную Функцию «СведенияОВнешнейОбработке()» в модуль объекта, все хорошо, как Внешний отчет я её прицепляю, указываю в каких разделах должна появиться, НО НЕ ПОЯВЛЯЕТСЯ.

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

    кто сталкивался, подскажите.

    Reply
  31. нормальный такой

    Решилось обновлением до последнего релиза

    Сейчас 11.0 (11.0.7.19)

    Сдесь же на инфостарте нашел, мол связано было с тем что настройка не записывались в регистр «Пользовательские настройки доступа к Обработкам»

    сейчас все пишется, проверил.

    Reply
  32. sirm

    Нужна внешняя обработка «Групповая обработка справочников и документов». Взял с Бухгалтерии. Пытался подцепить к УТ 11.0.6.7. Упорно выдает ошибку: Метод объекта не обнаружен (ВыполнитьКоманду) ВнешняяОбработка.ВыполнитьКоманду(ИдентификаторКоманды). Может ваши примеры помогут или прояснят…

    Reply
  33. sirm

    (50) sirm,

    Что-то никак… Туплю наверное…

    У меня есть внешняя обработка с формой. Нужно, что бы она вызывалась. Как сделать не пойму.

    Вроде все проставил как в примере… Что-то так и не догнал.

    Reply
  34. materiy_boec

    Сейчас скачаю и заценю))

    Спасибо

    Reply
  35. Yury1001

    А кто ни будь знает случайно как подключить дополнительный отчет со всеми его вариантами? в УТ 11. И как разместить его на страничке отчетов, а не через Дополнительные отчеты?

    Reply
  36. materiy_boec

    !!!Вопрос!!!

    Надо запустить обработку по расписанию.

    Пишет

    «Команда используется только на клиенте.

    Регламентное задание можно настраивать только для команд выполняемых в серверном контексте»

    У меня обработка? которая делает обмен с Базой данных SQL, все процедуры выполняются &НаКлиенте

    Объясните пожалуйста что делать!

    Reply
  37. materiy_boec

    Разобрался, спасибо

    Reply
  38. Ctrl P

    Спасибо за статью и примеры.

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

    Reply
  39. sigma17

    У меня старый релиз УТ11, добавил в регистр «Пользовательские настройки доступа к Обработкам» вручную — заработало.

    Reply
  40. Stepan_1c

    спасибо за работу=)

    Reply
  41. webester

    Хоть какая то информация, а где можно более полно почитать? Здесь как то очень сжато все.

    Reply
  42. TrinitronOTV

    спасибо за данную публикацию

    Reply
  43. buval

    Спасибо. Буду эксперементировать.

    Reply
  44. siwa99

    Спасибо афтару. Похожа на баян…Все это (полная версия)- давно лежит на ИТС «ДополнительныеОтчетыИОбработки»

    Reply
  45. nurislam

    Спасибо автору

    Reply
  46. and_r

    Спасибо за статью, первый раз столкнулся с УТ11, оказался в шоке, после того, как не смог подключить внешний отчет 🙂

    Reply
  47. Создание Тьмы

    Ни один из режимов запуска обработки не даёт возможности настроить расписание отчёта..

    Не применимо — команда используется только на клиенте

    Что делаю не так или куда копать?

    Reply
  48. Создание Тьмы

    Копать никуда не надо 🙁

    Запрещено программно использование расписания для дополнительных отчётов, по крайней мере на релизе 11.0.8.11

    Reply
  49. veluga

    ну как бы вещь полезная, и как примере, и как описание

    +1

    Reply
  50. Kalugin_Adrey

    Ты бог! :)))))))))))))

    Reply
  51. Mortiferus

    Ну а где же пример использования именно Отчета (не Дополнительного отчета)? Хотел понять, как привязать отчет к документу и передать его в качестве параметра в СКД.

    Reply
  52. Alister

    Спасибо за информацию, очень помогла в работе, для понимания.

    Reply
  53. CSiER

    Исправьте, пожалуйста, опечатку «//ПечатанаяФорма»

    Reply
  54. McCoy77

    Отличная статья. Еще бы код разукрашкой раскрасить — было бы вообще супер.

    Reply
  55. vlast

    Спасибо!

    Reply
  56. VictorK

    Весьма поучительно!

    Reply
  57. svetanik

    Вот спасибо! Еще бы про ограничения по использованию в ролях упомянули, было бы вообще бесценно!

    Reply
  58. Hort1

    Просто и наглядно. Очень помогло, спасибо !

    Reply
  59. SeTIrk

    Спасибо, разобрался с дополнительными отчетами, бухгалтера довольны.

    Reply
  60. alexd73

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

    Т.е. для обработки «Заполнение объекта 8.2.epf» появляется кнопка в шапке, а я хотел бы ее перенести в командную панель табличной части. Такое возможно?

    Reply
  61. Поручик

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

    Reply
  62. Vint_1c

    Отличная статья! Новые возможности очень интересны.

    Reply
  63. PovAndy

    (81) Поручик, Идея хорошая!

    Именно по этому ищу обработку к Розница 2.0 для загрузки данных из ТСД. Есть готовые ,но только для Розница 1.0, никто браться написать не берётся!

    Подскажите, где взять такую обработку?

    Reply
  64. Bublik2011

    (83) PovAndy, а что, если открыть готовые обработки не через «дополнительные обработки», а просто через «файл открыть» ? Операция работы с ТСД вроде разовая.. Стремлюсь делать, как нормальные люди, если правильно открывать через «дополнительные обработки», так, наверное и произойдет. Как удобнее? Спасибо.

    Reply
  65. dufrein

    (84) Bublik2011, Поддерживаю

    Reply
  66. dufrein

    «Вот спасибо! Еще бы про ограничения по использованию в ролях упомянули, было бы вообще бесценно!» — поддерживаю

    Reply
  67. dufrein

    На УПП не взлетит?

    Reply
  68. EugenLiquor

    Попробовал интегрировать в розницу 1, ничего не получается, хоть убейся.

    Reply
  69. andogskiy

    (88) EugenLiquor,

    Так Розница 1 не на управляемых формах. Там всё гораздо проще.

    Reply
  70. nafa

    (46) invalid,

    Сдесь же на инфостарте нашел, мол связано было с тем что настройка не записывались в регистр «Пользовательские настройки доступа к Обработкам»

    Спасибо, в типовой бухгалтерии 3.0 та же беда. Внес записи вручную — заработало.

    Reply
  71. Isperator

    Хорошая статья.

    Reply
  72. Tanis

    Добрый вечер!

    Это всё-таки для 8.3? Ил на 8.2 тоже можно внешние отладить?

    Спасибо!

    Reply
  73. Анатолий50

    Ничего хорошего не увидел!

    Reply
  74. maksal

    ПараметрыРегистрации.Вставить(«РассылкаОтчетов», Истина);

    для возможности добавления отчета в рассылку отчётов (УТ)

    Reply
  75. PanKir

    (0)

    Блин, автор!!! а нельзя было всё в один файлик кинуть???

    Ну или хотя бы не дублировать описание статьи в доковский файл?

    Ты бы ещё все внешние отчет/обработки по отдельности кинул, так больше СМ заработаешь…

    Думал хоть в обработках что-то полезное будет…

    Нафига такую ерунду разрешать выствлять за СМ??? Админы!!! Вы с ума сошли что ли? Где адекватные проверки файлов???

    Reply
  76. Дмитрий74Чел

    Коллеги, не качайте doc-файл — зря потратите СМ. Это просто тупо копия текста данной статьи.

    Фу как некрасиво.

    Гораздо более ценным источником является документация на ИТС БСП-пример_внешняя_печатная_форма

    Reply
  77. binx

    Статья классная, информация на ИТС здесь:

    Reply
  78. victor_k

    Почему при записи внешней обработки в справочник внешних обработок происходит вызов СерверногоМетода (не по расписанию)?

    Reply
  79. Vida

    »

    Можно вводить на основании и заполнять объекты сразу на основании нескольких объектов, а не одного

    »

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

    Reply
  80. maxx

    (101) Проблем никаких нет, подключаете обработку «Ввода на основании» (Создание связанных объектов), и если выделите в списке несколько документов, то в команду ВыполнитьКоманду будет передан массив этих документов ОбъектыНазначения. Далее делаете всё, что вам нужно.

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

    Reply
  81. max_zhilin
    Безопасный режим – отвечает за то, должна ли обработка выполняться учитывая права пользователя. Если поставить значение «Ложь», то обработка или отчет будут выполняться без учета ограничений прав (как под полными правами)

    Не то. Это аналог Защиты от опасных действий для пользователя в конфигураторе.

    Из описания:

    БезопасныйРежим — Булево — Признак подключения внешней обработки в безопасном режиме.

    Значение по умолчанию Истина (обработка будет выполняться безопасно).

    В безопасном режиме:

    Игнорируется привилегированный режим.

    Запрещены внешние по отношению к платформе 1С:Предприятия действия:

    COM;

    Загрузка внешних компонентов;

    Запуск внешних приложений и команд операционной системы;

    Доступ к файловой системе, кроме временных файлов;

    Доступ к Интернету.

    Необязательное свойство.

    Reply

Leave a Comment

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