Публикации по данному вопросу есть //infostart.ru/public/1154740/ , //infostart.ru/public/1664832/, переписывать вводную часть не буду. Однако техническая сторона вопроса, на мой взгляд не раскрыта, и требует более детального освещения. Для решения задачи будем использовать внешнюю обработку.
1. Согласно документации ППР, для получения списка всех транзакций за интересующий нас период, мы должны сформировать строку запроса вида: GET "https://online.petrolplus.ru/api/public-api/v2/transactions?dateFrom=2023-02-25&dateTo=2023-02-28&format=json" -H "Authorization: paqSBUCsBTObAhXRlsQbOMAlVwjOyoHd" Параметры dateFrom и dateTo будем брать из соответствующих реквизитов формы в момент запроса, а для адреса сервера, строки запроса и ключа API создадим соответствующие реквизиты обработки. Параметры подключения будем сохранять в хранилище общих настроек индивидуально для каждого пользователя.
&НаКлиенте
Процедура СохранитьНастройкиПоключения(Команда)
ПараметрыПодключения = Новый Структура;
ПараметрыПодключения.Вставить("АдресСервера",Объект.АдресСервера);
ПараметрыПодключения.Вставить("СтрокаЗапроса",Объект.СтрокаЗапроса);
ПараметрыПодключения.Вставить("Ключ",Объект.Ключ);
СохранитьПараметрыНаСервере(ПараметрыПодключения);
Закрыть();
КонецПроцедуры //СохранитьНастройкиПоключения
&НаСервере
Процедура СохранитьПараметрыНаСервере(Параметры)
КлючОбъекта = "ПараметрыПодключенияППР";
КлючНастроек = "НастройкиПодключения";
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(КлючОбъекта, КлючНастроек, Параметры,,ИмяПользователя());
КонецПроцедуры // СохранитьПараметрыНаСервере
При запуске обработки ранее сохраненные настройки будут разгружены в реквизиты объекта, то есть в реквизиты обработки.
&НаСервере
Процедура ЗагрузитьПараметрыНаСервере()
СтруктураОбщихПараметров = Неопределено;
КлючОбъекта = "ПараметрыПодключенияППР";
КлючНастроек = "НастройкиПодключения";
СтруктураОбщихПараметров = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек,,,ИмяПользователя());
Если ТипЗнч(СтруктураОбщихПараметров) = Тип("Структура") Тогда
СтруктураОбщихПараметров.Свойство("АдресСервера",Объект.АдресСервера);
СтруктураОбщихПараметров.Свойство("СтрокаЗапроса",Объект.СтрокаЗапроса);
СтруктураОбщихПараметров.Свойство("Ключ",Объект.Ключ);
КонецЕсли;
КонецПроцедуры //ЗагрузитьПараметрыНаСервере
2. Для получения списка транзакций создадим новый объект СоединениеHTTP, используя ранее сохраненные параметры. В качестве заголовков Content-Type и параметра format установим значения согласно документации ППР. Сформируем строку запроса, создадим ЗапросHTTP. Установим соединение используя метод GET, ответ сервера запишем в ОтветHTTP. Выполним десериализацию тела ответа с помощью функции ПрочитатьJSON для получения данных ответа в виде структурированной сущности.
&НаСервере
Функция ПолучитьДанныеСайта(ПараметрыПодключения)
СоединениеHTTP = Новый HTTPСоединение(ПараметрыПодключения.АдресСервера,
,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Authorization", ПараметрыПодключения.Ключ);
СтрокаЗапросаСПараметрами = СтрШаблон("%1?dateFrom=%2&dateTo=%3&format=json",
ПараметрыПодключения.СтрокаЗапроса,
ПараметрыПодключения.НачПериода,
ПараметрыПодключения.КонПериода);
ЗапросHTTP = Новый HTTPЗапрос(СтрокаЗапросаСПараметрами, Заголовки);
ОтветHTTP = СоединениеHTTP.ВызватьHTTPМетод("GET", ЗапросHTTP);
СтруктураОтвета = Новый Структура;
СтруктураОтвета.Вставить("КодСостояния", ОтветHTTP.КодСостояния);
Попытка
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ОтветHTTP.ПолучитьТелоКакСтроку("UTF-8"));
ОтветСервера = ПрочитатьJSON(ЧтениеJSON);
СтруктураОтвета.Вставить("ОтветСервера", ОтветСервера);
Исключение
Сообщить(ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
Возврат СтруктураОтвета;
КонецФункции // ПолучитьДанныеСайта
3. Проанализируем код ответа сервера, и в случае кода 200, что означает успешное выполнение запроса, и наличия транзакций, преобразуем данные ответа в таблицу значений ТЗ. Для этого сформируем список колонок ТЗ в соответствии с данными ответа сервера. Так как табличная часть СписокТранзакций изначально содержит только колонку НомерСтроки добавляем колонки аналогично таблице значений. Далее заполняем ТЗ, и выводим в табличную часть СписокТранзакций на форме обработки.
&НаСервере
Процедура ЗаполнитьТабличнуюЧасть(ПараметрыПодключения)
СтруктураОтвета = ПолучитьДанныеСайта(ПараметрыПодключения);
Если СтруктураОтвета = Неопределено Тогда
Возврат;
КонецЕсли;
Если СтруктураОтвета.КодСостояния = 200 Тогда
Если СтруктураОтвета.ОтветСервера["transactions"].Количество() > 0 Тогда
ТЗ = Новый ТаблицаЗначений;
Объект.СписокТранзакций.Очистить();
ПерваяСтруктура = СтруктураОтвета.ОтветСервера["transactions"][0];
Для Каждого Свойство Из ПерваяСтруктура Цикл
ТЗ.Колонки.Добавить(Свойство.Ключ);
Если Элементы.Найти(Свойство.Ключ) = Неопределено Тогда
ДобавитьКолонкуВТабличнуюЧасть(Свойство.Ключ);
КонецЕсли;
КонецЦикла;
Для каждого Транзакция из СтруктураОтвета.ОтветСервера["transactions"] Цикл
НоваяСтрока = ТЗ.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Транзакция);
КонецЦикла;
Объект.СписокТранзакций.Загрузить(ТЗ);
Иначе
Сообщить("Нет транзакций за выбранный период.");
КонецЕсли;
Иначе
Сообщить("Не удалось получить данные с сайта. Код ответа " + Строка(СтруктураОтвета.КодСостояния));
КонецЕсли;
КонецПроцедуры // ЗаполнитьТабличнуюЧасть
4. Полагаю, что дальнейшая обработка полученных данных сугубо индивидуальна для каждой организации, и в подробном рассмотрении не нуждается. В данной обработке документ поступления будет создаваться по каждой топливной карте, согласно параметрам создания документов. Счет-фактура создается общая к созданным документам поступления согласно настройкам входящих документов. См. скриншоты. Обработка тестировалась на конфигурации Бухгалтерия предприятия КОРП 3.0.130.22, платформа 8.3.18.1959.
5. Скриншоты форм в порядке добавления
- Основная форма
- Настройки подключения
- Параметры создания документов поступления
- Входящие документы
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.130.22