Как изменить XML-файл при выгрузке счета-фактуры по ЭДО в 1С:Бухгалтерия 3.0?

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

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

Проанализируем ситуацию, когда стандартная выгрузка через меню "Еще" -> "ЭДО" -> "Выгрузить документ в файл" формирует XML с одними данными, а требуется указать другие. Выясним, где находится эта логика и как на нее повлиять, не нарушая работу системы. Для решения подобных задач часто используется формирование файла типа xml на основании документа бухгалтерии через специализированные обработки.

Анализ проблемы: где искать логику формирования XML?

Первый и главный вопрос, который возникает у разработчика, — где именно в конфигурации "спрятан" механизм генерации XML-файла? Прямой поиск по формам и модулям документа Счет-фактура выданный часто не дает результата. Это связано с тем, что функционал ЭДО вынесен в отдельную, универсальную подсистему, которая обслуживает множество различных документов.

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

  1. Логика в общих модулях. Основной код, отвечающий за выгрузку, находится не в модуле объекта или формы документа, а в общих модулях подсистемы ЭДО. Искать следует модули с префиксами ЭДО, ЭлектронныеДокументы, ОбменСКонтрагентами. Например, важную роль часто играет общий модуль ЭлектронныеДокументыВыгрузкаСервер. Также полезно изучить, как реализована смена форматов исходящих электронных документов и настроек ЭДО в типовых решениях.
  2. Использование XDTO-пакетов и шаблонов. Формирование XML происходит не вручную, а на основе предопределенных XDTO-пакетов, которые описывают структуру файла в соответствии с утвержденным форматом. Данные из документа 1С сначала собираются в специальную структуру, а затем сериализуются в XML.

Таким образом, наша задача сводится к поиску процедуры или функции в общем модуле, которая подготавливает эту структуру данных непосредственно перед сериализацией.

Конкретная задача: изменение тега ОбстФормСЧФ

В рассматриваемом примере цель доработки — изменить значение в теге ОбстФормСЧФ, который находится внутри тега ДопСвФХЖ1. Стандартно система выгружает значение "1", а бухгалтерии требуется "6".

Что означают эти значения?

Тот факт, что система автоматически подставляет "1", говорит о том, что она классифицирует операцию именно как стандартную реализацию. Требование бухгалтерии изменить это значение может возникнуть при работе со специфическими системами, например, когда требуется выгрузка УПД в формате xml для Честного знака с кодами маркировки.

Способы решения: от правильного учета до доработки

Прежде чем бросаться в доработку, важно рассмотреть два подхода к решению проблемы. Они принципиально разные: один исправляет причину, другой — следствие.

Вариант 1 (Рекомендуемый): Настройка правильного ведения учета

Это самый правильный и безопасный путь. Значения в XML-файле ЭДО почти всегда являются отражением данных, введенных в учетной системе. Если программа формирует счет-фактуру с обстоятельством "1", значит, первичные документы и настройки соответствуют именно этому случаю.

Что нужно проверить?

  1. Корректность первичного документа. Убедитесь, что для отражения хозяйственной операции используется правильный вид документа (например, "Реализация (акт, накладная, УПД)").
  2. Настройки учета и договоров. Иногда специальные условия могут быть заданы в договоре с контрагентом или в настройках учетной политики.
  3. Понимание процесса бухгалтером. Проконсультируйтесь с бухгалтером, почему ему требуется именно значение "6".

В некоторых случаях бывает необходимо выполнить сохранение УПД в формате xml за поставщика на основе уже имеющихся в базе данных поступления, что требует иного подхода к анализу данных.

Вариант 2 (Технический): Доработка через расширение

Бывают ситуации, когда руководство настаивает на доработке, или случай действительно нестандартный и требует вмешательства программиста. В этом случае категорически не рекомендуется изменять основную конфигурацию. Единственный правильный способ — использовать расширение конфигурации. Например, уже существуют готовые решения, такие как изменение основания передачи в УПД при отправке по ЭДО или специальное расширение для подмены основания в УПД ЭДО.

Разберем по шагам, как это сделать:

  1. Создание расширения. В конфигураторе создайте новое расширение с отключенным безопасным режимом, чтобы иметь доступ к общим модулям.

  2. Поиск нужной процедуры. Откройте конфигуратор и воспользуйтесь глобальным поиском (Ctrl+Shift+F) по ключевым словам: ОбстФормСЧФ, ДопСвФХЖ1. Это поможет найти процедуры и функции, где происходит заполнение соответствующих полей.

  3. Добавление процедуры в расширение. Найдя нужную процедуру в общем модуле (например, в ЭлектронныеДокументыВыгрузкаСервер), добавьте ее в расширение. Для нашей задачи лучше всего подойдет аннотация &После.

  4. Написание кода для изменения данных. В заимствованной процедуре нужно будет изменить значение в структуре, которая передается в качестве параметра. Эта структура и есть "прообраз" будущего XML.

Посмотрим на примерный код в расширении:


&НаСервере
&После("ЗаполнитьДанныеДляСчетаФактуры")
Процедура Расш_ЗаполнитьДанныеДляСчетаФактуры(ДокументОснование, ДанныеДляВыгрузки)

    // Этот код выполнится ПОСЛЕ основной процедуры.
    // Структура ДанныеДляВыгрузки уже заполнена типовыми значениями.
    // Теперь мы можем изменить их.

    // Проверяем, что нужные нам поля существуют, чтобы избежать ошибок
    Если ДанныеДляВыгрузки.Свойства("ДопСвФХЖ1") Тогда
        // Предполагаем, что ДопСвФХЖ1 - это тоже структура
        ДанныеДляВыгрузки.ДопСвФХЖ1.ОбстФормСЧФ = "6";
    КонецЕсли;

КонецПроцедуры

Важно: имена процедур, параметров и полей в структуре могут отличаться. Точную реализацию нужно делать на основе анализа кода вашей версии конфигурации.

Заключение

Задача по изменению данных в XML-файлах ЭДО — классический пример, где техническое решение должно приниматься после тщательного анализа бизнес-процесса. Всегда начинайте с вопроса "Почему это нужно?" и пытайтесь решить проблему штатными средствами учета. Если же доработка неизбежна, используйте расширения конфигурации. Это сохранит вашу систему обновляемой и стабильной.

← На главную