Добавляем регистр доп_ОбменСайт. В нем будем хранить пакеты для отправки на сайт
В примере рассмотрю отправку номенклатуры контрагентов, которая хранится в табличной части справочника "Контрагенты". При записи справочника сравниваем таблицу в объекте и в ссылке, если они различаются записываю пакет.
Данные отправляю в формате JSON два массива с наименованием и УИ, которые оборачиваю в третий массив.
//В подписке на событие ПередЗаписью
ТЗ = Источник.НоменклатураНаСайт.Выгрузить();
Если ЗначениеВСтрокуВнутр(ТЗ) <> ЗначениеВСтрокуВнутр(Источник.Ссылка.НоменклатураНаСайт.Выгрузить()) Тогда
ЗаписатьСообщение(ТекущаяДата,Источник,"nomenklatura",ТЗ.ВыгрузитьКолонку("Номенклатура")); ;
КонецЕсли;
Процедура ЗаписатьСообщение(ТекущаяДата,Источник,Таблица,МассивДанных)
Набор = РегистрыСведений.доп_ОбменСайт.СоздатьНаборЗаписей();
Набор.Отбор.Дата.Установить(ТекущаяДата);
Набор.Отбор.Контрагент.Установить(Источник.Ссылка);
Набор.Отбор.Таблица.Установить(Таблица);
Запись = Набор.Добавить();
Запись.Дата = ТекущаяДата;
Запись.Контрагент = Источник.Ссылка;
Запись.Таблица = Таблица;
Массив3 = Новый Массив;
Массив1 = Новый Массив;
Массив2 = Новый Массив;
Для Каждого Стр Из МассивДанных Цикл
Массив1.Добавить(Стр.Наименование);
Массив2.Добавить(СокрЛП(Стр.УникальныйИдентификатор()));
КонецЦикла;
Массив3.Добавить(Массив1);
Массив3.Добавить(Массив2);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Массив3);
СтрокаJSON = ЗаписьJSON.Закрыть();
Запись.Сообщение = СтрокаJSON;
Набор.Записать();
КонецПроцедуры
Получаем пакеты к отправке.
Регламентным заданием отправляем пакеты на сайт.
Параметр "psw" нужен, чтобы больше никто, кроме нас не мог обратиться к ресурсу с post-запросом.
Процедура ОбменССайтом() Экспорт
СоставПараметры = Справочники.ПредопределенныеЗначения.доп_ОбменСайт.Состав;
Если СоставПараметры.Количество() < 3 Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| доп_ОбменСайт.Дата КАК Дата,
| доп_ОбменСайт.Контрагент КАК Контрагент,
| доп_ОбменСайт.Таблица КАК Таблица,
| доп_ОбменСайт.Сообщение КАК Сообщение,
| доп_ОбменСайт.Контрагент.НаименованиеПолное КАК КонтрагентНаименованиеПолное,
| доп_ОбменСайт.Контрагент.ИНН КАК КонтрагентИНН,
| доп_ОбменСайт.Контрагент.Партнер.ОсновнойМенеджер КАК КонтрагентПартнерОсновнойМенеджер
|ИЗ
| РегистрСведений.доп_ОбменСайт КАК доп_ОбменСайт
|ГДЕ
| НЕ доп_ОбменСайт.Отправлено
|
|УПОРЯДОЧИТЬ ПО
| Дата,
| Контрагент";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Ответ = "";
Если Не ОтправитьПостЗапрос(Ответ,"json="+ВыборкаДетальныеЗаписи.Сообщение+
"&psw="+СоставПараметры[2].Значение+
"&clientid="+СокрЛП(ВыборкаДетальныеЗаписи.Контрагент.УникальныйИдентификатор())+
"&clientname="+СокрЛП(ВыборкаДетальныеЗаписи.КонтрагентНаименованиеПолное)+
"&clientinn="+СокрЛП(ВыборкаДетальныеЗаписи.КонтрагентИНН)+
"&manager="+СокрЛП(ВыборкаДетальныеЗаписи.КонтрагентПартнерОсновнойМенеджер)+
"&managerguid="+СокрЛП(ВыборкаДетальныеЗаписи.КонтрагентПартнерОсновнойМенеджер.УникальныйИдентификатор())+
"&table="+ВыборкаДетальныеЗаписи.Таблица
,СоставПараметры[0].Значение,СоставПараметры[1].Значение) Тогда
Сообщить("POST запрос к не прошел.");
Иначе
Набор = РегистрыСведений.доп_ОбменСайт.СоздатьНаборЗаписей();
Набор.Отбор.Дата.Установить(ВыборкаДетальныеЗаписи.Дата);
Набор.Отбор.Контрагент.Установить(ВыборкаДетальныеЗаписи.Контрагент);
Набор.Отбор.Таблица.Установить(ВыборкаДетальныеЗаписи.Таблица);
Запись = Набор.Добавить();
ЗаполнитьЗначенияСвойств(Запись,ВыборкаДетальныеЗаписи);
Запись.Ответ = Ответ;
Запись.Отправлено = Истина;
Набор.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ОтправитьПостЗапрос(Ответ,СтрокаПараметров,АдресСайта,АдресРесурса)
Если Не ЗначениеЗаполнено(АдресСайта) Тогда
Сообщить("Заполните адреса для post-запроса");
Возврат Ложь;
КонецЕсли;
Попытка
HTTPЗапрос2 = Новый HTTPЗапрос;
HTTPЗапрос2.Заголовки.Вставить("Connection", "keep-alive");
HTTPЗапрос2.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
HTTPЗапрос2.Заголовки.Вставить("POST /enter HTTP/1.1");
HTTPЗапрос2.УстановитьТелоИзСтроки(СтрокаПараметров, "utf-8");
HTTPЗапрос2.АдресРесурса = АдресРесурса;
//Соединение1 = Новый HTTPСоединение(АдресСайта);
Соединение1 = Новый HTTPСоединение(
АдресСайта, // сервер (хост)
443, // порт, по умолчанию для http используется 80, для https 443
, // пользователь для доступа к серверу (если он есть)
, // пароль для доступа к серверу (если он есть)
, // здесь указывается прокси, если он есть
, // таймаут в секундах, 0 или пусто - не устанавливать
Новый ЗащищенноеСоединениеOpenSSL()
);
ОтветHTTP = Соединение1.ОтправитьДляОбработки(HTTPЗапрос2);
Ответ = ОтветHTTP.ПолучитьТелоКакСтроку();
Возврат Истина;
Исключение
Возврат Ложь;
КонецПопытки;
КонецФункции
СоставПараметры = Справочники.ПредопределенныеЗначения.доп_ОбменСайт.Состав;
На сайте ловим Post-запрос
<?php
if(isset($_POST['psw'])) { $psw = $_POST['psw']; }
if (isset($psw) && $psw=="1234512345qw"){
if(isset($_POST['json'])) { $json = $_POST['json']; }
$arrJson = json_decode($json, true);
for ($ii=0; $ii<count($arrJson [0]); $ii++) {
$name = $arrJson [0][$ii];
$ui1c = $arrJson [1][$ii];
}
}
?>
Тестировал:
1С:Комплексная автоматизация 2 (2.4.9.98)
Платформа 1С:Предприятие 8.3 (8.3.16.1148)