bandurovskiy писав: ↑21 листопада 2019, 12:35
Вам нужно просто найти дочерний документ или что-то из него получить?
Найти дочерний документ и получить значения полей таблицы ТАВ1.
Не знаю как насчёт Декларации по акцизу, но на примере Декларации по НДС у меня получилось так:
1. Поиск дочернего документа через DocumentsDataSet.
2. Получение данных дочернего документа через OpenOrCreateByExDocID.
Сначала, через DocumentsDataSet я смог получить количество документов (общее в пакете и отдельно дочерних):
- Отакої | Показать
- 1.jpg (618.64 Кіб) Переглянуто 1152 разів
Затем, на основании тех документов, что в наличии в M.E.Doc и с помощью OpenOrCreateByExDocID я получил данные из дочернего документа (Приложения 5 к Декларации):
- Як він це робить?? | Показать
- 2.jpg (605.66 Кіб) Переглянуто 1152 разів
Как я выше писал, если документ создавался в M.E.Doc вручную - у него не будет присутствовать ExDocID, что не даст получить данные по нему.
Я создавал Декларацию по НДС с помощью того же OpenOrCreateByExDocID и, как писал уважаемый Incognito, для упрощения использовал для дочерних документов присваивание ExDocID главного документа (родительского) с добавлением "-N", где N - номер приложения Декларации.
После, имея из DocumentsDataSet список дочерних документов, которые присутствуют в M.E.Doc, я через OpenOrCreateByExDocID обращаюсь к дочернему документу и через его DataSet определённой таблицы получаю данные.
Код, с которым у меня это получилось, привожу ниже:
- Он таки волшбеник | Показать
-
DocumentsDataSet:
Код: Виділити все
Procedure GetPacketDocsCount(Button)
Medoc = New COMObject("MEDOC.ZApplication");
VATDocs = New Array(10);
VATDocs[0] = "J0200120"; // Главный документ Декларации по НДС
VATDocs[1] = "J0200520"; // Приложение 1 к Декларации по НДС
VATDocs[2] = "J0215220"; // Приложение 2 к Декларации по НДС
VATDocs[3] = "J0200620"; // Приложение 3 к Декларации по НДС
VATDocs[4] = "J0299820"; // Приложение 4 к Декларации по НДС
VATDocs[5] = "J0215120"; // Приложение 5 к Декларации по НДС
VATDocs[6] = "J0299320"; // Приложение 6 к Декларации по НДС
VATDocs[7] = "J0215720"; // Приложение 7 к Декларации по НДС
VATDocs[8] = "J0215820"; // Приложение 8 к Декларации по НДС
VATDocs[9] = "J0215320"; // Приложение 9 к Декларации по НДС
DocPerDate = "01.10.2019";
TotalAmount = 0;
ChildAmount = 0;
VATChildDocsInMedoc = new Array;
For Each VATDoc In VATDocs Do
DataSetQuery = "PerDate >= '" + DocPerDate + "' AND CharCode = '" + VATDoc + "'";
Count = Medoc.DocumentsDataSet(DataSetQuery).RecordCount();
Message("VAT Declaration | There is " + String(Count) + " '" + VATDoc + "' document(s) in M.E.Doc.");
If Count <> 0 Then
TotalAmount = TotalAmount + 1;
EndIf;
If VATDoc <> "J0200120" AND Count <> 0 Then
ChildAmount = ChildAmount + 1;
VATChildDocsInMedoc.Add(VATDoc);
EndIf;
EndDo;
Message(Chars.LF + "---------" + Chars.LF);
Message("Total amount of VAT Declaration documents in M.E.Doc: " + TotalAmount);
Message("Amount of VAT Declaration child documents in M.E.Doc: " + ChildAmount);
ParentExDocID = GetParentExDocID();
For Each ChildDoc in VATChildDocsInMedoc Do
Message(" '" + ChildDoc + "' is present in M.E.Doc.");
GetChildDocumentData(ChildDoc, DocPerDate, ParentExDocID);
EndDo;
EndProcedure
GetParentExDocID() - это просто маленькая процедура получения ExDocID главного (родительского) документа.
OpenOrCreateByExDocID:
Код: Виділити все
Procedure GetChildDocumentData(Charcode, Perdate, ParentExDocID)
Var ChildExDocID;
If Charcode = "J0200520" Then
ChildExDocID = ParentExDocID + "-1";
ElsIf Charcode = "J0215220" Then
ChildExDocID = ParentExDocID + "-2";
ElsIf Charcode = "J0200620" Then
ChildExDocID = ParentExDocID + "-3";
ElsIf Charcode = "J0299820" Then
ChildExDocID = ParentExDocID + "-4";
ElsIf Charcode = "J0215120" Then
ChildExDocID = ParentExDocID + "-5"
ElsIf Charcode = "J0299320" Then
ChildExDocID = ParentExDocID + "-6";
ElsIf Charcode = "J0215720" Then
ChildExDocID = ParentExDocID + "-7";
ElsIf Charcode = "J0215820" Then
ChildExDocID = ParentExDocID + "-8";
ElsIf Charcode = "J0215320" Then
ChildExDocID = ParentExDocID + "-9";
EndIf;
Medoc = New COMObject("MEDOC.ZApplication");
//Пример на Приложении 5 Декларации по НДС
If Charcode = "J0215120" Then
ChildDocument = Medoc.OpenOrCreateByExDocID(Charcode,0,Perdate,,ChildExDocID,0);
ChildDataSet = ChildDocument.DataSets("TAB1");
INN = String(ChildDataSet.Fields.Item("TAB1_A2").Value);
MONTH = String(ChildDataSet.Fields.Item("TAB1_A5").Value);
YEAR = Format(ChildDataSet.Fields.Item("TAB1_B5").Value, "ЧГ=0");
SUM = String(ChildDataSet.Fields.Item("TAB1_A3").Value);
TAXSUM = String(ChildDataSet.Fields.Item("TAB1_A4").Value);
Message(" '" + Charcode + "' | Table 1 | Row 1: " + Chars.LF +
" Partner's individual tax number: " + INN + Chars.LF +
" Operation's period: " + MONTH + "." + YEAR + Chars.LF +
" Tax base sum: " + SUM + " UAH" + Chars.LF +
" VAT sum: " + TAXSUM + " UAH" + Chars.LF);
EndIf;
EndProcedure
Писал под 1С 8.3 и проверял на Бухгалтерии 1.2.51.1.
У Вас, насколько я понял, используется 7.7. Если сможете имплементировать то, что выше - на здоровье.
P.S.: Прошу прощения за код 1С на английском, но мне так проще