Как вывести прочерк вместо нулевого количества в электронном счете-фактуре (ЭДО) в 1С

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

При работе с электронным документооборотом (ЭДО) в программных продуктах на базе 1С, таких как 1С:ERP Управление предприятием 2 или 1С:Комплексная автоматизация, разработчики часто сталкиваются с задачей изменения визуального представления данных. Одной из популярных задач является вывод прочерка в поле Количество, если оно не заполнено, по аналогии с бумажными печатными формами. Рассмотрим подробно, почему стандартное «Условное оформление» здесь не поможет и как правильно решить эту задачу программно.

Понимание природы электронного документа

Для начала разберем важный нюанс: что именно мы называем «электронным документом». В контексте ЭДО это не печатная форма, которую мы видим на экране, а структурированный текстовый файл в формате XML. Его структура строго регламентирована приказами ФНС. Когда мы смотрим на документ через интерфейс 1С или оператора ЭДО, мы видим результат работы визуализатора — специального механизма, который берет данные из XML и «натягивает» их на графический шаблон (часто с использованием XSLT-трансформации).

Следовательно, использовать стандартное Условное оформление, которое работает с формами 1С, для изменения содержимого XML-файла невозможно. Мы должны работать непосредственно с процессом формирования данных для выгрузки.

Ограничения XSD-схем и типов данных

Каждый электронный документ (УПД, Счет-фактура) должен соответствовать XSD-схеме. Это набор правил, который определяет, какие теги могут быть в файле, в каком порядке они идут и — самое главное — какие типы данных они могут содержать. Проанализируем тег КолТов (Количество товара), который упоминается в вопросе.

Согласно актуальным приказам ФНС (например, № ЕД-7-26/970@), поле КолТов имеет числовой тип данных (обычно xs:decimal). Это означает следующее:

  1. В это поле можно записать только число (например, 10.00 или 0).
  2. Любая попытка вставить туда строковый символ, такой как прочерк "—", приведет к ошибке валидации. Такой файл будет отклонен сервером оператора ЭДО или приемным шлюзом ФНС.
  3. Если визуализатор отображает цену прочерком, это происходит не потому, что в XML записан символ прочерка, а потому, что тег цены либо пуст, либо отсутствует, и логика визуализации заменяет пустоту на символ по правилам Постановления № 1137.

Выясняем причину: почему цена выводится прочерком, а количество — нулем

Проанализируем ситуацию: в бумажных формах при отсутствии показателя действительно ставится прочерк. В электронном формате это реализуется через «необязательность» тегов. Если показатель (например, ЦенаТов) не является обязательным по схеме и данные в 1С отсутствуют, тег просто не создается в XML. Визуализатор, не найдя тега, рисует прочерк.

Однако для количественных показателей в счетах-фактурах часто установлены более жесткие требования. Если поле Количество инициализируется в коде как 0, то в XML попадает 0, и визуализатор честно отображает цифру. Чтобы получить прочерк, нужно сделать так, чтобы значение в структуре данных стало Неопределено или вовсе отсутствовало (если схема это позволяет).

Программная реализация: где искать код в 1С:ERP

Чтобы изменить логику заполнения полей, нам нужно вмешаться в работу подсистемы «Электронное взаимодействие» (БСП). В 1С:ERP формирование контента XML происходит в специализированных менеджерах выгрузки. Рассмотрим пошагово, как найти нужное место.

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

Разберем пример логики в коде:


// В модуле менеджера или общем модуле, где формируется структура УПД
Процедура ЗаполнитьСведенияОТоварах(ДанныеДокумента, СтруктураXML)
    
    Для Каждого СтрокаТЧ Из ДанныеДокумента.Товары Цикл
        
        НоваяСтрока = СтруктураXML.ТаблицаТоваров.Добавить();
        
        // Вместо безусловного присвоения значения:
        // НоваяСтрока.Количество = СтрокаТЧ.Количество;
        
        // Используем условие:
        Если СтрокаТЧ.Количество = 0 Тогда
            // Если схема позволяет отсутствие тега, 
            // устанавливаем Неопределено, чтобы тег не создавался
            НоваяСтрока.Количество = Неопределено;
        Иначе
            НоваяСтрока.Количество = СтрокаТЧ.Количество;
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

Важный момент: перед внесением таких изменений обязательно проверьте XSD-схему конкретного формата в конфигураторе (раздел Общие -> XSD-схемы). Если у тега КолТов стоит атрибут minOccurs="1", это означает, что тег обязан быть в файле. В этом случае удаление значения приведет к ошибке, и вам придется оставить 0, так как формат ФНС первичнее визуальных пожеланий.

Использование механизмов расширения

Для модификации логики ЭДО в современных версиях ERP рекомендуется использовать Расширения конфигурации. Рассмотрим, как перехватить данные через механизм подписок или переопределяемых модулей.

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

Рассмотрим алгоритм действий:

  1. Создаем новое расширение.
  2. Находим общий модуль, отвечающий за формирование нужного типа документа (например, УПД_970_Выгрузка).
  3. Используем аннотацию &После или &Вместо для функции, собирающей данные табличной части.
  4. Проверяем тип документа и, если это нужный нам счет-фактура, корректируем поле Количество.

Работа с визуализатором (XSLT)

Если формат XML менять нельзя (поле обязательное), но прочерк нужен «кровь из носу» для красоты на экране, существует еще один путь — кастомизация визуализатора. 1С хранит макеты визуализации в виде XSLT-файлов. Это инструкции на языке преобразований XML, которые говорят программе: «если видишь тег А, нарисуй его в ячейке Б».

Проанализируем фрагмент типичного XSLT-кода для визуализации:


<xsl:choose>
    <xsl:when test="string-length(КолТов) > 0 and КолТов != '0'">
        <xsl:value-of select="КолТов"/>
    </xsl:when>
    <xsl:otherwise>
        <xsl:text>—</xsl:text>
    </xsl:otherwise>
</xsl:choose>

Отредактировав макет визуализации в информационной базе, вы сможете добиться вывода прочерка на экране, при этом в самом XML-файле останется корректное число 0, что обеспечит юридическую значимость и техническую валидность документа.

Итоги и рекомендации

Подводя итог, выделим главные правила решения подобных задач в ЭДО:

Разберем ситуацию еще раз: если вы видите 0 вместо прочерка, значит, код формирования документа явно инициализирует это число, а визуализатор настроен на отображение любого значения. Проверьте процедуры в модулях МенеджерОбменаЧерезЭДО или аналогичных им в вашей версии ERP.

← На главную