При подготовке декларации по НДС за 3 квартал 2021 года пользователи программ на платформе 1С:Предприятие 7.7 столкнулись с критической технической проблемой. При попытке выгрузки отчета (релиз отчетности 21q3001) система выдает фатальную ошибку: "NDS2111.ERT(4036): Индекс не входит в границы списка значений". Эта ситуация блокирует формирование электронного файла для отправки в налоговую инспекцию. Рассмотрим подробно причины возникновения этой ошибки и разберем пошаговые методы ее устранения — от простых пользовательских манипуляций до внесения изменений в программный код внешних отчетов.
Выясним причину сбоя. Ошибка напрямую связана с внедрением системы прослеживаемости товаров. Разработчики 1С обновили механизмы выгрузки 8-го (Книга покупок) и 9-го (Книга продаж) разделов декларации, чтобы включить в них новые реквизиты: РНПТ, регистрационный номер партии товара, единицы измерения и стоимость прослеживаемого товара.
Проанализируем ситуацию: в коде файла NDS2111.ERT был организован цикл по списку номеров ГТД. Внутри этого цикла программа пытается получить данные из параллельных списков прослеживаемости (количество, стоимость и т.д.). Однако, если в строке указан обычный номер ГТД (для импортного товара, не подлежащего прослеживаемости), списки прослеживаемости остаются пустыми. При обращении к пустому списку по индексу 1 система закономерно выдает ошибку, так как элементов в списке нет. Это классический пример недостаточной проверки заполненности коллекций данных перед обращением к ним.
Прежде чем приступать к программированию, рассмотрим "классический" вариант решения, связанный с особенностями работы механизма ВосстановитьЗначение. Часто бухгалтеры открывают новую форму отчетности, и 1С предлагает восстановить данные из предыдущего периода. Если структура данных в новом квартале изменилась, это приводит к конфликтам.
21q3001 содержит ошибки, в последующих патчах часть проблем была исправлена, но иногда требуется ручное вмешательство.Если автоматическое заполнение все равно приводит к ошибке, нам потребуется отредактировать файл выгрузки. Для этого найдем в папке с регламентированной отчетностью файл NDS2111.ERT и откроем его в Конфигураторе.
Рассмотрим подробнее изменения. Нам нужно добавить проверку соответствия размеров списков перед началом цикла. Перейдем к строке 4031 (или около того, в зависимости от версии) и внесем следующий блок кода:
// Перед началом цикла обработки ГТД/РНПТ
Если (СписокОКЕИПросл.РазмерСписка() <> КолНом) или (СписокКолТовПросл.РазмерСписка() <> КолНом) или (СписокСтоимТовПросл.РазмерСписка() <> КолНом) Тогда
Для ИндНом = 1 По КолНом Цикл
РегНомПросл = СписокРегНомПросл.ПолучитьЗначение(ИндНом);
Если ПустоеЗначение(РегНомПросл) = 0 Тогда
СтрМногострочнойЧастиГруппы = СтрМногострочнойЧастиГруппы + ?(ПустаяСтрока(СтрМногострочнойЧастиГруппы) = 1,"", РазделительСтрок)
+ СтрокаТабуляцииДопСтрокДопСтаницы
+ "<СвРегНом РегНомПросл =""" + РегНомПросл + """" + " />";
КонецЕсли;
КонецЦикла;
КолНом = 0; // Обнуляем, чтобы основной цикл 1С не срабатывал повторно с ошибкой
КонецЕсли;
Также проанализируем формирование самого XML-тэга. В некоторых версиях была замечена ошибка в закрытии тэга СвРегНом. Правильный формат должен выглядеть так:
+ "<СвРегНом" + СтрРегНомПросл + " />" (самозакрывающийся тэг) или явное закрытие </СвРегНом>. Ошибка в структуре XML может привести к тому, что файл не будет принят приемным шлюзом ФНС.
Помимо ошибки выгрузки, часто возникают проблемы с контрольными соотношениями (ошибки по строкам 040 Раздела 1 и 200 Раздела 3). Проанализируем ситуацию: 1С может некорректно сравнивать итоги из-за неверной ссылки на переменные в коде контроля.
Рассмотрим шаги по исправлению файла NDS2101.ERT (Титульный лист):
НомерФайлаР = "03"; на НомерФайлаР = "04";. Это связано с обновлением версии формата.Контроль() перед строками присвоения НомерФайлаР необходимо добавить принудительное обновление данных:
ПоискСохрЧастей(МаскаПоиска);
NDS2111.ERT (Раздел 8) исправим опечатку в строке 1545: вместо ИтогПоРазделу190 должно быть ИтогПоРазделу180.После внесения этих правок обязательно пересохраните Раздел 8 в режиме "1С:Предприятие", чтобы итоги пересчитались корректно.
Выясним причину еще одной странной ошибки: при сохранении Раздела 9 (Книга продаж) с большим количеством строк (более 10 000) часть данных исчезает. Проанализируем код: 1С 7.7 сохраняет данные частями во внешние файлы. В коде именования этих файлов используется формат "Ч(0)2", что ограничивает количество временных файлов числом 99. Если данных больше — они начинают затирать друг друга или просто не записываются.
Для исправления найдем строку, отвечающую за формирование имени файла сохранения:
ИмяФайлаСохраненияОтчетаВНесколькоЧастей = ИмяФайлаДляСохраненияБезРасширения + Формат(НомФайлаСохранения, "Ч(0)3") + ".nds";
Замена "Ч(0)2" на "Ч(0)3" позволит системе создавать до 999 файлов частей, что достаточно даже для очень крупных организаций.
Посмотрим на важный методологический момент. Согласно постановлению Правительства №534, формат 5.08 требует указывать все номера ГТД в книге продаж для импортных товаров, а не только те, что относятся к прослеживаемости. В 1С 7.7 это реализовано через заполнение графы 20. Если вы видите, что при автоматическом заполнении в Книгу продаж попадают все номера деклараций на товары — это правильное поведение программы, соответствующее нормам законодательства 2021 года.
Резюмируем: Основная техническая проблема 3 квартала 2021 года в 1С 7.7 была вызвана спешным внедрением механизмов прослеживаемости. Используя приведенные выше программные правки, вы сможете успешно сформировать декларацию по НДС, обойдя ошибки индексации списков и некорректную работу контрольных соотношений. Не забывайте делать резервную копию файлов .ERT перед внесением любых изменений в конфигураторе.