ЭДО.Астрал
Следующая обработка пример для отправки УПД черновика в ЭДО провайдера Астрал, необходимо получить в кабинете токен и прописать его в код. Работу с подготовкой самого xml файла можно найти в других статьях, либо использовать типовую выгрузку 1С ЭДО.
Выгрузка черновика "Счет на оплату покупателю" через ЭДО.Астрал в формате pdf и с факсимиле,
перед регистрацией внешней печатной формы в доп. свойства организации добавить и прописать реквизит с наименование "АстралТокен" (получить из личного кабинете).
ЭДО.Диадок
//...
Функция Base64Encoder(ИмяФайла)
CDO=CreateObject("CDO.Message");
Attachment=CDO.AddAttachment(ИмяФайла);
Attachment.ContentTransferEncoding="base64";
Стр=Attachment.GetEncodedContentStream();
Возврат Стр.ReadText();
КонецФункции
Процедура ЭДОНаСервере()
login = "***";
password = "***";
АдресРесурса = "/Authenticate?login="+login+"&password="+password;
АдресСайта = "https://diadoc-api.kontur.ru";
ddauth_api_client = "1C-edi-cc5de100-2485-4d75-8370-a2aa3ff7c3c4";
Попытка
ws = СоздатьОбъект("MSXML2.XMLHTTP.4.0");
ws.open("POST", СокрЛП(АдресСайта+АдресРесурса), 0);
ws.setRequestHeader("Authorization", "DiadocAuth ddauth_api_client_id="+ddauth_api_client);
Исключение
Сообщить("Соединение не выполнено!!!");
КонецПопытки;
Попытка
ws.send();
Если ws.Status=200 Тогда
token = ws.ResponseText;
Иначе
Сообщить(ws.Status);
Сообщить(ws.responseText);
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
сообщить(token);
ВремФайлНаДиске = "C:\Контур\ЭДО\";
АдресРесурса = "/GetMyOrganizations";
ws.open("GET", СокрЛП(АдресСайта+АдресРесурса), 0);
ws.setRequestHeader("Authorization", "DiadocAuth ddauth_api_client_id="+ddauth_api_client+",ddauth_token="+token);
ws.setRequestHeader("Accept" , "application/json; charset=utf-8");
Попытка
ws.send();
Если ws.Status=200 Тогда
ResponseText = ws.ResponseText;
Сообщить(лев(ResponseText,100));
т = Создатьобъект("Текст");
т.ДобавитьСтроку(ResponseText);
т.Записать(ВремФайлНаДиске+"GetMyOrganizations.txt");
Иначе
Сообщить(ws.Status);
Сообщить(ws.responseText);
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Объект1с = JSON(ResponseText, 0);
Organizations = Объект1с.Получить("Organizations");
Для Инд = 1 По Organizations.КоличествоСтрок() Цикл
array = Organizations.ПолучитьЗначение(Инд,"значение");
Boxes = array.Получить("Boxes");
Для Инд2 = 1 По Boxes.КоличествоСтрок() Цикл
array2 = Boxes.ПолучитьЗначение(Инд2,"значение");
BoxId = array2.Получить("BoxId");;
Сообщить(BoxId);
КонецЦикла;
КонецЦикла;
OrgInn = "";
OrgKpp = "";
АдресРесурса = "/GetOrganizationsByInnKpp?inn="+OrgInn+"&kpp="+OrgKpp ;
ws.open("GET", СокрЛП(АдресСайта+АдресРесурса), 0);
ws.setRequestHeader("Authorization", "DiadocAuth ddauth_api_client_id="+ddauth_api_client+",ddauth_token="+token);
ws.setRequestHeader("Accept" , "application/json; charset=utf-8");
Попытка
ws.send();
Если ws.Status=200 Тогда
ResponseText = ws.ResponseText;
Сообщить(лев(ResponseText,100));
т = Создатьобъект("Текст");
т.ДобавитьСтроку(ResponseText);
т.Записать(ВремФайлНаДиске+"GetOrganizationsByInnKpp.txt");
Иначе
Сообщить(ws.Status);
Сообщить(ws.responseText);
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Объект1с = JSON(ResponseText, 0);
Organizations = Объект1с.Получить("Organizations");
Для Инд = 1 По Organizations.КоличествоСтрок() Цикл
array = Organizations.ПолучитьЗначение(Инд,"значение");
Boxes = array.Получить("Boxes");
Для Инд2 = 1 По Boxes.КоличествоСтрок() Цикл
array2 = Boxes.ПолучитьЗначение(Инд2,"значение");
ToBoxId = array2.Получить("BoxId");;
Сообщить(ToBoxId);
КонецЦикла;
КонецЦикла;
//Черновик
ПутьКФайлу = "C:\Контур\ЭДО\1.xml";
СодержимоеФайла = Base64Encoder(ПутьКФайлу);
АдресРесурса = "/V3/PostMessage";
ws.open("POST", СокрЛП(АдресСайта+АдресРесурса), 0);
ws.setRequestHeader("Authorization", "DiadocAuth ddauth_api_client_id="+ddauth_api_client+",ddauth_token="+token);
ws.setRequestHeader("Content-Type", "application/json; charset=utf-8");
Структура1 = СоздатьОбъект("СписокЗначений");
Структура1.ДобавитьЗначение(СодержимоеФайла, "Content");
Структура2 = СоздатьОбъект("СписокЗначений");
Структура2.ДобавитьЗначение(Структура1, "SignedContent");
Структура2.ДобавитьЗначение("UniversalTransferDocument", "TypeNamedId");
DocumentAttachments = СоздатьОбъект("ТаблицаЗначений"); //массив
DocumentAttachments.НоваяКолонка("Значение");
DocumentAttachments.НоваяСтрока();
DocumentAttachments.Значение = Структура2;
Структура3 = СоздатьОбъект("СписокЗначений");
Структура3.ДобавитьЗначение(BoxId, "FromBoxId");
Структура3.ДобавитьЗначение(ToBoxId, "ToBoxId");
Структура3.ДобавитьЗначение("true", "IsDraft");
Структура3.ДобавитьЗначение(DocumentAttachments, "DocumentAttachments");
request = JSON(Структура3, 1);
сообщить(лев(request,100));
т = Создатьобъект("Текст");
т.ДобавитьСтроку(request);
т.Записать(ВремФайлНаДиске+"request.txt");
Попытка
ws.send(request);
Если ws.Status=200 Тогда
Сообщить("Документ (черновик) отправлен в Диадок!");
Иначе
Сообщить(ws.Status);
Сообщить(ws.responseText);
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.16.78
- Бухгалтерия предприятия, редакция 3.0, релизы 3.1.22.86, 3.0.149.18
- Управление торговлей, редакция 10.3, релизы 10.3.88.3