Каталог решений - Ошибка 2-НДФЛ ЗУП (3.0.25.150) {ОбщийМодуль.ЗарплатаКадры.Модуль(5279)}: Индекс находится за границами массива

Ошибка 2-НДФЛ ЗУП (3.0.25.150) {ОбщийМодуль.ЗарплатаКадры.Модуль(5279)}: Индекс находится за границами массива

Ошибка 2-НДФЛ ЗУП (3.0.25.150) {ОбщийМодуль.ЗарплатаКадры.Модуль(5279)}: Индекс находится за границами массива

В наличии

Ошибка при выполнении обработчика — ‘ПриЗаписи’
по причине:
{ОбщийМодуль.ЗарплатаКадры.Модуль(5279)}: Индекс находится за границами массива
ИмяПоля = УзелФормата.ДочерниеУзлы[3].ТекстовоеСодержимое;

Категория:

Описание

Ошибка возникает в функции: ПолучитьФорматЗаписиИзДереваФормата

Функция ПолучитьФорматЗаписиИзДереваФормата(Знач ДеревоФормата, Знач ИмяЗаписи)
    
    ТаблицаФормаЗаписи = Новый ТаблицаЗначений;
    ТаблицаФормаЗаписи.Колонки.Добавить("ИмяПоля",                    Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(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 не только по имени, но и по значению.

has been added to your cart:
Оформление заказа