Часто разработчики сталкиваются с ситуацией, когда стандартная печатная форма документа (например, УПД) формируется корректно, а при переходе к визуальной форме просмотра электронного документа (ЭДО) перед отправкой в Диадок или другой сервис, дата документа-основания отображается в скобках. Давайте детально разберем, почему это происходит в современных конфигурациях, таких как 1С:Бухгалтерия предприятия 3.0, и проанализируем по шагам, как найти и исправить этот недочет.
Для начала выясним причину различий. В современных редакциях «Библиотеки электронных документов» (БЭД), на которой строится весь ЭДО в 1С, визуализация документа для экрана (форма «Просмотр электронного документа») работает иначе, чем формирование классического табличного документа (MXL). Если в печатной форме УПД скобок нет, а в форме ЭДО они появляются, значит, проблема кроется в механизмах формирования именно строкового представления данных для вывода на экран или в правилах трансформации XML.
В старых версиях БЭД табличный документ формировался классическим способом, но в новых релизах (например, в БП 3.0.121 и выше) визуализация часто происходит через XSD-схемы и XSLT-преобразования. Рассмотрим оба варианта решения проблемы: программный поиск в модулях и работу с макетами.
Давайте посмотрим на программный код, который отвечает за сборку данных перед их передачей в форму. За формирование текстовых строк для полей «Основание» (строка 8 УПД) часто отвечают служебные общие модули. В первую очередь проанализируем модуль ОбменСКонтрагентамиБП.
Перейдите в конфигуратор и найдите процедуру ПодготовитьСтруктуруДляСчетаФактурыУПД или ЗаполнитьДанныеДокументаОснования. Внутри этих процедур подготавливается «дерево данных», после чего идет запись информации в структуру.
Ищите фрагмент кода, где программно объединяются реквизиты документа-основания. Часто разработчики оборачивают дату в скобки с помощью функции ПредставлениеДокумента или банальной конкатенации строк. Обратите внимание на следующий код:
// Пример того, как строка может формироваться в типовом или доработанном коде
СтрокаОснования = НомерДокумента + НСтр("ru = ' от '") + Формат(ДатаДокумента, "ДЛФ=D");
// Если далее по коду идет добавление скобок:
ПредставлениеОснования = НомерДокумента + " (" + Формат(ДатаДокумента, "ДЛФ=D") + ")";
Чтобы убрать скобки, вам нужно изменить конкатенацию на прямой вывод без добавления символов "(" и ")". Воспользуйтесь глобальным поиском по конфигурации по строке " (", ограничив область поиска модулями, содержащими в названии ЭлектронныеДокументы или ОбменСКонтрагентами.
Также проверим общий модуль ДокументыОбщегоНазначения и его функцию СформироватьЗаголовокДокумента. Если скобки появляются в поле со списком документов-оснований, именно эта функция может возвращать стандартное представление, которое система транслирует в ЭДО.
Если в программном коде 1С не удается найти формирование этой строки со скобками, велика вероятность, что визуальная форма строится на основе XSLT-шаблона. Как мы уже выяснили, новые версии БЭД преобразуют XML-данные электронного документа в HTML-вид с помощью XSLT.
Давайте разберем, как найти и отредактировать этот макет:
Визуализация, УПД_2019 или ПФ_УПД_.Дата или по названию тега, отвечающего за основание.Проанализируем фрагмент XSLT-кода. Вы можете найти правило форматирования, где скобки жестко прописаны в разметке текста:
<!-- Пример XSLT разметки, добавляющей скобки -->
<xsl:value-of select="НомерДокументаОснования"/>
<xsl:text> (</xsl:text>
<xsl:value-of select="ДатаДокументаОснования"/>
<xsl:text>)</xsl:text>
Чтобы убрать скобки, вам нужно аккуратно удалить теги <xsl:text>, содержащие скобки, и заменить их на нужное представление (например, на слово "от"):
<!-- Исправленный вариант -->
<xsl:value-of select="НомерДокументаОснования"/>
<xsl:text> от </xsl:text>
<xsl:value-of select="ДатаДокументаОснования"/>
Многие программисты жалуются: "Я ставлю точку останова, но отладчик не срабатывает при открытии формы ЭДО!". Разберем причину этого явления. В подсистеме ЭДО 1С широко используется кеширование визуальных форм для ускорения работы интерфейса.
Если форма просмотра электронного документа уже была однажды сформирована, система сохраняет её готовое HTML-представление. При повторном открытии 1С просто подтягивает данные из кеша (специального хранилища электронных документов), минуя процедуры подготовки дерева данных и XSLT-трансформации.
Рассмотрим, как заставить код выполниться снова:
ОбменСКонтрагентамиБП до финальной визуализации.Проанализировав архитектуру современных решений 1С, мы выяснили, что для удаления скобок у даты документа-основания в ЭДО необходимо действовать в двух направлениях: проверять код формирования строкового представления в служебных модулях (таких как ОбменСКонтрагентамиБП) и анализировать XSLT-шаблоны в общих макетах конфигурации. Не забывайте про механизмы кеширования БЭД при проведении отладки — всегда тестируйте изменения на свежих, ранее не открывавшихся документах. Следуя этим шагам, вы сможете точно локализовать и устранить проблему.