В работе с 1С часто возникает задача адаптировать стандартный функционал под уникальные бизнес-процессы компании. Одна из таких задач — изменение содержимого XML-файла, который формируется для обмена электронными документами (ЭДО). Рассмотрим конкретный случай: необходимо найти место формирования XML для документа Счет-фактура выданный в конфигурации "Бухгалтерия предприятия 3.0" и изменить значение одного из тегов перед отправкой контрагенту.
Проанализируем ситуацию, когда стандартная выгрузка через меню "Еще" -> "ЭДО" -> "Выгрузить документ в файл" формирует XML с одними данными, а требуется указать другие. Выясним, где находится эта логика и как на нее повлиять, не нарушая работу системы. Для решения подобных задач часто используется формирование файла типа xml на основании документа бухгалтерии через специализированные обработки.
Первый и главный вопрос, который возникает у разработчика, — где именно в конфигурации "спрятан" механизм генерации XML-файла? Прямой поиск по формам и модулям документа Счет-фактура выданный часто не дает результата. Это связано с тем, что функционал ЭДО вынесен в отдельную, универсальную подсистему, которая обслуживает множество различных документов.
Процесс формирования XML для ЭДО — это сложный и строго регламентированный механизм. Он должен соответствовать форматам, утвержденным ФНС России, поэтому разработчики 1С инкапсулировали эту логику в общих модулях. Ключевые моменты, которые нужно знать:
ЭДО, ЭлектронныеДокументы, ОбменСКонтрагентами. Например, важную роль часто играет общий модуль ЭлектронныеДокументыВыгрузкаСервер. Также полезно изучить, как реализована смена форматов исходящих электронных документов и настроек ЭДО в типовых решениях.Таким образом, наша задача сводится к поиску процедуры или функции в общем модуле, которая подготавливает эту структуру данных непосредственно перед сериализацией.
В рассматриваемом примере цель доработки — изменить значение в теге ОбстФормСЧФ, который находится внутри тега ДопСвФХЖ1. Стандартно система выгружает значение "1", а бухгалтерии требуется "6".
Что означают эти значения?
ОбстФормСЧФ="1" — это стандартный код для обстоятельства формирования счета-фактуры: "Счет-фактура, выставляемый при реализации товаров (работ, услуг), передаче имущественных прав".Тот факт, что система автоматически подставляет "1", говорит о том, что она классифицирует операцию именно как стандартную реализацию. Требование бухгалтерии изменить это значение может возникнуть при работе со специфическими системами, например, когда требуется выгрузка УПД в формате xml для Честного знака с кодами маркировки.
Прежде чем бросаться в доработку, важно рассмотреть два подхода к решению проблемы. Они принципиально разные: один исправляет причину, другой — следствие.
Это самый правильный и безопасный путь. Значения в XML-файле ЭДО почти всегда являются отражением данных, введенных в учетной системе. Если программа формирует счет-фактуру с обстоятельством "1", значит, первичные документы и настройки соответствуют именно этому случаю.
Что нужно проверить?
В некоторых случаях бывает необходимо выполнить сохранение УПД в формате xml за поставщика на основе уже имеющихся в базе данных поступления, что требует иного подхода к анализу данных.
Бывают ситуации, когда руководство настаивает на доработке, или случай действительно нестандартный и требует вмешательства программиста. В этом случае категорически не рекомендуется изменять основную конфигурацию. Единственный правильный способ — использовать расширение конфигурации. Например, уже существуют готовые решения, такие как изменение основания передачи в УПД при отправке по ЭДО или специальное расширение для подмены основания в УПД ЭДО.
Разберем по шагам, как это сделать:
Создание расширения. В конфигураторе создайте новое расширение с отключенным безопасным режимом, чтобы иметь доступ к общим модулям.
Поиск нужной процедуры. Откройте конфигуратор и воспользуйтесь глобальным поиском (Ctrl+Shift+F) по ключевым словам: ОбстФормСЧФ, ДопСвФХЖ1. Это поможет найти процедуры и функции, где происходит заполнение соответствующих полей.
Добавление процедуры в расширение. Найдя нужную процедуру в общем модуле (например, в ЭлектронныеДокументыВыгрузкаСервер), добавьте ее в расширение. Для нашей задачи лучше всего подойдет аннотация &После.
Написание кода для изменения данных. В заимствованной процедуре нужно будет изменить значение в структуре, которая передается в качестве параметра. Эта структура и есть "прообраз" будущего XML.
Посмотрим на примерный код в расширении:
&НаСервере
&После("ЗаполнитьДанныеДляСчетаФактуры")
Процедура Расш_ЗаполнитьДанныеДляСчетаФактуры(ДокументОснование, ДанныеДляВыгрузки)
// Этот код выполнится ПОСЛЕ основной процедуры.
// Структура ДанныеДляВыгрузки уже заполнена типовыми значениями.
// Теперь мы можем изменить их.
// Проверяем, что нужные нам поля существуют, чтобы избежать ошибок
Если ДанныеДляВыгрузки.Свойства("ДопСвФХЖ1") Тогда
// Предполагаем, что ДопСвФХЖ1 - это тоже структура
ДанныеДляВыгрузки.ДопСвФХЖ1.ОбстФормСЧФ = "6";
КонецЕсли;
КонецПроцедуры
Важно: имена процедур, параметров и полей в структуре могут отличаться. Точную реализацию нужно делать на основе анализа кода вашей версии конфигурации.
Задача по изменению данных в XML-файлах ЭДО — классический пример, где техническое решение должно приниматься после тщательного анализа бизнес-процесса. Всегда начинайте с вопроса "Почему это нужно?" и пытайтесь решить проблему штатными средствами учета. Если же доработка неизбежна, используйте расширения конфигурации. Это сохранит вашу систему обновляемой и стабильной.