При работе с электронным документооборотом (1С:ЭДО) в конфигурации "Управление производственным предприятием" (УПП) пользователи часто сталкиваются с требованиями контрагентов по специфическому заполнению отдельных полей. Одной из наиболее проблемных зон является строка 5а ("Документ об отгрузке") в Универсальном передаточном документе (УПД). Особенно остро этот вопрос встает при оформлении документа Акт об оказании производственных услуг, когда стандартные алгоритмы 1С могут не удовлетворять запросам получателя.
В данной статье мы подробно разберем, почему попытки «ручной» правки XML-файлов обречены на провал, где именно в программном коде формируются данные для строки 5а, как добавить пользовательские реквизиты в XML-файл и как грамотно настроить систему, чтобы документ уходил клиенту в нужном виде.
Иногда у разработчиков возникает соблазн найти сформированный XML-файл в томах хранения (путь к которым прописан в настройках программы) и поправить его текстовым редактором. Рассмотрим, почему это категорически не рекомендуется:
Следовательно, единственный верный путь — это влияние на процесс формирования XML на стороне 1С до того, как будет сформирован окончательный файл для подписания.
Выясним причину, по которой 1С заполняет строку 5а определенным образом. В последних релизах УПП, использующих Библиотеку электронных документов (БЭД), логика формирования данных сосредоточена в общих модулях. Проанализируем ситуацию для документа Акт об оказании производственных услуг.
Основная функция, отвечающая за сбор сведений об отгрузке, обычно называется ПолучитьСведенияОДокументеОтгрузки. В зависимости от версии БЭД, встроенной в вашу УПП, её можно найти в модуле ОбщегоНазначенияЭД или ЭлектронныеДокументыПередачаДанных.
Рассмотрим пример кода, который отвечает за заполнение соответствующего узла в дереве данных документа:
Если ОбщегоНазначенияЭД.СуществуетРеквизитВДереве(ДеревоДанных, "ДокументОбОтгрузке") Тогда
ЭтоУПД = Не СтруктураЭД.Свойство("ЭтоСФ");
// Вызов функции, которая собирает строку для 5а
СтрокаДокументОтгрузки = ПолучитьСведенияОДокументеОтгрузки(СсылкаНаОбъект, ДанныеДокумента, ЭтоУПД);
// Запись сформированной строки в структуру XML
ОбщегоНазначенияЭД.ЗаполнитьЗначениеРеквизитаВДереве(ДеревоДанных, "ДокументОбОтгрузке", СтрокаДокументОтгрузки);
КонецЕсли;
В случае с услугами программа часто берет номер и дату самого Акта, однако при загрузке документов из других систем требования могут отличаться. Если клиент требует иного (например, ссылку на первичный договор или специфический формат номера), нам необходимо модифицировать возвращаемое значение функции ПолучитьСведенияОДокументеОтгрузки.
Это самый «чистый» и рекомендуемый метод, так как он не требует снятия конфигурации с поддержки. В настройках ЭДО для конкретного контрагента можно указать внешнюю обработку, которая будет отвечать за формирование XML.
Разберем алгоритм действий:
ДокументОбОтгрузке и подставляем туда нужное значение.Это позволяет гибко настраивать формат 5а под каждого клиента индивидуально, не меняя логику для остальных, по аналогии с тем, как подключаются внешние печатные формы для реализации.
Если ваша версия платформы и конфигурации позволяет использовать расширения (хотя УПП и на обычных формах, современные релизы частично поддерживают этот механизм), мы можем применить аннотацию &Вместо для функции формирования строки отгрузки.
Посмотрим на пример реализации в расширении:
&Вместо("ПолучитьСведенияОДокументеОтгрузки")
Функция Мой_ПолучитьСведенияОДокументеОтгрузки(СсылкаНаОбъект, ДанныеДокумента, ЭтоУПД)
// Если это наш специфический Акт для конкретного случая
Если ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.АктОбОказанииПроизводственныхУслуг") Тогда
// Формируем строку 5а по особому алгоритму
Результат = "№ " + СсылкаНаОбъект.Номер + " от " + Формат(СсылкаНаОбъект.Дата, "ДЛФ=D");
// Можно добавить информацию из дополнительных реквизитов
Возврат Результат;
КонецЕсли;
// Для остальных случаев вызываем стандартную логику
Возврат ПродолжитьВызов(СсылкаНаОбъект, ДанныеДокумента, ЭтоУПД);
КонецФункции
Иногда претензии к строке 5а или сопутствующим полям возникают из-за того, что в документе присутствуют товары, подлежащие прослеживаемости. Если в Акт об оказании производственных услуг включены материалы, которые система идентифицирует как прослеживаемые, 1С начинает требовать заполнения данных о РНПТ и документах отгрузки, по которым эти ценности поступили к вам.
Проанализируем ситуацию: если ваша услуга не связана с передачей таких товаров, убедитесь, что в карточках номенклатуры, используемых в акте, не установлен признак "Прослеживаемый товар". Если же прослеживаемость действительно присутствует, то строка 5а должна быть заполнена в строгом соответствии с требованиями Постановления №534, и здесь ручная правка кода может привести к нарушению законодательных норм.
Для успешного редактирования данных в XML при 1С:ЭДО в УПП мы рекомендуем придерживаться следующей стратегии:
ЭлектронныеДокументыПередачаДанных, где заполняется переменная для узла ДокументОбОтгрузке.Такой системный подход позволит вам удовлетворить требования самых взыскательных контрагентов, сохранив при этом целостность и легитимность электронного документооборота.