Имя: Пароль:
1C
 
1с контур.Диадок версия 4.16 документ отправлен, а как узнать через 1С что он отправлен?
0 evorle145
 
27.07.22
11:21
Бухгалтер отправил через этот модуль документ, а как мне в собрать отчет, что отправлено, а что нет?
Предыдущая версия диадока к каждому отправленному документу прикрепляла в регистр сведений "доп сведения" некие файлы (протоколы отправки или вроде того), а этот новый модуль ничего не прикрепляет...
1 Bigbro
 
27.07.22
11:26
возможно стоит обратиться через API Диадока на их сервер и запросить статус документа.
2 rozer76
 
27.07.22
11:51
у себя так и сделал - регламент который долбит АПИ, кста и состояние маркировки из ЧЗ можно получать также если марки отправили по ЭДО
3 evorle145
 
27.07.22
11:51
(1) обратился в службу поддержки.. говорят делать через комментарий...
4 evorle145
 
27.07.22
11:52
(2) а можно пример кода? или хоть как к этому подступиться?
5 rozer76
 
27.07.22
11:52
(3) еще можно в ПМ "подключаемом модуле" по событию писать куда нужно, ну чтобы основной модуль не ломать
6 evorle145
 
27.07.22
11:53
(5) Как это по событию? то есть добавить в этот модуль свой кусок кода? но ведь он же автоматически обновляется... все же затрется, как я понимаю...
7 rozer76
 
27.07.22
11:55
(6) в ПМ

// После отправки пакета в ДД, когда пакету и документам присвоены ID
Функция ПослеОтправкиПакета(Параметры)
    
    //http://1c-pro-docs.diadoc.ru/ru/latest/func/pm/Posle_Otpravki_Paketa.html
    
    Пакет = Параметры.Пакет;
    
    //+++//roz//2021-11-12 []
    Для каждого ОтправляемыйДокумент из Пакет.Документы Цикл
        УстановитьСтатусПроверкиДокументов(ОтправляемыйДокумент.Документ1С);
        Если ТипЗнч(ОтправляемыйДокумент.Документ1С)= Тип("ДокументСсылка.СчетФактураВыданный") Тогда
            ДокументОснование = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОтправляемыйДокумент.Документ1С,"ДокументОснование");
            УстановитьСтатусПроверкиДокументов(ДокументОснование);
        КонецЕсли;
    КонецЦикла;
    //---//roz//2021-11-12
    
    Возврат Истина;
    
КонецФункции
8 rozer76
 
27.07.22
11:57
(4) примерно так


Функция ПолучитьСтатусГИСМТДокументаПоAPIДиадок(Гуид, boxId, ПредставлениеДокумента)
    
    СтатусГИСМТ = "";
    
    ddauth_api_client =  "БЛА-БЛА-БЛА";    
    ТекущийПользователь = Пользователи.ТекущийПользователь();
    УстановитьПривилегированныйРежим(Истина);
    ЛогинЭДОДиадок = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ТекущийПользователь , "ЛогинЭДОДиадок");
    ПарольЭДОДиадок = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ТекущийПользователь , "ПарольЭДОДиадок");
    УстановитьПривилегированныйРежим(Ложь);
    
    messageId = Лев(Гуид,36);
    entityId = СтрЗаменить(Гуид,messageId,"");
    
    Если ЗначениеЗаполнено(entityId) Тогда    
        Попытка
            
            АдресРесурса = "/Authenticate?login="+ЛогинЭДОДиадок+"&password="+ПарольЭДОДиадок;
            АдресСайта = "diadoc-api.kontur.ru";
            HTTPЗапрос2 = Новый HTTPЗапрос;
            HTTPЗапрос2.Заголовки.Вставить("POST "+АдресРесурса+" HTTP/1.1");
            HTTPЗапрос2.Заголовки.Вставить("Host", "diadoc-api.kontur.ru");
            HTTPЗапрос2.Заголовки.Вставить("Content-Length", 0);
            HTTPЗапрос2.Заголовки.Вставить("Authorization", "DiadocAuth ddauth_api_client_id="+ddauth_api_client);
            HTTPЗапрос2.АдресРесурса = АдресРесурса;    
            Соединение1 = Новый HTTPСоединение(АдресСайта,,,, , ,Новый ЗащищенноеСоединениеOpenSSL(),Ложь);
            ФайлРезультата = ПолучитьИмяВременногоФайла();
            Соединение1.ОтправитьДляОбработки(HTTPЗапрос2,ФайлРезультата);
            Ответ = Новый ТекстовыйДокумент();
            Ответ.Прочитать(ФайлРезультата, КодировкаТекста.UTF8);
            Токен = Ответ.ПолучитьТекст();
            
            
            АдресСайта = "diadoc-api.kontur.ru/V3/GetDocument?boxId="+boxId+"&messageId="+messageId+"&entityId="+entityId;
            HTTPЗапрос2 = Новый HTTPЗапрос;
            HTTPЗапрос2.Заголовки.Вставить("GET /V4/GetDocument HTTP/1.1");
            HTTPЗапрос2.Заголовки.Вставить("Host", "diadoc-api.kontur.ru");
            HTTPЗапрос2.Заголовки.Вставить("Accept",        "application/json");  
            HTTPЗапрос2.Заголовки.Вставить("Content-Type",    "application/json; charset=utf-8");  
            HTTPЗапрос2.Заголовки.Вставить("Authorization", "DiadocAuth ddauth_api_client_id="+ddauth_api_client+",ddauth_token="+Токен);
            Соединение1 = Новый HTTPСоединение(АдресСайта,,,, , ,Новый ЗащищенноеСоединениеOpenSSL(),Ложь);     
            ОтветHTTP = Соединение1.Получить(HTTPЗапрос2);
            ОтветJSON =  ОтветHTTP.ПолучитьТелоКакСтроку();
            ОтветСтруктура = мПрочитатьJSON(ОтветJSON);
            
            Для каждого LastOuterDocflow Из ОтветСтруктура.LastOuterDocflows Цикл
                OuterDocflow = LastOuterDocflow.OuterDocflow;
                Если OuterDocflow.DocflowNamedId = "TtGis" Тогда
                    СтатусГИСМТ = OuterDocflow.Status.Type;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
    
        Исключение    
            ОписаниеИсключения = СтрШаблон(НСтр("ru = 'Ошибка работы с ЭДО %1: %2'"), ПредставлениеДокумента, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
            Если ВызовИзФормы Тогда
                ВызватьИсключение ОписаниеИсключения;
            КонецЕсли;
            ОповеститьОбОшибке(ОписаниеИсключения, Истина);
            Возврат "";
        КонецПопытки;
    КонецЕсли;
    
    Возврат СтатусГИСМТ;
    
КонецФункции
9 rozer76
 
27.07.22
11:59
(6) >> но ведь он же автоматически обновляется

я про ПМ - это не затрется ) это внешняя обработка которую можно указать в настройках основного модуля - сам пилишь кастом свой на любое почти событие диадока
10 evorle145
 
27.07.22
12:04
(9) аа.. то есть туда можно добавить подключаемый модуль... или даже подключаемую обработку! не знал... это интересный вариант..
(8) спасибо! пробую разобраться
11 rozer76
 
27.07.22
12:16
(10) кури про ПМ , вот пример https://infostart.ru/1c/articles/1247892/
12 Mort
 
27.07.22
12:20
Модуль диадок это клиника. Лучше бы сделали удобную открытую библиотеку для работы с их API. Внедрение диадока во вменяемой конторе выглядит так: запустили модуль, поблевали, написали свои обращения к API.
13 rozer76
 
27.07.22
12:27
(12) нуу, почти.. я универсальный модуль раскрячил вдоль и поперек ибо много не реализовано, например "интеркампани", слабая поддержка ЧЗ. А АПИ описано давно https://developer.kontur.ru/docs/diadoc-api/index.html. Но писать самим ЭДО это такое себе ...
14 unknown181538
 
31.07.22
15:15
(8) Вот это круть! Я думал, реализовать регламент очень  сложно, и придется автоматическое подключение сертификата делать.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший