Ошибка ЭДО в 1С:Бухгалтерия: "Отсутствует обязательное свойство НалСт" при формировании электронного документа. Что делать?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При работе с электронным документооборотом (ЭДО) в "1С:Бухгалтерия предприятия 3.0", особенно когда выполняется обновление настроек отправки документов ЭДО на новый формат УПД 5.03, пользователи могут столкнуться с неприятной ошибкой при попытке отправить, просмотреть или выгрузить электронный документ. Система выдает сообщение об ошибке проверки данных XDTO, указывая на проблему со свойством "НалСт".

Текст ошибки обычно выглядит так:


Ошибка проверки данных XDTO:
Структура объекта '/Документ/ТаблСчФакт/СведТов[1]' не соответствует типу: 
Проверка свойства 'НалСт':
    форма: Атрибут
    имя: НалСт
    тип: 
Отсутствует обязательное свойство

Эта ошибка означает, что в структуре формируемого XML-файла для электронного документа не заполнено обязательное поле, отвечающее за ставку НДС (НалСт). Чтобы минимизировать риск подобных сбоев, рекомендуется регулярно проводить анализ конфигураций и расширений на наличие ошибок программного кода. Давайте подробно разберем, почему возникает именно эта ошибка и как исправить ситуацию.

Анализ причин возникновения ошибки

Проанализируем ситуацию. Ошибка чаще всего возникает не на всех документах. Старые, созданные до обновления документы, могут отправляться корректно. Однако при копировании старого документа или создании нового, проблема воспроизводится. Это указывает на то, что изменения в коде конфигурации после обновления затронули механизм формирования XDTO-пакета.

Ключевая деталь, которую удалось выяснить пользователям — проблема связана с процентными ставками НДС. Если в табличной части документа указана ставка "Без НДС" или расчетная ставка вроде "20/120", электронный документ формируется без ошибок. Но как только мы выбираем ставку с символом процента, например, "20%" или "10%", система выдает указанную выше ошибку.

Причина кроется в программном коде, который подготавливает данные для XDTO. В одном из общих модулей есть функция, которая преобразует значение перечисления ставок НДС в строковый формат, требуемый для XML. В некоторых случаях на вход этой функции передается строка, уже содержащая символ "%" (например, "20%"). Функция же ожидает получить числовое представление ("20"), чтобы найти соответствующее ему значение в специальной таблице соответствия. Не найдя соответствия для "20%", функция возвращает пустое значение. В результате обязательный атрибут НалСт в XML-файле остается незаполненным, и проверка XDTO-схемы проваливается.

Решение №1: Установка официального исправления (патча) — Рекомендуемый способ

Описанная проблема является известной ошибкой в некоторых релизах "1С:Бухгалтерия предприятия 3.0". Фирма "1С" для таких случаев выпускает специальные исправления (патчи), которые устраняют недочеты без необходимости полного обновления конфигурации. Это самый правильный и безопасный способ решения, особенно если у вас не работает штатная выгрузка документа реализации в XML в формате 5.03 — поможет выгрузка УПД в XML-файл по формату 5.03.

Например, для подобных ошибок был выпущен патч EF_00_00687314_4. Прежде чем вносить изменения в код вручную, необходимо проверить его наличие и установить. Стоит отметить, что в последних релизах (3.0.172, 3.0.173) также встречается ошибка заполнения платежно-расчетных документов в XML-файле, которая исправляется аналогичным образом.

Разберем по шагам, как установить исправление:

  1. Перейдите в раздел "Администрирование""Обслуживание".
  2. В разделе "Обновление программы" найдите и нажмите на ссылку "Установленные исправления (патчи)".
  3. В открывшемся окне система отобразит список установленных патчей. Если у вас настроено автоматическое получение исправлений, возможно, нужный патч уже загружен и его нужно только применить. Если нет, нажмите кнопку "Найти и установить исправления".
  4. Система выполнит поиск актуальных патчей для вашей версии конфигурации. Если нужный патч будет найден, установите его, следуя инструкциям.
  5. После установки исправления перезапустите программу и попробуйте сформировать электронный документ заново. Проблема должна быть решена.

Важно: Использование официальных патчей является предпочтительным методом, так как он не снимает конфигурацию с поддержки и гарантирует корректность исправления.

Решение №2: Ручное исправление кода — Временная мера

Если по какой-то причине установка патча невозможна или вам требуется выгрузка УПД в XML (5.03), когда ЭДО не подключено через сторонние инструменты, можно внести исправление в код конфигурации вручную. Этот способ требует доступа к конфигуратору и определенных навыков.

Внимание! Внесение изменений в код снимает конфигурацию с автоматической поддержки. При последующих обновлениях эти изменения могут быть затерты, и их придется вносить заново.

Посмотрим, как исправить код по шагам:

  1. Откройте конфигурацию в режиме "Конфигуратор".
  2. В дереве метаданных найдите ветку "Общие" -> "Общие модули".
  3. Найдите и откройте общий модуль с названием ФорматыЭДО_ФНС.
  4. В тексте модуля с помощью поиска (Ctrl + F) найдите функцию СтавкаНДСXDTO(ЗначениеСтавки).
  5. Вы увидите примерно следующий код:
    
    Функция СтавкаНДСXDTO(ЗначениеСтавки)
    
        СтавкиФНС = Новый Соответствие;
        СтавкиФНС.Вставить("0", "0%");
        СтавкиФНС.Вставить("10", "10%");
        СтавкиФНС.Вставить("18", "18%");
        СтавкиФНС.Вставить("10/110", "10/110");
        СтавкиФНС.Вставить("18/118", "18/118");
        СтавкиФНС.Вставить("20", "20%");
        СтавкиФНС.Вставить("20/120", "20/120");
        СтавкиФНС.Вставить(ВРег("без НДС"), "без НДС");
        СтавкиФНС.Вставить(ВРег("НДС исчисляется налоговым агентом"), "НДС исчисляется налоговым агентом");
    
        СтавкаXDTO = СтавкиФНС.Получить(ВРег(ЗначениеСтавки));
    
        Возврат СтавкаXDTO;
    
    КонецФункции
    
  6. Проблема в том, что переменная ЗначениеСтавки иногда приходит с символом "%", а ключи в объекте Соответствие (СтавкиФНС) не содержат этот символ (например, ключ "20", а не "20%"). Метод Получить не находит совпадения и возвращает Неопределено.
  7. Чтобы это исправить, необходимо перед поиском в соответствии "очистить" входящую строку от символа процента. Для этого добавьте одну строку кода сразу после объявления функции.

    Исправленный вариант будет выглядеть так:

    
    Функция СтавкаНДСXDTO(ЗначениеСтавки)
    
        // Вставляем эту строку для удаления символа "%"
        ЗначениеСтавки = СтрЗаменить(ЗначениеСтавки, "%", "");
    
        СтавкиФНС = Новый Соответствие;
        СтавкиФНС.Вставить("0", "0%");
        СтавкиФНС.Вставить("10", "10%");
        СтавкиФНС.Вставить("18", "18%");
        СтавкиФНС.Вставить("10/110", "10/110");
        СтавкиФНС.Вставить("18/118", "18/118");
        СтавкиФНС.Вставить("20", "20%");
        СтавкиФНС.Вставить("20/120", "20/120");
        СтавкиФНС.Вставить(ВРег("без НДС"), "без НДС");
        СтавкиФНС.Вставить(ВРег("НДС исчисляется налоговым агентом"), "НДС исчисляется налоговым агентом");
    
        СтавкаXDTO = СтавкиФНС.Получить(ВРег(ЗначениеСтавки));
    
        Возврат СтавкаXDTO;
    
    КонецФункции
    
  8. После внесения изменений сохраните конфигурацию (F7) и обновите конфигурацию базы данных (клавиша F5 в режиме отладки или через меню "Конфигурация" -> "Обновить конфигурацию базы данных").

После этой доработки функция СтрЗаменить будет гарантированно удалять символ "%", и поиск по соответствию будет работать корректно для всех ставок НДС. Также рекомендуем проверить общую смену форматов исходящих электронных документов и настроек ЭДО, чтобы убедиться в правильности параметров для всех контрагентов.

В заключение, отметим, что ошибка с "НалСт" является типичным примером проблемы, возникающей из-за небольших расхождений в форматах данных внутри программы. Наилучшим решением всегда будет установка официального исправления от "1С", но знание механизма ошибки и способа ее ручного исправления может сэкономить много времени и нервов в критической ситуации.

← На главную