diadoc / diadocsdk-1c-docs

1C documentation - http://1c-docs.diadoc.ru/
https://developer.kontur.ru/Docs/Diadoc/COM/index.html
26 stars 22 forks source link

Должность в строке 20 УПД по 970 приказу. #1077

Closed chipdip-partner-1C closed 1 month ago

chipdip-partner-1C commented 2 months ago

Добрый день. Документы подписываются подписью физ лица с МЧД. Все подписывается прекрасно, кроме строки 20, должность не заполняется. Что нужно заполнить в PatchTask чтобы в строке 20 появилась должность.

ОтветноеДействие="Sign";
dd_PatchTask = Organization.CreatePatchTask();
dd_ValueCollection = dd_PatchTask.AddToPatch(Document, ОтветноеДействие);
Для Каждого dd_PatchItem Из dd_ValueCollection Цикл
dd_Reflector = Reflector;
PatchContent = dd_PatchItem.PatchContent; 
dd_TypeDesc = dd_Reflector.Describe(PatchContent);
ИмяИнтерфейса = dd_TypeDesc.GetInterfaceName();  //IRecipientTitleToSend  
Если "IRecipientTitleToSend" = ИмяИнтерфейса Тогда
   PatchContent.PowerOfAttorneyToAttach.UseDefault = True;
   КонтентТитула=PatchContent.Content.UniversalTransferDocumentBuyerTitle;  
   КонтентТитула.AcceptanceDate = ДатаДокумента;          //Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
   КонтентТитула.DocumentCreator = Organization.Name;
   КонтентТитула.OperationContent = "Товары (работы, услуги, права) приняты без расхождений (претензий)"; 
   КонтентТитула.ContentOperCode.TotalCode="1";           //970
   ФамилияИмяОтчество=ФизическиеЛицаКлиентСервер.ЧастиИмени(ФИОСертификатПодписания);
   Фамилия = ФамилияИмяОтчество.Фамилия;
   Имя = ФамилияИмяОтчество.Имя;
   Отчество = ФамилияИмяОтчество.Отчество;  
   КонтентТитула.Employee.Position=ДолжностьСертификатПодписания;
   КонтентТитула.Employee.LastName=Фамилия;
   КонтентТитула.Employee.FirstName=Имя;
   КонтентТитула.Employee.MiddleName=Отчество;
   КонтентТитула.Signers.BoxId  = Organization.Guid;    //970
   Signer = КонтентТитула.Signers.AddSigner();
   Signer.Certificate.CertificateThumbprint = ОтпечатокСертификата; 
   Signer.SignerPowersConfirmationMethod = "2";
КонецЕсли;

По 820 приказу задавал вопрос тут #1015 .

image

GilimkhanovDenis commented 2 months ago

Добрый день

Наряду с

Signer = КонтентТитула.Signers.AddSigner();
Signer.Certificate.CertificateThumbprint = ОтпечатокСертификата; 
Signer.SignerPowersConfirmationMethod = "2";

попробуйте заполнить Signer.PowerOfAttorney

chipdip-partner-1C commented 2 months ago

Добрый день. Не получается заполнить. В этом объекте 2 объекта и они заполняются когда SignerPowersConfirmationMethod равен 3. Иначе когда пробуешь заполнить Signer.PowerOfAttorney.Electronic.Storage.UseDefault в поле встает -1.

image

GilimkhanovDenis commented 1 month ago

А каким типом и значением вы заполняете Signer.PowerOfAttorney.Electronic.Storage.UseDefault ?

Если пишете Signer.PowerOfAttorney.Electronic.Storage.UseDefault = Истина; или Signer.PowerOfAttorney.Electronic.Storage.UseDefault = True;

то такое в принципе возможно, потому что истина в COM - это int -1 и у вас происходит неявное преобразование в строку True -> -1 -> "-1"

указывайте Signer.PowerOfAttorney.Electronic.Storage.UseDefault = "true";

chipdip-partner-1C commented 1 month ago

Добрый день. Действительно прописано было: Signer.PowerOfAttorney.Electronic.Storage.UseDefault=True сделал Signer.PowerOfAttorney.Electronic.Storage.UseDefault="true", Выдает ошибку: HTTP error: Invalid data UserContractData:¶/UniversalTransferDocumentBuyerTitle/Signers/Signer: Element PowerOfAttorney/Electronic cannot be filled when @SignerPowersConfirmationMethod=2

Ругается на Signer.SignerPowersConfirmationMethod = "2", исправляем на Signer.SignerPowersConfirmationMethod = "3"

3 - в соответствии с доверенностью в электронной форме в машиночитаемом виде, если представление доверенности осуществляется из информационной системы. При этом необходимая информация для запроса доверенности из информационной системы, указана в электронном документе.

Подписание проходит замечательно, но должность все равно не заполняется.

image

GuninaY commented 1 month ago

У меня получилось указать вручную Position = Signer.Position; Position.PositionSource = "Manual"; Position.SimpleContentValue = "начальник отдела";

GilimkhanovDenis commented 1 month ago

Да, судя по XSD, для 970 есть различные способы указания должности и нужно выбрать какой из них вам нужен:

<xs:element minOccurs="0" name="Position">
        <xs:annotation>
          <xs:documentation>Должность</xs:documentation>
          <xs:documentation>Один из элементов является обязательным</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="string255z">
              <xs:attribute name="PositionSource" use="required">
                <xs:annotation>
                  <xs:documentation>Автоматическое заполнение должности из настроек сотрудника указанных в сервисе</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:enumeration value="Employee">
                      <xs:annotation>
                        <xs:documentation>
                          <xs:annotation xmlns:xs="http://www.w3.org/2001/XMLSchema">
                            <xs:documentation>Первым шагом пытается сформировать должность из данных по сотруднику в сервисе</xs:documentation>
                            <xs:documentation>Если данные в сервисе не найдены, то значение будет взято из значения в элементе Position</xs:documentation>
                            <xs:documentation>Если данные в сервисе не найдены и в элементе Position пустое значение, то атрибут в конечном файле не сформируется</xs:documentation>
                          </xs:annotation>
                        </xs:documentation>
                      </xs:annotation>
                    </xs:enumeration>
                    <xs:enumeration value="Certificate">
                      <xs:annotation>
                        <xs:documentation>
                          <xs:annotation xmlns:xs="http://www.w3.org/2001/XMLSchema">
                            <xs:documentation>Первым шагом пытается сформировать должность из данных по сотруднику из сертификата</xs:documentation>
                            <xs:documentation>Если данные в сертификате не найдены, то значение будет взято из значения в элементе Position</xs:documentation>
                            <xs:documentation>Если данные в сертификате не найдены и в элементе Position пустое значение, то атрибут в конечном файле не сформируется</xs:documentation>
                          </xs:annotation>
                        </xs:documentation>
                      </xs:annotation>
                    </xs:enumeration>
                    <xs:enumeration value="StorageByTitleTypeId">
                      <xs:annotation>
                        <xs:documentation>
                          <xs:annotation xmlns:xs="http://www.w3.org/2001/XMLSchema">
                            <xs:documentation>Используется для типов @970 формата. Для остальных - игнорируется</xs:documentation>
                            <xs:documentation>Для использования данного варианта формирования должности необходимо заполнить элемент Certificate</xs:documentation>
                            <xs:documentation>Первым шагом пытается сформировать должность из данных, сохраненных с помощью метода ExtendedSignerDetails для указанного сертификата и documentTitleType</xs:documentation>
                            <xs:documentation>Если данные в сервисе не найдены, то значение будет взято из значения в элементе Position</xs:documentation>
                            <xs:documentation>Если данные в сервисе не найдены и в элементе Position пустое значение, то атрибут в конечном файле не сформируется</xs:documentation>
                          </xs:annotation>
                        </xs:documentation>
                      </xs:annotation>
                    </xs:enumeration>
                    <xs:enumeration value="Manual">
                      <xs:annotation>
                        <xs:documentation>Используется для ручного заполнения должности</xs:documentation>
                      </xs:annotation>
                    </xs:enumeration>
                  </xs:restriction>
                </xs:simpleType>
              </xs:attribute>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>