При работе с электронным документооборотом (ЭДО) в программных продуктах на базе 1С, таких как 1С:ERP Управление предприятием 2 или 1С:Комплексная автоматизация, разработчики часто сталкиваются с задачей изменения визуального представления данных. Одной из популярных задач является вывод прочерка в поле Количество, если оно не заполнено, по аналогии с бумажными печатными формами. Рассмотрим подробно, почему стандартное «Условное оформление» здесь не поможет и как правильно решить эту задачу программно.
Для начала разберем важный нюанс: что именно мы называем «электронным документом». В контексте ЭДО это не печатная форма, которую мы видим на экране, а структурированный текстовый файл в формате XML. Его структура строго регламентирована приказами ФНС. Когда мы смотрим на документ через интерфейс 1С или оператора ЭДО, мы видим результат работы визуализатора — специального механизма, который берет данные из XML и «натягивает» их на графический шаблон (часто с использованием XSLT-трансформации).
Следовательно, использовать стандартное Условное оформление, которое работает с формами 1С, для изменения содержимого XML-файла невозможно. Мы должны работать непосредственно с процессом формирования данных для выгрузки.
Каждый электронный документ (УПД, Счет-фактура) должен соответствовать XSD-схеме. Это набор правил, который определяет, какие теги могут быть в файле, в каком порядке они идут и — самое главное — какие типы данных они могут содержать. Проанализируем тег КолТов (Количество товара), который упоминается в вопросе.
Согласно актуальным приказам ФНС (например, № ЕД-7-26/970@), поле КолТов имеет числовой тип данных (обычно xs:decimal). Это означает следующее:
10.00 или 0)."—", приведет к ошибке валидации. Такой файл будет отклонен сервером оператора ЭДО или приемным шлюзом ФНС.Проанализируем ситуацию: в бумажных формах при отсутствии показателя действительно ставится прочерк. В электронном формате это реализуется через «необязательность» тегов. Если показатель (например, ЦенаТов) не является обязательным по схеме и данные в 1С отсутствуют, тег просто не создается в XML. Визуализатор, не найдя тега, рисует прочерк.
Однако для количественных показателей в счетах-фактурах часто установлены более жесткие требования. Если поле Количество инициализируется в коде как 0, то в XML попадает 0, и визуализатор честно отображает цифру. Чтобы получить прочерк, нужно сделать так, чтобы значение в структуре данных стало Неопределено или вовсе отсутствовало (если схема это позволяет).
Чтобы изменить логику заполнения полей, нам нужно вмешаться в работу подсистемы «Электронное взаимодействие» (БСП). В 1С:ERP формирование контента XML происходит в специализированных менеджерах выгрузки. Рассмотрим пошагово, как найти нужное место.
Основная логика сосредоточена в общих модулях, отвечающих за формирование форматов. Например, ЭлектронныеДокументыПередавать. Нам необходимо найти процедуру, которая заполняет структуру данных перед конвертацией в XML. Обычно это функции вида СформироватьДанныеДляФайлаОбмена или ЗаполнитьДанныеТабличнойЧасти.
Разберем пример логики в коде:
// В модуле менеджера или общем модуле, где формируется структура УПД
Процедура ЗаполнитьСведенияОТоварах(ДанныеДокумента, СтруктураXML)
Для Каждого СтрокаТЧ Из ДанныеДокумента.Товары Цикл
НоваяСтрока = СтруктураXML.ТаблицаТоваров.Добавить();
// Вместо безусловного присвоения значения:
// НоваяСтрока.Количество = СтрокаТЧ.Количество;
// Используем условие:
Если СтрокаТЧ.Количество = 0 Тогда
// Если схема позволяет отсутствие тега,
// устанавливаем Неопределено, чтобы тег не создавался
НоваяСтрока.Количество = Неопределено;
Иначе
НоваяСтрока.Количество = СтрокаТЧ.Количество;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Важный момент: перед внесением таких изменений обязательно проверьте XSD-схему конкретного формата в конфигураторе (раздел Общие -> XSD-схемы). Если у тега КолТов стоит атрибут minOccurs="1", это означает, что тег обязан быть в файле. В этом случае удаление значения приведет к ошибке, и вам придется оставить 0, так как формат ФНС первичнее визуальных пожеланий.
Для модификации логики ЭДО в современных версиях ERP рекомендуется использовать Расширения конфигурации. Рассмотрим, как перехватить данные через механизм подписок или переопределяемых модулей.
В БСП существует возможность подключиться к событию формирования данных. Нам интересен переопределяемый модуль ЭлектронноеВзаимодействиеПереопределяемый. В нем можно найти процедуры, позволяющие модифицировать структуру данных перед отправкой. Это более «безопасный» путь, так как он не требует снятия типовой конфигурации с поддержки.
Рассмотрим алгоритм действий:
УПД_970_Выгрузка).&После или &Вместо для функции, собирающей данные табличной части.Количество.Если формат 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, что обеспечит юридическую значимость и техническую валидность документа.
Подводя итог, выделим главные правила решения подобных задач в ЭДО:
Неопределено), либо модифицировать XSLT-макет отображения.Разберем ситуацию еще раз: если вы видите 0 вместо прочерка, значит, код формирования документа явно инициализирует это число, а визуализатор настроен на отображение любого значения. Проверьте процедуры в модулях МенеджерОбменаЧерезЭДО или аналогичных им в вашей версии ERP.