Ошибка возникает в функции: ПолучитьФорматЗаписиИзДереваФормата
Функция ПолучитьФорматЗаписиИзДереваФормата(Знач ДеревоФормата, Знач ИмяЗаписи)
ТаблицаФормаЗаписи = Новый ТаблицаЗначений;
ТаблицаФормаЗаписи.Колонки.Добавить("ИмяПоля", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100)));
ТаблицаФормаЗаписи.Колонки.Добавить("ТипДанных", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(10)));
ТаблицаФормаЗаписи.Колонки.Добавить("ТипЭлемента", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(10)));
ТаблицаФормаЗаписи.Колонки.Добавить("Размер", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(5)));
ТаблицаФормаЗаписи.Колонки.Добавить("РазрядностьДробнойЧасти", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(5)));
ТаблицаФормаЗаписи.Колонки.Добавить("ЭлементНеОбязателен", Новый ОписаниеТипов("Булево"));
ТаблицаФормаЗаписи.Колонки.Добавить("НеВыводитьВФайл", Новый ОписаниеТипов("Булево"));
УзлыФормата = ДеревоФормата.ДочерниеУзлы[0].ПолучитьЭлементыПоИмени(ИмяЗаписи)[0].ДочерниеУзлы;
Для Каждого УзелФормата Из УзлыФормата Цикл
Если УзелФормата.ТипУзла = ТипУзлаDOM.Текст Тогда
Продолжить;
КонецЕсли;
// Имя поля хранится в 4-ой колонке.
ИмяПоля = УзелФормата.ДочерниеУзлы[3].ТекстовоеСодержимое;
Если ИмяПоля <> "" Тогда
НовоеПоле = ТаблицаФормаЗаписи.Добавить();
НовоеПоле.ИмяПоля = СокрЛП(ИмяПоля);
// Тип данных хранится во 2-ой колонке.
НовоеПоле.ТипДанных = ВРег(УзелФормата.ДочерниеУзлы[1].ТекстовоеСодержимое);
НовоеПоле.НеВыводитьВФайл = Ложь;
Если УзелФормата.ДочерниеУзлы.Количество() = 7 И УзелФормата.ДочерниеУзлы[6].ИмяУзла = "ТипЭлемента" Тогда
НовоеПоле.ТипЭлемента = ВРег(УзелФормата.ДочерниеУзлы[6].ТекстовоеСодержимое);
Иначе
НовоеПоле.ТипЭлемента = "С";
КонецЕсли;
// Размер поля хранится в 3-ей колонке.
СтрРазмерПоля = УзелФормата.ДочерниеУзлы[2].ТекстовоеСодержимое;
// Если указан размер поля, сохраним его.
Если (НовоеПоле.ТипДанных = "ЧИСЛО" Или НовоеПоле.ТипДанных = "СТРОКА") И СтрРазмерПоля <> "" Тогда
ПозицияТочки = СтрНайти(СтрРазмерПоля,".");
Если ПозицияТочки<>0 Тогда
НовоеПоле.Размер = Число(Лев(СтрРазмерПоля,ПозицияТочки-1));
НовоеПоле.РазрядностьДробнойЧасти = Число(Сред(СтрРазмерПоля,ПозицияТочки+1));
Иначе
НовоеПоле.Размер = Число(СтрРазмерПоля);
НовоеПоле.РазрядностьДробнойЧасти = 0;
КонецЕсли;
КонецЕсли;
// Признак обязательности элемента хранится в 5-й колонке.
НовоеПоле.ЭлементНеОбязателен = (ВРег(УзелФормата.ДочерниеУзлы[4].ТекстовоеСодержимое) = "НЕ ОБЯЗАТЕЛЬНО" Или ВРег(УзелФормата.ДочерниеУзлы[4].ТекстовоеСодержимое) = "Н");
КонецЕсли;
КонецЦикла;
Возврат ТаблицаФормаЗаписи;
КонецФункции
Пояснения (к блоку кода выделенного желтым):
Красным выделена строка ошибки, зеленым код, который нужно вставить для устранения ошибки, а синим код, вследствие чего возникла ошибка. Проведя простейший эксперимент, выяснил, что: функция ПолучитьЭлементыПоИмени - получает элементы узлов DOM не только по имени, но и по значению. Ошибка происходит, когда ИмяЗаписи = "ИмущВыч". Ищем в макете "ФорматНДФЛ2015XML" документа "СправкиНДФЛДляПередачиВНалоговыйОрган" строку <Размер_ИмяСтруктурыДанных>ИмущВыч</Размер_ИмяСтруктурыДанных> . Таких строк несколько. Если их удалить, ошибки не возникнет, отсюда и вывод, что функция ПолучитьЭлементыПоИмени - получает элменты узлов DOM не только по имени, но и по значению.