diadoc / diadoc1cpro-docs

7 stars 8 forks source link

Модуль ПРО: отправка полуформализованного акта #11

Open Hugador opened 3 years ago

Hugador commented 3 years ago

Добры день. Ранее при отправке документа с видом "AcceptanceCertificate" заполняли в контенте только поля "DocumentDate", "DocumentNumber", "FileName" и сами двоичные данные файла. Ошибок не было, документ отправлялся. Теперь решили заполнять Сумму, НДС и Основание - возникла ошибка, если не заполнено поле "Grounds": Empty metadata with key Grounds Поле "Grounds" пока заполнять не планировали, но пришлось заполнить строкой-заглушкой - документ отправился. При этом значение поля "Grounds", т.е. основания документа не видно ни в обработке Диадок, ни в веб-кабинетах получателя и отправителя. Не совсем понятно, как правильно работать с этим полем, как оставить его пустым и как пользователям увидеть его значение, если оно заполнено?

Ссылка на документ в веб-кабинете: https://diadoc.kontur.ru/b84e9b14-a6b3-42f3-914d-e4355665b240/Document/Show?letterId=41c00566-9d62-4329-92a8-1cfb2b137966&documentId=55244712-22a9-4725-8a7a-821f5a59910d

Код процедуры "ПодготовитьЭлектронныйДокумент" из ПМ:

Функция ПодготовитьЭлектронныйДокумент(Параметры)                                  

    РежимУправляемыхФорм = Истина;  

    ВидДокументаРазвернутый = Параметры.ВидДокументаРазвернутый;
    ДополнительныеПараметры = Параметры.ДополнительныеПараметры;

    Результат = Параметры.Результат;
    Документ1С = Результат.Документ1С;
    ВидДокументаНаименование = ВидДокументаРазвернутый.Наименование;

    ID = ВидДокументаРазвернутый.ID;
    ТипКонтента = ВидДокументаРазвернутый.ТипКонтента;
    TypeNamedId      = ВидДокументаРазвернутый.TypeNamedId;
    FunctionName     = ВидДокументаРазвернутый.FunctionName;

    // Тут можно добавить любой из документов текущего комплекта, который был ранее отправлен
    //Результат.ДокументыОснования.Добавить(Справочники.Файлы.НайтиПоНаименованию("СФ_155 + 4"));                    

    ФайлДокумента = артПолучитьФайлИсходящегоЭлектронногоДокумента(Документ1С, Истина); 
    ДвоичныеДанныеФайлаXML = РаботаСФайлами.ДвоичныеДанныеФайла(ФайлДокумента);   

    // Неформализованные и полуформализованные документы отправляем в исходном виде, 
    // Формализованные - сериализуем
    // Позже нужно реализовать заполнение метаданных для полуформализованных документов (пока отправляем их как неформализованные)      
    ТипФормализации = артДиадокПовтИсп.ТипФормализацииПоТипуAPI(TypeNamedId);   

    Если ТипФормализации = Перечисления.артТипыФормализацииДокументов.Формализованный Тогда         

        //Результат.Content = ОсновнойМодуль.ЭДО_Модуль_ГенерацияXML().XML_В_ProtoОбъектXDTO(ДвоичныеДанныеФайлаXML); // diadoc/diadocapi-docs#3        
        ПротоКонтент = ОсновнойМодуль.XML_В_ProtoСтруктура(ДвоичныеДанныеФайлаXML);     // diadoc/diadocapi-docs#4
        ОсновнойМодуль.ЗаполнитьКонтентXDTOПоСтруктуре(Результат.Content, ПротоКонтент);//#4        

    Иначе   
        РеквизитыФайла = артРеквизитыФайлаДляОтправки(ФайлДокумента);  
        ЗапрашиватьПодпись = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Документ1С, "артИсходящийДиадокТребуетсяПодписьПолучателя");     

        Результат.Метаданные.DocumentDate    = РеквизитыФайла.Дата;
        Результат.Метаданные.DocumentNumber  = РеквизитыФайла.Номер;
        Результат.Метаданные.FileName        = РеквизитыФайла.Наименование;             
        Результат.ДвоичныеДанные             = ДвоичныеДанныеФайлаXML;
        Результат.ЗапрашиватьОтветнуюПодпись = ?(Результат.ЗапрашиватьОтветнуюПодпись = Истина, Истина, ЗапрашиватьПодпись);

        Если TypeNamedId = артДиадок.Строка_AcceptanceCertificate() Тогда  //Акт неформализованный          

            РеквизитыДокумента1С = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Документ1С, "Валюта, Сумма, СуммаНДС");

            Если ЗначениеЗаполнено(РеквизитыДокумента1С.Валюта) Тогда
                РеквизитыВалюты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(РеквизитыДокумента1С.Валюта, "Код, Наименование");
                Результат.Метаданные.CurrencyCode = РеквизитыВалюты.Код; // Код валюты          
            КонецЕсли;

            Результат.Метаданные.TotalSum     = РеквизитыДокумента1С.Сумма; // Сумма
            Результат.Метаданные.TotalVat     = РеквизитыДокумента1С.СуммаНДС;  // НДС
            //Незаполнение "Grounds" вызывает ошибку
            Результат.Метаданные.Grounds      = "Основание";  // Основания документа, например, «Договор №1234, Заказ №321», можно взять из доп. реквизитов

        КонецЕсли;

    КонецЕсли;

    Результат.Комментарий =  ДополнительныеПараметры.артКомментарий;

    артДиадок.УстановитьФайлЭлектронногоДокумента(Документ1С, ФайлДокумента);

    Возврат Истина;    

КонецФункции
ButurlakinSemyon commented 3 years ago

Добрый день.

Попробуйте так: Результат.Метаданные.Grounds = Неопределено

Hugador commented 3 years ago

Добрый день.

Попробуйте так: Результат.Метаданные.Grounds = Неопределено

Спасибо, ясно. А где пользователь может увидеть данные этого поля, когда оно заполнено?

ButurlakinSemyon commented 3 years ago

В вебе пользователь может посмотреть его тут: image

В модуле поле Grounds не отображается.