При работе в актуальных версиях конфигурации 1С:Бухгалтерия предприятия 3.0 (начиная с релиза 3.0.143.42 и выше) пользователи часто сталкиваются с критической ошибкой при попытке отправить электронный документ (УПД или счет-фактуру) через ЭДО или при выгрузке счета-фактуры или УПД в XML для Diadoc. Сообщение системы гласит: «Код страны грузополучателя: значение не заполнено». Иногда оно дополняется ошибкой «Адрес грузополучателя: значение указано неверно».
Проблема осложняется тем, что визуально в карточке контрагента или организации адрес может выглядеть идеально заполненным, проверка через классификатор ГАР (ФИАС) проходит успешно, а в справочнике СтраныМира у России проставлен корректный код 643. Разберем подробно, почему это происходит и как решить проблему различными методами — от простых манипуляций в интерфейсе до программной правки кода.
Выясним причину такого поведения системы. В современных версиях программ 1С адрес хранится не просто строкой, а в виде сложной структуры в формате JSON или XML в регистре сведений КонтактнаяИнформация. При формировании файла для ЭДО библиотека БСП (Библиотека стандартных подсистем) разбирает эти данные и ищет конкретное поле КодСтраны.
Проанализируем ситуацию: из-за ошибок в механизмах обновления классификаторов или сбоев при переносе данных, внутренняя запись адреса может содержать текстовое представление («Россия»), но не иметь привязанного цифрового кода ОКСМ в скрытых полях структуры. В итоге визуальная проверка адреса говорит, что всё нормально, но алгоритм формирования XML-файла «спотыкается» о пустое значение кода.
Самый простой и часто помогающий способ — заставить систему принудительно перезаписать структуру адреса в базе данных. Рассмотрим пошаговый алгоритм:
Проанализируем результат: такие действия инициируют перезапись строки в регистре КонтактнаяИнформация, и программа заново сформирует XML-структуру адреса, на этот раз корректно включив туда код 643.
Если документов и контрагентов много, попробуем воспользоваться механизмом автозаполнения. Выполним следующие действия:
Контрагенты.В некоторых случаях помогает также полная очистка почтового адреса и его повторное копирование из юридического. Помните, что для УПД со статусом «1» система предъявляет повышенные требования именно к адресу грузополучателя, а в сложных случаях может потребоваться ручное формирование файла типа xml для формализованных электронных документов через внешние инструменты — для этого подойдёт внешняя обработка выгрузки УПД в XML-файл.
Если отгрузка производится в адрес филиала (обособленного подразделения), обратим внимание на следующее: ошибка может возникать, если адрес заполнен у головной организации, но не заполнен в карточке самого подразделения. Проверим реквизит Грузополучатель в документе Реализация (акт, накладная, УПД). Если там выбрано подразделение, необходимо зайти в его карточку и убедиться, что адрес заполнен и структурирован именно там.
Если вышеперечисленные способы не помогают или ошибка носит массовый характер из-за багов конкретного релиза конфигурации, воспользуемся «хирургическим» вмешательством. Мы можем программно подставить код страны непосредственно в дерево данных, которое подготавливается для формирования электронного документа.
Разберем пример кода, который можно внедрить через расширение. Нам необходимо перехватить процедуру БЭДО_ПроверитьЗаполнениеРеквизитовДереваДанных в общем модуле. Проанализируем фрагмент кода:
&ИзменениеИКонтроль("ПроверитьЗаполнениеРеквизитовДереваДанных")
Процедура БЭДО_ПроверитьЗаполнениеРеквизитовДереваДанных(ДеревоДанных, Ошибки, ЭтоТаблица, НомерСтроки = Неопределено, ПроверятьОбязательностьПараметровОшибки = Истина, ДатаПоФорматуФНС = Ложь) Экспорт
// Вставим проверку и заполнение кода страны Россия (643), если он пустой
ПараметрыПоиска = Новый Структура;
ПараметрыПоиска.Вставить("ПолныйПуть", "СведенияОГрузополучателе.НомерСтроки.Адрес.АдресИнформация.КодСтраны");
мНайдСтроки = ДеревоДанных.Строки.НайтиСтроки(ПараметрыПоиска);
Если мНайдСтроки.Количество() > 0 Тогда
Для Каждого СтрокаПути Из мНайдСтроки Цикл
Если НЕ ЗначениеЗаполнено(СтрокаПути.Значение) Тогда
// Принудительно устанавливаем код России
СтрокаПути.Значение = "643";
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Далее следует штатный алгоритм перебора строк дерева...
// [Оригинальный код процедуры]
КонецПроцедуры
Рассмотрим, как это работает: мы ищем в дереве данных ЭДО узел, отвечающий за КодСтраны в сведениях о грузополучателе. Если значение в этом узле не заполнено, мы программно устанавливаем его в значение 643. Подобная логика часто применяется, когда требуется групповое сохранение файлов УПД в формате xml средствами БСП для последующей загрузки в сторонние системы.
Иногда корень зла кроется в самом справочнике СтраныМира. Посмотрим на список стран и найдем там «Россия». Убедимся, что:
643.RU.Также стоит проверить наличие установленных исправлений (патчей) в разделе Администрирование — Обслуживание — Обновление программы — Установленные исправления. Разработчики 1С часто выпускают патчи специально для исправления ошибок формирования ЭДО. Дополнительно рекомендуется проверить настройки форматов исходящих электронных документов, чтобы убедиться в использовании актуальных стандартов ФНС.
В завершение проанализируем еще один момент: если адрес в карточке заполнен в «свободной форме» (одной строкой), ЭДО всегда будет выдавать ошибку. Для корректной выгрузки адрес обязан быть разобран по полям. Если вы работаете с маркируемыми товарами, для которых важна точность передачи данных, вам может пригодиться выгрузка УПД в формате xml для ЭДО Лайт (Честный знак). А в ситуациях, когда необходимо отразить данные на стороне контрагента, полезным будет сохранение УПД в формате xml за поставщика на основе входящих документов.