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




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

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 не будет опубликован. Обязательные поля помечены *