Список форумов Акцент Акцент
официальный форум разработчика программы Акцент
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Вопрос по экспорту в медок

 
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 7.40
Предыдущая тема :: Следующая тема  
Автор Сообщение
Руслан



Зарегистрирован: 20.06.2014
Сообщения: 40

СообщениеДобавлено: Ср Ноя 20, 2019 2:57 pm    Заголовок сообщения: Вопрос по экспорту в медок Ответить с цитатой

Добрый день. Возник тут вопросик по экспорту отчетов в медок. Канешно, наверное, было бы правильно у них на форуме этот вопрос задать, но решил для начала тут. Вдруг кто знает.

Итак. Есть такие отчеты как баланс. Их там 6шт. В медке эти отчеты располагаются как главный (форма1), и дочерние. Так вот. Если я импортирую их туда по очереди (например вначале форму1, потом форму2), то медок создает при первом экспорте форму1, и 6 пустых дочерних форм. При втором экспорте создается опять основная форма1, и 6 дочерних, но теперь форма2 заполнена. Чтобы иерархия была правильная и формы не дублировались, надо экспортировать сразу все формы. Но даже при этом если хочется что-то обновить, то нужно удалять то, что есть в медке и импортировать весь пакет отчетов по новому.

Хотелось бы, чтобы при импорте медок не создавал новые формы, а обновлял те, что уже есть за заданный период.

Импорт могу делать через XML и ZDI.

По XML. Из документации понял что за обновление отвечает тег LINKED_DOCS, но не понял как его заполнять. К тому-же по идее надо знать, что уже есть в медке, а если он сам создал некоторые отчеты (при импорте формы1 создаются пустые дочерние форма2-форма6), то моя отправляющая программе не знает, естественно, от этом.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Юров Ю.С.



Зарегистрирован: 11.03.2005
Сообщения: 383
Откуда: Павлоград

СообщениеДобавлено: Чт Дек 05, 2019 2:50 pm    Заголовок сообщения: Re: Вопрос по экспорту в медок Ответить с цитатой

Руслан писал(а):
Из документации понял что за обновление отвечает тег LINKED_DOCS, но не понял как его заполнять.

В теге LINKED_DOCS имя родительского ИЛИ подчинённого файла - взаимные ссылки. Не надо стесняться экспортировать из медка какой-нибудь отчёт и разобраться с тегами на живом примере, а не из описания.
Код:
Sub XMLREP   ' вызывается по кнопке.
  pthXML=MeDocFolderPath()
  Dim niCode   : niCode=niTAG() : If Len(niCode)=0 Then MsgBox "Сначала необходимо установить свойства налоговой инспекции." : Exit Sub
  If Not CreateObject("Scripting.FileSystemObject").FolderExists(pthXML) Then MsgBox "Записать не удастся: папка "&pthXML&" не существует" : Exit Sub
  On Error Resume Next : Call CreateObject("MSXML2.DOMDocument.4.0") ' проверка здесь, чтобы не гавкал 4 раза.
  If err.Number<>0 Then MsgBox "Невозможно создать объект MSXML2.DOMDocument.4.0, нужно установить msxml4SP2.msi" : Exit Sub : End If : On Error goto 0
  Dim x, XMLfileName5, XMLfileName6, XMLfileName2, XMLfileName1, er   'вернётся из процедуры формирования XML
  Set x=MakeBueBookXML(op.Date, niCode, XMLfileName1, "J3000411") ' только чтобы получить XMLfileName1
  Set x=MakeBueBookXML(op.Date, niCode, XMLfileName5, "J3040511")   ' "E04T05I"   FillTrans1   ts5
      Call AddLinkedDoc(x,XMLfileName1,1,2)
      If Not x Is Nothing Then x.Save pthXML&XMLfileName5 : correctXML(pthXML&XMLfileName5) : er=er& test_xml_xsd(pthXML&XMLfileName5, "J3040511.xsd")
  Set x=MakeBueBookXML(op.Date, niCode, XMLfileName6, "J3040611")   ' "E04T06I"   FillTrans2   ts6
      Call AddLinkedDoc(x,XMLfileName1,1,2)
      If Not x Is Nothing Then x.Save pthXML&XMLfileName6 : correctXML(pthXML&XMLfileName6) : er=er& test_xml_xsd(pthXML&XMLfileName6, "J3040611.xsd")
  Set x=MakeBueBookXML(op.Date, niCode, XMLfileName2, "J3040111")   ' "Додаток 4"
      Call AddLinkedDoc(x,XMLfileName1,1,2)
      If Not x Is Nothing Then x.Save pthXML&XMLfileName2 : correctXML(pthXML&XMLfileName2) : er=er& test_xml_xsd(pthXML&XMLfileName2, "J3040111.xsd")
  Set x=MakeBueBookXML(op.Date, niCode, XMLfileName1, "J3000411")   ' "Перелiк таблиць звiту"
      Call AddLinkedDoc(x,XMLfileName2,1,1) : Call AddLinkedDoc(x,XMLfileName5,2,1) : Call AddLinkedDoc(x,XMLfileName6,3,1)
      If Not x Is Nothing Then x.Save pthXML&XMLfileName1 : correctXML(pthXML&XMLfileName1) : er=er& test_xml_xsd(pthXML&XMLfileName1, "J3000411.xsd")
  MsgBox "Созданы файлы в папке "&pthXML&vbCrLf& vbTab&XMLfileName5&vbCrLf& vbTab&XMLfileName6&vbCrLf& vbTab&XMLfileName2&vbCrLf& vbTab&XMLfileName1
  MsgBox er, vbInformation, "Стандартная проверка структуры по XSD схемам."
End Sub

Function GetXMLFName(xml,DocNo)   ' номер документа в заголовок не предаётся, там вроде как номер подачи
  Dim ar : ar=Array("C_REG", 2, "C_RAJ", 2, "TIN", 10,      "C_DOC", 3, "C_DOC_SUB", 3, "C_DOC_VER", 2, _
                      "C_DOC_STAN", 1, "C_DOC_TYPE", 2, "C_DOC_CNT", 7, "PERIOD_TYPE", 1, "PERIOD_MONTH", 2, "PERIOD_YEAR", 4, "C_STI_ORIG", 4)
  Dim n : For n=0 To UBound(ar) Step 2
    Dim key : key=ar(n)
    Dim val : val=xml.SelectSingleNode("//"&key).NodeTypedValue
            : If key="C_DOC_CNT" Then val=Replace(Trim(val),"/","F")   ' если вдруг номер документа передаётся в заголовок, но вроде там №пп "1"
    Dim ss : ss=ss & Right("0000000000"&val, ar(n+1))
  Next
  GetXMLFName=ss & ".xml"
 'GetXMLFName=ss & Replace(Trim(DocNo),"/","F") & ".xml"
End Function

Sub AddLinkedDoc(xml,fnm,num,tp)
  Dim LD : Set LD=xml.SelectSingleNode("/DECLAR/DECLARHEAD/LINKED_DOCS") ' Set xmlDOM=xml.OwnerDocument
  If LD Is Nothing Then
    Dim dh : Set dh=xml.SelectSingleNode("/DECLAR/DECLARHEAD")
    Dim df : Set df=dh.SelectSingleNode("D_FILL")
           : Set LD=dh.InsertBefore(xml.CreateElement("LINKED_DOCS"), df)
  End If
  Dim dc : Set dc=LD.AppendChiLD(LD.OwnerDocument.CreateElement("DOC"))
         : dc.SetAttribute "NUM", num
         : dc.SetAttribute "TYPE", tp
  dc.AppendChild(LD.OwnerDocument.CreateElement("C_DOC")).NodeTypedValue=          Mid(fnm,15,3)   ' 15,16,17
  dc.AppendChild(LD.OwnerDocument.CreateElement("C_DOC_SUB")).NodeTypedValue=      Mid(fnm,18,3)   ' 18,19,20
  dc.AppendChild(LD.OwnerDocument.CreateElement("C_DOC_VER")).NodeTypedValue= CLng(Mid(fnm,21,2))   ' 21,22
  dc.AppendChild(LD.OwnerDocument.CreateElement("C_DOC_TYPE")).NodeTypedValue=CLng(Mid(fnm,24,2))   ' 24,25 ' номер нового звітного (уточн) документа у зв.періоді
  dc.AppendChild(LD.OwnerDocument.CreateElement("C_DOC_CNT")).NodeTypedValue= CLng(Mid(fnm,26,7))   ' 26..32
  dc.AppendChild(LD.OwnerDocument.CreateElement("C_DOC_STAN")).NodeTypedValue=     Mid(fnm,23,1)   ' 23
  dc.AppendChild(LD.OwnerDocument.CreateElement("FILENAME")).NodeTypedValue=fnm
End Sub

Sub correctXML(fpn) ' добавляет переносы строк. Отступы не умеет, надо бы научить.
  Dim sXML : sXML=CreateObject("Scripting.FileSystemObject").OpenTextFile(fpn).ReadAll
  sXML=Replace(sXML, "><", ">" & vbCrLf & "<") : CreateObject("Scripting.FileSystemObject").CreateTextFile(fpn).Write sXML
End Sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 7.40 Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group