При работе с электронным документооборотом (ЭДО) в "1С:Бухгалтерия предприятия 3.0", особенно когда выполняется обновление настроек отправки документов ЭДО на новый формат УПД 5.03, пользователи могут столкнуться с неприятной ошибкой при попытке отправить, просмотреть или выгрузить электронный документ. Система выдает сообщение об ошибке проверки данных XDTO, указывая на проблему со свойством "НалСт".
Текст ошибки обычно выглядит так:
Ошибка проверки данных XDTO:
Структура объекта '/Документ/ТаблСчФакт/СведТов[1]' не соответствует типу:
Проверка свойства 'НалСт':
форма: Атрибут
имя: НалСт
тип:
Отсутствует обязательное свойство
Эта ошибка означает, что в структуре формируемого XML-файла для электронного документа не заполнено обязательное поле, отвечающее за ставку НДС (НалСт). Чтобы минимизировать риск подобных сбоев, рекомендуется регулярно проводить анализ конфигураций и расширений на наличие ошибок программного кода. Давайте подробно разберем, почему возникает именно эта ошибка и как исправить ситуацию.
Проанализируем ситуацию. Ошибка чаще всего возникает не на всех документах. Старые, созданные до обновления документы, могут отправляться корректно. Однако при копировании старого документа или создании нового, проблема воспроизводится. Это указывает на то, что изменения в коде конфигурации после обновления затронули механизм формирования XDTO-пакета.
Ключевая деталь, которую удалось выяснить пользователям — проблема связана с процентными ставками НДС. Если в табличной части документа указана ставка "Без НДС" или расчетная ставка вроде "20/120", электронный документ формируется без ошибок. Но как только мы выбираем ставку с символом процента, например, "20%" или "10%", система выдает указанную выше ошибку.
Причина кроется в программном коде, который подготавливает данные для XDTO. В одном из общих модулей есть функция, которая преобразует значение перечисления ставок НДС в строковый формат, требуемый для XML. В некоторых случаях на вход этой функции передается строка, уже содержащая символ "%" (например, "20%"). Функция же ожидает получить числовое представление ("20"), чтобы найти соответствующее ему значение в специальной таблице соответствия. Не найдя соответствия для "20%", функция возвращает пустое значение. В результате обязательный атрибут НалСт в XML-файле остается незаполненным, и проверка XDTO-схемы проваливается.
Описанная проблема является известной ошибкой в некоторых релизах "1С:Бухгалтерия предприятия 3.0". Фирма "1С" для таких случаев выпускает специальные исправления (патчи), которые устраняют недочеты без необходимости полного обновления конфигурации. Это самый правильный и безопасный способ решения, особенно если у вас не работает штатная выгрузка документа реализации в XML в формате 5.03 — поможет выгрузка УПД в XML-файл по формату 5.03.
Например, для подобных ошибок был выпущен патч EF_00_00687314_4. Прежде чем вносить изменения в код вручную, необходимо проверить его наличие и установить. Стоит отметить, что в последних релизах (3.0.172, 3.0.173) также встречается ошибка заполнения платежно-расчетных документов в XML-файле, которая исправляется аналогичным образом.
Разберем по шагам, как установить исправление:
Важно: Использование официальных патчей является предпочтительным методом, так как он не снимает конфигурацию с поддержки и гарантирует корректность исправления.
Если по какой-то причине установка патча невозможна или вам требуется выгрузка УПД в XML (5.03), когда ЭДО не подключено через сторонние инструменты, можно внести исправление в код конфигурации вручную. Этот способ требует доступа к конфигуратору и определенных навыков.
Внимание! Внесение изменений в код снимает конфигурацию с автоматической поддержки. При последующих обновлениях эти изменения могут быть затерты, и их придется вносить заново.
Посмотрим, как исправить код по шагам:
ФорматыЭДО_ФНС.СтавкаНДСXDTO(ЗначениеСтавки).
Функция СтавкаНДСXDTO(ЗначениеСтавки)
СтавкиФНС = Новый Соответствие;
СтавкиФНС.Вставить("0", "0%");
СтавкиФНС.Вставить("10", "10%");
СтавкиФНС.Вставить("18", "18%");
СтавкиФНС.Вставить("10/110", "10/110");
СтавкиФНС.Вставить("18/118", "18/118");
СтавкиФНС.Вставить("20", "20%");
СтавкиФНС.Вставить("20/120", "20/120");
СтавкиФНС.Вставить(ВРег("без НДС"), "без НДС");
СтавкиФНС.Вставить(ВРег("НДС исчисляется налоговым агентом"), "НДС исчисляется налоговым агентом");
СтавкаXDTO = СтавкиФНС.Получить(ВРег(ЗначениеСтавки));
Возврат СтавкаXDTO;
КонецФункции
ЗначениеСтавки иногда приходит с символом "%", а ключи в объекте Соответствие (СтавкиФНС) не содержат этот символ (например, ключ "20", а не "20%"). Метод Получить не находит совпадения и возвращает Неопределено.Исправленный вариант будет выглядеть так:
Функция СтавкаНДСXDTO(ЗначениеСтавки)
// Вставляем эту строку для удаления символа "%"
ЗначениеСтавки = СтрЗаменить(ЗначениеСтавки, "%", "");
СтавкиФНС = Новый Соответствие;
СтавкиФНС.Вставить("0", "0%");
СтавкиФНС.Вставить("10", "10%");
СтавкиФНС.Вставить("18", "18%");
СтавкиФНС.Вставить("10/110", "10/110");
СтавкиФНС.Вставить("18/118", "18/118");
СтавкиФНС.Вставить("20", "20%");
СтавкиФНС.Вставить("20/120", "20/120");
СтавкиФНС.Вставить(ВРег("без НДС"), "без НДС");
СтавкиФНС.Вставить(ВРег("НДС исчисляется налоговым агентом"), "НДС исчисляется налоговым агентом");
СтавкаXDTO = СтавкиФНС.Получить(ВРег(ЗначениеСтавки));
Возврат СтавкаXDTO;
КонецФункции
После этой доработки функция СтрЗаменить будет гарантированно удалять символ "%", и поиск по соответствию будет работать корректно для всех ставок НДС. Также рекомендуем проверить общую смену форматов исходящих электронных документов и настроек ЭДО, чтобы убедиться в правильности параметров для всех контрагентов.
В заключение, отметим, что ошибка с "НалСт" является типичным примером проблемы, возникающей из-за небольших расхождений в форматах данных внутри программы. Наилучшим решением всегда будет установка официального исправления от "1С", но знание механизма ошибки и способа ее ручного исправления может сэкономить много времени и нервов в критической ситуации.