Как убрать скобки у даты документа-основания при выводе в форму ЭДО в 1С?

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

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

Понимаем архитектуру: почему форма ЭДО отличается от печатной формы?

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

В старых версиях БЭД табличный документ формировался классическим способом, но в новых релизах (например, в БП 3.0.121 и выше) визуализация часто происходит через XSD-схемы и XSLT-преобразования. Рассмотрим оба варианта решения проблемы: программный поиск в модулях и работу с макетами.

Шаг 1. Поиск формирования строки в общих модулях 1С

Давайте посмотрим на программный код, который отвечает за сборку данных перед их передачей в форму. За формирование текстовых строк для полей «Основание» (строка 8 УПД) часто отвечают служебные общие модули. В первую очередь проанализируем модуль ОбменСКонтрагентамиБП.

Перейдите в конфигуратор и найдите процедуру ПодготовитьСтруктуруДляСчетаФактурыУПД или ЗаполнитьДанныеДокументаОснования. Внутри этих процедур подготавливается «дерево данных», после чего идет запись информации в структуру.

Ищите фрагмент кода, где программно объединяются реквизиты документа-основания. Часто разработчики оборачивают дату в скобки с помощью функции ПредставлениеДокумента или банальной конкатенации строк. Обратите внимание на следующий код:


// Пример того, как строка может формироваться в типовом или доработанном коде
СтрокаОснования = НомерДокумента + НСтр("ru = ' от '") + Формат(ДатаДокумента, "ДЛФ=D");
// Если далее по коду идет добавление скобок:
ПредставлениеОснования = НомерДокумента + " (" + Формат(ДатаДокумента, "ДЛФ=D") + ")";

Чтобы убрать скобки, вам нужно изменить конкатенацию на прямой вывод без добавления символов "(" и ")". Воспользуйтесь глобальным поиском по конфигурации по строке " (", ограничив область поиска модулями, содержащими в названии ЭлектронныеДокументы или ОбменСКонтрагентами.

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

Шаг 2. Работа с XSLT-трансформациями и макетами визуализации

Если в программном коде 1С не удается найти формирование этой строки со скобками, велика вероятность, что визуальная форма строится на основе XSLT-шаблона. Как мы уже выяснили, новые версии БЭД преобразуют XML-данные электронного документа в HTML-вид с помощью XSLT.

Давайте разберем, как найти и отредактировать этот макет:

  1. Откройте дерево конфигурации и перейдите в ветку Общие макеты.
  2. Ищите макеты с именами, содержащими Визуализация, УПД_2019 или ПФ_УПД_.
  3. Откройте найденный макет. По сути, это текстовый документ, содержащий XML/XSLT разметку.
  4. Запустите поиск внутри макета по слову Дата или по названию тега, отвечающего за основание.

Проанализируем фрагмент 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="ДатаДокументаОснования"/>

Шаг 3. Решение проблем с отладкой: почему отладчик не останавливается?

Многие программисты жалуются: "Я ставлю точку останова, но отладчик не срабатывает при открытии формы ЭДО!". Разберем причину этого явления. В подсистеме ЭДО 1С широко используется кеширование визуальных форм для ускорения работы интерфейса.

Если форма просмотра электронного документа уже была однажды сформирована, система сохраняет её готовое HTML-представление. При повторном открытии 1С просто подтягивает данные из кеша (специального хранилища электронных документов), минуя процедуры подготовки дерева данных и XSLT-трансформации.

Рассмотрим, как заставить код выполниться снова:

  1. Возьмите другой документ реализации (или другой УПД), для которого форма ЭДО еще ни разу не открывалась.
  2. Если нового документа нет, временно очистите регистр сведений, отвечающий за хранение версий электронных документов и их представлений (выполняйте это действие с осторожностью и желательно на тестовой базе).
  3. Запустите отладку снова. Теперь система будет вынуждена заново пройти весь путь формирования структуры: от модуля ОбменСКонтрагентамиБП до финальной визуализации.

Подводим итоги

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

← На главную