Как реализовать отгрузку без перехода права собственности через EnterpriseData

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

Реализация схемы отгрузки товаров без мгновенного перехода права собственности — это сложный бизнес-процесс, который требует двухэтапного отражения в учете. Сначала мы фиксируем отгрузку (товары в пути), а затем, при наступлении определенных условий, отражаем переход права собственности (реализацию). При использовании универсального формата обмена EnterpriseData часто возникает проблема: второй документ в цепочке «теряет» связь с первым документом-основанием и не подтягивает данные договора. В этой статье мы подробно разберем, как правильно сформировать XML-файл и какие программные механизмы задействовать, чтобы решить эту задачу, в том числе в облачном сервисе 1С:Фреш.

Анализируем структуру процесса в EnterpriseData

Для начала проанализируем, как формат EnterpriseData (начиная с версий 1.8 и выше) обрабатывает эти операции. Весь процесс делится на две ключевые части, каждая из которых представлена объектом Документ.РеализацияТоваровУслуг, но с разными реквизитами. Разберем по шагам, что должно быть в каждом файле.

Этап 1: Отгрузка без перехода права собственности (Товары в пути)

На этом этапе создается документ, который списывает товар со склада, но оставляет его на балансе организации (счет 45). В XML-файле крайне важно передать корректное значение в узле ХозяйственнаяОперация. Обычно это ОтгрузкаБезПереходаПравСобственности или ОтгрузкаБезПереходаПравСобственности_ВПути в зависимости от конкретной версии формата и конфигурации-приемника.

Этап 2: Реализация отгруженных товаров

Это тот самый момент, который вызывает сложности. Документ должен создаться как «Реализация отгруженных товаров». Проблема автора темы заключается в том, что при загрузке документа Реализовано система не «видит» связи с первой отгрузкой. Выясним причину: в формате EnterpriseData каждый объект должен быть самодостаточным. Система-приемник не будет автоматически искать «подходящий» договор или документ-основание, если они явно не указаны в текущем XML-пакете с использованием уникальных идентификаторов (GUID).

Корректное заполнение XML-файла

Чтобы документ «Реализация отгруженных товаров» создался корректно и связался с «Отгрузкой», рассмотрим необходимые узлы в XML:

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

Если даже при наличии этих полей в XML данные не заполняются, значит, стандартные правила обработки (XSLT или модули обмена) в конфигурации-приемнике не предусматривают автоматическую установку связей для данной операции. В этом случае потребуется программное вмешательство.

Реализация через расширение конфигурации в 1С:Фреш

Поскольку в 1С:Фреш нельзя менять основную конфигурацию, мы воспользуемся механизмом расширений. Нам нужно «вклиниться» в процесс загрузки данных. Основная логика обмена по формату EnterpriseData сосредоточена в общем модуле МенеджерОбменаЧерезУниверсальныйФормат (или аналогичных в зависимости от версии конфигурации).

Разберем алгоритм создания расширения:

Шаг 1. Перехват события загрузки

Нам необходимо создать в расширении обработчик для процедуры ПрИКонвертацииДанныхXDTO. Эта процедура выполняется в момент, когда данные из XML уже прочитаны в структуру XDTO, но еще не записаны в объект информационной базы.

Шаг 2. Программная доработка связей

Проанализируем ситуацию: если загружается РеализацияТоваровУслуг с операцией «Реализация отгруженных товаров», нам нужно принудительно найти в базе документ-основание и дозаполнить реквизиты. Посмотрим на пример кода, который можно реализовать в расширении:


&После("ПрИКонвертацииДанныхXDTO")
Процедура Расш1_ПрИКонвертацииДанныхXDTO(ДанныеXDTO, ДанныеОбъекта, СвойстваОбъекта, КомпонентыОбмена)
    
    // Проверяем, что загружаемый объект - это Реализация товаров и услуг
    Если СвойстваОбъекта.ИмяТипаОбъекта = "Документ.РеализацияТоваровУслуг" Тогда
        
        // Проверяем хозяйственную операцию (зависит от версии формата)
        ХозОперация = "";
        ДанныеXDTO.Свойства().Получить("ХозяйственнаяОперация", ХозОперация);
        
        Если ХозОперация = "РеализацияОтгруженныхТоваров" Тогда
            
            // Пытаемся найти документ-основание, если он передан в XML
            Если ДанныеXDTO.Свойства().Найти("ДокументОснование") <> Неопределено Тогда
                СсылкаНаОснование = КомпонентыОбмена.МенеджерОбмена.НайтиОбъектПоСсылкеXDTO(ДанныеXDTO.ДокументОснование);
                
                Если Не СсылкаНаОснование.Пустая() Тогда
                    // Устанавливаем связь программно
                    ДанныеОбъекта.ДокументОтгрузки = СсылкаНаОснование;
                    
                    // Если договор в объекте не заполнился, берем его из основания
                    Если ДанныеОбъекта.ДоговорКонтрагента.Пустая() Тогда
                        ДанныеОбъекта.ДоговорКонтрагента = СсылкаНаОснование.ДоговорКонтрагента;
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;
            
        КонецЕсли;
        
    КонецЕсли;

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

Важные нюансы и версии формата

При настройке обмена важно учитывать версию EnterpriseData. Рассмотрим основные отличия:

Проанализируем также вопрос идентификации объектов. В EnterpriseData основным идентификатором является GUID. Если вы выгружаете документы из сторонней системы (не 1С), убедитесь, что вы сохраняете соответствие идентификаторов. Если «Отгрузка» в 1С получила один GUID, а при выгрузке «Реализации» вы указываете в качестве основания другой GUID (даже при совпадении номера и даты), связь не установится.

Итоги и рекомендации

Для успешной реализации отгрузки без перехода права собственности выполните следующие действия:

  1. Проверьте наличие узла ХозяйственнаяОперация со значением РеализацияОтгруженныхТоваров во втором XML-файле.
  2. Убедитесь, что в блоке ДокументОснование передаются корректные данные первого документа (отгрузки).
  3. Если работа ведется в 1С:Фреш, и стандартный обмен не справляется, создайте расширение и используйте обработчик ПрИКонвертацииДанныхXDTO для ручной установки ссылок на ДоговорКонтрагента и ДокументОтгрузки.
  4. Всегда проверяйте соответствие видов договоров. Для этой операции договор должен иметь вид «С покупателем», иначе документ может не провестись даже при наличии ссылки.

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

← На главную